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

19.11.20

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

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

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

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

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

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

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

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

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

   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Вступайте в нашу телеграмм-группу Инфостарт

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    161398    972    321    

482

SALE! 10%

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

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    34554    258    64    

195

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

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

85400 руб.

05.10.2022    13664    15    8    

16

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

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

16531 руб.

18.02.2016    204439    675    543    

563

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

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

122000 руб.

19.08.2020    29815    27    3    

29

Перенос данных 1C Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Не хочется настраивать штатный механизм переноса между УТ 11 и Бухгалтерией 3.0 после каждого обновления? Предлагаем удобное решение для одностороннего переноса данных из Управления торговлей 11 в Бухгалтерию 3.0.

24400 руб.

22.04.2015    100110    221    187    

201

Рабочее место Производство готовой продукции (работ, услуг) Перенос данных 1C Пользователь 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Документооборот 1С:Комплексная автоматизация 2.х 1С:КА 1С:ДО Платные (руб)

Продукт "Интеграция с 1С:Документооборот" позволяет использовать функции программы "1С:Документооборот 8" напрямую из учетной системы (1С:УПП; 1С:КА, 1С:УТ 10.3, 1С:БГУ 1.0, 1С:ЗБУ 1.0, 1С:УПП для Казахстана и отраслевых решений, разработанных на их основе) на платформе "1С:Предприятие 8": выполнять и ставить задачи, просматривать документы, скан-копии и прочие файлы, штрих-кодировать документы отправлять письма, вести учет рабочего времени - не входя в "1С:Документооборот 8", работая в одной программе, что значительно сокращает время и делает работу более комфортной и эффективной. Продукт прошел сертификацию 1С-Совместимо

135530 руб.

11.06.2015    62841    38    20    

49
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 66 13.01.20 13:54 Сейчас в теме
(3)В ПКС прописано, что Регистратор = НомерДокумента. Потому все правильно написано
5. Cvetic 308 11.08.21 10:20 Сейчас в теме
А как сделать наоборот? Нужно настроить правила конвертации между регистрами сведений независимым и подчиненным регистратору.
При загрузке выходит "Ошибка записи! Не установлен отбор по регистратору"
Нужно каким-то образом создать новый документ-регистратор. Где его создавать и как?
6. Pervuy 66 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 66 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 419 29.02.24 10:45 Сейчас в теме
Спасибо всем за инфу.
Модифицировал до универсального кода.
Выгружает каждую запись регистратора в независимый регистр по правилу
Может кому пригодиться.
Код в обработчике "Перед выгрузкой"
// Необходимые поля отбора
ПоляОтбора=Новый Массив;
ПоляОтбора.Добавить("Период");  // У подчиненного регистратору всегда есть
МетаданныеРегистра=Метаданные.НайтиПоТипу(ТипЗнч(Объект));
Для каждого МетаИзмерение Из МетаданныеРегистра.Измерения Цикл
	ПоляОтбора.Добавить(МетаИзмерение.Имя);	
КонецЦикла;

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

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

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

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