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

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

Обработки - Обработка документов

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

 

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

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

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


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

  

 

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

 

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

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

 

 

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

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

76

См. также

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

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

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

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



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

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


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

Также с приоритетом - по-моему очевидно, что приоритетом регулируются одинаковые правила...
3. 1C82 42 30.07.12 09:55 Сейчас в теме
Спасибо за материал ! Сделал выгрузку реализации товара(УТ) в операциюБух , причем документ в документ а табличная часть товар в движения без запроса - выгрузив табличную часть и потом ее преобразовав к требуемому виду.
4. Totoro 546 16.08.12 14:02 Сейчас в теме
(0) Можно сделать конвертацию видов субконто типовыми средствами через конвертацию значений. При этом можно задавать вручную конверцию не только через имена предопределенных элементов, но и их кодов (в случае, если элементы добавлены в режиме предприятия). Типовой алгоритм в этом случае будет искать элемент по коду из конвертации значений.
alur; quebracho; evrakylon; +3 Ответить
5. evrakylon 08.11.12 22:54 Сейчас в теме
(4) Totoro, этот ответ очень помог. Пытался конвертировать значения видов субконто по наименованию. Не удивило, что в книге "Конвертация данных. Обмен данными между прикладными решениями" в разделе "Конвертация плана видов характеристик" об этом не сказано. Спасибо!
6. 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. Весь запрос с дальнейшей передачей его в таблицу "ВходящиеДанные" у Вас описан в ПКО "ОперацияБух", строка "ВыгрузитьПоПравилу(, ,ВходящиеДанные , , "ОперацияБух");" - является лишней. КАК я понимаю, она важна для примера с алгортимом выгрузки в ПВД.

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

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


сделано

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

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

Настраиваю правила выгрузки. Но выгружаются только шапки документов, самих проводок нет. В чем проблема? Что-то с проведением документа "Операция вручную"? Помогите - кто разбирается?
19. user_2010 419 26.01.15 11:22 Сейчас в теме
Настроила выгрузку конфигурации в xml со всеми возможными данными и теперь документы "Операции вручную" выгружаются с проводками! НО!!! загружаются все равно только шапки документа - проводок в них нет!
В правилах конвертации есть настройка конвертации РегистраБухгалтерии.
Подскажите - что нужно посмотреть - почему не загружаются проводки?
23. RBEvgenyPN 4 24.06.15 13:15 Сейчас в теме
(19) user_2010, Скорее всего проблема в том что движения не записываются. Для этого в ПКО(Правила Конвертации Объектов) "Операции вручную" в событие "После загрузки" нужно прописать Объект.Движения.Хозрасчетный.Записывать = Истина; То есть указать что движения будут записываться.

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

Я передавал не структура а сам Вид Субконто. И уже начал "волосы рвать" )). Спасибо. Очень помогло.
24. Vigor06 30.07.15 15:22 Сейчас в теме
Друзья,не могу перенести документы ОперацияБУх из базы в базу, что то упорно не так получается...чтобы тут не захламлять ветку,может кто в личные сообщения напишет и поможет?буду ОЧЕНЬ благодарен)
25. Vigor06 30.07.15 19:36 Сейчас в теме
А вообще,если несколько субконто? Скажем,у меня на счете 57.1 2 субконто есть.Как тут данные передавать?
27. RBEvgenyPN 4 04.08.15 13:31 Сейчас в теме
(25) Vigor06, вот тут http://infostart.ru/public/373870/ я писал правила, где переносится и операция бух. А так не переносится документы из за того, что тут не совсем документ. Тут как бы регистр переносится должен. Регистр бухгалтерии. А документ является как бы ссылкой на проводку. Можешь посмотреть. В личном сообщении не могу написать. Что то меня забанили как то, не выяснил еще почему.
26. Kovzun 31 31.07.15 06:53 Сейчас в теме
Здесь есть пример конвертации документа "ОперацияБух" http://infostart.ru/public/329070/
28. unknownDaemon 42 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 Слизано с типовых правил
docerman; +1 Ответить
29. pyrkin_vanya 353 20.09.15 17:07 Сейчас в теме
Тоже самое для 7.7 есть описание?
30. budrock 01.06.17 14:23 Сейчас в теме
Вроде делаю все как в примере, но получаю ошибку:
Ошибка в глобальном обработчике события ПередКонвертациейОбъекта (конвертация)
ПКО = ВидыСубконтоХозрасчетные (:)
Объект = Структура (Структура)
Обработчик = ПередКонвертациейОбъекта (глобальный)
ОписаниеОшибки = Метод объекта не обнаружен (Метаданные)

