gifts2017

Конвертация данных. Создание Субконто в документе ОперацияБух или «А план видов характеристик чудесным образом, но обрабатывается».

Опубликовал Дмитрий Т (Dmitri_1C) в раздел Обработки - Обработка документов

Необходимо при помощи конфигурации «Конвертация данных» в базе-источнике сформировать данные (в виде таблицы значений) и перегрузить в документ «ОперацияБух» базы-приемника так, чтобы строки таблицы значений стали строками документа «ОперацияБух» (то есть, формирование ручных проводок по таблице значений).
Платформа источника и приемника 8.х. В конфигурации источника план счетов есть, но нет субконто (нет «ПланВидовХарактеристикСсылка.ВидыСубконто…»).

Здесь акцентирую внимание на создание субконто, так как это вызывает основную сложность.

1. Создание правила выгрузки данных.

Данное правило формирует таблицу значений для проводок.

Код правила выгрузки:

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); // ДатаНачала и ДатаОкончания предопределенные параметры конфигурации «Конвертация данных»
Запрос.УстановитьПараметр("…….",……………….); // дополнительные параметры
Запрос.Текст = "ВЫБРАТЬ
………………………………………………………..
| …………………..КАК Контрагент,
| ………………… КАК Договор,
| СУММА(…………………..Сумма) КАК Сумма,
| …………………. КАК СчетДт,
| …………………..КАК СчетКт,
| …………………. КАК КоличествоДт,
| ………………… КАК КоличествоКт
|ИЗ
| ……………… КАК ………………………………
|ГДЕ
| ……………………………………...Период МЕЖДУ &ДатаНачала И &ДатаОкончания

РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой); // таблица значений из запроса
Если РезультатЗапроса.Количество() > 0 Тогда
    // шапка документа
    ВходящиеДанные = Новый Структура("Дата, Хозрасчетный, Комментарий, Содержание ");
ВходящиеДанные.Дата = КонецДня(ДатаОкончания);
ВходящиеДанные.Содержание = "Взаиморасчеты компании.";
ВходящиеДанные.Комментарий = "Загружено из Альфа-Авто.";
ВходящиеДанные.СпособЗаполнения = "Вручную";
// табличная часть документа
РезультатЗапроса.Колонки.Добавить("СубконтоДт");
РезультатЗапроса.Колонки.Добавить("СубконтоКт");
Для Каждого ТекущаяСтрокаРезультатЗапроса Из РезультатЗапроса Цикл
СубконтоДт = Новый Соответствие;
СубконтоДт.Вставить(Новый Структура("Код", "00005"), ТекущаяСтрокаРезультатЗапроса.Контрагент);
СубконтоДт.Вставить(Новый Структура("Код", "00016"), ТекущаяСтрокаРезультатЗапроса. Договор);
ТекущаяСтрокаРезультатЗапроса.СубконтоДт = СубконтоДт;
        СубконтоКт = Новый Соответствие;
        ТекущаяСтрокаРезультатЗапроса.СубконтоКт = СубконтоКт;
    КонецЦикла;
    ВходящиеДанные.Хозрасчетный = РезультатЗапроса;
    ВыгрузитьПоПравилу(, ,ВходящиеДанные , , "ОперацияБух");
КонецЕсли;

Самая главная строка, необходимая для Субконто:

СубконтоДт.Вставить(Новый Структура("Код", "00005"), ТекущаяСтрокаРезультатЗапроса.Контрагент)

Новый Структура("Код", "00005") – добавляется код элемента плана видов характеристик, как он определен в базе-приемнике (в данном случае – это элемент "Контрагенты").

 

2. Создание правил конвертации объектов

- Для документа «ОперацияБух»

 приемник - реквизит «Хозрасчетный» документа «ОперацияБух»

 

 

Здесь самая главная строка:

ИмяПКОВидСубконто = "ВидыСубконтоХозрасчетные";

Аналогично заполяется для приемника и СубконтоКт


- Для плана видов характеристик «ВидыСубконтоХозрасчетные»

  

 

- Для Субконто «Контрагенты»

 

3. Последний штрих

То, что я не встретил ни в одном источнике: если создано несколько правил конвертации объектов с одинаковым типом у источника (например для контрагентов создано два правила по конвертации данных), то для того чтобы система попадала в нужное правило, приоритет у этого правила должен быть максимальными среди них.

 

 

Решил разместить публикацию, так как сам потратил много времени, пока нашёл нужное решение. В той литературе, что есть, этот момент описан скудно, пришлось пересмотреть множество правил обмена.

Надеюсь, кому-то поможет данная статья.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Анна С (malets) 20.03.12 10:39
Спасибо большое, очень пригодилась эта заметка!
2. Miffka (mikhailv) 10.05.12 16:02
Спасибо, статья подтолкнула в нужном направлении!

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

СубконтоДт = Новый Соответствие;



Касаемо статьи.

Не до конца понял, зачем эта строка в обработчике:
ИмяПКОВидСубконто = "ВидыСубконтоХозрасчетные";


Ведь можно явно указать в графе "Правило конвертации" объекта. Обычно вышеуказанный приём применяют, когда правило нужно подобрать динамически по входящим данным.

Также с приоритетом - по-моему очевидно, что приоритетом регулируются одинаковые правила...
3. Сергей (1C82) 30.07.12 09:55
Спасибо за материал ! Сделал выгрузку реализации товара(УТ) в операциюБух , причем документ в документ а табличная часть товар в движения без запроса - выгрузив табличную часть и потом ее преобразовав к требуемому виду.
4. Геннадий Пиганов (Totoro) 16.08.12 14:02
(0) Можно сделать конвертацию видов субконто типовыми средствами через конвертацию значений. При этом можно задавать вручную конверцию не только через имена предопределенных элементов, но и их кодов (в случае, если элементы добавлены в режиме предприятия). Типовой алгоритм в этом случае будет искать элемент по коду из конвертации значений.
quebracho; evrakylon; +2 Ответить 1
5. Александр Притуленко (evrakylon) 08.11.12 22:54
(4) Totoro, этот ответ очень помог. Пытался конвертировать значения видов субконто по наименованию. Не удивило, что в книге "Конвертация данных. Обмен данными между прикладными решениями" в разделе "Конвертация плана видов характеристик" об этом не сказано. Спасибо!
6. Pavlo Silin (milk911) 01.02.13 16:57
Автору респект!!! Все работает реально! Сам бы ни за что до такого не догадался. Вот только в ПКС "ОперацияБух" в т.ч. Хозрасчетный я не ставил галки "Получить из входящих данных".
Спасибо еще раз!!!!
7. Анастасия Филиппова (Анастасияяя) 27.06.13 13:09
Спасибо большое, ваша публикация реально помогла. Все изложено очень доступно!!!
8. Роман Дубинин (Krimskiy_xan) 22.10.13 09:19
Спасибо! Статья в целом помогла найти окончательное правильное решения для свой схожей задачи.

Добавлю 5 копеек, о которых тут не упоминается, но для меня были очень важны:

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

2. Таким образом, из п.1 следует, что создавать отдельное правило с другим приоритетом не нужно!

3. Весь запрос с дальнейшей передачей его в таблицу "ВходящиеДанные" у Вас описан в ПКО "ОперацияБух", строка "ВыгрузитьПоПравилу(, ,ВходящиеДанные , , "ОперацияБух");" - является лишней. КАК я понимаю, она важна для примера с алгортимом выгрузки в ПВД.

Но в целом, еще раз, спасибо!
Прикрепленные файлы:
9. Сергей Ожерельев (Поручик) 22.11.13 12:37
(0) Спасибо. Вот сейчас пригодилось. Со вчерашнего дня голову ломаю, как субконто перенести, хоть и не новичок в КД2.
10. Сергей Ожерельев (Поручик) 22.11.13 13:43
Что касается переноса значения субконто, то у меня вместо

СубконтоДт = Новый Соответствие;
СубконтоДт.Вставить(Новый Структура("Код", "00005"), ТекущаяСтрокаРезультатЗапроса.Контрагент);


сделано

СубконтоДт = Новый Соответствие;
СубконтоДт.Вставить(Новый Структура("Наименование", "Контрагенты"), СтрокаТЧ.Контрагент);

То есть в приёмник передаётся наименование предопределённого вида субконто (или плана видов характеристик), как оно задано в конфигураторе. Это более корректно, чем передавать код.
11. suhoi (suhoi) 28.03.14 03:48
Помогите советом.
Конвертирую документ в ОперациюБух
в файле выгрузки НаборЗаписей Имя = Хозрасчетный - есть, узел Запись - есть.
Загружаю в БП 3.0 - проводки НЕТ(
Подскажите, куда рыть?
12. Vlad Matveev (psamt1k) 15.08.14 12:23
(11) suhoi, Присоединяюсь!
Настроил все как указано в статье. В файле выгрузки есть все данные о проводках, но при загрузке в БП 3.0 документ "операция бух" пустой (не считая шапки документа)
13. Сергей Ожерельев (Поручик) 15.08.14 15:16
14. Vlad Matveev (psamt1k) 17.08.14 00:41
(13) Поручик, Спасибо!
Как оказалось, кроме этого маленького дополнения, была другая проблема: субконто у планов счетов отличались, из-за чего не записывались движения в регистр по этим счетам.
15. Сергей Ковзун (Kovzun) 03.12.14 19:50
Еще есть нюанс, не заметил описан ли он. После загрузки нужно добавить "Объект.Движения.Хозрасчетный.Записывать = Истина;". Иначе движения могут не записаться.
16. Дмитрий (deemaa) 07.12.14 11:21
Коллеги, а есть ли у кого пример для клюшек (перенос таблицы значений 7.7 в операцию 8.2) ? Всю сеть обшарил, ничего нет(
17. Римма Герасименко (WhiteOwl) 16.12.14 18:25
Спасибо, полезная статья! В типовых правилах немного по-другому, но вариант оттуда мне не подошёл, что-то видимо упустила.
18. Надежда (user_2010) 22.01.15 16:49
Нужно перегрузить данные документа "Операции вручную" из Бухгалтерии 2.0 в Бухгалтерию 3.0.

Настраиваю правила выгрузки. Но выгружаются только шапки документов, самих проводок нет. В чем проблема? Что-то с проведением документа "Операция вручную"? Помогите - кто разбирается?
19. Надежда (user_2010) 26.01.15 11:22
Настроила выгрузку конфигурации в xml со всеми возможными данными и теперь документы "Операции вручную" выгружаются с проводками! НО!!! загружаются все равно только шапки документа - проводок в них нет!
В правилах конвертации есть настройка конвертации РегистраБухгалтерии.
Подскажите - что нужно посмотреть - почему не загружаются проводки?
20. Надежда (user_2010) 06.02.15 10:56
Поняла следующее: проблема в заполнении поля Регистратор - мне нужно при загрузке его заполнить ссылкой на текущий загружаемый документ. Как это сделать?
В ПКС есть обработчики: "перед выгрузкой", "при выгрузке", "после выгрузки". А мне-то нужно "при загрузке"?
21. Jacob Jones (birk) 19.02.15 12:10
Спасибо большое, если бы не ты, убил бы кучу времени.
22. Евгений Пестов (RBEvgenyPN) 24.06.15 13:06
Спасибо. Очень помогла строка
"СубконтоДт.Вставить(Новый Структура("Код", "00005"),
ТекущаяСтрокаРезультатЗапроса.Контрагент)"

Я передавал не структура а сам Вид Субконто. И уже начал "волосы рвать" )). Спасибо. Очень помогло.
23. Евгений Пестов (RBEvgenyPN) 24.06.15 13:15
(19) user_2010, Скорее всего проблема в том что движения не записываются. Для этого в ПКО(Правила Конвертации Объектов) "Операции вручную" в событие "После загрузки" нужно прописать Объект.Движения.Хозрасчетный.Записывать = Истина; То есть указать что движения будут записываться.

