Как написать простую доработку Контур.Диадок через подключаемый модуль
Нужно было доработать клиенту формирование 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 час
О, поздравляю с приобщением к поделкам «Контура». Капец они тугие на доработки — даже за деньги.
Поэтому направление норм.
Спасибо. Открыл для себя новую тему.
Спасибо! Наконец въехал. Зарабатываю на 1С больше 20 лет. Теперь еще немного масла на бутерброде будет)))
Как видите, многие пути довольно простые, если знать, как идти.