Полезные приемы при работе с Конвертацией данных 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%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141458    798    297    

419

SALE! 10%

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

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

55778 50200 руб.

04.08.2015    166418    332    277    

373

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    23984    169    51    

127

SALE! 10%

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

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

35000 31500 руб.

23.07.2020    51175    228    69    

185

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    36568    94    66    

89

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171154    303    257    

378

SALE! 15%

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186854    589    509    

526

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    80629    312    250    

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

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