Конвертация данных. Перенос реквизита документа в реквизит справочника.
Добрый день. Необходимо перенести кадровые данные из ЗУП 1.1 в Бух 3.0. Точнее перенос документа ПриемНаРаботуВогранизацию в котором нет реквизита Сотрудник, и спр. такой в базе отсутствует, а в 3.0 все это есть. Создано правило, которое переносит документ ПриемНаРаботуВОрганизацию и создает в событии ПослеЗагрузки Сотрудников по ссылке в документе на физлицо. Проблема в том что нужно перенести ВидЗанятости. В ЗУП это реквизит Документа, в Бух это реквизит спр. Сотрудники. Делаю следующим образом: Событие ПередВыгрузкой:
Событие ПослеЗагрузки:
Параметры.Вставить("ВидЗанятости",Источник.ВидЗанятости);
Событие ПослеЗагрузки:
Для каждого стр из Объект.РаботникиОрганизации Цикл
ЭлементСпр=Справочники.СотрудникиОрганизаций.НайтиПоКоду(стр.ФизЛицо.Код);
Если ЭлементСпр.Пустая()Тогда
Сотрудник=Справочники.СотрудникиОрганизаций.СоздатьЭлемент();
Сотрудник.Физлицо=Справочники.ФизическиеЛица.НайтиПоКоду(стр.ФизЛицо.Код);
Сотрудник.Наименование=Сотрудник.Физлицо.Наименование;
Сотрудник.Организация=Объект.Организация;
Сотрудник.Код=стр.ФизЛицо.Код;
Сотрудник.Актуальность=Истина;
Для каждого стр из Параметры Цикл
ВидЗанятостиСотрудника=стр.ВидЗанятости;
Прервать;
КонецЦикла;
Сотрудник.ВидЗанятости=ВидЗанятостиСотрудника;
Попытка
Сотрудник.Записать();
стр.Сотрудник=Сотрудник.Ссылка;
Сообщить("Создан новый сотрудник "+Сотрудник.Наименование);
исключение
Сообщить("Не удалось записать сотрудника " + Сотрудник.Физлицо.Наименование);
КонецПопытки;
Иначе
//предполагаем,что данный сотрудник есть в базе и записываем его в документ
стр.Сотрудник=ЭлементСпр;
СпрОбъект=ЭлементСпр.ПолучитьОбъект();
КонецЕсли;
КонецЦикла;
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)У вас одна и та же переменная стр используется для разных элементов коллекций:
Для каждого стр из Объект.РаботникиОрганизации Цикл
//здесь стр РаботникОрганизации
.....
Для каждого стр из Параметры Цикл
//здесь стр Параметр
ВидЗанятостиСотрудника=стр.ВидЗанятости;
Прервать;
КонецЦикла;
Сотрудник.ВидЗанятости=ВидЗанятостиСотрудника;
Попытка
Сотрудник.Записать();
//здесь стр Параметр
стр.Сотрудник=Сотрудник.Ссылка;
Сообщить("Создан новый сотрудник "+Сотрудник.Наименование);
исключение
Сообщить("Не удалось записать сотрудника " + Сотрудник.Физлицо.Наименование);
КонецПопытки;
КонецЦикла;
Показать
(1) По-моему, должно быть так:
//Если ВидЗанятости в шапке документа
обВидЗанятости=Объект.ВидЗанятости;
Для каждого стр из Объект.РаботникиОрганизации Цикл
ЭлементСпр=Справочники.СотрудникиОрганизаций.НайтиПоКоду(стр.ФизЛицо.Код);
Если ЭлементСпр.Пустая()Тогда
Сотрудник=Справочники.СотрудникиОрганизаций.СоздатьЭлемент();
Сотрудник.Физлицо=Справочники.ФизическиеЛица.НайтиПоКоду(стр.ФизЛицо.Код);
Сотрудник.Наименование=Сотрудник.Физлицо.Наименование;
Сотрудник.Организация=Объект.Организация;
Сотрудник.Код=стр.ФизЛицо.Код;
Сотрудник.Актуальность=Истина;
//Если ВидЗанятости в табличной части
Сотрудник.ВидЗанятости=стр.ВидЗанятости;
//Если ВидЗанятости в шапке документа, вместо строки выше
Сотрудник.ВидЗанятости=обВидЗанятости;
Попытка
Сотрудник.Записать();
стр.Сотрудник=Сотрудник.Ссылка;
Сообщить("Создан новый сотрудник "+Сотрудник.Наименование);
исключение
Сообщить("Не удалось записать сотрудника " + Сотрудник.Физлицо.Наименование);
КонецПопытки;
Иначе
//предполагаем,что данный сотрудник есть в базе и записываем его в документ
стр.Сотрудник=ЭлементСпр;
СпрОбъект=ЭлементСпр.ПолучитьОбъект();
КонецЕсли;
КонецЦикла;
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
Показать
(12)Ошибка в обработчике события ПередВыгрузкойОбъекта
ПКО = ПриемНаРаботуВОрганизацию (ДокументСсылка.ПриемНаРаботуВОрганизацию --> ДокументСсылка.ПриемНаРаботуВОрганизацию)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
Обработчик = ПередВыгрузкойОбъекта
ОписаниеОшибки = Поле объекта не обнаружено (Значение)
ПозицияМодуля = (1)
КодСообщения = 41
ПКО = ПриемНаРаботуВОрганизацию (ДокументСсылка.ПриемНаРаботуВОрганизацию --> ДокументСсылка.ПриемНаРаботуВОрганизацию)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
Обработчик = ПередВыгрузкойОбъекта
ОписаниеОшибки = Поле объекта не обнаружено (Значение)
ПозицияМодуля = (1)
КодСообщения = 41
(30)все правильно. извиняюсь если запутала. Короче все что у меня сейчас написано, Передвыгрузкой
Параметры.Вставить("ВидЗанятости",Источник.ВидЗанятости);
Сообщить(Параметры.ВидЗанятости);
Значение выходит. Если использую Сообщить(Параметры.ВидЗанятости); После загрузки значения пустые
Параметры.Вставить("ВидЗанятости",Источник.ВидЗанятости);
Сообщить(Параметры.ВидЗанятости);
Значение выходит. Если использую Сообщить(Параметры.ВидЗанятости); После загрузки значения пустые
Какая у вас версия ЗУП? Если 2.5, там есть документ ПриемНаРаботуВОрганизацию, в нём есть табличная часть РаботникиОрганизации, но реквизит ВидЗанятости (УдалитьВидЗанятости) находится в шапке документа, а не в табличной части. Если 3.1, там есть документ ПриемНаРаботуСписком, в нём есть табличная часть Сотрудники и в ней есть реквизит ВидЗанятости.
А не легче ли создать ПВД с произвольным алгоритмом собрать данные из док. ПриемНаРаботуВОрганизацию необходимые для создания сотрудника ( код, наименование, физлицо , вид занятости ) все записать в структуру и использовать функцию ВыгрузитьПоПравилу() , создать ПКО с пустым Источником а в ПКС указать "Получать из Входящих данных", тогда Вид занятости можно передать обычной строкой
(45)
Допустим есть документы ПриемНаРаботуВОрганизацию с Табличной Частью "Физические лица " и колонкой "ВидЗанятости"
Для начала можно создать ПКО с пустым источником и ПКС (Можно воспользоваться кнопкой Синхронизация свойств для выбора нужных полей) допустим это поля
Наименование
Код
ФизическоеЛицо
ВидЗанятости
для каждого свойства Источник оставляем пустым , устанавливаем галочку "Получать из ВходящихДанных "
Создаем ПВД
В событии "Перед Обработкой" устанавливаем Произвольный алгоритм
и пишем сам обработчик
Запрос = Новый Запрос;
Как-то так плюс как уже писали выше нужно создаьть ПКО для перечисления ВидЗанятости
Допустим есть документы ПриемНаРаботуВОрганизацию с Табличной Частью "Физические лица " и колонкой "ВидЗанятости"
Для начала можно создать ПКО с пустым источником и ПКС (Можно воспользоваться кнопкой Синхронизация свойств для выбора нужных полей) допустим это поля
Наименование
Код
ФизическоеЛицо
ВидЗанятости
для каждого свойства Источник оставляем пустым , устанавливаем галочку "Получать из ВходящихДанных "
Создаем ПВД
В событии "Перед Обработкой" устанавливаем Произвольный алгоритм
и пишем сам обработчик
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать Различные
|ПРЕДСТАВЛЕНИЕ (ПримеНаРаботуВОрганизациюФизЛица.Физлицо) КАК Наименование,
|ПримеНаРаботуВОрганизациюФизЛица.Физлицо.Код КАК Код,
|ПримеНаРаботуВОрганизациюФизЛица.Физлицо КАК ФизическоеЛицо;
|ПримеНаРаботуВОрганизациюФизЛица.ВидЗанятости КАК ВидЗанятости
|ИЗ Документ.ПримеНаРаботуВОрганизацию.ФизическиеЛица КАК ПримеНаРаботуВОрганизациюФизЛица";
Выборка = Запрос.Выполнить.Выбрать();
Пока Выборка.Следующий() Цикл
ИсходящиеДанные = Новый Струкутура()
ИсходящиеДанные.Вставить("ФизическоеЛицо", Выборка.ФизЛицо.);
ИсходящиеДанные.Вставить("Нименование", Выборка.Наименование.);
ИсходящиеДанные.Вставить("Код", Выборка.Код.);
ИсходящиеДанные.Вставить("ВидЗанятости", Выборка.ВидЗанятости.);
ВыгрузитьПоПравилу (,,ИсходящиеДанные,,"ИмяПКОДляСправочникаСотрудника")
КонецЦикла;
ПоказатьКак-то так плюс как уже писали выше нужно создаьть ПКО для перечисления ВидЗанятости
(46) Добрый день, я вот пытаюсь сделать правило, для начала создание сотрудников в базе. Обработка показывает одинаковое количество выгруженных и загруженных объектов, но в базе сотрудников пусто.
Запрос=Новый Запрос;
Запрос.Текст = " ВЫБРАТЬ
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация КАК Организация,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо КАК ФизЛицо,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.ВидЗанятости КАК ВидЗанятости,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо.Код Как Код,
|ПриемНаРаботуВОрганизациюРаботникиОрганизации.ФизЛицо.Наименование КАК Наименование
|ИЗ
|Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
|ГДЕ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен = ИСТИНА
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("Организация", Данные.Организация);
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИсходящиеДанные = Новый Структура();
ИсходящиеДанные.Вставить("ФизЛицо", Выборка.ФизЛицо);
ИсходящиеДанные.Вставить("Наименование", Выборка.Наименование);
ИсходящиеДанные.Вставить("Код", Выборка.Код);
ИсходящиеДанные.Вставить("ВидЗанятости", Выборка.ВидЗанятости);
ИсходящиеДанные.Вставить("Сотрудник", Выборка.ФизЛицо);
ИсходящиеДанные.Вставить("Организация", Выборка.Организация);
Сообщить("Выгрузка "+Выборка.ФизЛицо);
ВыгрузитьПоПравилу (,,ИсходящиеДанные,,"СозданиеСотрудников")
КонецЦикла;
ПоказатьПрикрепленные файлы:


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