Доработки подключаемого модуля Контура в 2025
Ранее уже писал, как настраивать Контур по-простейшему.
В 2025 у двух клиентов настраивал Контур, столкнулся с некоторыми нюансами.
В настройках модуля появилась кнопка «Генерировать шаблон», но генератор там не такой подробный, как в плагине генератора.
Кроме того, путь к файлу надо указывать в сети или на сервере 1С, клиентский файл подключаемого модуля не будет загружен:

Поэтому мне было проще сделать расширение:

В которое закинуть обработку:

И использовать режим «В составе конфигурации»:


Но с отладкой мне не всегда везло, в одном из случаев у клиента не было отладчика, приходилось изощряться с выводом отладочных сообщений.
В итоге я зарекся работать без отладки на сервере с Контуром, буду выдвигать это как обязательное требование.
Примеры не всегда работают корректно, например номенклатуру не получить из служебных данных.
У контура свои названия полей, не такие как в XDTO, нужно смотреть их документацию часто. Или примеры.
В итоге стало понятно, что код товара уже есть, его добавлять не надо.
Добавил только комментарий из заказа.
Функция ПодготовитьЭлектронныйДокумент(Параметры) // Имя шаблона: Изменение таблицы товаров УПД (УТ 11), основные поля Если ТипЗнч(Параметры) = Тип("Структура") И Параметры.Свойство("Результат_ИМ") Тогда Content = Параметры.Результат.Content; Документ1С = Параметры.Результат.Документ1С; //Сообщить("Обрабатываем документ: " + Документ1С); //Сообщить(ЗначениеВСтрокуXML(Параметры.Результат)); ВидДокументаРазвернутый = Параметры.ВидДокументаРазвернутый; ТипКонтента_XDTO = ВидДокументаРазвернутый.ТипКонтента; //Товары изменять не пришлось //Если ОсновнойМодуль.ТипСоответствуетКонтентуУПД(ВидДокументаРазвернутый) Тогда // // УПД_ИзменитьДанныеТоваров(Content, Документ1С); //КонецЕсли; Сообщить(ВРЕГ(ТипКонтента_XDTO)); Если ВРЕГ(ТипКонтента_XDTO) = ВРЕГ("Utd820SellerContent") ИЛИ ВРЕГ(ТипКонтента_XDTO) = ВРЕГ("Utd970SellerContent") Тогда //Сообщить("Зашли: Utd820SellerContent"); УПД_ДобавитьИнфПолФХЖ1_ЗначенияРеквизитов(Content, Документ1С); КонецЕсли; Возврат Истина; КонецЕсли; КонецФункции Процедура УПД_ДобавитьИнфПолФХЖ1_ЗначенияРеквизитов(Content, Документ1С) // ключ - псевдоним поля: по этому ключу будет лежать полученное значение в структуре "ЗначенияРеквизитов" // значение - путь к данным: пишется путь до нужного реквизита, исключая начальный источник данных // может быть добавлено неограниченное количество полей, каждый элемент структуры - отдельное поле Сообщить(Документ1С); Комменарий = Неопределено; Если ТипЗнч(Документ1С) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда З = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | Т.ДокументОснование.ЗаказКлиента.Комментарий КАК Комментарий |ИЗ | Документ.СчетФактураВыданный.ДокументыОснования КАК Т |ГДЕ | Т.Ссылка = &Ссылка"); З.УстановитьПараметр("Ссылка", Документ1С); Выборка = З.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Комментарий = Выборка.Комментарий; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Комментарий) Тогда УПД_ДобавитьИнфПолФХЖ1(Content, "ГородПолучатель", Комментарий); КонецЕсли; КонецПроцедуры Процедура УПД_ДобавитьИнфПолФХЖ1(Content, Key, Value) Если НЕ ЗначениеЗаполнено(Value) Тогда Возврат; КонецЕсли; AdditionalInfoId = Content.AdditionalInfoId; ОсновнойМодуль.ДобавитьИнформационноеПоле(AdditionalInfoId, Key, Value); КонецПроцедуры Процедура УПД_ИзменитьДанныеТоваров(Content, Документ1С) Items = Content.Table.Items; //Эта строка для отладки, т.к. на сервере нет отладки //Чтобы видеть, как выглядит объект XDTO //Текст = ОбъектXDTOВСтрокуXML(Content); Сообщить(Текст); Для Каждого Item Из Items Цикл //Получаем текущую номенклатуру - увы не работает, данных по номенклатуре нет... //СлужебнаяИнформация = ОсновнойМодуль.ОбъектXDTOВСтруктуру(Item.СлужебнаяИнформация); //Сообщить(СтруктураВСтроку(СлужебнаяИнформация)); //ТекНоменклатура = СлужебнаяИнформация.Номенклатура; //Сообщить("Номенклатура:" + ТекНоменклатура + " Тип: " + ТипЗнч(ТекНоменклатура)); Если Item.Свойства().Получить("ItemVendorCode") <> Неопределено Тогда КодПоставщика = Item.ItemVendorCode; //Устанавливаем код товара из кода поставщика ItemVendorCode, он есть в Item УстановитьЗначениеXDTO(Item, "ItemArticle", КодПоставщика); КонецЕсли; КонецЦикла; Возврат; КонецПроцедуры
Чтобы выводился код товара, нужно установить ВыводитьНаименованиеТовараСКодами. Как это сделать, неясно. Сам Контур рекомендует обратиться в поддержку. Но у клиента поддержка работает долго, 3 недели не могут решить эту проблему, поэтому я закодировал прямо в обработке.
Поменял форму КонтурДиадокПечатныеФормы и засунул ее в новую версию обработки.

Функция ПредставлениеКодТов(Item, ВыводитьНаименованиеТовараСКодами) Результат = ""; //Осипов ВыводитьНаименованиеТовараСКодами = истина; Если ВыводитьНаименованиеТовараСКодами Тогда Результат = СтрокаИлиДефис(Item.ItemVendorCode); Иначе Если ЗначениеЗаполнено(Item.Product) ИЛИ ЗначениеЗаполнено(Item.ItemCharact) ИЛИ ЗначениеЗаполнено(Item.ItemArticle) Тогда Результат = СтрокаДефис(); КонецЕсли; Если Результат = "" Тогда Результат = СтрокаИлиДефис(Item.ItemVendorCode); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции
Среда: УТ 11.5.17.202, Контур 4.51.0. Объем: 2 час.

Свежие комментарии