Конвертация данных 2. Использование исходящих и входящих данных. Свойство "Получить из входящих данных"

Публикация № 1195038

Разработка - Обмен данными 1С

КонвертацияДанных Обмен ИсходящиеДанные ВходящиеДанные ПравилаОбмена

Разработка правил обмена с использованием исходящих и входящих данных. В качестве примера рассмотрена реальная задача конвертации номенклатуры через регистр сопоставления номенклатур. Статья предназначена в первую очередь для тех, кто только начинает осваивать Конвертацию данных.

1. Теория

В штатной справке по Конвертации данных об этих параметрах написано следующее:

ВходящиеДанные - Произвольный - произвольные вспомогательные данные, переданные правилу конвертации из других правил (например из правила выгрузки данных или правила конвертации свойств). Значение параметра, как правило, имеет тип Структура, где ключи значений соответствуют структуре свойств объекта приемника. Таким образом, при конвертации свойств (в правиле конвертации свойств), конвертируемые данные (или часть данных) могут быть получены из этого параметра.

ИсходящиеДанные - Произвольный - произвольные вспомогательные данные. Данные передаются по следующим правилам:

1) ПВД.ИсходящиеДанные -> ПКО.ВходящиеДанные

2) ПКО.ВходящиеДанные -> ПКС.ВходящиеДанные

3) ПКС.ИсходящиеДанные -> ПКО.ВходящиеДанные

Попробуем разобраться подробнее, как передаются данные параметры.

Шаг 1. ПВД (Правило выгрузки данных)

В правилах выгрузки данных создаем параметр ИсходящиеДанные и помещаем в него некоторое значение.

Шаг 2. ПКО (Правило конвертации объектов)

После выполнения ПВД, параметр передается в ПКО-приемник уже как ВходящиеДанные. К этому параметру можно обратиться в коде, например, поместив еще один элемент в структуру.

Если будет установлено хотя бы одно поле, получаемое из входящих данных, в ПКО добавится вкладка "Параметры, получаемые из входящих данных", где будет отображаться список соответствующих полей. Также отобразится кнопка "Структура запрашиваемых данных", которая позволит посмотреть, какую структуру входящих данных нужно передать в ПКО.

Шаг 3. ПКС (Правило конвертации свойств)

После выполнения кода в ПКО, параметр будет передан в ПКС как ВходящиеДанные. Здесь обращаем внимание на следующую особенность: из ПВД уходят ИсходящиеДанные, в ПКО приходят ВходящиеДанные. Из ПКО уходят ВходящиеДанные, в ПКС также приходят ВходящиеДанные.

Для того, чтобы свойству было присвоено значение из входящих данных, выставляем галку "Получить из входящих данных". Поле Источник очистится, т.к. оно уже потеряло свой смысл.

При совпадении наименовании ключа структуры входящих данных, поля будут заполнятся автоматически из входящих данных. Если наименование в структуре различаются, значение необходимо переназначить в ПКС вручную.

Шаг 4. Снова ПКО

Если поле имеет не примитивный тип данных, то система продолжит конвертацию объекта по правилу. Параметр ИсходящиеДанные, заданный в ПКС, будет передан в ПКО как ВходящиеДанные.

 

2. Практика

Задача: Необходимо настроить передачу документа (для примера будем использовать документ ПоступлениеТоваровУслуг) из базы Источника(1С:ERP Управление предприятием 2) в базу Приемник(Управление производственным предприятием 1.3) через регистр сведений "Сопоставление номенклатуры". У документа есть табличная часть Товары, в которой имеется поле "Номенклатура.

Номенклатура базы Источника должна заменяться на номенклатуру базы Приемника на основании найденного сопоставления, т.к. это эквивалентные номенклатуры, только хранящиеся в разных базах и имеющих разные наименования. В случае, если сопоставление не найдено - отказ в выгрузке всего документа.

Все передаваемые объекты, содержащие в себе поле Номенклатура, должны выгружаться через регистр сопоставлений.

Регистр хранится в базе Источнике.

Решение:

Для начала создадим ПКО для документа ПриобретениеТоваровУслуг, в качестве приемника необходимо указать документ ПоступлениеТоваровУслуг. На вопрос создать ли правила конвертации свойств автоматически, отвечаем утвердительно. Проверяем автоматически созданные ПКС на корректность. Далее создаем ПВД. Теперь можно приступать к доработке правил сопоставления.

Необходимо создать новую табличную часть Товары, в которой заменить номенклатуру Источника на номенклатуру Приемника. Если для выгружаемой Номенклатуры не будет найдено сопоставление, то отказ в выгрузке всего документа. Для этого в ПКО ПриобретениеТоваровУслуг в обработчике события Перед Выгрузкой добавим следующий код:

//Формируем Новую табличную часть, которую будем помещать во входящие данные
ТЧ = Источник.Товары.Выгрузить();

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

Запрос.УстановитьПараметр("Источник", Источник);

РезультатЗапроса = Запрос.Выполнить();

ДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ДетальныеЗаписи.Следующий() Цикл
	//проверяем, найдено ли соответствие
	Если ЗначениеЗаполнено(ДетальныеЗаписи.НоменклатураУПП) Тогда
		МассивНоменклатур.Добавить(ДетальныеЗаписи.НоменклатураУПП);
	Иначе
		//Отказ, если ничего не найдено
		Сообщить("Для документа " + Источник.Ссылка + " не найдено соответствие номенклатур ERP-УПП. Номенклатура "
		+ДетальныеЗаписи.Номенклатура.Наименование+". Выгрузка документа отменена!");
		Отказ = Истина;
		Прервать;
	КонецЕсли;
