Как написать простую доработку Контур.Диадок через подключаемый модуль

Нужно было доработать клиенту формирование 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 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 4

  1. Серый:

    О, поздравляю с приобщением к поделкам «Контура». Капец они тугие на доработки — даже за деньги.
    Поэтому направление норм.

  2. Николай:

    Спасибо! Наконец въехал. Зарабатываю на 1С больше 20 лет. Теперь еще немного масла на бутерброде будет)))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *