Правила конвертации между регистрами сведений подчиненным регистратору и независимым

19.11.20

Интеграция - Перенос данных 1C

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

1. Структура регистров

2. Основной отбор 

   Основной отбор - это свойство измерений регистра сведений. Если это свойство установлено в измерениях, то когда формируется таблица регистрации она имеет структуру только из полей основного отбора. Если РС независимый и периодический, то основной отбор можно поставить на любое измерение и на измерение Период это галочка "Основной отбор по периоду". Если РС подчиненный регистратору, то у него Регистратор и является полем основного отбора. Соответственно в таблице регистрации есть только документы регистраторы наборов данных. 

3. Проблемы возникшие при написании правил конвертации

   Изначально я не учел этого принципа регистрации, что был описан выше. Сделал все по пунктам: 

  1. Добавил РС (подчиненный регистратору) в план обмена, отключил авторегистрацию в нем.
  2. Добавил в подписку, которая регистрирует наборы данных.
  3. Написал обычные правила для двух идентичных РС. Регистратор в эти правила не включал вообще решил он не нужен в другой базе ж нету такого документа.
  4. Создал правила выгрузки.

   В итоге данные начали ходить не корректно. Как решение подумал сделать так как на рисунку ниже. В итоге данные перегрузились но если было в моем регистре 2 записи в одну секунду то они друг друга перетирали в базе приемнике. 

   

4. Решение проблемы

Пишем обычные ПКО тут нету никаких хитростей

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

Листинг кода:

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

// Когда в Регистраторе меняют дату, то в другую базу приходят
// записи РС как новые, а со старой датой подвисают.
// также переменные участвующие в отборах лучше один раз инициализировать и потом использовать
// речь идет про ПериодОтбор и НомерОтбор 
//ПериодОтбор = Объект.Отбор.Регистратор.Значение.Дата;

ДатаДокумента = Объект.Отбор.Регистратор.Значение.Дата;
Если ТипЗнч(Объект.Отбор.Регистратор) = Тип("ДокументСсылка.ЧекККМ") Тогда
	ПериодОтбор = НачалоДня(ДатаДокумента);	
Иначе
	ПериодОтбор = НачалоГода(ДатаДокумента);	
КонецЕсли;
НомерОтбор = Объект.Отбор.Регистратор.Значение.Номер;

СтрокаОтбора = Отбор.Добавить ();
СтрокаОтбора.Имя	 		= 	"Период";
СтрокаОтбора.Значение 		= 	ПериодОтбор;
СтрокаОтбора.Использование	= 	Истина;

СтрокаОтбора = Отбор.Добавить ();
СтрокаОтбора.Имя	 		= 	"Регистратор";
СтрокаОтбора.Значение 		= 	НомерОтбор;
СтрокаОтбора.Использование	= 	Истина;

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

// Объект - набор записей из базы источника
// формируем таблицу строк 
Для каждого Запись Из Объект Цикл	
	
	Строка = Строки.Добавить();
	Строка.Период				= 	ПериодОтбор;
	Строка.Регистратор			= 	НомерОтбор;
	Строка.Номенклатура			= 	Запись.Номенклатура;
	Строка.Характеристика		= 	Запись.Характеристика;
	Строка.Количество			= 	Запись.Количество;
	
КонецЦикла;

НаборЗаписей = Новый Структура("Отбор, Строки");
НаборЗаписей.Отбор 	= Отбор;
НаборЗаписей.Строки = Строки;

ВыгрузитьРегистр(НаборЗаписей,,,,"ПродажиЗаДень");

Отказ = Истина;

Спасибо за внимание! 

 

правила обмена конвертация данных основной отбор ВыгрузитьРегистр

См. также

SALE! 10%

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

27660 руб.

12.06.2017    145809    851    299    

440

Перенос данных 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.21.x).

35000 руб.

23.07.2020    56278    257    73    

212

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    170802    360    283    

391