КонецЦикла;

Если НЕ Отказ Тогда
	//помещаем новую табличную часть во входящие данные
	ТЧ.Колонки.Удалить("Номенклатура");
	ТЧ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.НоменклатураУПП"));
	ТЧ.ЗагрузитьКолонку(МассивНоменклатур,"Номенклатура");
	ВходящиеДанные = Новый Структура;
	ВходящиеДанные.Вставить("Товары",ТЧ);
КонецЕсли;

Правила обмена почти готовы. Теперь необходимо установить галку для Свойства "Получить из входящих данных" для табличной части Товары.

Правила обмена готовы. Сохраняем созданные правила. Попытаемся выгрузить из базы Источника и загрузить в Приемник тестовый документ. После загрузки в Приемник видим, что номенклатура была передана корректно, но колонка ЕдиницаИзмерения не загрузилась.

Связана эта ситуация с тем, что свойство ЕдиницаИзмерения привязана к номенклатуре-владельцу. Следовательно, нужно передать из ПКС единиц измерения номенклатуру-владельца в ПКО ЕдиницыИзмерения.


Добавим в обработчик события Перед выгрузкой для ПКС ЕдиницаИзмерения следующий код:

ИсходящиеДанные = Новый Структура("Владелец");
ИсходящиеДанные.Владелец = ОбъектКоллекции.Номенклатура;

То, что указываем в ПКС как ИсходящиеДанные, в ПКО будет уже ВходящиеДанные.

В ПКО ЕдиницыИзмерения установим Галку "Получить из входящих данных" для Поля "Владелец".

Также не забудем дописать в ПКО ПриобретениеТоваровУслуг строку кода для выгрузки единиц измерений в ТЧ

 
 Исправленный код ПКО ПриобретениеТоваровУслуг для Единиц измерения

 

//Формируем Новую табличную часть, которую будем помещать во входящие данные 
ТЧ = Источник.Товары.Выгрузить();

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

Запрос.УстановитьПараметр("Источник", Источник);

РезультатЗапроса = Запрос.Выполнить();

ДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ДетальныеЗаписи.Следующий() Цикл
	//проверяем, найдено ли соответствие  
	Если ЗначениеЗаполнено(ДетальныеЗаписи.НоменклатураУПП) Тогда
		МассивНоменклатур.Добавить(ДетальныеЗаписи.НоменклатураУПП);
		МассивЕдиницИзмерения.Добавить(ДетальныеЗаписи.Номенклатура.ЕдиницаИзмерения);
		
	Иначе
		//Отказ, если ничего не найдено
		Сообщить("Для документа " + Источник.Ссылка + " не найдено соответствие номенклатур ERP-УПП. Номенклатура "+ДетальныеЗаписи.Номенклатура.Наименование+
		". Выгрузка документа отменена!");
		Отказ = Истина;
		Прервать;
	КонецЕсли;
КонецЦикла;

Если НЕ Отказ Тогда
	//помещаем новую табличную часть во входящие данные
	ТЧ.Колонки.Удалить("Номенклатура");
	ТЧ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.НоменклатураУПП"));
	ТЧ.ЗагрузитьКолонку(МассивНоменклатур,"Номенклатура");
	ТЧ.Колонки.Добавить("ЕдиницаИзмерения", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
	ТЧ.ЗагрузитьКолонку(МассивЕдиницИзмерения,"ЕдиницаИзмерения");
	
	ВходящиеДанные = Новый Структура;
	ВходящиеДанные.Вставить("Товары",ТЧ);
КонецЕсли;

 

Как видим на рисунке ниже, табличная часть выгрузилась и загрузилась корректно.

Послесловие

Исходящие и Входящие данные -- неотъемлемый функционал КД2. Без него невозможно представить сложных обменов. К сожалению, на Инфостарте я не нашел статьи, в которой бы разбирались эти моменты, потому решил написать самостоятельно.

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

Правила обмена разрабатывались в системе Конвертация данных, редакция 2.1 (2.1.8.2) для конфигураций 1С:ERP Управление предприятием 2 (2.4.10.62) и Управление производственным предприятием, редакция 1.3 (1.3.86.3). Справочник НоменклатураУПП и регистр сведений СопоставлениеНоменклатурыУППERP являются самостоятельно добавленными объектами и отсутствуют в типовой версии 1С:ERP Управление предприятием 2.

 

UPD.

За два с лишним месяца, прошедших с написания статьи, правила обмена были переосмыслены и переписаны с нуля несколько раз. Во многом благодаря комментариям ниже к посту.

Внесенные изменения и отпимизации:

1) Общая оптимизация (не нужно выгружать результат запроса в таблицу значений, обращаться через точку к переменным ссылочного типа и проч.);

2) В случаях, когда входящих и исходящих данных может быть несколько, либо вы дорабатываете уже существующие правила, неплохо бы делать такую вот проверку:

Если ТипЗнч(ВходящиеДанные) <> Тип("Структура") Тогда
	ВходящиеДанные = Новый Структура;
