Перенос данных регистра сведений из обной базы в регистр сведений другой ИБ через WEB

1. Denis-PP 3 09.10.18 07:04 Сейчас в теме
Здравствуйте форумчане! Помогите советом. Есть две абсолютно разные базы ЗУП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
Показать
По теме из базы знаний
Найденные решения
7. Denis-PP 3 10.10.18 07:31 Сейчас в теме
Решил все следующим образом.
Создал набор записей из регистра сведений ИБ приемника и выгрузил их в таблицу значений
Далее добавил колонку назвал её сравнение и в каждой строчке добавил значение -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;
		КонецЕсли;
	КонецЦикла;		
	
	
	
	Возврат Строка("Строк существует" + КолличествоСтрокСуществует + " стало " + КолличествоСтрокСтало + " После сворачивания " + КолличествоСтрокСвернуто + " Добавлено " + СчДобавленных + " Удалено " + СчУдаленных)

КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. iliya2009 09.10.18 07:15 Сейчас в теме
Добрый день!
У нас на предприятии также есть две базы, справочники сотрудников в которых синхронизируются, синхронизируются до кода. Вот если у вас тоже сотрудники синхронизировались бы до кода. то можно было бы по коду сотрудника и состояния синхронизировать.
3. Denis-PP 3 09.10.18 08:06 Сейчас в теме
Простите, не монял что такое "до кода"
4. iliya2009 09.10.18 08:26 Сейчас в теме
ну значит даже код в обоих базах совпадает
6. Denis-PP 3 09.10.18 10:43 Сейчас в теме
(4) Я в ИБ приемнике в справочнике сотрудник создал реквизит GUID который является идентификатором ссылки сотрудника из базы отправителя, по этому идентификатору я и синхронизирую справочник сотрудники
5. AQR84 37 09.10.18 08:38 Сейчас в теме
План обмена, удалять регистрацию после отправки
7. Denis-PP 3 10.10.18 07:31 Сейчас в теме
Решил все следующим образом.
Создал набор записей из регистра сведений ИБ приемника и выгрузил их в таблицу значений
Далее добавил колонку назвал её сравнение и в каждой строчке добавил значение -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;
		КонецЕсли;
	КонецЦикла;		
	
	
	
	Возврат Строка("Строк существует" + КолличествоСтрокСуществует + " стало " + КолличествоСтрокСтало + " После сворачивания " + КолличествоСтрокСвернуто + " Добавлено " + СчДобавленных + " Удалено " + СчУдаленных)

КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот