Добрый день, перегоняю данные из 7.7 в КУП 8.3 при перегоне данные паспорта физического лица записываю в регистр Документы Физических лиц, но они почему-то не попадают, не отображаются в карточке физического лица. точно тоже происходит и с контактами физического лица, они записіваются в регистр, но не попадают в карточку, и с датой принятия и увольнения сотрудника, и с суммой аванса. В чём проблема? Код
Для Индекс = 0 По Данные.Количество() - 1 Цикл если СокрЛП(Данные[Индекс].ИНН)<>"" Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка КАК Ссылка |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | ФизическиеЛица.КодПоДРФО = &ИНН"; Запрос.УстановитьПараметр("ИНН", Данные[Индекс].ИНН); Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); ФизЛицо = Выборка.Ссылка.ПолучитьОбъект(); Иначе ФизЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент(); КонецЕсли; ФизЛицо.Наименование= СокрЛП(Данные[Индекс].ФИО); ФизЛицо.ФИО = СокрЛП(Данные[Индекс].ФИО); ФизЛицо.КодПоДРФО = СокрЛП(Данные[Индекс].ИНН);
НоваяЗапись.СтранаВыдачи=Справочники.СтраныМира.Украина; НоваяЗапись.КемВыдан= СокрЛП(Данные[Индекс].Кем_выдан_паспорт); НоваяЗапись.Период = ТекущаяДата(); // Для периодического регистра // Пытаемся записать Попытка НаборЗаписей.Записать(Истина); // Заменить существующие записи // Успешно записано Исключение // Здесь можно добавить логирование ошибки, если нужно // Ошибка при записи КонецПопытки;
// Получаем виды контактной информации ВидТелефона = Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица; ВидАдреса = Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица; // Создаем менеджер для работы с контактной информацией МенеджерКонтактов = УправлениеКонтактнойИнформацией;
Попытка // Заполняем телефон, если передан Если ЗначениеЗаполнено(Данные[Индекс].Телефон) Тогда ЗначенияПолейТелефон = Новый Массив; ЗначенияПолейТелефон.Добавить(Новый Структура("ИмяПоля, Значение", "НомерТелефона", Данные[Индекс].Телефон)); МенеджерКонтактов.ЗаписатьКонтактнуюИнформацию( ФизЛицо.Ссылка, СокрЛП(Данные[Индекс].Телефон), // Представление ВидТелефона, Перечисления.ТипыКонтактнойИнформации.Телефон, МенеджерКонтактов.КонтактнаяИнформацияВJSON(СокрЛП(Данные[Индекс].Телефон)) ); КонецЕсли;
// Заполняем адрес, если передан Если ЗначениеЗаполнено(Данные[Индекс].Адрес_сотрудника) Тогда ЗначенияПолейАдрес = Новый Массив; ЗначенияПолейАдрес.Добавить(Новый Структура("ИмяПоля, Значение", "Представление", Данные[Индекс].Адрес_сотрудника)); МенеджерКонтактов.ЗаписатьКонтактнуюИнформацию( ФизЛицо.Ссылка, СокрЛП(Данные[Индекс].Адрес_сотрудника), // Представление ВидАдреса, Перечисления.ТипыКонтактнойИнформации.Адрес, МенеджерКонтактов.КонтактнаяИнформацияВJSON(СокрЛП(Данные[Индекс].Адрес_сотрудника)) ); КонецЕсли;
Исключение // Логирование ошибки, если нужно // Сообщить(ОписаниеОшибки()); КонецПопытки;
////============================================== Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |Организации.Ссылка КАК Ссылка, |Организации.КодПоЕДРПОУ КАК КодПоЕДРПОУ |ИЗ |Справочник.Организации КАК Организации |ГДЕ |Организации.КодПоЕДРПОУ = &Код"; Запрос.УстановитьПараметр("Код", "34994962"); Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Организация = Выборка.Ссылка.ПолучитьОбъект(); Иначе // Сотрудник = Справочники.Сотрудники.СоздатьЭлемент(); КонецЕсли;
// Поиск сотрудника по табельному номеру Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Ссылка |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.ФизическоеЛицо = &ФизическоеЛицо"; Запрос.УстановитьПараметр("ФизическоеЛицо", ФизЛицо.Ссылка); Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Сотрудник = Выборка.Ссылка.ПолучитьОбъект(); Иначе Сотрудник = Справочники.Сотрудники.СоздатьЭлемент(); КонецЕсли;
Касательно регистра Документы физических лиц. По идее, если устанавливаете отбор, то набор записей нужно прочитать. Если количество записей 0, то будете добавлять, если нет, то редактировать. Кроме того, у Вас может быть несколько записей для одного человека с видом Паспорт с разными датами. Если Вы таким образом накладываете отбор, то, скорее всего, будут проблемы, так как Вы не учитываете Период. Если Вы просто хотите записать данные в регистр, то создайте до цикла НаборЗаписей этого регистра, в цикле добавьте строки и по окончании цикла просто запишите НаборЗаписей с Замещение = Ложь
Касательно контактной информации. У меня Бухгалтерия КОРП. а не КУП, поэтому может различаться. У меня в функцию передается объект физического лица, а не ссылка. Кроме того. запись происходит не в регистр, а в табличную часть КонтактнаяИнформация справочника Физические лица. Вы можете проверить записаны ли данные сделав в простой запрос в режиме предприятия.
НаборЗаписей.Записать(Истина); поместить после цикла и вместо Истина поставить Ложь. Это сократит накладные расходы
Если в регистре есть записи, то надо прочитать их
НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() Тогда // Здесь редактируем текущие записи Иначе // Здесь добавляем КонецЕсли;
И теперь записываем НаборЗаписей.Записать(Истина);
Для контактной информации
МенеджерКонтактов.ЗаписатьКонтактнуюИнформацию( ФизЛицо.Ссылка, СокрЛП(Данные[Индекс].Телефон), // Представление ВидТелефона, Перечисления.ТипыКонтактнойИнформации.Телефон, МенеджерКонтактов.КонтактнаяИнформацияВJSON(СокрЛП(Данные[Индекс].Телефон)) );
Вы передаете Ссылку на объект, а в функции ЗаписатьКонтактнуюИнформацию ожидается объект. По крайней мере в Бухгалтерии КОРП
ЗаполнитьКадровыеДанныеСотрудника - такой функции в Бухгалтерии КОРП нет, судя по синтаксису, это функция обработки, в которой Вы выполняете перенос. Не понятно, что в ней и как формируется. Еще один момент. Иногда в базе могут быть несколько сотрудников с одинаковым Физическим лицом. При выборке не известно какой сотрудник будет первым, вполне возможно, что не тот, что нужно. Так что, просто взять первого и обработать возможно будет недостаточно.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!