КонецЕсли;

Чтобы случайно не "обнулить" уже существующие данные в переменной.

3) Реализована подмена номенклатуры на сопоставленную на уровне запроса, а не его пост-обработкой в таблице значений;

4) "Сообщить()" везде заменено на "ОбщегоНазначения.СообщитьПользователю()";

5) Реализовано разделение табличной части Товары на две табличных части Товары и Услуги в зависимости от типа номенклатуры. (т.к. в УПП две табличных части, а не одна).

Отредактированный пример кода:

ТЗТовары = Новый ТаблицаЗначений();

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	pll_СопоставлениеНоменклатурыУППERP.НоменклатураУПП КАК Номенклатура,
|	ХарактеристикиНоменклатурыДополнительныеРеквизиты.Значение КАК Серия,
|	ПриобретениеТоваровУслугТовары.Номенклатура.Представление КАК ПредставлениеНоменклатуры,
|	ПриобретениеТоваровУслугТовары.Номенклатура.Типноменклатуры КАК ТипНоменклатуры,
|	ПриобретениеТоваровУслугТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
|	ПриобретениеТоваровУслугТовары.*
|ИЗ
|	Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатурыДополнительныеРеквизиты
|		ПО ПриобретениеТоваровУслугТовары.Характеристика = ХарактеристикиНоменклатурыДополнительныеРеквизиты.Ссылка
|		И ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство = &СвойствоСерия
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.pll_СопоставлениеНоменклатурыУППERP КАК pll_СопоставлениеНоменклатурыУППERP
|		ПО ПриобретениеТоваровУслугТовары.Номенклатура = pll_СопоставлениеНоменклатурыУППERP.НоменклатураERP
|ГДЕ
|	ПриобретениеТоваровУслугТовары.Ссылка = &Ссылка";

СвойствоСерия = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Серия продукции");
Запрос.УстановитьПараметр("Ссылка", Источник);
Запрос.УстановитьПараметр("СвойствоСерия", СвойствоСерия);

РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда
	Отказ = Истина;	
КонецЕсли;

МассивУдаляемыхКолонок = Новый Массив;
МассивУдаляемыхКолонок.Добавить("ПредставлениеНоменклатуры");
МассивУдаляемыхКолонок.Добавить("ТипНоменклатуры");
МассивУдаляемыхКолонок.Добавить("Номенклатура1");
МассивУдаляемыхКолонок.Добавить("Серия1");

Для Каждого Колонка из РезультатЗапроса.Колонки Цикл	
	НайденныйЭлемент = МассивУдаляемыхКолонок.Найти(Колонка.Имя);
	
	Если НайденныйЭлемент = Неопределено Тогда
		ТЗТовары.Колонки.Добавить(Колонка.Имя);
	КонецЕсли;
	
КонецЦикла;

ТЗУслуги = ТЗТовары.СкопироватьКолонки();

Выборка = РезультатЗапроса.Выбрать();
ПредставлениеИсточника = Строка(Источник);
Пока Выборка.Следующий() Цикл
	Если Выборка.Номенклатура = NULL Тогда
		Отказ = Истина;
		ЗначениеСобытия = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий, ДатаСобытия");
		ЗначениеСобытия.ИмяСобытия = "Обмен данными. Ошибка сопоставления номенклатур";
		ЗначениеСобытия.ПредставлениеУровня = "Ошибка";
		ЗначениеСобытия.Комментарий = "Для объекта "+ПредставлениеИсточника +" и номенклатуры "+Выборка.ПредставлениеНоменклатуры+
		" не найдено сопоставление номенклатур. Объект не выгружен!";
		
		Параметры.СобытияДляЖурналаРегистрации.Добавить(ЗначениеСобытия);
		//Сообщаем пользователю
		ОбщегоНазначения.СообщитьПользователю(ЗначениеСобытия.Комментарий);
		
	ИначеЕсли Выборка.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга Тогда
		ТЗ = ТЗУслуги;
	Иначе
		ТЗ = ТЗТовары;
	КонецЕсли;

	Если НЕ Отказ Тогда
		СтрокаТЗ = ТЗ.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТЗ,Выборка);
	КонецЕсли;
КонецЦикла;

Если Не Отказ Тогда	
	Если ТипЗнч(ВходящиеДанные) <> Тип("Структура") Тогда
		ВходящиеДанные = Новый Структура;
	КонецЕсли;
	ВходящиеДанные.Вставить("Товары", ТЗТовары);
	ВходящиеДанные.Вставить("Услуги", ТЗУслуги);
КонецЕсли;

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Ibrogim 1158 19.02.20 10:28 Сейчас в теме
За теоретическую часть +

С практикой есть вопросы.
Например, уверены ли вы, что сортировка вашего массива будет всегда совпадать с сортировкой ТЗ (которую зачем то вы выгрузили из ТЧ, хотя можно было сконструировать при обходе запроса раз уж вы его всё равно обходите). Я вот не уверен, особенно если используется не MSSQL

"ДетальныеЗаписи.Номенклатура.ЕдиницаИзмерения" зачем двойное разыменование если можно получить в запросе единицу ?

Зачем вообще обходить результат в запросе если можно сразу отказаться в случае отсутствия сопоставления по какой либо позиции (например наложить условие в запросе и определить количество записей)

