Страница 1 из 1

Создание пакета изменений

Добавлено: 04 май 2016, 18:25
UlMagnus
Здравствуйте,

Помогите, пожалуйста, с созданием пакета изменений.
В основном не получается создавать итемы изменений, массив которых передается в m_api.m_change_mgr.CreateChange. Вроде как создается, но при этом ругается на отсутствие какого то атрибута.
Буду очень признателен, если поделитесь кусочком кода. Мне нужно создавать изменение количества/добавление/удаление pdf и изменение/добавление/удаление документов. При этом правило применяемости у меня самое простое (по дате проведения изменения).
Заранее спасибо

С уважением, Геннадий!

Re: Создание пакета изменений

Добавлено: 05 май 2016, 17:46
ayatsk
В папке с файлами PSS есть apldbe.bin Его можно переименовать в apldbe.exe и посмотреть что и как заносится в БД,
Естественно, надо предварительно сделать тестовый пример с помощью интерфейса.

Чистого куска кода, естественно, нет.
Но,если сообщите кто Вы, откуда, и что делаете - сообщу как скачать исходники клиента PSS.
Можно в личку.

Re: Создание пакета изменений

Добавлено: 06 май 2016, 19:54
UlMagnus
Вот, если не сложно взгляните на то, как я формирую пакет изменений. Что может быть не так?

CaplInstance* newItem = m_pApi->m_data.CreateInstance(m_pApi->m_change_mgr.e_psc);
CString m_sId, m_sName;
m_pApi->m_data.GetAttr(prod, m_pApi->m_prd_mgr.a_prd_name, m_sName);

aplExtent m_changeItems;
m_sId = m_pApi->m_change_mgr.GetMFCId(pdfProdVersion);
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_chng_item_id, m_sId);
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_chng_item_name, "");
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_eff_type, "none");
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_changed_product, pdfProdVersion); // версия изделия, состав которой и меняется
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_changing_product, classpdf); // версия изделия добавляемая в состав pdfProdVersion
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_value, iInstanceCount); // количество добавляемого
m_changeItems.Add(newItem);

CString changeId, changeName;
changeId = m_api.m_change_mgr.GetPSCId(pdf);
change= m_api.m_change_mgr.CreateChange(changeId, "", "", "", NULL, m_changeItems);
CaplInstance* changeFolder = m_api.m_folder_mgr.CreateFolder(NULL, "TestChanges", "Тестовая папка для изменений");
m_api.m_folder_mgr.AddToFolder(changeFolder, change);

Re: Создание пакета изменений

Добавлено: 10 май 2016, 19:40
alex
Здравствуйте!

В Вашем коде, в принципе, все правильно. Не срабатывала проверка уникальности в функции CreateChange. В следующей версии функцию доработаем и сообщение выводиться не будет.

В Вашем коде предлагаем внести следующие изменения:
CString m_sId, m_sName;
m_api.m_data.GetAttr(prod, m_api.m_prd_mgr.a_prd_name, m_sName);

aplExtent m_changeItems;
m_sId = m_api.m_change_mgr.GetPSCId(pdfProdVer);//функция возвращает уникальный номер изменения для сборочной единицы. Вами использовалась аналогичная функция, только для изменения материалов и норм расхода
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_chng_item_id, m_sId);
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_chng_item_name, "");
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_eff_type, "none");
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_changed_product, pdfProdVersion); // версия изделия, состав которой и меняется
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_changing_product, classpdf); // версия изделия добавляемая в состав pdfProdVersion
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_value, iInstanceCount); // количество добавляемого
m_changeItems.Add(newItem);

CString changeId, changeName;
changeId = "TestChange"; //здесь должно быть обозначение изменения
CaplInstance* change= m_api.m_change_mgr.CreateChange(changeId, "", "", "", NULL, m_changeItems);
CaplInstance* changeFolder = m_api.m_folder_mgr.CreateFolder(NULL, "TestChanges", "Тестовая папка для изменений");
m_api.m_folder_mgr.AddToFolder(changeFolder, change);

Еще убедитесь, что тип переменной iInstanceCount double.

С уважением,
Александр