SALE! 10%

Перенос данных 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 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    74338    199    156    

137

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    38389    108    70    

102

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

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

35000 руб.

15.12.2021    26173    187    56    

143

Перенос данных 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, почту.

16260 руб.

18.02.2016    189237    616    534    

537

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.244.x), ERP 2.5 (2.5.21.x), КА 2.5 (2.5.21.x).

35000 руб.

24.06.2020    64950    81    28    

94
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Serge_ASB 06.08.19 16:30 Сейчас в теме
А "ВыгрузитьРегистр" - это что за процедура?
2. Altez 258 27.08.19 13:12 Сейчас в теме
(1)ИЗ БСП. В Документообороте делал через

Обработки.КонвертацияОбъектовИнформационныхБаз.Создать().ВыгрузитьРегистр(НаборЗаписей) - вышла ошибка, вернулся к проверенному временем


Пока Выборка.Следующий () Цикл

          ВыгрузитьПоПравилу(Выборка,,,,"ДвоичныеДанныеФайлов");

КонецЦикла;
3. vk_ustilim 11.01.20 17:04 Сейчас в теме
Я понимаю так, что это поиск в базе приемника - тогда должно быть так:

СтрокаОтбора = Отбор.Добавить ();
СтрокаОтбора.Имя = "НомерДокумента";
СтрокаОтбора.Значение = Объект.Отбор.Регистратор.Значение.Номер;
СтрокаОтбора.Использование = Истина;

Или я чего-то не понимаю?
4. Pervuy 65 13.01.20 13:54 Сейчас в теме
(3)В ПКС прописано, что Регистратор = НомерДокумента. Потому все правильно написано
5. Cvetic 307 11.08.21 10:20 Сейчас в теме
А как сделать наоборот? Нужно настроить правила конвертации между регистрами сведений независимым и подчиненным регистратору.
При загрузке выходит "Ошибка записи! Не установлен отбор по регистратору"
Нужно каким-то образом создать новый документ-регистратор. Где его создавать и как?
6. Pervuy 65 17.08.21 16:02 Сейчас в теме
(5) По идее надо с записи РС создавать документ, а документ при проведении уже сделает записи в этот регистр. Но в документе явно больше данных надо заполнять чем в самом регистре будет.
Задача очень индивидуальная, не могу подсказать.
7. user1740139 08.02.22 02:44 Сейчас в теме
(6)Здравствуйте! Можно с Вами связаться??? Интересует интеграция POS-терминала с 1С. Увидел что вы синхронизировали 140 магазинов у нас 26 магазинов просьба дать обратную связь... Если что мы с Украины
8. sergant500 06.05.22 12:21 Сейчас в теме
Благодарю! Код помог в моей ситуации, когда нужно было перенести регистр "Цены номенклатуры" подчиненный регистратору в независимый регистр сведений "Цены номенклатуры"
9. Amara 02.06.22 11:03 Сейчас в теме
Спасибо что поделились! долго мучалась с аналогичной проблемой, вылетал обмен на регистре Кадровая история.
Но т.к. в приемнике не было измерения аналога Регистратору, вносить в конфу изменения не планировалось, модернизировала Ваш код, перенесла формирование Отбора и Набора записей в цикл.
может кому пригодится:
Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить ("Имя");
Отбор.Колонки.Добавить ("Значение");
Отбор.Колонки.Добавить ("Использование");

Строки = Новый ТаблицаЗначений;
Строки.Колонки.Добавить("Период");
Строки.Колонки.Добавить("Сотрудник");
Строки.Колонки.Добавить("ФизическоеЛицо");
Строки.Колонки.Добавить("Организация");
Строки.Колонки.Добавить("Подразделение");
Строки.Колонки.Добавить("ВидСобытия");
Строки.Колонки.Добавить("ДолжностьПоШтатномуРасписанию");
Строки.Колонки.Добавить("Должность");
Строки.Колонки.Добавить("ВидЗанятости");
Строки.Колонки.Добавить("ВидДоговора");
	
Для каждого Запись Из Объект Цикл
	Отбор.Очистить();
	Строки.Очистить();
	
	СтрокаОтбора = Отбор.Добавить();
	СтрокаОтбора.Имя	 		= 	"Период";
	СтрокаОтбора.Значение 		= 	Объект.Отбор.Регистратор.Значение.Дата;
	СтрокаОтбора.Использование	= 	Истина;

	СтрокаОтбора = Отбор.Добавить();
	СтрокаОтбора.Имя	 		= 	"Сотрудник";
	СтрокаОтбора.Значение 		= 	Запись.Сотрудник;
	СтрокаОтбора.Использование	= 	Истина;

	СтрокаОтбора = Отбор.Добавить();
	СтрокаОтбора.Имя	 		= 	"Организация";
	СтрокаОтбора.Значение 		= 	Запись.Организация;
	СтрокаОтбора.Использование	= 	Истина;

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

	ВыгрузитьРегистр(НаборЗаписей,,,,"КадроваяИсторияСотрудников");
КонецЦикла;

Отказ = Истина;
Показать
10. user1337687 10.09.22 15:04 Сейчас в теме
А что запишется, если регистратор пометили на удаление или отменили проведение?
Пустые номенклатура, хар-ка и кол-во?
11. Pervuy 65 12.09.22 17:06 Сейчас в теме
(10) Пойдет по обмену пустой набор записей и просто затрет запись.
12. user619560 13.09.22 18:58 Сейчас в теме
А у меня "Объект" это одна запись, такое может быть?
13. user1337687 17.09.22 15:37 Сейчас в теме
Использую обработку "Универсальный обмен данными в формате XML 2,1,8"
"ВыгрузитьРегистр" в ней нет
14. Gmix 417 29.02.24 10:45 Сейчас в теме
Спасибо всем за инфу.
Модифицировал до универсального кода.
Выгружает каждую запись регистратора в независимый регистр по правилу
Может кому пригодиться.
Код в обработчике "Перед выгрузкой"
// Необходимые поля отбора
ПоляОтбора=Новый Массив;
ПоляОтбора.Добавить("Период");  // У подчиненного регистратору всегда есть
МетаданныеРегистра=Метаданные.НайтиПоТипу(ТипЗнч(Объект));
Для каждого МетаИзмерение Из МетаданныеРегистра.Измерения Цикл
	ПоляОтбора.Добавить(МетаИзмерение.Имя);	
КонецЦикла;

Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить ("Имя");
Отбор.Колонки.Добавить ("Значение");
Отбор.Колонки.Добавить ("Использование");

Строки=Объект.ВыгрузитьКолонки();

Для каждого Запись Из Объект Цикл
	Отбор.Очистить();
	Строки.Очистить();
	
	Для каждого ИмяПоля Из ПоляОтбора Цикл
		СтрокаОтбора = Отбор.Добавить();
		СтрокаОтбора.Имя              =     ИмяПоля;
		СтрокаОтбора.Значение         =     Запись[ИмяПоля];
		СтрокаОтбора.Использование    =     Истина;
	КонецЦикла;
	
	ЗаполнитьЗначенияСвойств(Строки.Добавить(),Запись);
	
	НаборЗаписей = Новый Структура("Отбор, Строки");
	НаборЗаписей.Отбор     = Отбор;
	НаборЗаписей.Строки = Строки;
	
	ВыгрузитьРегистр(НаборЗаписей,,,,ИмяПКО);
КонецЦикла;
Отказ=Истина;
Показать
15. Pervuy 65 19.03.24 11:38 Сейчас в теме
(14)Этот вариант нормальный, если измерения в Источнике и Приемнике совпадают.

Если в источника измерения одни, а в приемнике другие, то Отборы продеться руками прописывать.
Оставьте свое сообщение