А зачем использовать не типовой pll_СопоставлениеНоменклатурыУППERP Когда можно пользоваться "СоответствияОбъектовИнформационныхБаз" ?
Drivingblind; +1 Ответить
2. Drivingblind 130 19.02.20 13:37 Сейчас в теме
(1)
С практикой есть вопросы.

Конечно есть. Это моя первая статья на Инфостарт, да и я сам не претендую на звание гуру 1С :)
Выложенный код не являются стопроцентно готовым решением, а, скорее, примером того, как работают Исходящие и Входящие данные. Но это вовсе не значит, что пример не должен работать.

(1)
Например, уверены ли вы, что сортировка вашего массива будет всегда совпадать с сортировкой ТЗ (которую зачем то вы выгрузили из ТЧ, хотя можно было сконструировать при обходе запроса раз уж вы его всё равно обходите). Я вот не уверен, особенно если используется не MSSQL

Да, вы правы, т.к. используется MSSQL, с такой проблемой не сталкивался. Сортировка по номеру строки не будет лишней. Спасибо за замечание. Поправлю.

"ДетальныеЗаписи.Номенклатура.ЕдиницаИзмерения" зачем двойное разыменование если можно получить в запросе единицу ?

Вы правы, нужно вынести этот момент в запрос. Исправлю.

Зачем вообще обходить результат в запросе если можно сразу отказаться в случае отсутствия сопоставления по какой либо позиции (например наложить условие в запросе и определить количество записей)

Вот тут не уверен, что это будет оптимальнее. Не знаю, что будет быстрее, два запроса (один на проверку, второй на формирование ТЧ), чем один запрос и перебор относительно небольшой (10-20 строк) табличной части. Мне кажется, это менять шило на мыло. Могу ошибаться, конечно. Плюс еще нужно выводить сообщение, какая конкретно номенклатура не сопоставлена.

А зачем использовать не типовой pll_СопоставлениеНоменклатурыУППERP Когда можно пользоваться "СоответствияОбъектовИнформационныхБаз" ?

Создан этот регистр потому, что Номенклатура в УПП не соответствует Номенклатуре в ERP напрямую, а соответствует Номенклатуре и Характеристике в ERP, но про это в тексте я не упомянул, т.к. на разработку правил обмена это никак не влияло.
3. Ibrogim 1158 19.02.20 15:07 Сейчас в теме
(2)
Не знаю, что будет быстрее, два запроса

Зачем два запроса? Можно в одном всё сделать.
Ну а то, что вы сообщаете несопоставленные номенклатуры... вы всё равно сообщаете только первую несопоставленную. Да и смысл что то сообщать?наверняка обмен автоматический и ваше "сообщить" сработает вникуда.

Да и вообще от "Сообщить" лучше отвыкать, чтоб не убирать его потом везде для получения 1С Совместимо )
22. SERGEJ64 04.05.20 11:03 Сейчас в теме
(2)
Создан этот регистр потому, что Номенклатура в УПП не соответствует Номенклатуре в ERP напрямую, а соответствует Номенклатуре и Характеристике в ERP, но про это в тексте я не упомянул, т.к. на разработку правил обмена это никак не влияло.

Добрый день! Подскажите, пжл, чем типовой регистр соответствия не подошел вам? Хочется понимать кейс. У нас аналогичная задача стоит, а согласно скриншотам вашего регистра соответствия в его структуре я не увидел характеристик. Ситуация заключалась в том, что несколько номенклатур УПП = одной номенклатуре ЕРП, но с создаваемыми в ЕРП характеристиками?
Drivingblind; +1 Ответить
23. Drivingblind 130 04.05.20 11:14 Сейчас в теме
(22)
Ситуация заключалась в том, что несколько номенклатур УПП = одной номенклатуре ЕРП, но с создаваемыми в ЕРП характеристиками?

Да, всё верно. Определенная продукция в УПП велась без учета характеристик (так исторически сложилось), а в ERP планируется вести её в разрезе характеристик. Поэтому отсутствует прямое соответствие 1:1.

Почему в итоговом коде запроса (в конце публикации) соединение идет без учета характеристик? Потому что этот вопрос пока временно был отложен, но изначальные планы были именно такие, как написано выше.
4. Eremkin 20.02.20 08:06 Сейчас в теме
Доброе утро. Автор безусловно молодец. За статью +
Вставлю свои 5 копеек про производительность. Попробуйте в ПВД вместо стандартной выборки поставить произвольный алгоритм, одним запросом собрать документы. Так же в обработке результата запроса можно сформировать ИсходящиеДаные (реквизиты + ТЧ) и использовать ВыгрузитьПоПравилу
Drivingblind; +1 Ответить
6. Drivingblind 130 24.02.20 09:13 Сейчас в теме
(4) Здравствуйте. Спасибо за оценку.

Попробуйте в ПВД вместо стандартной выборки поставить произвольный алгоритм, одним запросом собрать документы.

Да, конечно можно. Изначально при разработке правил обмена отказались от этой идеи, т.к. выгрузка идет по узлам планов обмена, а произвольный алгоритм не работал с планами обмена. Либо я не разобрался, как их подружить.
Но для примера можно и в ПВД сразу всё сделать.
8. Eremkin 24.02.20 11:59 Сейчас в теме
(6) В обработчике самой конвертации "Перед выгрузкой данных" вставить в параметры для примера

