Перенос данных регистра сведений из обной базы в регистр сведений другой ИБ через WEB
Здравствуйте форумчане! Помогите советом. Есть две абсолютно разные базы ЗУП3.1 типовая и самописная. Цель односторонняя синхронизация списка сотрудников, а также состояний (работа, уволен и т.д.). Справочник Сотрудники у меня получилось синхронизировать. Но с состояниями проблема. не могу понять как отслеживать уже добавленные строки ранее и добавлять только отсутствующие. У меня мысли такие нужно перевести регистры в таблицы значений и сравнить их, но как сравнить не понимаю. помогите . передаю вот такие параметры через xdto
Индекс Значение элемента Тип элемента GUID VidSostoyaniya DatNachalo DatOkonchanie GUIDRegistrator NStr
0 ОбъектXDTO ОбъектXDTO "dc4a0b2d-f597-11e5-b5e6-406186c53bda" "Болезнь" 08.07.2017 0:00:00 12.07.2017 0:00:00 "fb4ae9e2-6b98-11e7-80ad-000c295f004f" 1
1 ОбъектXDTO ОбъектXDTO "28b99175-f4c8-11e5-9254-406186c53bda" "Болезнь" 30.06.2017 0:00:00 12.07.2017 0:00:00 "46970e44-6b99-11e7-80ad-000c295f004f" 1
2 ОбъектXDTO ОбъектXDTO "8d660648-f6f7-11e5-b385-406186c53bda" "Болезнь" 01.07.2017 0:00:00 12.07.2017 0:00:00 "71248cb3-6b99-11e7-80ad-000c295f004f" 1
3 ОбъектXDTO ОбъектXDTO "2af58778-f621-11e5-aed0-406186c53bda" "Болезнь" 04.07.2017 0:00:00 11.07.2017 0:00:00 "828a5b92-6b99-11e7-80ad-000c295f004f" 1
4 ОбъектXDTO ОбъектXDTO "2346d4f0-f260-11e5-894a-406186c53bda" "Болезнь" 27.06.2017 0:00:00 11.07.2017 0:00:00 "9d82f5b1-6b99-11e7-80ad-000c295f004f" 1
5 ОбъектXDTO ОбъектXDTO "0517f4db-f62e-11e5-aed0-406186c53bda" "Болезнь" 14.06.2017 0:00:00 13.07.2017 0:00:00 "1d9ad210-7120-11e7-80ad-000c295f004f" 1
6 ОбъектXDTO ОбъектXDTO "0517f4db-f62e-11e5-aed0-406186c53bda" "Болезнь" 14.07.2017 0:00:00 25.07.2017 0:00:00 "43220bd0-7120-11e7-80ad-000c295f004f" 1
7 ОбъектXDTO ОбъектXDTO "9aef3ce1-f55f-11e5-a17e-406186c53bda" "Болезнь" 18.07.2016 0:00:00 30.07.2016 0:00:00 "076e9f28-586c-11e6-8113-e4737703cdea" 1
8 ОбъектXDTO ОбъектXDTO "2346d503-f260-11e5-894a-406186c53bda" "Болезнь" 13.07.2016 0:00:00 21.07.2016 0:00:00 "076e9f33-586c-11e6-8113-e4737703cdea" 1
9 ОбъектXDTO ОбъектXDTO "72be0595-f26b-11e5-894a-406186c53bda" "Болезнь" 16.06.2016 0:00:00 30.06.2016 0:00:00 "076e9f41-586c-11e6-8113-e4737703cdea" 1
10 ОбъектXDTO ОбъектXDTO "72be0595-f26b-11e5-894a-406186c53bda" "Болезнь" 01.07.2016 0:00:00 03.07.2016 0:00:00 "21ee2121-5898-11e6-8113-e4737703cdea" 1
11 ОбъектXDTO ОбъектXDTO "72be0595-f26b-11e5-894a-406186c53bda" "Болезнь" 04.07.2016 0:00:00 14.07.2016 0:00:00 "21ee212c-5898-11e6-8113-e4737703cdea" 1
ПоказатьПо теме из базы знаний
- Синхронизация и обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена
- Универсальная обработка для 1С 8.3 Инструмент для изменения и исправления ошибок информационной базы
- RabbitMQ + Конвертация Данных 3.0
- Обмен с системой Меркурий через Web + Ветис.API для любых конфигураций (универсальная конфигурация Хамелеон Меркурий)
- Редактор объектов информационной базы 8.3
Найденные решения
Решил все следующим образом.
Создал набор записей из регистра сведений ИБ приемника и выгрузил их в таблицу значений
Далее добавил колонку назвал её сравнение и в каждой строчке добавил значение -1
Данные полученные из базы отправителя я тоже добавил в таблицу значений но в колонке сравнение поставил 1
Свернул таблицу по всем колонкам кроме сравнение, а сравнение полем суммирования
В итоге получилось что если значение уже существует то в колонке сравнение получиться 0,если новое значение то будет 1 эти записи я и добавляю, ну а если в приемнике есть запись которая отсутствует в базе отправителя то там будет -1, я такие записи удаляю, всё
код прилагаю
Создал набор записей из регистра сведений ИБ приемника и выгрузил их в таблицу значений
Далее добавил колонку назвал её сравнение и в каждой строчке добавил значение -1
Данные полученные из базы отправителя я тоже добавил в таблицу значений но в колонке сравнение поставил 1
Свернул таблицу по всем колонкам кроме сравнение, а сравнение полем суммирования
В итоге получилось что если значение уже существует то в колонке сравнение получиться 0,если новое значение то будет 1 эти записи я и добавляю, ну а если в приемнике есть запись которая отсутствует в базе отправителя то там будет -1, я такие записи удаляю, всё
код прилагаю
Функция SpisokSostoyanya(Parametr)
СчДобавленных = 0;
СчУдаленных = 0;
НаборСостояний = РегистрыСведений.СостоянияСотрудников.СоздатьНаборЗаписей();
НаборСостояний.Прочитать();
ТаблицаСостояний = НаборСостояний.Выгрузить();
КЧ = Новый КвалификаторыЧисла(1,0);
Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив,,,КЧ);
ТаблицаСостояний.Колонки.Добавить("Сравнение",ОписаниеТиповЧ,,);
Для Каждого СтрТаблицаСостояний из ТаблицаСостояний Цикл
СтрТаблицаСостояний.Сравнение = -1;
КонецЦикла;
КолличествоСтрокСуществует = ТаблицаСостояний.Количество();
Для Каждого стрParametr из Parametr.Sostoyaniya Цикл
НоваяСтрокаТаблицаСостояний = ТаблицаСостояний.Добавить();
НоваяСтрокаТаблицаСостояний.Период = стрParametr.DatNachalo;
НоваяСтрокаТаблицаСостояний.ДействуетДо = стрParametr.DatOkonchanie;
НоваяСтрокаТаблицаСостояний.Состояние = Перечисления.СостоянияСотрудника[стрParametr.VidSostoyaniya];
НоваяСтрокаТаблицаСостояний.Сотрудник = Справочники.Сотрудники.НайтиПоРеквизиту("GUID",стрParametr.GUID);
НоваяСтрокаТаблицаСостояний.СотрудникGUID = стрParametr.GUID;
НоваяСтрокаТаблицаСостояний.Сравнение = 1;
КонецЦикла;
КолличествоСтрокСтало = ТаблицаСостояний.Количество();
ТаблицаСостояний.Свернуть("Период,ДействуетДо,Состояние,Сотрудник,СотрудникGUID","Сравнение");
КолличествоСтрокСвернуто = ТаблицаСостояний.Количество();
Для Каждого Строка из ТаблицаСостояний Цикл
Если Строка.Сравнение = 1 Тогда
НовоеСостояние = РегистрыСведений.СостоянияСотрудников.СоздатьМенеджерЗаписи();
НовоеСостояние.СотрудникGUID = Строка.СотрудникGUID;
НовоеСостояние.Сотрудник = Строка.Сотрудник;;
НовоеСостояние.Состояние = Строка.Состояние;
НовоеСостояние.Период = Строка.Период;
НовоеСостояние.ДействуетДо = Строка.ДействуетДо;
НовоеСостояние.Записать();
СчДобавленных = СчДобавленных + 1;
ИначеЕсли Строка.Сравнение = -1 Тогда
УдалитьСостояние = РегистрыСведений.СостоянияСотрудников.СоздатьМенеджерЗаписи();
УдалитьСостояние.СотрудникGUID = Строка.СотрудникGUID;
УдалитьСостояние.Сотрудник = Строка.Сотрудник;
УдалитьСостояние.Состояние = Строка.Состояние;
УдалитьСостояние.Период = Строка.Период;
УдалитьСостояние.ДействуетДо = Строка.ДействуетДо;
УдалитьСостояние.Прочитать();
УдалитьСостояние.Удалить();
СчУдаленных = СчУдаленных + 1;
КонецЕсли;
КонецЦикла;
Возврат Строка("Строк существует" + КолличествоСтрокСуществует + " стало " + КолличествоСтрокСтало + " После сворачивания " + КолличествоСтрокСвернуто + " Добавлено " + СчДобавленных + " Удалено " + СчУдаленных)
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Добрый день!
У нас на предприятии также есть две базы, справочники сотрудников в которых синхронизируются, синхронизируются до кода. Вот если у вас тоже сотрудники синхронизировались бы до кода. то можно было бы по коду сотрудника и состояния синхронизировать.
У нас на предприятии также есть две базы, справочники сотрудников в которых синхронизируются, синхронизируются до кода. Вот если у вас тоже сотрудники синхронизировались бы до кода. то можно было бы по коду сотрудника и состояния синхронизировать.
Решил все следующим образом.
Создал набор записей из регистра сведений ИБ приемника и выгрузил их в таблицу значений
Далее добавил колонку назвал её сравнение и в каждой строчке добавил значение -1
Данные полученные из базы отправителя я тоже добавил в таблицу значений но в колонке сравнение поставил 1
Свернул таблицу по всем колонкам кроме сравнение, а сравнение полем суммирования
В итоге получилось что если значение уже существует то в колонке сравнение получиться 0,если новое значение то будет 1 эти записи я и добавляю, ну а если в приемнике есть запись которая отсутствует в базе отправителя то там будет -1, я такие записи удаляю, всё
код прилагаю
Создал набор записей из регистра сведений ИБ приемника и выгрузил их в таблицу значений
Далее добавил колонку назвал её сравнение и в каждой строчке добавил значение -1
Данные полученные из базы отправителя я тоже добавил в таблицу значений но в колонке сравнение поставил 1
Свернул таблицу по всем колонкам кроме сравнение, а сравнение полем суммирования
В итоге получилось что если значение уже существует то в колонке сравнение получиться 0,если новое значение то будет 1 эти записи я и добавляю, ну а если в приемнике есть запись которая отсутствует в базе отправителя то там будет -1, я такие записи удаляю, всё
код прилагаю
Функция SpisokSostoyanya(Parametr)
СчДобавленных = 0;
СчУдаленных = 0;
НаборСостояний = РегистрыСведений.СостоянияСотрудников.СоздатьНаборЗаписей();
НаборСостояний.Прочитать();
ТаблицаСостояний = НаборСостояний.Выгрузить();
КЧ = Новый КвалификаторыЧисла(1,0);
Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив,,,КЧ);
ТаблицаСостояний.Колонки.Добавить("Сравнение",ОписаниеТиповЧ,,);
Для Каждого СтрТаблицаСостояний из ТаблицаСостояний Цикл
СтрТаблицаСостояний.Сравнение = -1;
КонецЦикла;
КолличествоСтрокСуществует = ТаблицаСостояний.Количество();
Для Каждого стрParametr из Parametr.Sostoyaniya Цикл
НоваяСтрокаТаблицаСостояний = ТаблицаСостояний.Добавить();
НоваяСтрокаТаблицаСостояний.Период = стрParametr.DatNachalo;
НоваяСтрокаТаблицаСостояний.ДействуетДо = стрParametr.DatOkonchanie;
НоваяСтрокаТаблицаСостояний.Состояние = Перечисления.СостоянияСотрудника[стрParametr.VidSostoyaniya];
НоваяСтрокаТаблицаСостояний.Сотрудник = Справочники.Сотрудники.НайтиПоРеквизиту("GUID",стрParametr.GUID);
НоваяСтрокаТаблицаСостояний.СотрудникGUID = стрParametr.GUID;
НоваяСтрокаТаблицаСостояний.Сравнение = 1;
КонецЦикла;
КолличествоСтрокСтало = ТаблицаСостояний.Количество();
ТаблицаСостояний.Свернуть("Период,ДействуетДо,Состояние,Сотрудник,СотрудникGUID","Сравнение");
КолличествоСтрокСвернуто = ТаблицаСостояний.Количество();
Для Каждого Строка из ТаблицаСостояний Цикл
Если Строка.Сравнение = 1 Тогда
НовоеСостояние = РегистрыСведений.СостоянияСотрудников.СоздатьМенеджерЗаписи();
НовоеСостояние.СотрудникGUID = Строка.СотрудникGUID;
НовоеСостояние.Сотрудник = Строка.Сотрудник;;
НовоеСостояние.Состояние = Строка.Состояние;
НовоеСостояние.Период = Строка.Период;
НовоеСостояние.ДействуетДо = Строка.ДействуетДо;
НовоеСостояние.Записать();
СчДобавленных = СчДобавленных + 1;
ИначеЕсли Строка.Сравнение = -1 Тогда
УдалитьСостояние = РегистрыСведений.СостоянияСотрудников.СоздатьМенеджерЗаписи();
УдалитьСостояние.СотрудникGUID = Строка.СотрудникGUID;
УдалитьСостояние.Сотрудник = Строка.Сотрудник;
УдалитьСостояние.Состояние = Строка.Состояние;
УдалитьСостояние.Период = Строка.Период;
УдалитьСостояние.ДействуетДо = Строка.ДействуетДо;
УдалитьСостояние.Прочитать();
УдалитьСостояние.Удалить();
СчУдаленных = СчУдаленных + 1;
КонецЕсли;
КонецЦикла;
Возврат Строка("Строк существует" + КолличествоСтрокСуществует + " стало " + КолличествоСтрокСтало + " После сворачивания " + КолличествоСтрокСвернуто + " Добавлено " + СчДобавленных + " Удалено " + СчУдаленных)
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот