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

19.11.20

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

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

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

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

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

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

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

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

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

   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

См. также

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    168222    343    279    

379

Перенос данных 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    143182    818    297    

426

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.20.x), также подходят для релиза 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    53260    234    73    

191

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    24775    174    51    

131

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    37192    99    66    

95

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    171955    307    258    

384

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

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

12000 руб.

25.09.2016    81506    323    253    

276

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

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

120000 руб.

19.08.2020    25634    25    1    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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)Этот вариант нормальный, если измерения в Источнике и Приемнике совпадают.

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