ОрганизацииВыгрузки = УзелДляОбмена.Организации.Выгрузить().ВыгрузитьКолонку("Организация");
Параметры.Вставить("ОрганизацияВыгрузки", ОрганизацииВыгрузки[0]) в

И уже в ПВД можно использовать данный параметр для выборки в запросе. Таким образом можно отсечь лишние данные.
9. Drivingblind 130 25.02.20 08:38 Сейчас в теме
(8) Вы предлагаете помещать узел обмена в параметр, а потом делать выборку запросом в ПВД наподобие следующей? Верно я понимаю?
Запрос.Текст =
"ВЫБРАТЬ ПриобретениеТоваровУслугТовары.*
|ИЗ
|	Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Изменения КАК ПриобретениеТоваровУслугИзменения 
|		ПО ПриобретениеТоваровУслугИзменения.Ссылка = ПриобретениеТоваровУслугТовары.Ссылка
|ГДЕ
|	ПриобретениеТоваровУслугИзменения = &Узел";

Запрос.УстановитьПараметр("Узел", Параметры.УзелОбмена);
Показать
10. Eremkin 25.02.20 10:04 Сейчас в теме
(9)Добрый день. Мне не совсем понятно все таки для чего вам узел обмена? Какая проблема решается?
12. Drivingblind 130 26.02.20 05:26 Сейчас в теме
(10) Здравствуйте. Узел обмена нужен для выборки объектов, зарегистрированных в узле. Обмен происходит не всеми объектами, а только зарегистрированными в узле.
13. Eremkin 26.02.20 07:42 Сейчас в теме
(12) ага, становится более понятнее. При конвертации и так берутся только те объекты, которые зарегистрированы в узле. Или у вас какой-нибудь самописный план обмена, где для документов по крайней мере стоит признак авторегистрация? И не требуются выгружать документы с каким-либо призраком? Давайте копнем ещё. Какая проблема возникает после конвертации в базе приемнике?
14. Drivingblind 130 26.02.20 08:17 Сейчас в теме
(13) Не совсем понимаю, о чем вы. Да, есть планы обменов, в которых регистрируются объекты к обмену. Каждый раз переносить все документы не нужно. Переносятся только зарегистрированные в узле.
Если мы установим узел обмена в обработке Универсальный обмен xml и попытаемся сделать произвольный алгоритм ПВД -- получим ошибку, о чем я уже писал выше.

(13)
Давайте копнем ещё. Какая проблема возникает после конвертации в базе приемнике?

Тоже не совсем понимаю. Пока никакая.
15. Eremkin 26.02.20 13:17 Сейчас в теме
(14)Так-с, еще интереснее стало. Вы открываете внешнюю обработку Универсальный обмен xml, устанавливаете узел обмена для отбора и пытаетесь выгрузить в файл? Верно? Или мы с вами о разных вещах говорим?
16. Drivingblind 130 26.02.20 13:40 Сейчас в теме
(15) Да, именно это.
Прикрепленные файлы:
17. Eremkin 27.02.20 10:53 Сейчас в теме
(16) Я сегодня вечером дома постараюсь посмотреть. Где-то аналогичный кейс у меня был по решению такой задачи
18. Eremkin 27.02.20 22:31 Сейчас в теме
(17)Попробовал простенький пример. Вроде все норм получилось
Прикрепленные файлы:
Drivingblind; +1 Ответить
19. Drivingblind 130 28.02.20 05:36 Сейчас в теме
(18) в комментарии (9) я именно про это и написал :D
в любом случае, спасибо за идею. Статью дополню, как будет время свободное.
20. Eremkin 28.02.20 07:11 Сейчас в теме
(19)да, но я хотел проверить все-таки ))
21. Drivingblind 130 29.04.20 19:31 Сейчас в теме
(4)
(1)
Обновил статью, исправил всякие ошибки и обращения через точку. Спасибо за критику
5. Megaiff 21.02.20 00:09 Сейчас в теме
в первую очередь + за картинку точно себя увидел. Особенно когда не так часто пользуешься. А то помню смотрел Гилева все делал но без практики и задач вылетает из головы все а тут так много тонкостей ))
Drivingblind; +1 Ответить
7. Drivingblind 130 24.02.20 09:15 Сейчас в теме
(5) мне очень помогли видеоуроки Ильи Леонтьева по КД2 на YouTube. Для начинающих, мне кажется, самое то
Megaiff; acanta; +2 Ответить
11. Megaiff 25.02.20 22:59 Сейчас в теме
(7)
Ильи Леонтьева

