Конвертация данных. Перенос реквизита документа в реквизит справочника.

1. IrinaBasova 13.07.18 06:43 Сейчас в теме
Добрый день. Необходимо перенести кадровые данные из ЗУП 1.1 в Бух 3.0. Точнее перенос документа ПриемНаРаботуВогранизацию в котором нет реквизита Сотрудник, и спр. такой в базе отсутствует, а в 3.0 все это есть. Создано правило, которое переносит документ ПриемНаРаботуВОрганизацию и создает в событии ПослеЗагрузки Сотрудников по ссылке в документе на физлицо. Проблема в том что нужно перенести ВидЗанятости. В ЗУП это реквизит Документа, в Бух это реквизит спр. Сотрудники. Делаю следующим образом: Событие ПередВыгрузкой:
Параметры.Вставить("ВидЗанятости",Источник.ВидЗанятости);

Событие ПослеЗагрузки:
Для каждого стр из Объект.РаботникиОрганизации Цикл
ЭлементСпр=Справочники.СотрудникиОрганизаций.НайтиПоКоду(стр.ФизЛицо.Код);	
Если  ЭлементСпр.Пустая()Тогда		
		Сотрудник=Справочники.СотрудникиОрганизаций.СоздатьЭлемент();	
		Сотрудник.Физлицо=Справочники.ФизическиеЛица.НайтиПоКоду(стр.ФизЛицо.Код);
		Сотрудник.Наименование=Сотрудник.Физлицо.Наименование;
		Сотрудник.Организация=Объект.Организация;
		Сотрудник.Код=стр.ФизЛицо.Код;
		Сотрудник.Актуальность=Истина;
		Для каждого стр из Параметры Цикл
		ВидЗанятостиСотрудника=стр.ВидЗанятости;	
		Прервать;	
		КонецЦикла;
		Сотрудник.ВидЗанятости=ВидЗанятостиСотрудника;
		Попытка 
			Сотрудник.Записать();
			стр.Сотрудник=Сотрудник.Ссылка;
			Сообщить("Создан новый сотрудник "+Сотрудник.Наименование);
			
		исключение
			Сообщить("Не удалось записать сотрудника " + Сотрудник.Физлицо.Наименование);
		КонецПопытки;	
	Иначе
		//предполагаем,что данный сотрудник есть в базе и записываем его в документ
		 стр.Сотрудник=ЭлементСпр;
		 СпрОбъект=ЭлементСпр.ПолучитьОбъект();
		
	КонецЕсли;	
		
	
КонецЦикла;
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);	
Исключение	
Объект.Записать(РежимЗаписиДокумента.Запись);	
КонецПопытки;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
40. user705522_constantin_h 35 13.07.18 12:39 Сейчас в теме
(1)У вас одна и та же переменная стр используется для разных элементов коллекций:
Для каждого стр из Объект.РаботникиОрганизации Цикл
       //здесь стр РаботникОрганизации
       .....
       Для каждого стр из Параметры Цикл
              //здесь стр Параметр
              ВидЗанятостиСотрудника=стр.ВидЗанятости;
              Прервать;
       КонецЦикла;
        Сотрудник.ВидЗанятости=ВидЗанятостиСотрудника;
        Попытка 
            Сотрудник.Записать();
            //здесь стр Параметр
            стр.Сотрудник=Сотрудник.Ссылка;
            Сообщить("Создан новый сотрудник "+Сотрудник.Наименование);
            
        исключение
            Сообщить("Не удалось записать сотрудника " + Сотрудник.Физлицо.Наименование);
        КонецПопытки;    
КонецЦикла;
Показать
42. IrinaBasova 13.07.18 12:45 Сейчас в теме
(40)уже увидела, спасибо. И все равно Параметры пустые.
44. user705522_constantin_h 35 13.07.18 12:49 Сейчас в теме
(1) По-моему, должно быть так:
//Если ВидЗанятости в шапке документа
обВидЗанятости=Объект.ВидЗанятости;
Для каждого стр из Объект.РаботникиОрганизации Цикл
ЭлементСпр=Справочники.СотрудникиОрганизаций.НайтиПоКоду(стр.ФизЛицо.Код);    
Если  ЭлементСпр.Пустая()Тогда        
        Сотрудник=Справочники.СотрудникиОрганизаций.СоздатьЭлемент();    
        Сотрудник.Физлицо=Справочники.ФизическиеЛица.НайтиПоКоду(стр.ФизЛицо.Код);
        Сотрудник.Наименование=Сотрудник.Физлицо.Наименование;
        Сотрудник.Организация=Объект.Организация;
        Сотрудник.Код=стр.ФизЛицо.Код;
        Сотрудник.Актуальность=Истина;
        //Если ВидЗанятости в табличной части
        Сотрудник.ВидЗанятости=стр.ВидЗанятости;
        //Если ВидЗанятости в шапке документа, вместо строки выше
        Сотрудник.ВидЗанятости=обВидЗанятости;
        Попытка 
            Сотрудник.Записать();
            стр.Сотрудник=Сотрудник.Ссылка;
            Сообщить("Создан новый сотрудник "+Сотрудник.Наименование);
            
        исключение
            Сообщить("Не удалось записать сотрудника " + Сотрудник.Физлицо.Наименование);
        КонецПопытки;    
    Иначе
        //предполагаем,что данный сотрудник есть в базе и записываем его в документ
         стр.Сотрудник=ЭлементСпр;
         СпрОбъект=ЭлементСпр.ПолучитьОбъект();
        
    КонецЕсли;    
        
    
КонецЦикла;
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);    
Исключение    
Объект.Записать(РежимЗаписиДокумента.Запись);    
КонецПопытки;
Показать
2. IrinaBasova 13.07.18 06:44 Сейчас в теме
Получается Сотрудники создаются, но ВидЗанятости не заполняется. Может нужно как то по другому работать с Параметрами?
3. mad375 13.07.18 07:39 Сейчас в теме
А вид занятости точно строка? Наверняка или справочники или перечисление, может еще и по разному в разных базах.
4. IrinaBasova 13.07.18 07:59 Сейчас в теме
(3)нет это не строка Перечисление в обоих базах. При это обращение к нему по другому будет?
5. IrinaBasova 13.07.18 08:01 Сейчас в теме
(4)например,
Источник.ВидЗанятости.Значение
6. mad375 13.07.18 08:05 Сейчас в теме
(5)Сравнивайте значение в источнике со стройкой и устанавливайте в приемнике, типа такого:
Если стр.ВидЗанятости.Значение = "ХХХ" Тогда 
ВидЗанятостиСотрудника = Перечисления.ВидыЗанятости.ХХХ
ИначеЕсли .....
7. IrinaBasova 13.07.18 08:48 Сейчас в теме
8. IrinaBasova 13.07.18 08:59 Сейчас в теме
(6)может дело в Параметрах, мне кажется они пустые остаются...
9. mad375 13.07.18 09:04 Сейчас в теме
(8) Кажется дошло, передавайте в параметр сразу Значение, ведь для объекта наверняка ПКО нет.
11. IrinaBasova 13.07.18 09:09 Сейчас в теме
10. IrinaBasova 13.07.18 09:08 Сейчас в теме
т.е. есть разница Источник.ВидЗанятости.Значение и Источник.ВидЗанятости?
12. mad375 13.07.18 09:23 Сейчас в теме
(10)т.е.
Параметры.Вставить("ВидЗанятости",Источник.ВидЗанятости.Значение);

