Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Данные из регистра сведений Документы физических лиц не подтягиваются при отображении карточки физического лица          
Svetas2026 Подменю пользователя
сообщение 25.09.25, 12:36
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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

// Указываем вид документа
       ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.Паспорт; // Или другой вид в BAS КУП

       // Создаем набор записей регистра
       НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.Физлицо.Установить(ФизЛицо.Ссылка);
       НаборЗаписей.Отбор.ВидДокумента.Установить(ВидДокумента);
      
                                     
      
       // Добавляем новую запись
       НоваяЗапись = НаборЗаписей.Добавить();
       НоваяЗапись.Физлицо = ФизЛицо.Ссылка;
       НоваяЗапись.ВидДокумента = ВидДокумента;
       НоваяЗапись.Серия = СокрЛП(Данные[Индекс].Серия_паспорта);
       НоваяЗапись.Номер = СокрЛП(Данные[Индекс].Н_паспорта);
       НоваяЗапись.ДатаВыдачи =  Дата(Сред(Лев(Данные[Индекс].Дата_выдачи_паспорта, 10),7,4),Сред(Лев(Данные[Индекс].Дата_выдачи_паспорта, 10),4,2),Сред(Лев(Данные[Индекс].Дата_выдачи_паспорта, 10),1,2));
       НоваяЗапись.ЯвляетсяДокументомУдостоверяющимЛичность=Истина;
       НоваяЗапись.Активность=Истина;  
      
       НоваяЗапись.СтранаВыдачи=Справочники.СтраныМира.Украина;
       НоваяЗапись.КемВыдан= СокрЛП(Данные[Индекс].Кем_выдан_паспорт);
       НоваяЗапись.Период = ТекущаяДата(); // Для периодического регистра
      // Пытаемся записать
       Попытка
         НаборЗаписей.Записать(Истина); // Заменить существующие записи
         // Успешно записано
       Исключение
    // Здесь можно добавить логирование ошибки, если нужно
      // Ошибка при записи
       КонецПопытки;
      
      
        
    // Получаем виды контактной информации
    ВидТелефона = Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица;
    ВидАдреса = Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица;
    // Создаем менеджер для работы с контактной информацией
    МенеджерКонтактов = УправлениеКонтактнойИнформацией;

    Попытка
        // Заполняем телефон, если передан
        Если ЗначениеЗаполнено(Данные[Индекс].Телефон) Тогда
            ЗначенияПолейТелефон = Новый Массив;
            ЗначенияПолейТелефон.Добавить(Новый Структура("ИмяПоля, Значение", "НомерТелефона", Данные[Индекс].Телефон));
            МенеджерКонтактов.ЗаписатьКонтактнуюИнформацию(
                ФизЛицо.Ссылка,
                СокрЛП(Данные[Индекс].Телефон), // Представление
                ВидТелефона,
                Перечисления.ТипыКонтактнойИнформации.Телефон,
                МенеджерКонтактов.КонтактнаяИнформацияВJSON(СокрЛП(Данные[Индекс].Телефон))
            );
        КонецЕсли;
        
        // Заполняем адрес, если передан
        Если ЗначениеЗаполнено(Данные[Индекс].Адрес_сотрудника) Тогда
            ЗначенияПолейАдрес = Новый Массив;
            ЗначенияПолейАдрес.Добавить(Новый Структура("ИмяПоля, Значение", "Представление", Данные[Индекс].Адрес_сотрудника));
            МенеджерКонтактов.ЗаписатьКонтактнуюИнформацию(
                ФизЛицо.Ссылка,
                СокрЛП(Данные[Индекс].Адрес_сотрудника), // Представление
                ВидАдреса,
                Перечисления.ТипыКонтактнойИнформации.Адрес,
                МенеджерКонтактов.КонтактнаяИнформацияВJSON(СокрЛП(Данные[Индекс].Адрес_сотрудника))
            );
        КонецЕсли;
        
                
    Исключение
        // Логирование ошибки, если нужно
        // Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
        
        
    ////==============================================
            Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
      |Организации.Ссылка КАК Ссылка,
      |Организации.КодПоЕДРПОУ КАК КодПоЕДРПОУ
      |ИЗ
      |Справочник.Организации КАК Организации
      |ГДЕ
      |Организации.КодПоЕДРПОУ = &Код";
        Запрос.УстановитьПараметр("Код", "34994962");
        Результат = Запрос.Выполнить();
    
        Если НЕ Результат.Пустой() Тогда
          Выборка = Результат.Выбрать();
          Выборка.Следующий();
          Организация = Выборка.Ссылка.ПолучитьОбъект();
        Иначе
        //  Сотрудник = Справочники.Сотрудники.СоздатьЭлемент();
        КонецЕсли;

    
      
    
    
    // Поиск сотрудника по табельному номеру
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Сотрудники.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.Сотрудники КАК Сотрудники
        |ГДЕ
        |    Сотрудники.ФизическоеЛицо = &ФизическоеЛицо";
        Запрос.УстановитьПараметр("ФизическоеЛицо", ФизЛицо.Ссылка);
        Результат = Запрос.Выполнить();
    
        Если НЕ Результат.Пустой() Тогда
          Выборка = Результат.Выбрать();
          Выборка.Следующий();
          Сотрудник = Выборка.Ссылка.ПолучитьОбъект();
        Иначе
          Сотрудник = Справочники.Сотрудники.СоздатьЭлемент();
        КонецЕсли;
        
                        
        Сотрудник.ФизическоеЛицо = ФизЛицо.Ссылка;  
        Сотрудник.Наименование= СокрЛП(ФизЛицо.Наименование);
        Сотрудник.ГоловнаяОрганизация= Организация.Ссылка;
        Сотрудник.Записать();  
                
                                                        
        ЗаполнитьКадровыеДанныеСотрудника(Сотрудник.Ссылка,Дата(Сред(Лев(Данные[Индекс].Дата_приёма, 10),7,4),Сред(Лев(Данные[Индекс].Дата_приёма, 10),4,2),Сред(Лев(Данные[Индекс].Дата_приёма, 10),1,2)),Дата(Сред(Лев(Данные[Индекс].Дата_увольнения, 10),7,4),Сред(Лев(Данные[Индекс].Дата_увольнения, 10),4,2),Сред(Лев(Данные[Индекс].Дата_увольнения, 10),1,2))
, СокрЛП(Данные[Индекс].Табельный_Номер));
    //    УстановитьСуммуАванса(Сотрудник.Ссылка, Данные[Индекс].Аванс, Данные[Индекс].Дата_приёма);
        
    конецЕсли;          
  КонецЦикла;