Спасибо за инфу. Нашел может кому то пригодится
Не реклама https://www.youtube.com/channel/UCtSVt800z-nHQK0fAFENX-A/videos.
24. Yashazz 3410 04.05.20 12:42 Сейчас в теме
Да. Для совсем начинающих - полезная статья.
25. e-9 21 30.06.20 15:50 Сейчас в теме
Своим гражданским долгом считаю везде, где только идет речь про Вх/ИсходящиеДанные, предупредить о "обмане" КД2 - см. скрин. А именно: в обработчике ПВД "Перед выгрузкой" нужно объявлять ВХодящиеДанные, а не ИсходящиеДанные - если потом мы хотим в каких-то ПКС получать значения из входящих данных.
(Убил кучу времени, пока понял, что тут ошибка в мануале)
Прикрепленные файлы:
26. Drivingblind 130 02.07.20 17:59 Сейчас в теме
(25) Там следующая логика:
1) ПВД.ИсходящиеДанные -> ПКО.ВходящиеДанные
2) ПКО.ВходящиеДанные -> ПКС.ВходящиеДанные
3) ПКС.ИсходящиеДанные -> ПКО.ВходящиеДанные
27. e-9 21 03.07.20 12:25 Сейчас в теме
(26) я умею читать) даже мануалы. Откуда Вы и скопировали "логику". А в мануале нет деления на конкретные обработчики.
Перечитайте пожалуйста мое сообщение: в обработчике ПВД "Перед выгрузкой" - не так, как написано в информации по обработчикам. Можете проверить - объявите именно в этом обработчике Исходящие данные, и попробуйте в ПКО, заполнить в каком-то ПКС значение из входящих данных.
28. Drivingblind 130 04.07.20 07:34 Сейчас в теме
(27) да я и не скрываю, что взял оттуда :)
Проверю у себя, если ошибка воспроизведется, дополню статью.
29. user598655_ilia-bers 28.07.20 15:14 Сейчас в теме
Непонятно, зачем создается в ПВД, структура ВходящиеДанные и больше никак не обрабатывается, если мы можем создать ее в ПКО и там заполнить. Я вроде бы все сделал как описано, в файл выгружается, но не загружается, причем никаких ошибок не пишет. Еще непонятно нужно ли ставить галочку на свойствах табличной части. Подскажите пожалуйста кто в курсе, с чем это может быть связано.
Прикрепленные файлы:
30. Drivingblind 130 29.07.20 07:02 Сейчас в теме
(29)
Непонятно, зачем создается в ПВД, структура ВходящиеДанные и больше никак не обрабатывается, если мы можем создать ее в ПКО и там заполнить

Можно один раз объявить ВходящиеДанные в ПВД, чтобы не объявлять каждый раз в ПКО. Еще, как вариант, можно передавать таким образом данные между объектами в пределах одного ПКО. Либо просто создали, например, для отладки и нигде не используют. Такой вариант тоже нельзя исключать.

Я вроде бы все сделал как описано, в файл выгружается, но не загружается, причем никаких ошибок не пишет

Исходящие и входящие данные отрабатывают только на стороне источника. Если в файл выгружаются корректные данные, значит проблема в чем-то другом. Смотрели сам файл с выгрузкой?

Еще непонятно нужно ли ставить галочку на свойствах табличной части

Если всю ТЧ получаем из входящих данных, то не нужно. Главное, чтобы совпадали имени колонок в исходящих данных и в самой ТЧ.
31. Drivingblind 130 29.07.20 07:38 Сейчас в теме
(29)
в файл выгружается, но не загружается

Если не загружается, проверьте еще вот эти галочки в настройках ПКО
Прикрепленные файлы:
Оставьте свое сообщение

См. также

Соответствие типов данных 1С:Предприятие 8.x в MS SQL 2008 Промо

Практика программирования Администрирование данных 1С Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Соответствие типов данных 1С:Предприятие 8.x и MS SQL 2008

1 стартмани

13.01.2013    22233    YPermitin    8    

Разбираемся с web-kit в 1С, на примере интеграции TinyMCE в управляемую форму в УТ 11.4. Допиливаем обмен с сайтом в УТ 11.4

Обмен данными 1С Интеграция Адаптация типовых решений v8 v8::УФ УТ11 Абонемент ($m)

Многие уже знают, что в релизе платформы 8.3.14.1565, браузер Internet Explorer был заменен на Web-Kit, это на самом деле большой шаг вперед, но я уверен, многим, как и мне, пока не совсем понятно, что к чему. Возник опыт использования web-kit в 1С, вызова JS из 1С и вызова 1С из JS. Давайте вместе попробуем понять, чем одно отличается от другого, и заодно сделаем, что-нибудь полезное. Да и наверняка многим придется переписывать свои подобные поделки после обновления на новую платформу, так что надеюсь мой опыт окажется полезным.

2 стартмани

08.12.2019    8207    Бэнни    25    

РИБ и расширения конфигурации, меняющие метаданные

Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Абонемент ($m)

Механизм РИБ фирмой 1С постоянно дорабатывается, но на данный момент есть проблемы с "Расширениями конфигурации", которые меняют состав или структуру метаданных. Основной линией "политики партии" сейчас является "замок" на конфигурации поставщика. Т.е. все изменения делаем в расширении, как их заставить загрузиться в подчиненных узлах, я и хочу рассказать.

1 стартмани

02.12.2019    3705    sergek1972    2    

Перенос НМА и ОС при реорганизации с помощью документа "Ввод остатков" в Бухгалтерии 3

Учет ОС и НМА Бухгалтерский учет Перенос данных из 1C8 в 1C8 v8 v8::БУ БП3.0 БУ Абонемент ($m)

Цель материала – предложить методику автоматизации переноса остатков в конфигурации «Бухгалтерия предприятия, редакция 3.0» с помощью программного создания документа «Ввод остатков».

1 стартмани

17.10.2019    5388    muzipov    0    

Сравнение скорости загрузки большого массива данных из табличного документа с помощью Microsoft EXCEL через COM и с помощью платформы 1С 8.х

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Тестирование COM MS Excel на сервере 1С и нативное чтение табличных документов в 1С.