И
Если стр.ВидЗанятости = "ХХХ" Тогда 
ВидЗанятостиСотрудника = Перечисления.ВидыЗанятости.ХХХ
ИначеЕсли .....
13. IrinaBasova 13.07.18 09:58 Сейчас в теме
(12)Ошибка в обработчике события ПередВыгрузкойОбъекта
ПКО = ПриемНаРаботуВОрганизацию (ДокументСсылка.ПриемНаРаботуВОрганизацию --> ДокументСсылка.ПриемНаРаботуВОрганизацию)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
Обработчик = ПередВыгрузкойОбъекта
ОписаниеОшибки = Поле объекта не обнаружено (Значение)
ПозицияМодуля = (1)
КодСообщения = 41
14. mad375 13.07.18 10:22 Сейчас в теме
Ну так выходит что там или Неопределено или не перечисление
Можно при помощи Сообщить() попробовать посмотреть
15. IrinaBasova 13.07.18 11:24 Сейчас в теме
(14)Получается, что когда я помещаю в параметры значение в событии передВыгрузкой и делаю обход структуры, параметры не пустые. При проверки структуры функцией Количество() после загрузки получаю 0
16. IrinaBasova 13.07.18 11:26 Сейчас в теме
(15)но если читать синтаксис помощник в событиях ПередВыгрузкой-Параметры(Структура) и ПослеЗагрузки -Параметрыобъекта(Соответствие)
17. mad375 13.07.18 11:31 Сейчас в теме
(16)Так параметры и параметры объекта это разные вещи
18. IrinaBasova 13.07.18 11:36 Сейчас в теме
(17)хорошо, понятно. но параметры тоже пустые
19. mad375 13.07.18 11:41 Сейчас в теме
А галка "При загрузке" стоит? И еще, получается что параметр ведь будет один на все элементы.
20. IrinaBasova 13.07.18 11:45 Сейчас в теме
21. mad375 13.07.18 11:49 Сейчас в теме
(20) Так если он один, есть ли смысл его вообще передавать? Ставить в коде и все.
23. IrinaBasova 13.07.18 11:57 Сейчас в теме
(21)один но разный для каждого работника
24. mad375 13.07.18 12:04 Сейчас в теме
(23)Тогда в параметры нет смысла его отправлять
25. IrinaBasova 13.07.18 12:05 Сейчас в теме
(21)это не одно значение для всех документов. Оно берется из документа и должно сохраниться на момент создания сотрудника в ПКО Документ.ПриемНаРаботуВОрганизацию
22. mad375 13.07.18 11:53 Сейчас в теме
Попробуйте все-таки содать ПКО для перечисления. Мне думается должно сработать.
26. mad375 13.07.18 12:05 Сейчас в теме
Так это все-таки параметр объекта?
27. IrinaBasova 13.07.18 12:07 Сейчас в теме
28. IrinaBasova 13.07.18 12:09 Сейчас в теме
(26)ну то есть как я это понимаю. Мне нужно сохранить некое значение на момент выгрузки данных документа и перенести его в другой объект данных, который создается в событии ПослеЗагрузкиДокумента.
29. IrinaBasova 13.07.18 12:09 Сейчас в теме
(28)Может я не правильно понимаю как это нужно реализовать в конвертации
31. IrinaBasova 13.07.18 12:10 Сейчас в теме
(26)В теме я описывала, что хочу сделать
30. mad375 13.07.18 12:10 Сейчас в теме
Да, но это так и так получается не значение-на-сотрудника а значение-на-документ.
32. IrinaBasova 13.07.18 12:15 Сейчас в теме
(30)все правильно. извиняюсь если запутала. Короче все что у меня сейчас написано, Передвыгрузкой

Параметры.Вставить("ВидЗанятости",Источник.ВидЗанятости);
Сообщить(Параметры.ВидЗанятости);

Значение выходит. Если использую Сообщить(Параметры.ВидЗанятости); После загрузки значения пустые
33. IrinaBasova 13.07.18 12:16 Сейчас в теме
(32)И так и не могу понять нужно ли указывать данную строку
Прикрепленные файлы:
36. user705522_constantin_h 35 13.07.18 12:21 Сейчас в теме
(33)В параметры ВидЗанятости включать не нужно.
37. IrinaBasova 13.07.18 12:22 Сейчас в теме
Версия зуп старая сотрудников там в помине нет, а бух 3.0 в ней появились сотрудники и значение ВидЗанятости в спр. Сотрудники содержиться
38. IrinaBasova 13.07.18 12:24 Сейчас в теме
(36)в теме я пишу, что создаю сотрудников после загрузки документа ПриемНаРаботуВОрганизацию
34. mad375 13.07.18 12:17 Сейчас в теме
Да, прошу прощения. "Параметры.ххх" это общие параметры, а не объекта.
35. user705522_constantin_h 35 13.07.18 12:19 Сейчас в теме
Какая у вас версия ЗУП? Если 2.5, там есть документ ПриемНаРаботуВОрганизацию, в нём есть табличная часть РаботникиОрганизации, но реквизит ВидЗанятости (УдалитьВидЗанятости) находится в шапке документа, а не в табличной части. Если 3.1, там есть документ ПриемНаРаботуСписком, в нём есть табличная часть Сотрудники и в ней есть реквизит ВидЗанятости.
39. vadim1011985 100 13.07.18 12:34 Сейчас в теме
А не легче ли создать ПВД с произвольным алгоритмом собрать данные из док. ПриемНаРаботуВОрганизацию необходимые для создания сотрудника ( код, наименование, физлицо , вид занятости ) все записать в структуру и использовать функцию ВыгрузитьПоПравилу() , создать ПКО с пустым Источником а в ПКС указать "Получать из Входящих данных", тогда Вид занятости можно передать обычной строкой
41. IrinaBasova 13.07.18 12:44 Сейчас в теме
(39)конвертацию плохо знаю, потому что. Изменяю уже имеющееся правило
43. IrinaBasova 13.07.18 12:47 Сейчас в теме
(39)каким образом собрать данные. В имеющемся правиле, тоже используется произвольный алгоритм. есть запрос по документу.
ВыборкаДанных = Запросы.ПриемНаРаботуВОрганизацию.Выполнить().Выгрузить();
45. IrinaBasova 13.07.18 12:51 Сейчас в теме
(39)не могли бы вы объяснить поподробнее
46. vadim1011985 100 13.07.18 13:18 Сейчас в теме
(45)
Допустим есть документы ПриемНаРаботуВОрганизацию с Табличной Частью "Физические лица " и колонкой "ВидЗанятости"

