Конвертация данных. Остатки по взаиморасчетам выгружаются в один документ

1. lishniy 132 03.07.20 10:24 Сейчас в теме
Добрый день.
Делаю переход из 7.7 ТиС для Украины в УТ 10 для России(такая задача).
Дабы меньше изобретать велосипед, взял за основу инструкцию по переходу между 7.7 в ут 2.3 для Украины. (Суть состоит в том, что делается конвертация базы семерки в восьмерку, а там уже выполняется перенос обработкой "Универсальный обмен в формате XML. Обработка V8Exchan82.epf из конвертации)

Суть проблемы. При переносе взаиморасчетов используется произвольный алгоритм в результате которого должны формироваться документы "Корректировка долга" в УТ10. Я вижу в файле выгрузке кучу документов, но в УТ все загружается в один.

Собственно само правило:
<Правило>
				<Код>КорректировкаДолга</Код>
				<Наименование> --> ДокументСсылка.КорректировкаДолга</Наименование>
				<Порядок>400</Порядок>
				<ПослеЗагрузки>Объект.УстановитьНовыйНомер();</ПослеЗагрузки>
				<НеЗапоминатьВыгруженные>true</НеЗапоминатьВыгруженные>
				<Приемник>ДокументСсылка.КорректировкаДолга</Приемник>
				<Свойства>
					<Группа>
						<Код>1</Код>
						<Наименование>--> СуммыДолга</Наименование>
						<Порядок>100</Порядок>
						<Источник Имя="" Вид=""/>
						<Приемник Имя="СуммыДолга" Вид="ТабличнаяЧасть"/>
						<Свойство>
							<Код>2</Код>
							<Наименование> --> ДоговорКонтрагента</Наименование>
							<Порядок>100</Порядок>
							<Источник Имя="" Вид=""/>
							<Приемник Имя="ДоговорКонтрагента" Вид="Реквизит" Тип="СправочникСсылка.ДоговорыКонтрагентов"/>
							<КодПравилаКонвертации>ДоговорыКонтрагентов                              </КодПравилаКонвертации>
							<ПередВыгрузкой>ВидДоговораДляКонвертации = ОбъектКоллекции.ВидДоговора;

Если ВидДоговораДляКонвертации = Перечисления.ВидыТорговли.Бартер Тогда
	
	ВидДоговораДляКонвертации = "Бартерный"
	
ИначеЕсли  ВидДоговораДляКонвертации = Перечисления.ВидыТорговли.Нал
	   ИЛИ ВидДоговораДляКонвертации = Перечисления.ВидыТорговли.Кредит
	   ИЛИ ВидДоговораДляКонвертации = Перечисления.ВидыТорговли.Предоплата Тогда
	
	Если ОбъектКоллекции.ВидРегистра = "Покупатели" Тогда
		ВидДоговораДляКонвертации = "СПокупателем";
	Иначе
		ВидДоговораДляКонвертации = "СПоставщиком";
	КонецЕсли;
	
ИначеЕсли ВидДоговораДляКонвертации = Перечисления.ВидыТорговли.Консигнация Тогда
	
	Если ОбъектКоллекции.ВидРегистра = "Покупатели" Тогда
		ВидДоговораДляКонвертации = "СКомиссионером";
	Иначе
		ВидДоговораДляКонвертации = "СКомитентом";
	КонецЕсли;
	
КонецЕсли;	   

ИсходящиеДанные = Новый Структура("ВидДоговора", ВидДоговораДляКонвертации);</ПередВыгрузкой>
						</Свойство>
						<Свойство>
							<Код>4</Код>
							<Наименование> --> УвеличениеДолгаКонтрагента</Наименование>
							<Порядок>300</Порядок>
							<Источник Имя="" Вид=""/>
							<Приемник Имя="Сумма" Вид="Реквизит" Тип="Число"/>
						</Свойство>
						<Свойство>
							<Код>6</Код>
							<Наименование> --> КурсВзаиморасчетов</Наименование>
							<Порядок>500</Порядок>
							<Источник Имя="" Вид=""/>
							<Приемник Имя="КурсВзаиморасчетов" Вид="Реквизит" Тип="Число"/>
						</Свойство>
						<Свойство>
							<Код>7</Код>
							<Наименование> --> КратностьВзаиморасчетов</Наименование>
							<Порядок>600</Порядок>
							<Источник Имя="" Вид=""/>
							<Приемник Имя="КратностьВзаиморасчетов" Вид="Реквизит" Тип="Число"/>
						</Свойство>
					</Группа>
					<Свойство>
						<Код>8</Код>
						<Наименование> --> Дата</Наименование>
						<Порядок>200</Порядок>
						<Источник Имя="" Вид=""/>
						<Приемник Имя="Дата" Вид="Свойство" Тип="Дата"/>
						<ПередВыгрузкой>Значение = РабочаяДата;</ПередВыгрузкой>
					</Свойство>
					<Свойство Поиск="true">
						<Код>9</Код>
						<Наименование> --> Контрагент</Наименование>
						<Порядок>300</Порядок>
						<Источник Имя="" Вид=""/>
						<Приемник Имя="КонтрагентДебитор" Вид="Реквизит" Тип="СправочникСсылка.Контрагенты"/>
						<КодПравилаКонвертации>Контрагенты                                       </КодПравилаКонвертации>
					</Свойство>
					<Свойство>
						<Код>10</Код>
						<Наименование> --> Комментарий</Наименование>
						<Порядок>400</Порядок>
						<Источник Имя="" Вид=""/>
						<Приемник Имя="Комментарий" Вид="Реквизит" Тип="Строка"/>
						<ПередВыгрузкой>Значение = "Загрузка данных из Торговли + Склад для Украины 7.7";</ПередВыгрузкой>
					</Свойство>
					<Свойство Поиск="true">
						<Код>11</Код>
						<Наименование> --> Организация</Наименование>
						<Порядок>500</Порядок>
						<Источник Имя="" Вид=""/>
						<Приемник Имя="Организация" Вид="Реквизит" Тип="СправочникСсылка.Организации"/>
						<КодПравилаКонвертации>Организации                                       </КодПравилаКонвертации>
					</Свойство>
					<Свойство>
						<Код>12</Код>
						<Наименование> --> ОтражатьВУправленческомУчете</Наименование>
						<Порядок>600</Порядок>
						<Источник Имя="" Вид=""/>
						<Приемник Имя="ОтражатьВУправленческомУчете" Вид="Реквизит" Тип="Булево"/>
						<ПередВыгрузкой>Значение = Истина;</ПередВыгрузкой>
					</Свойство>
				</Свойства>
				<Значения/>
			</Правило>
...
<ПравилаВыгрузкиДанных>
		<Правило Отключить="false">
			<Код>КорректировкаДолга</Код>
			<Наименование>Остатки взаиморасчетов с контрагентами</Наименование>
			<Порядок>200</Порядок>
			<КодПравилаКонвертации>КорректировкаДолга                                </КодПравилаКонвертации>
			<СпособОтбораДанных>ПроизвольныйАлгоритм</СпособОтбораДанных­>
			<ПередОбработкойПравила>Запросы.ОстаткиВзаиморасчетов.УстановитьПараметр("ДатаОстатков", РабочаяДата);
Запросы.ОстаткиВзаиморасчетов.УстановитьПараметр("ПустаяФирма", Справочники.Фирмы.ПустаяСсылка());
Запросы.ОстаткиВзаиморасчетов.УстановитьПараметр("ОрганизацияПоУмолчанию", Параметры.ФирмаПоУмолчанию);
РезультатЗапроса = Запросы.ОстаткиВзаиморасчетов.Выполнить();

ТабДок = Новый ТаблицаЗначений;
ТабДок.Колонки.Добавить("Контрагент");
ТабДок.Колонки.Добавить("Организация");
ТабДок.Колонки.Добавить("СуммыДолга");

Выборка1 = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка1.Следующий() Цикл //Контарагент
	Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока Выборка2.Следующий() Цикл //Организация
				
		СтрТабДок = ТабДок.Добавить();
		
		СтрТабДок.Контрагент  = Выборка2.Контрагент;
		СтрТабДок.Организация = Выборка2.Организация;
		
		СтрТабДок.СуммыДолга = Новый ТаблицаЗначений;
		СтрТабДок.СуммыДолга.Колонки.Добавить("ДоговорКонтрагента");
		СтрТабДок.СуммыДолга.Колонки.Добавить("ВидДоговора");
		СтрТабДок.СуммыДолга.Колонки.Добавить("Сумма");		
		СтрТабДок.СуммыДолга.Колонки.Добавить("КурсВзаиморасчетов");
		СтрТабДок.СуммыДолга.Колонки.Добавить("КратностьВзаиморасчетов");
		СтрТабДок.СуммыДолга.Колонки.Добавить("ВидРегистра");
		
		Выборка = Выборка2.Выбрать();
		Пока Выборка.Следующий() Цикл //Договора
			
			ПодСтрТабДок = СтрТабДок.СуммыДолга.Добавить();
			
			Если Выборка.ДоговорКонтрагента = Неопределено Тогда
				ПодСтрТабДок.ДоговорКонтрагента = Новый Структура;
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Номер", 				СокрЛП(СтрТабДок.Организация.ПрефиксНомеровДокументов) + "Вспом");
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Фирма", 				СтрТабДок.Организация);
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("НомерДоговора", 		"Вспомогательный договор");
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Контрагент", 			СтрТабДок.Контрагент);
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Валюта", 				СтрТабДок.Контрагент.ВалютаВзаиморасчетов);
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Дата_курса", 			РабочаяДата);
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Курс", 				СтрТабДок.Контрагент.ВалютаВзаиморасчетов.Курс);
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Дата", 				РабочаяДата);
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Комментарий", 		"Конвертация данных. Вспомогательный договор");
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("Ссылка", 				ЗначениеВСтрокуВнутр(СтрТабДок.Контрагент) + "ВспомогательныйДоговор");
				ПодСтрТабДок.ДоговорКонтрагента.Вставить("ВидДоговора", 		Выборка.ВидДоговора);
				
				ПодСтрТабДок.КурсВзаиморасчетов 		= Выборка.КурсВзаиморасчетов;
				ПодСтрТабДок.КратностьВзаиморасчетов	= Выборка.КратностьВзаиморасчетов;
				КоэфПересчетаДолга = 1;
			Иначе
				
				ПодСтрТабДок.ДоговорКонтрагента  		= Выборка.ДоговорКонтрагента;
				ПодСтрТабДок.КурсВзаиморасчетов 		= Выборка.ДоговорКонтрагента.Валюта.Курс;
				ПодСтрТабДок.КратностьВзаиморасчетов	= Выборка.ДоговорКонтрагента.Валюта.Кратность;
				
				КоэфПересчетаДолга = Выборка.КурсВзаиморасчетов / Выборка.КратностьВзаиморасчетов / ПодСтрТабДок.КурсВзаиморасчетов * ПодСтрТабДок.КратностьВзаиморасчетов;
				
			КонецЕсли;
			
			ПодСтрТабДок.ВидДоговора 				= Выборка.ВидДоговора;
			ПодСтрТабДок.ВидРегистра 				= Выборка.ВидРегистра;
			ПодСтрТабДок.Сумма 						= Выборка.Сумма * КоэфПересчетаДолга;
		КонецЦикла;	
	КонецЦикла;	
КонецЦикла;	

ВыборкаДанных = ТабДок;</ПередОбработкойПравила>
		</Правило>
Показать


На выходе я вижу
</Объект>
<Объект Нпп="1" Тип="ДокументСсылка.КорректировкаДолга" ИмяПравила="КорректировкаДолга"><Ссылка><Свойство Имя="Организация" Тип="СправочникСсылка.Организации"><Ссылка Нпп="2">
	<Свойство Имя="{УникальныйИдентификатор}" Тип="Строка">
		<Значение>676e284d-8120-4822-bc02-de7681e91eb5</Значение>
	</Свойство><Свойство Имя="Код" Тип="Строка">
	<Значение>00001</Значение>
</Свойство>
Дальше документ
...

<Объект Нпп="10" Тип="ДокументСсылка.КорректировкаДолга" ИмяПравила="КорректировкаДолга"><Ссылка><Свойство Имя="Организация" Тип="СправочникСсылка.Организации"><Ссылка Нпп="2">
	<Свойство Имя="{УникальныйИдентификатор}" Тип="Строка">
		<Значение>676e284d-8120-4822-bc02-de7681e91eb5</Значение>
	</Свойство><Свойство Имя="Код" Тип="Строка">
	<Значение>00001</Значение>
</Свойство>
Дальше документ
Показать


Если я правильно понял, в ссылку пишется организация, и в итоге все загружается в один документ. Как исправить правило выгрузки?
По теме из базы знаний
Найденные решения
5. lishniy 132 03.07.20 13:45 Сейчас в теме
Нашел ошибку. Все оказалось намного проще. Имя поле контрагента в приемнике "КонтрагентДебитор", а в правилах было "Контрагент". Из-за этого в новом контрагенте отсутствовал контрагент и поиск происходил только по организации.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user995537 38 03.07.20 11:38 Сейчас в теме
Добрый день, а где сам текст запроса - "Запросы.ОстаткиВзаиморасчетов"? Посмотрите какие там группировки, добавьте поле которое будет хранить уникальный идентификатор документа из семерки. Эти данные сохранить в параметр, а затем в настройках конвертации в процедуре после загрузки данных - получить эту таблицу из параметра и потом: отобрать строки идентификатора в отдельную таблицу, свернуть и в цикле идти по этой таблице делать выборку строк из таблицы параметра и по этой выборке создавать и заполнять нужный документ.
Прикрепленные файлы:
3. lishniy 132 03.07.20 11:58 Сейчас в теме
(2)
Не совсем понял, какой гуид брать из семерки. В базе семерке(которая после конвертации уже восьмерка) нет документа. Документы заполняются из остатков регистра взаиморасчетов

<Запрос Имя="ОстаткиВзаиморасчетов" ИспользуетсяПриЗагрузке="false">
			<Текст>ВЫБРАТЬ "Покупатели" КАК ВидРегистра,
		ВЫБОР 
			КОГДА Рег.Договор ССЫЛКА Документ.Договор 
				ТОГДА Рег.Договор.ВидТорговли 
			КОГДА Рег.Договор = Неопределено 
				ТОГДА "СПокупателем" 
			ИНАЧЕ 
				"СКомитентом"
		КОНЕЦ КАК ВидДоговора,
		ВЫБОР 
			КОГДА Рег.Договор = Неопределено 
				ТОГДА &ОрганизацияПоУмолчанию 
			ИНАЧЕ 
				Рег.Договор.Фирма 
		КОНЕЦ КАК Организация,
		Рег.Контрагент КАК Контрагент,
		ВЫБОР 
			КОГДА     Рег.Договор ССЫЛКА Документ.Договор 
			      ИЛИ Рег.Договор = Неопределено 
			  	ТОГДА Рег.Договор 
			ИНАЧЕ 
				Рег.Договор.Договор 
		КОНЕЦ КАК ДоговорКонтрагента,
		Рег.Контрагент.ВалютаВзаиморасчетов.Курс 	  КАК КурсВзаиморасчетов,
		Рег.Контрагент.ВалютаВзаиморасчетов.Кратность КАК КратностьВзаиморасчетов,
		Рег.ДолгОстаток КАК Сумма		
		
ИЗ РегистрНакопления.ВзаиморасчетыПокупателей.Остатки(&ДатаОстатков) КАК Рег	
ГДЕ Рег.Фирма = &ПустаяФирма

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ "Поставщики" КАК ВидРегистра,
		ВЫБОР 
			КОГДА Рег.Договор ССЫЛКА Документ.Договор 
				ТОГДА Рег.Договор.ВидТорговли 
			КОГДА Рег.Договор = Неопределено 
				ТОГДА "СПоставщиком" 
			ИНАЧЕ 
				"СКомиссионером" 
		КОНЕЦ КАК ВидДоговора,
		ВЫБОР 
			КОГДА Рег.Договор = Неопределено 
				ТОГДА  &ОрганизацияПоУмолчанию 
			ИНАЧЕ 
				Рег.Договор.Фирма 
		КОНЕЦ КАК Организация,
		Рег.Контрагент КАК Контрагент,
		ВЫБОР 
		КОГДА 	Рег.Договор ССЫЛКА Документ.Договор 
			ИЛИ Рег.Договор = Неопределено 
				ТОГДА Рег.Договор 
			ИНАЧЕ 
				Рег.Договор.Договор 
		КОНЕЦ КАК ДоговорКонтрагента,
		Рег.Контрагент.ВалютаВзаиморасчетов.Курс КАК КурсВзаиморасчетов,
		Рег.Контрагент.ВалютаВзаиморасчетов.Кратность КАК КратностьВзаиморасчетов,
		Рег.ДолгОстаток КАК Сумма		
		
ИЗ РегистрНакопления.ВзаиморасчетыПоставщиков.Остатки(&ДатаОстатков) КАК Рег	
ГДЕ Рег.Фирма = &ПустаяФирма

ИТОГИ ПО Контрагент, Организация</Текст>
		</Запрос>
Показать
4. user995537 38 03.07.20 12:59 Сейчас в теме
Не обязательно ГУИД, любой идентификатор по которому можно будет затем отобрать строки из таблицы в параметрах или отбирать по двум параметрам номер и дата.
5. lishniy 132 03.07.20 13:45 Сейчас в теме
Нашел ошибку. Все оказалось намного проще. Имя поле контрагента в приемнике "КонтрагентДебитор", а в правилах было "Контрагент". Из-за этого в новом контрагенте отсутствовал контрагент и поиск происходил только по организации.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот