Странная передача ИНН для группы. УНФ3

При синхронизации УНФ 3.0 с БП региональной словил странную ошибку:

Направление: Получение.
ПОД: Справочник_Контрагенты_Получение.
ПКО: Справочник_Контрагенты_Получение.
Объект: Справочник.Контрагенты.

Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(5895)}:ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные, ПоляКопируемые, ПоляИсключаемые);
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1874)}:ЗаполнитьДанныеИБПоПолученнымДанным(ДанныеИБ, ПолученныеДанные, ПравилоКонвертации);
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(6432)}:ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(2058)}:ПрочитатьСообщениеОбмена(КомпонентыОбмена, Результаты, ТаблицыДляЗагрузки);
{Обработка.КонвертацияОбъектовXDTO.МодульОбъекта(399)}:ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(5207)}:ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(ПараметрыЗагрузки);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(9126)}:ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена, , ТолькоПараметры);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(391)}:ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, ТолькоПараметры);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(9468)}:ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы,
{Обработка.ВыполнениеОбменаДанными.МодульМенеджера(41)}:ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
{(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5943)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1623)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(667)}:ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры);
{Обработка.ВыполнениеОбменаДанными.Форма.Форма.Форма(1422)}:Результат = ДлительныеОперации.ВыполнитьВФоне(

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка установки значения свойства 'ИНН'
по причине:
Реквизит недоступен для группы
[ОшибкаИспользованияВстроенногоЯзыка]

В какой именно группе ошибка, не понял, решил обойти проблему.

Расширил модуль ОбменДаннымиXDTOСервер:

&Вместо("ЗаполнитьДанныеИБПоПолученнымДанным")
Процедура дор_ЗаполнитьДанныеИБПоПолученнымДанным(ДанныеИБ, ПолученныеДанные, ПравилоКонвертации)
	//Осипов 2023-11-23 ошибка приходит контрагент-группа 
	//ДанныеИБ - СправочникОбъект.Контрагенты
	//ПолученныеДанные - СправочникОбъект.Контрагенты
	
	СвойстваОтсутствующиеВПолученныхДанных = Неопределено;
	
	Если Метаданные.НайтиПоТипу(ТипЗнч(ДанныеИБ)) = Метаданные.Справочники.Контрагенты
		И ТипЗнч(ПолученныеДанные) = Тип("СправочникОбъект.Контрагенты")
		И ДанныеИБ.ЭтоГруппа Тогда
		
		//Свойство должно быть
		Если НЕ ПолученныеДанные.ДополнительныеСвойства.Свойство("СвойстваОтсутствующиеВПолученныхДанных") Тогда
			ПолученныеДанные.ДополнительныеСвойства.Вставить("СвойстваОтсутствующиеВПолученныхДанных", "");
		КонецЕсли;
		
		СвойстваОтсутствующиеВПолученныхДанных = ПолученныеДанные.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных;
		ПолученныеДанные.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных = СвойстваОтсутствующиеВПолученныхДанных + ?(СвойстваОтсутствующиеВПолученныхДанных = "","",",") + "ИНН, КПП";
		
		//Если ПолученныеДанные.Свойство("ИНН") Тогда
		//	ПолученныеДанные.Удалить("ИНН");
		//	Сообщить("Удален реквизит ИНН у: " + ДанныеИБ);
		//КонецЕсли;
		//Если ПолученныеДанные.Свойство("КПП") Тогда
		//	ПолученныеДанные.Удалить("КПП");
		//	Сообщить("Удален реквизит КПП у: " + ДанныеИБ);
		//КонецЕсли;
		
	КонецЕсли;
	ПродолжитьВызов(ДанныеИБ, ПолученныеДанные, ПравилоКонвертации);
	
	Если СвойстваОтсутствующиеВПолученныхДанных <> Неопределено Тогда                                                           
		//Восстанавливаем прошлое значение
		ПолученныеДанные.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных = СвойстваОтсутствующиеВПолученныхДанных;
	КонецЕсли;

КонецПроцедуры

Да, чтобы это диагностировать дополнительно пришлось поменять обмен через интернет на обмен через FTP, потому что в обмене через интернет была только информация что ошибка произошла в базе-корреспонденте.

Но в итоге я подумал, что если контрагент загрузится как группа, то он и в документы попадет как группа и решил просто заменить этого контрагента на другого в документах в базе-отправителе через поиск и замену дублей. Код в итоге не пригодился.

Полезно взглянуть на типовой код, чтобы понять, как такая обманка работает:

Процедура ЗаполнитьДанныеИБПоПолученнымДанным(ДанныеИБ, ПолученныеДанные, ПравилоКонвертации)
	
	СвойстваОтсутствующиеВПолученныхДанных = Новый Массив;
	Если ПолученныеДанные.ДополнительныеСвойства.Свойство("СвойстваОтсутствующиеВПолученныхДанных") Тогда
		
		СвойстваОтсутствующиеВПолученныхДанных = СтрРазделить(ПолученныеДанные.ДополнительныеСвойства.СвойстваОтсутствующиеВПолученныхДанных, ",", Ложь);
		
	КонецЕсли;
	
	ПоляКопии = ПравилоКонвертации.Свойства.ВыгрузитьКолонку("СвойствоКонфигурации");
	Если ПоляКопии.Количество() > 0 Тогда
		
		Для НомерПоля = 0 По ПоляКопии.ВГраница() Цикл
			
			ПоляКопии[НомерПоля] = СокрЛП(ПоляКопии[НомерПоля]);
			
		КонецЦикла;
		
		Для НомерОтсутствующегоПоля = 0 По СвойстваОтсутствующиеВПолученныхДанных.ВГраница() Цикл
			
			СвойстваОтсутствующиеВПолученныхДанных[НомерОтсутствующегоПоля] = СокрЛП(СвойстваОтсутствующиеВПолученныхДанных[НомерОтсутствующегоПоля]);
			
			ИндексОтсутствующегоПоля = ПоляКопии.Найти(СвойстваОтсутствующиеВПолученныхДанных[НомерОтсутствующегоПоля]);
			Если ИндексОтсутствующегоПоля <> Неопределено Тогда
				
				ПоляКопии.Удалить(ИндексОтсутствующегоПоля);
				
			КонецЕсли;
			
		КонецЦикла;
		
		ПоляКопируемые = СтрСоединить(ПоляКопии, ",");
		ПоляИсключаемые = СтрСоединить(СвойстваОтсутствующиеВПолученныхДанных, ",");
		
		ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные, ПоляКопируемые, ПоляИсключаемые);
		
	КонецЕсли;
...
КонецПроцедуры

Среда: УНФ 3.0.4.88 Объем: 0.5 час

fixin

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

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

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

  1. Funny:

    Речь, я так понял, о попытке загрузить значение в собственный реквизит группы справочника по аналогии с реквизитом элемента.
    Реквизиты группы нерасширяемы для групп. Автор обошел данную проблему использованием допреквизитов (фактически записывает значение в ТЧ «ДополнительныеРеквизиты» для того справочника, у которого есть такая табличная часть (и соотв. работает механизм допреквизитов).

  2. Funny:

    Для самописных баз всё проще — добавляемый реквизит справочника имеет в свойствах ограничивающую настройку «Использование» со значениями:
    (только) для элемента
    (только) для группы
    (для обоих) для группы и элемента

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

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