Доработки подключаемого модуля Контура в 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 час.

fixin

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

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

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

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