Как написать простую доработку Контур.Диадок через подключаемый модуль
Нужно было доработать клиенту формирование XML документа «Реализация товаров».
Получил от клиента копию базы и обработку Diadoc_4_38_2.epf
При открытии обработки без авторизации документы не показываются:
Я хотел сначала разобраться почему, но код оказался слишком сложным.
Поэтому я авторизовался по данным клиента (логин/пароль), после этого уже видел документы:
При щелчке на пакете документов он открывается:
По кнопке скачивания можно скачать XML.
Задача была такая: написать подключаемый модуль ( внешнюю обработку), которая при формировании отправляемого УПД подставляет к наименованию номенклатуры, если это услуга, фразу вида » за февраль 2024 г.».
Решил воспользоваться генератором подключаемых модулей, описанным на Ифостарте и в Контуре.
Включил использование плагинов в системных настройках (уже стояло):
Установил «Генератор подключаемого модуля» в настройках плагинов:
Далее сгенерировал обработку по этому шаблону (для УТ11):
В описании сценарии мне показалось, что она мне подходит:
Задача:
При отправке УПД необходимо изменять данные таблицы товаров:
1) в ItemVendorCode — заполнять штрих-код товара с точностью до характеристики;
2) в Product — добавлять описание из связанной карточки номенклатуры в скобках после стандартного наименования;
3) в ItemArticle — заполнять артикул из связанной карточки номенклатуры;
4) в ItemIdentificationNumbers.PackageIds — добавлять код ОСУ (GTIN может быть получен из РС «Штрих-коды» или доп. сведений номенклатуры).Конфигурация: УТ 11.4, КА 2.4, ЕРП 2.4.
Открыл обработку в конфигураторе:
Код модуля довольно понятен. Сделал необходимые доработки.
Но потом возник вопрос — а как подключить мой файл?
Оказывается, модуль может быть только один, не много плагинов, а только один модуль, поэтому я переименовал модуль в ПМ и подключил его в «Расширенные настройки — подключаемый модуль»:
Как ни странно, но при попытке открыть заново пакет документов у меня возникла ошибка в моем коде, значит подключаемый модуль сразу заработал:
Правда, в отладчике обработка ПМ не всегда перехватывается. Советы по отладке есть тут, но я их не читал. Хотя некоторые модули доступны в отладчике, например этот:
После каждого обновления обработки приходится заново заходить в настройки подключаемого модуля и нажимать кнопку «Сохранить», чтобы подключаемый модуль заново закэшировался.
После процесса разработки увидел результат в печатной форме УПД:
И в файле XML:
В итоге я сделал следующие доработки (по процедурам):
Процедура УПД_ИзменитьДанныеТоваров(Content, Документ1С) Items = Content.Table.Items; Товары1С = ДанныеТоваров1С(Items); МенеджерВТ = Новый МенеджерВременныхТаблиц; СформироватьВременнуюТаблицуТоваров(МенеджерВТ, Товары1С); Выборка = ИзменениеТаблицыТоваров_ВыборкаДанные1С(Items, МенеджерВТ, Документ1С); // если используется совместно со сценарием "Изменение таблицы товаров, ИнфПолФХЖ2", // то необходимо раскомментировать следующую строку //ЗначенияСвойств = ИзменениеТаблицыТоваров_ЗначенияСвойствТоваров(МенеджерВТ, Документ1С); МенеджерВТ.Закрыть(); Пока Выборка.Следующий() Цикл ИндексСтроки = Выборка.ИндексСтроки; Item = Items[ИндексСтроки]; УПД_ИзменитьОсновныеДанныеТовара(Item, Выборка, Документ1С); //Осипов КонецЦикла; КонецПроцедуры Функция ТекстЗапроса_ДанныеТоваров() Возврат "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Товары.ИндексСтроки КАК ИндексСтроки, | // ПОЛЯ_ШТРИХКОДЫ | ЕСТЬNULL(Штрихкоды.Штрихкод, """") КАК Штрихкод, | // ПОЛЯ_ЗНАЧЕНИЯСВОЙСТВАGTIN | ЕСТЬNULL(ЗначенияСвойстваGTIN.GTIN, """") КАК GTIN, | // ПОЛЯ_НОМЕНКЛАТУРА //| СпрНоменклатура.GTIN КАК GTIN, | СпрНоменклатура.Описание КАК Комментарий, | СпрНоменклатура.Артикул КАК Артикул, | СпрНоменклатура.Ссылка.ТипНоменклатуры КАК ТипНоменклатуры, //Осипов | СпрНоменклатура.Наименование КАК Наименование, //Осипов | СпрНоменклатура.Ссылка КАК Номенклатура //Осипов |ИЗ | ВТ_Товары КАК Товары | // СОЕДИНЕНИЕ_ШТРИХКОДЫ | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Штрихкоды КАК Штрихкоды | ПО Товары.ИндексСтроки = Штрихкоды.ИндексСтроки | // СОЕДИНЕНИЕ_ЗНАЧЕНИЯСВОЙСТВАGTIN | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗначенияСвойстваGTIN КАК ЗначенияСвойстваGTIN | ПО Товары.ИндексСтроки = ЗначенияСвойстваGTIN.ИндексСтроки | // СОЕДИНЕНИЕ_НОМЕНКЛАТУРА | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура | ПО Товары.Номенклатура = СпрНоменклатура.Ссылка"; КонецФункции Процедура УПД_ИзменитьОсновныеДанныеТовара(Item, Выборка, Документ1С) //Осипов //Осипов //Сообщить("Номенклатура: " + Выборка.Номенклатура); Если ЗначениеЗаполнено(Выборка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга) Тогда НовоеНаименование = Item.Product + " за " + Формат(Документ1С.Дата,"ДФ='MMMM yyyy ''г.'''"); УстановитьЗначениеXDTO(Item, "Product", НовоеНаименование); КонецЕсли; КонецПроцедуры
Среда: КА 2.5.12.208. Объем: 1.5 час
О, поздравляю с приобщением к поделкам «Контура». Капец они тугие на доработки — даже за деньги.
Поэтому направление норм.
Спасибо. Открыл для себя новую тему.