Полезные приемы при работе с Конвертацией данных 2.1. Логирование, интерактивное управление, дозаполнение и постпроведение документов

22.04.19

Интеграция - Обмен между базами 1C

Некоторые полезные приемы для КД 2.1, которые могут пригодиться как при доработке типовых правил, так и самописных.

Очень часто приходится делать/дорабатывать конвертации разного плана. В связи с этим появилось несколько шаблонов, решающих общие для всех обменов задачи, с которыми хотелось бы поделиться.

1. Интерактивное управление обменами.

Типовые обмены и большинство рукописных не позволяют интерактивно управлять правилами. Например, на время сдачи отчетности необходимо отключить в обмене несколько видов документов. Обычно это решают либо изменением правил регистрации либо изменением самих правил конвертации. Я на нескольких обменах сделал следующее:

- создал расширение, в котором заведен регистр сведений (непериодический, независимый) и перечисление (перечисление на самом деле не обязательно, можно например и строку использовать). Структура регистра на рис.

Измерение - ТипОбъекта (перечисление либо строка)

Ресурс  - Выгружать (булево)

После этого в режиме предприятия заполняем флаги обмена.

Далее в самой конвертации:

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

Теперь у нас есть таблица с описанием типа данных и флагом выгрузки.

Далее нам просто необходимо в обработчиках выгрузки добавить проверку.

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

Если флаг выгрузки не установлен, то делаем Отказ=Истина. При необходимости  здесь же можно удалять объект с узла.

Таким образом, если нам нужно быстро отключить выгрузку некоторых типов объектов, мы в регистре просто устанавливаем значение Выгружать в Ложь.

2. Произвольное логирование обменов

Для того, чтобы собирать логи выгрузки и загрузки нам потребуется два массива строк. На примере выгрузки создаем массив пМассивЛогов и добавляем его в параметры.

Обработчик ПередВыгрузкойДанных

пМассивЛогов = Новый Массив;
Параметры.Вставить("пМассивЛогов",	пМассивЛогов);

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

 

СообщениеЛога - формируем некое сообщение

Параметры.пМассивЛогов.Добавить(СообщениеЛога);  

      

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

    пМассивЛогов = Параметры.пМассивЛогов;
	Если пМассивЛогов.Количество()>0 Тогда
		ДатаВыгрузки = СтрЗаменить(СтрЗаменить(СтрЗаменить(Строка(ТекущаяДата()), ".","")," ", ""),":", "");
		Каталог = "\\test\BP1C\log\";
		Назначение = "Бп_Онли";
		пИмяФайлаЛога = ""+ДатаВыгрузки+"_"+"ВыгрузкаВ_"+Назначение +".txt";
		ПИмяФайлаЛогаПолное = Каталог+ пИмяФайлаЛога;
		ТекстовыйФайл = Новый ТекстовыйДокумент;			
		Для Каждого строкаЛога Из пМассивЛогов Цикл  
			ТекстовыйФайл.ДобавитьСтроку(строкаЛога);
		КонецЦикла;
		ТекстовыйФайл.Записать(
		ПИмяФайлаЛогаПолное, // путь для сохранения
		КодировкаТекста.UTF8, // кодировка
		Символы.ВК + Символы.ПС // разделитель строк
		);
	КонецЕсли;

В результате после выгрузки в указанной папке формируется файл лога. Для загрузки процедура такая же в принципе.

3. Проверка даты запрета

В обработчике Перед загрузкой данных получаем дату запрета для нужного списка пользователей (групп). В данном примере только для текущего пользователя, так как регламентное задание настроено с указанием конкретного пользователя, заведенного для обмена. Это также удобно, когда нужно найти что-то, связанное с обменом, в журнале регистрации.

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

//-----------------------------------------------------------------------------------------------

В обработчике ПослеЗагрузки делаем проверку. Ниже пример обработчика для документа РеализацияТоваровУслуг (БП 3.0).

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

Если документ находится в закрытом периоде. происходит отказ от записи, в противном случае документ записывается/проводится.

4. Постобработка/проведение документов

Часто возникает необходимость в том, чтобы документы после загрузки провелись в определенной последовательности, либо перезаполнились с учетом данных базы (например проверка остатков и перезаполнение табличной части товаров в соответствие с ними). Для этих целей можно использовать следующий механизм.

В обработчике ПередЗагрузкойДанных заводим параметр типа ТаблицаЗначений

ПроводимыеДокументы = Новый ТаблицаЗначений;
ПроводимыеДокументы.Колонки.Добавить("Дата");
ПроводимыеДокументы.Колонки.Добавить("Документ");
ПроводимыеДокументы.Колонки.Добавить("Приоритет");
Параметры.Вставить("ПроводимыеДокументы", ПроводимыеДокументы);

Далее в обработчиках объектов ПослеЗагрузки добавляем

Объект.Записать();
СтрокаТЗ = Параметры.ПроводимыеДокументы.Добавить();
СтрокаТЗ.Дата		= Объект.Дата;
СтрокаТЗ.Документ	= Объект.Ссылка; 
СтрокаТЗ. Приоритет	= 0;

В обработчике ПослеЗагрузкиДанных

Параметры.ПроводимыеДокументы.Сортировать("Дата"); //либо по Приоритету
	Для Каждого СтрокаТЗ ИЗ Параметры.ПроводимыеДокументы Цикл
			пСсылкаТЧ = СтрокаТЗ.Документ;
			Объект = пСсылкаТЧ.ПолучитьОбъект();
			//Далее постобработка документа. дозаполнение, проверка.
	КонецЦикла;

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

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

конвертация данных КД 2.1 обмены доработки

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159712    364    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134959    721    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68428    179    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34174    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46312    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9217    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20259    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231431    124    327    

296
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. wowik 885 23.04.19 10:25 Сейчас в теме
+1. "При необходимости могу прикрепить пример рабочих правил, где данные методики использовались." - да, прикрепляйте, всегда лучше пощелкать доработку в КД.
NoRazum; YPermitin; +2 Ответить
2. пользователь 23.04.19 12:18
(0) Выкладывайте в комментарий или GitHub, очень интересно посмотреть примеры использования.
3. maks_20 164 23.04.19 12:39 Сейчас в теме
Вечером выкину в комментарии пример с рабочего обмена между УТ и БП
YPermitin; +1 Ответить
4. maks_20 164 23.04.19 15:53 Сейчас в теме
Файл с одной из версий правил. Для просмотра размещения обработчиков подойдет, в остальном сильно доработан по сравнению с типовым обменом УТ11 и БП 3.
Прикрепленные файлы:
Правила_в49_дляИнф.xml
5. acsent 1199 23.04.19 17:25 Сейчас в теме
документы к проведению - только в регистр.
иначе если что-то не проведется (хотя бы из-за блокировок)
всь обмен накроется. в лучшем случае утеряем инфу о том что документ нужно все-таки провести
6. maks_20 164 24.04.19 07:49 Сейчас в теме
(5) Можно конечно и через регистр, записывать в него объекты и ошибки при проведении. Но и в данном случае потери никакой не будет, например если при переборе документов проведение делать в попытке, а в исключении писать ошибку в лог либо дополнительно в журнал. Данный метод не только для проведения подходит, но и для какой-то обработки после загрузки.
7. Йожкин Кот 1006 24.04.19 08:54 Сейчас в теме
В п.4 чтобы 2 раза не записывать объект, можно сделать так:
СтрокаТЗ.Документ = ?(Объект.ЭтоНовый(), Объект.ПолучитьСсылкуНового(), Объект.Ссылка);

И я обычно использую глобальный обработчик "После загрузки объекта".
Также, неплохо бы распровести док-т после загрузки, а только потом уже проводить.
8. Йожкин Кот 1006 24.04.19 08:57 Сейчас в теме
Для логирования удобно использовать ЖР:
ЗаписьЖурналаРегистрации(....)
9. maks_20 164 24.04.19 09:08 Сейчас в теме
(8) Ну тут кому как... Например если в базе несколько обменов настроено и объектов грузится довольно много, каждый раз искать по журналу займет больше времени, чем пройтись по файлу лога. А с небольшими объемами да, можно не заморачиваться и просто в нужных местах запись в ЖР делать. Вариантов решения на самом деле много, я предложил только один из многих)
10. dvsidelnikov 64 03.11.22 02:03 Сейчас в теме
//ДатаВыгрузки = СтрЗаменить(СтрЗаменить(СтрЗаменить(Строка(ТекущаяДата()), ".","")," ", ""),":", "");
ДатаВыгрузки = Формат(ТекущаяДата(),"ДФ=ddMMyyyyhhmmss");
// ;)
11. Ramza_VDV 28.03.23 23:23 Сейчас в теме
Спасибо, очень полезные фишки, узнал много нового и применил эти знания в настройке двустороннего обмена УТ 10.3 - БП 3.0.Такой вопрос, maks_20, не поделитесь шаблоном правил обратного обмена из БП? Извините, нет местной валюты для ЛС.
12. maks_20 164 29.03.23 09:34 Сейчас в теме
(11) Добрый день. Спасибо за отзыв) в данной задаче обмен был односторонним, поэтому обратных правил не было. Я поищу у себя еще, может что-то подходящее найду, тогда скину.
Ramza_VDV; +1 Ответить
Оставьте свое сообщение