Для начала можно создать ПКО с пустым источником и ПКС (Можно воспользоваться кнопкой Синхронизация свойств для выбора нужных полей) допустим это поля
Наименование
Код
ФизическоеЛицо
ВидЗанятости

для каждого свойства Источник оставляем пустым , устанавливаем галочку "Получать из ВходящихДанных "

Создаем ПВД
В событии "Перед Обработкой" устанавливаем Произвольный алгоритм

и пишем сам обработчик

Запрос = Новый Запрос;

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

Выборка = Запрос.Выполнить.Выбрать();
 
Пока Выборка.Следующий() Цикл  

ИсходящиеДанные = Новый Струкутура()

ИсходящиеДанные.Вставить("ФизическоеЛицо", Выборка.ФизЛицо.);
ИсходящиеДанные.Вставить("Нименование", Выборка.Наименование.);
ИсходящиеДанные.Вставить("Код", Выборка.Код.);
ИсходящиеДанные.Вставить("ВидЗанятости", Выборка.ВидЗанятости.);

ВыгрузитьПоПравилу (,,ИсходящиеДанные,,"ИмяПКОДляСправочникаСотрудника") 

КонецЦикла;
Показать


Как-то так плюс как уже писали выше нужно создаьть ПКО для перечисления ВидЗанятости
mad375; user705522_constantin_h; +2 Ответить
47. IrinaBasova 24.07.18 08:26 Сейчас в теме
(46) Добрый день, я вот пытаюсь сделать правило, для начала создание сотрудников в базе. Обработка показывает одинаковое количество выгруженных и загруженных объектов, но в базе сотрудников пусто.
Запрос=Новый Запрос;
Запрос.Текст = " ВЫБРАТЬ 
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация КАК Организация,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо КАК ФизЛицо,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.ВидЗанятости КАК ВидЗанятости,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо.Код  Как Код,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо.Наименование КАК Наименование
|ИЗ
|Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
|ГДЕ
|	ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|	И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен = ИСТИНА
|	И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.ПометкаУдаления = ЛОЖЬ";
	
Запрос.УстановитьПараметр("Организация",	Данные.Организация);
Запрос.УстановитьПараметр("ДатаНачала",		НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания",	КонецДня(ДатаОкончания));

Выборка = Запрос.Выполнить().Выбрать();
 
Пока Выборка.Следующий() Цикл  

ИсходящиеДанные = Новый Структура();

ИсходящиеДанные.Вставить("ФизЛицо", Выборка.ФизЛицо);
ИсходящиеДанные.Вставить("Наименование", Выборка.Наименование);
ИсходящиеДанные.Вставить("Код", Выборка.Код);
ИсходящиеДанные.Вставить("ВидЗанятости", Выборка.ВидЗанятости);
ИсходящиеДанные.Вставить("Сотрудник", Выборка.ФизЛицо);
ИсходящиеДанные.Вставить("Организация", Выборка.Организация);
Сообщить("Выгрузка "+Выборка.ФизЛицо);
ВыгрузитьПоПравилу (,,ИсходящиеДанные,,"СозданиеСотрудников") 

КонецЦикла;
Показать
Прикрепленные файлы:
48. IrinaBasova 24.07.18 08:28 Сейчас в теме
обновленное пко
Прикрепленные файлы:
49. vadim1011985 100 24.07.18 12:01 Сейчас в теме
(48) А имя ПКО в фунции выгрузить по правилу правильно указали ?
Оставьте свое сообщение

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