Да.. Что то запоздал с ответом :)
24. Кирилл Самсонов (Vigor06) 30.07.15 15:22
Друзья,не могу перенести документы ОперацияБУх из базы в базу, что то упорно не так получается...чтобы тут не захламлять ветку,может кто в личные сообщения напишет и поможет?буду ОЧЕНЬ благодарен)
25. Кирилл Самсонов (Vigor06) 30.07.15 19:36
А вообще,если несколько субконто? Скажем,у меня на счете 57.1 2 субконто есть.Как тут данные передавать?
26. Сергей Ковзун (Kovzun) 31.07.15 06:53
Здесь есть пример конвертации документа "ОперацияБух" http://infostart.ru/public/329070/
27. Евгений Пестов (RBEvgenyPN) 04.08.15 13:31
(25) Vigor06, вот тут http://infostart.ru/public/373870/ я писал правила, где переносится и операция бух. А так не переносится документы из за того, что тут не совсем документ. Тут как бы регистр переносится должен. Регистр бухгалтерии. А документ является как бы ссылкой на проводку. Можешь посмотреть. В личном сообщении не могу написать. Что то меня забанили как то, не выяснил еще почему.
28. Алексей Штепа (unknownDaemon) 08.09.15 18:41
Ну как бы эта…

ПВД_ОперацияБух_ПередОбработкойПравила
ТекстЗапроса = "
|ВЫБРАТЬ *
|ИЗ
|	Документ.ОперацияБух КАК ОперацияБух
|ГДЕ
|	ОперацияБух.Организация = &Организация
|	И ОперацияБух.Дата <= &ДатаЗагрузки
|";
//
Запрос			 = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Организация", Параметры.Организация);
Запрос.УстановитьПараметр("ДатаЗагрузки", Параметры.ДатаЗагрузки);
//
Выборка	 = Запрос.Выполнить().Выгрузить();
Выборка.Колонки.Добавить("Хозрасчетный");
//
Для каждого СтрокаВыборки Из ВыборкаДанных Цикл
	//
	ОбъектВыборки 			 = СтрокаВыборки.Ссылка.ПолучитьОбъект();
	ДанныеБухОперации		 = Новый Структура;
	//
	ДвиженияХозрасчетный	 = ОбъектВыборки.Движения.Хозрасчетный;
	ДвиженияХозрасчетный.Прочитать();
	//
	ДанныеБухОперации.Вставить("Хозрасчетный", ДвиженияХозрасчетный.Выгрузить());
	//
	Если ДанныеБухОперации.Хозрасчетный.Количество() > 0 Тогда
		ВыгрузитьПоПравилу(ОбъектВыборки,, ДанныеБухОперации,, "ОперацияБух");
	КонецЕсли;
	//
КонецЦикла;
//
...Показать Скрыть


ПКС_ОперацияБух_Хозрасчетный_СубконтоДт_ПередВыгрузкойСвойст­ва
//
ВидыСубконто		 = ОбъектКоллекции.СчетДт.ВидыСубконто.Выгрузить();
ИмяПКОВидСубконто	 = "ВидыСубконтоХозрасчетные";
//
Значение = Новый ТаблицаЗначений;
Значение.Колонки.Добавить("Ключ");
Значение.Колонки.Добавить("Значение");
//
СубконтоДт1 = Значение.Добавить();
СубконтоДт2 = Значение.Добавить();
СубконтоДт3 = Значение.Добавить();
//
Если ВидыСубконто.Количество() > 0 Тогда
	СубконтоДт1.Ключ = ВидыСубконто[0].ВидСубконто;
	СубконтоДт1.Значение = ОбъектКоллекции.СубконтоДт1;	
КонецЕсли;
//
Если ВидыСубконто.Количество() > 1 Тогда
	СубконтоДт2.Ключ = ВидыСубконто[1].ВидСубконто;
	СубконтоДт2.Значение = ОбъектКоллекции.СубконтоДт2;
КонецЕсли;
//
Если ВидыСубконто.Количество() > 2 Тогда
	СубконтоДт3.Ключ = ВидыСубконто[2].ВидСубконто;
	СубконтоДт3.Значение = ОбъектКоллекции.СубконтоДт3;	
КонецЕсли;
//
...Показать Скрыть


ПКС_ОперацияБух_Хозрасчетный_СубконтоДт_ПриВыгрузкеСвойства
//
Выполнить(Алгоритмы.ПриВыгрузкеСубконто);
//


В алгоритме определяешь ИмяПКО в зависимости от ВидСубконто…

PS Слизано с типовых правил
29. Константин Рыбаков (pyrkin_vanya) 20.09.15 17:07
Тоже самое для 7.7 есть описание?