Имя: Пароль:
1C
1С v8
1С ЗУП запись данных в справочник Физические лица
0 ammorf
 
27.07.26
09:16
Приветствую всех! Проблем такая, требуется записать дату рождения физ лица и место рождения. Все данные обработкой получаю с файла, нахожу физика по СНИЛС получаю объект элемента справочника, вставляю значения в реквизиты, записываю. Все проходит нормально включая запись объекта. В отладчике проверяю после записи в ссылке реквизиты заполнены. Но дальше начинается странное, реквизиты остаются пустыми когда открываешь элемент справочника, позже я в журнале регистрации вижу что изменения объекта в статусе транзации "Отменено". Скажите, плиз, что не так с 1с ЗУП???
1 Мультук
 
гуру
27.07.26
09:25
(0)

>> после записи в ссылке реквизиты заполнены

А дальше идёт

ОтменитьТранзакцию()


Код будет ?
2 ammorf
 
27.07.26
09:29
(1)     
Для Каждого Данные Из ТЗ Цикл
        Если Данные.ФИО = "" Тогда
            Продолжить;
        КонецЕсли;
        СНИЛС = Данные.СНИЛС;
        ФИО = СокрЛП(Данные.Фамилия) + " " + СокрЛП(Данные.Имя) + ?(СокрЛП(Данные.Отчество) <> "", " " + СокрЛП(Данные.Отчество), "");    
        СсылкаСпрФЗ = ПолучитьЭлемнтСправочникаФЗ(СНИЛС);
        Если МассивОбработанных.Найти(СсылкаСпрФЗ) <> Неопределено Тогда  //уже обработали
            Продолжить;
        КонецЕсли;
        Если СсылкаСпрФЗ = Неопределено Тогда
            Общегоназначения.СообщитьПользователю("Не найден сотрудник: " + ФИО + "; СНИЛС: " + СНИЛС + "");
            Продолжить;
        КонецЕсли;
        ОбъектСпрФЗ  = СсылкаСпрФЗ.ПолучитьОбъект();
        ОбъектСпрФЗ.ОбменДанными.Загрузка = Истина;
        ДатаРождения = Дата(Сред(Данные.ДатаРождения, 7, 4) + Сред(Данные.ДатаРождения, 4, 2) + Сред(Данные.ДатаРождения, 1, 2));
        ОбъектСпрФЗ.ДатаРождения = ДатаРождения;

        Попытка
            ОбъектСпрФЗ.Записать();
        Исключение
            ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
КонецЦикла;
3 ammorf
 
27.07.26
09:32
Пробовал с привилегией и без нее. Без толку. Но при этом групповая обработка реквизитов встроенная в конфу изменяет реквизит без проблем.
4 2S
 
27.07.26
09:38
А если без попытки?
5 PuhUfa
 
27.07.26
09:50
(2) это же не весь код. а что в остальном коде?
6 ammorf
 
27.07.26
09:52
(4) без попытки тоже самое
7 ammorf
 
27.07.26
09:57
Спсибо всем огромное, еще раз пробежался по коду и нашел лишнее начало транзакции)) оказывается я ее начал еще до цикла. В цикле вызывал еще раз. Потом убрал ее совсем а первую до цикла не фиксировал получается)))
8 ammorf
 
27.07.26
09:57
Надо быть внимательнее))
9 Волшебник
 
27.07.26
10:04
Для Каждого Данные Из ТЗ Цикл
        Если Данные.ФИО = "" Тогда
            Продолжить;
        КонецЕсли;

        СНИЛС = Данные.СНИЛС;
        ФИО = СокрЛП(Данные.Фамилия) + " " + СокрЛП(Данные.Имя) + ?(СокрЛП(Данные.Отчество) <> "", " " + СокрЛП(Данные.Отчество), "");    

        Физлицо = НайтиФизлицо(СНИЛС);
        Если МассивОбработанных.Найти(Физлицо) <> Неопределено Тогда  //уже обработали
            Продолжить;
        КонецЕсли;
        Если НЕ ЗначениеЗаполнено(Физлицо) Тогда
            ОбщегоНазначения.СообщитьПользователю("Не найден сотрудник: " + ФИО + "; СНИЛС: " + СНИЛС + "");
            Продолжить;
        КонецЕсли;
        оФизлицо = Физлицо.ПолучитьОбъект();
        оФизлицо.ОбменДанными.Загрузка = Истина;
        ДатаРождения = Дата(Сред(Данные.ДатаРождения, 7, 4) + Сред(Данные.ДатаРождения, 4, 2) + Сред(Данные.ДатаРождения, 1, 2));
        оФизлицо.ДатаРождения = ДатаРождения;

        Попытка
            оФизлицо.Записать();
            //Возврат;
        Исключение
            ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());            
        КонецПопытки;
КонецЦикла;
10 ammorf
 
27.07.26
10:06
(9) Благодарю за попытку :))
11 SleepyHead
 
гуру
27.07.26
10:09
(7) Зачем вам вообще транзакция?

https://its.1c.ru/db/v8std/content/783/hdoc
Основная теорема систематики: Новые системы плодят новые проблемы.