Никто не сталкивался?
31. Dmitri_1C 111 02.06.17 01:06 Сейчас в теме
Есть код в обработчике "ПередКонвертациейОбъекта"?
И нужно смотреть что возвращает ПВД - "Перед выгрузкой объекта"
32. -САВ- 06.02.18 00:30 Сейчас в теме
На сколько я понял суть сие темы, то в полях где хранятся значения Субконто, вообще не стоит ничего указывать и измачиваться. Алгоритм обработки сам найдёт ПКО, соответствующее типу значения поля. Самое важное, что в таком случае стоит учитывать:
1) Вид у приёмника Свойства объекта ПКС (в моём случае "Субконто1"), должно быть "Реквизит".
2) Чем выше приоритет у ПКО, тем то ПКО и будет браться по-умолчанию в разрезе типа, если конечно насильно для ПКС не указать требующееся ПКО.

P.S.: а вот для правил хорошего тона, в событии "Перед выгрузкой" у ПКС можно и проверочку допилить на наличие ПКО, соответсвующего типу значения свойства, что-то типа:
ЗначениеСубконто = ОбъектКоллекции.Субконто1;

Если ЗначениеЗаполнено(ЗначениеСубконто) Тогда
	Если Менеджеры[ТипЗнч(ЗначениеСубконто)].ПКО = Неопределено Тогда
		ЗП = ПолучитьСтруктуруЗаписиПротокола(45);
		ЗП.Объект = ЗначениеСубконто;
		ЗП.ТипОбъекта = ТипЗнч(ЗначениеСубконто);		
		ЗаписатьВПротоколВыполнения(45, ЗП, Истина); // не найдено ПКО
		Отказ = Истина;
	КонецЕсли;
Иначе
	Отказ = Истина;
КонецЕсли;
Показать
Прикрепленные файлы:
33. parom1 10.02.18 15:04 Сейчас в теме
Здравствуйте!
Пытаюсь повторить пример, но вижу что у меня отсутствует в приемнике реквизит «Хозрасчетный» документа «ОперацияБух».
В качестве приемника выступает типовая БП 2.0 2.0.66.47. В свойствах Документа «ОперацияБух» в конфигураторе также нет такого реквизита с типом
"набор движений регистра" Что я делаю не так?
34. Kovzun 31 11.02.18 15:52 Сейчас в теме
(33) Здравствуйте. Вероятно Вам нужно выгрузить и загрузить сверху структуру метаданных приемника с движениями документов, достаточно будет с "движениями документов без проведения".
RBEvgenyPN; parom1; +2 Ответить
35. _Vanda_ 23.05.18 17:30 Сейчас в теме
У меня ситуация примерно такая же, только вот помимо того, что вида субконто нет в источнике, еще нет и значения этого субконто. Подскажите пожалуйста, как его можно передать? У меня есть его код (это значение из справочника СДДС), как можно передать?
В ПКО ОперацияБух После выгрузки пробовала писать:
Объект.Движения.Хозрасчетный.Записывать = Истина;

ДвиженияХозрасчет = Объект.Движения.Хозрасчетный;
ТаблДвиж = ДвиженияХозрасчет.Выгрузить();

ДвиженияХозрасчет.Прочитать();
ДвиженияХозрасчет.Очистить();

Для Каждого Стр ИЗ ТаблДвиж Цикл
	Если Стр.СчетДт.Код = "50.02" И Стр.СчетКт.Код = "90.01.3" Тогда
	
		ВыручкаРозничная = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000014");
		Стр.СубконтоДт1 = ВыручкаРозничная; 

	КонецЕсли;
	
КонецЦикла;
ДвиженияХозрасчет.Загрузить(ТаблДвиж);
Показать

значение меняется. А нельзя ли это сделать как то по другому?
36. Sayrus 19.03.19 11:07 Сейчас в теме
Может кому пригодиться как вариант использования разных ПКО под свои нужды.
В Субконто с типом "Структура", на стадии определения данных добавить свойство "ИмяПКО" в котором и будет указано по какому правилу выгружать.
Прикрепленные файлы:
Оставьте свое сообщение