Сообщение отредактировал Vofka - 25.09.25, 12:38

xlmel Подменю пользователя
сообщение 25.09.25, 13:29
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 73
Из: Харьков
Спасибо сказали: 35 раз
Рейтинг: 37.7

Касательно регистра Документы физических лиц. По идее, если устанавливаете отбор, то набор записей нужно прочитать. Если количество записей 0, то будете добавлять, если нет, то редактировать.
Кроме того, у Вас может быть несколько записей для одного человека с видом Паспорт с разными датами. Если Вы таким образом накладываете отбор, то, скорее всего, будут проблемы, так как Вы не учитываете Период.
Если Вы просто хотите записать данные в регистр, то создайте до цикла НаборЗаписей этого регистра, в цикле добавьте строки и по окончании цикла просто запишите НаборЗаписей с Замещение = Ложь

Касательно контактной информации. У меня Бухгалтерия КОРП. а не КУП, поэтому может различаться. У меня в функцию передается объект физического лица, а не ссылка. Кроме того. запись происходит не в регистр, а в табличную часть КонтактнаяИнформация справочника Физические лица. Вы можете проверить записаны ли данные сделав в простой запрос в режиме предприятия.

Svetas2026 Подменю пользователя
сообщение 25.09.25, 13:57
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

xlmel @ Сегодня, 11:59 * ,
не понимаю, можете уточнить пожалуйста

xlmel Подменю пользователя
сообщение 25.09.25, 14:39
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 73
Из: Харьков
Спасибо сказали: 35 раз
Рейтинг: 37.7

Svetas2026 @ Сегодня, 13:57 * ,

Если в регистре нет записей, то

НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей(); поместить перед циклом

Эти строки удалить
НаборЗаписей.Отбор.Физлицо.Установить(ФизЛицо.Ссылка);
НаборЗаписей.Отбор.ВидДокумента.Установить(ВидДокумента);


НаборЗаписей.Записать(Истина); поместить после цикла и вместо Истина поставить Ложь. Это сократит накладные расходы

Если в регистре есть записи, то надо прочитать их
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() Тогда
// Здесь редактируем текущие записи
Иначе
// Здесь добавляем
КонецЕсли;

И теперь записываем НаборЗаписей.Записать(Истина);

Для контактной информации
МенеджерКонтактов.ЗаписатьКонтактнуюИнформацию(
                ФизЛицо.Ссылка,
                СокрЛП(Данные[Индекс].Телефон), // Представление
                ВидТелефона,
                Перечисления.ТипыКонтактнойИнформации.Телефон,
                МенеджерКонтактов.КонтактнаяИнформацияВJSON(СокрЛП(Данные[Индекс].Телефон))
            );

Вы передаете Ссылку на объект, а в функции ЗаписатьКонтактнуюИнформацию ожидается объект. По крайней мере в Бухгалтерии КОРП



ЗаполнитьКадровыеДанныеСотрудника - такой функции в Бухгалтерии КОРП нет, судя по синтаксису, это функция обработки, в которой Вы выполняете перенос. Не понятно, что в ней и как формируется.
Еще один момент. Иногда в базе могут быть несколько сотрудников с одинаковым Физическим лицом. При выборке не известно какой сотрудник будет первым, вполне возможно, что не тот, что нужно. Так что, просто взять первого и обработать
возможно будет недостаточно.

Сообщение отредактировал Vofka - 26.09.25, 7:44

Спасибо сказали: Svetas2026,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 03.10.25, 9:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!