3 стартмани

08.09.2019    3594    nomad_irk    26    

Отладка правил обмена КД2 для подсистемы БСП Обмен данными

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Уже давно нельзя отлаживать правила обмена при помощи внешних файлов. Попробуем исправить это.

1 стартмани

27.05.2019    12050    fenixnow    6    

[EnterpriseData] Антисвертка характеристик номенклатуры при выгрузке в Бухгалтерию

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 v8::ПВХ КД УНФ БП3.0 Россия БУ Абонемент ($m)

Рассмотрена выгрузка каждой пары значений Номенклатура - Характерстика из УНФ 1.6 в отдельную номенклатуру в Бухгалтерию 3.0 путём доработки правил обмена в формате EnterpriseData.

1 стартмани

27.03.2019    4512    nforce    5    

Обмен без правил. От простого к сложному

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Пишем обмен с нуля, разбираемя с разными способами сериализации, учимся редактировать XML документы, создаем XDTO и Web service, осваиваем Script variant - English.

1 стартмани

16.01.2019    22618    nbeliaev    26    

Конвертация 2.0. Обмен данными между справочниками по сопоставлению артикулов с помощью регистра сведений (пример).

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Россия Бесплатно (free)

Пример обмена данными между справочниками по сопоставлению артикулов с помощью регистра сведений

27.08.2018    9486    Lyubogradov.P    1    

Способы оптимизации переносов данных

Перенос данных из 1C8 в 1C8 Интеграция v8 КД Абонемент ($m)

Хочу рассказать вам про способы оптимизации разработки правил обмена в программе «Конвертация данных» второй редакции. Казалось бы, про эту программу и разработку в ней правил конвертации уже сказано все, что можно. Появились уже более современные и быстрые технологии. Почему же все еще она? Дело в том, что «Конвертация данных» второй редакции все еще актуальна для огромного круга задач. Она имеет очень широкую функциональность и позволяет реализовывать сложные алгоритмы. Годы идут, а люди продолжают ей пользоваться и у них возникает много вопросов по этой программе. Возможно, в будущем вы тоже будете заниматься такими проектами и столкнетесь с задачами, похожими на те, про которые я собираюсь рассказать. Мне хочется вам в этом помочь.

1 стартмани

02.08.2018    17284    primat    7    

Опыт проведения сложных переносов данных на 1С

Перенос данных из 1C8 в 1C8 Интеграция v8 КД Абонемент ($m)

В статье я расскажу про опыт сложных переносов на платформе 1С:Предприятие. Она будет адресована в первую очередь разработчикам 1С, которые уже имеют опыт использования методики «Конвертация данных» (как второй, так и третьей редакции) – я думаю, это большинство из нас. • Я расскажу про различные методики организации переносов данных. • Мы рассмотрим рекомендуемые способы оптимизации правил конвертации, которые позволят вам быстрее выполнять свои переносы. • Также мы разберем, какие могут возникнуть сложности в ходе переноса данных. • Я покажу сравнительный анализ по ряду параметров инструментов «Конвертация данных» второй редакции и третьей, которая вышла уже более года назад.

1 стартмани

30.07.2018    36377    primat    14    

Конвертация данных 2.1. Как реквизит справочника конвертировать в регистр сведений?

Перенос данных из 1C8 в 1C8 v8 КД Россия Абонемент ($m)

В публикации рассмотрен пример конвертации реквизита справочника в регистр сведений.

2 стартмани

28.06.2018    13871    wowik    0    

Как переходили с 7-ки на 8-ку. Пример небольшого розничного магазина

Перенос данных из 1С7.7 в 1C8.X Бухгалтерский учет Розничная торговля Ценообразование, анализ цен Розничная торговля Ценообразование, анализ цен v8 v77::ОУ 1С7:ТиС УТ11 Розничная и сетевая торговля (FMCG) УУ Абонемент ($m)

Пример проекта из нашей практики - перевод учета в небольшом розничном магазине с 1С v7 Торговля и Склад на 1С v8 Управление Торговлей. Какими инструментами пользовались, какие вопросы возникали на проекте.

1 стартмани

15.05.2018    15985    Kutuzov    15    

Скрипт подключения списка информационных баз 1С в зависимости от контролера домена авторизации

Распределенная БД (УРИБ, УРБД) v8 Абонемент ($m)

Многие давно и успешно используют файл "1CEStart.cfg" для подключения списка информационных баз "1С Предприятия" на терминальных серверах и рабочих станциях. На сайте ИТС 1С (также как и в "желтой библии" "Руководство администратора") в "Приложение 3. Описание и расположение служебных файлов" достаточно подробно описаны настройки этого файла. Но ни на ИТС, ни в других статьях в интернете не описано каким образом изменять этот файл, чтобы подключался список баз (РИБов) того территориального офиса, в котором находится компьютер. В этой статье я опишу способ подключения списка ИБ в зависимости от контролера домена авторизации пользователя при помощи скрипта cmd и групповой политики.

1 стартмани

29.03.2018    11045    Glebis    5    

Организация обмена с базой филиала (розничного магазина) в торговой сети через XML (универсальный обмен)

Обмен через XML Перенос данных из 1C8 в 1C8 Розничная торговля Розничная торговля v8 КД УТ11 Розничная и сетевая торговля (FMCG) Абонемент ($m)

В статье по шагам рассматривается создание обмена между центральной базой и базами филиалов на базе конфигурации УТ 11. Для решения поставленной задачи было решено не использовать РИБ, т.к. требуется односторонний обмен ограниченным набором данных, к тому же по определенным условиям. Обмен реализован на основе типовой синхронизации на основе универсального обмена в формате EnterpriseData. Данная публикация может быть полезна внедренцам, которые работают с торговыми сетями, в том числе по модели франчайзинга.

1 стартмани

26.02.2018    36710    Kutuzov    18    

Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0. Подробно, ясно и просто.

Перенос данных из 1C8 в 1C8 v8 КД Абонемент ($m)

Эту статью я написал для тех, кто хочет максимально быстро и эффективно научиться создавать правила выгрузки данных в конфигурации 1С Конвертация данных редакции 2.1. Разберем практическую несложную задачу создания правил выгрузки данных регистра «Лицевые счета работников организаций» ЗУП 2.5 в справочник «Банковские счета» БП КОРП 3.0. Поделюсь некоторыми эффективными приемами: ВыгрузкаПоПравилу(…), работа с глобальными параметрами конвертации и передача их с Источника в Приемник методом ПередатьОдинПараметрВПриемник(…), приемы ускорения и оптимизации конвертации данных. Кому эта статья покажется простой и/или захочется продолжения: рекомендую другую мою публикацию, в которой разобран более сложный пример : https://infostart.ru/public/695916/

1 стартмани

17.11.2017    36843    RailMen    1    

Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник().

Обмен через XML Перенос данных из 1C8 в 1C8 v8 ЗУП2.5 КД БП3.0 Абонемент ($m)

В статье рассказываю: 1) о механизмах и транспорте обмена данными, где одной из сторон обмена выступает конфигурация на базе 1С, и о том, какой транспорт и в каких случаях лучше использовать 2) о решении задачи выгрузки данных документа «Зарплата к выплате организаций» (с выгрузкой банковский счетов физ лиц документа) из ЗУП 2.5.123.1 (далее Источник) в БП КОРП 3.0.52.39 (далее Приемник) путем создания правил обмена данными с использованием конфигурации «Конвертация данных» (далее просто КД) ред. 2.1.8.2. для (далее ЗкВО) 3) о тестирование полученных правил обмена данными.

1 стартмани

03.11.2017    32516    RailMen    5    

Google OAuth и мобильное приложение

Мобильная разработка Обмен данными 1С Внешние источники данных WEB v8 v8::Mobile 1cv8.cf Абонемент ($m)

Об аутентификации для работы с сервисами google из мобильного или настольного приложения

1 стартмани

29.08.2017    11477    stveans@gmail.com    3    

Препарирование xlsx файлов без MS Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Россия Абонемент ($m)

Зоопарк офисных программ? WPS Office, MS Office, Open Office? В статье пойдет речь о том, как отредактировать XLSX файлы без создания COM-объектов.

1 стартмани

28.08.2017    16562    Сурикат    0    

Исправление среднего заработка для отпусков после переноса данных в конфигурацию ЗКГУ 3.0

Перенос данных из 1С7.7 в 1C8.X Перенос данных из 1C8 в 1C8 Зарплата Учет рабочего времени Зарплата Учет рабочего времени v8 1С7:ЗиК ЗКГУ3.0 БУ Абонемент ($m)

Речь пойдет о том, как после перехода на конфигурацию 1С: Зарплата и кадры государственного учреждения, редакции 3.1 изменить данные о среднем заработке и коэффициенте отработанных дней для расчета отпусков без привлечения помощи программиста.

6 стартмани

08.08.2017    32203    RadistkaAn    4    

Быстрое заполнение данными файла MS EXCEL

Практика программирования Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Процедура для 1С быстрого заполнения данными произвольного файла MS Excel. Источник данных - текст с разделителями.

1 стартмани

13.07.2017    12251    dusha0020    4    

Выбор значения из выпадающего списка с поиском и переходом к ячейке с таким значением в Excel

Практика программирования Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Поиск и переход к ячейке выполняется при помощи макроса. Макрос, как и сама книга, формируются программно в 1С.

1 стартмани

30.06.2017    17786    xrrg    0    

Автообновление нескольких распределенных удаленных баз, личный опыт

Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Россия Абонемент ($m)

Имеем около десятка однотипных баз в регионах. Нужно поддерживать единую конфигурацию с как можно меньшим количеством ручных операций.

1 стартмани

12.04.2017    15041    Nehc    8    

Конвертер Даты из числового формата Excel

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Абонемент ($m)

Столкнувшись с проблемой загрузки в 1С из Excel Даты-Времени в числовом формате к удивлению не нашел нигде подобных формул. Может потому что они уж слишком банальны, а может потому что они "тайное знание посвященных". В общем, эта обработка пример конвертации Excel <=> 1C

1 стартмани

17.04.2013    18296    vova196    5    

Автоматическая выгрузка через СОМ. STEP by STEP

Практика программирования Перенос данных из 1C8 в 1C8 v8 КД Россия Абонемент ($m)

Как автоматически выгружать физическое лицо через СОМ при записи не вмешиваясь в типовую конфигурацию. STEP by STEP.

1 стартмани

18.01.2010    11321    Boris-Leleko    7