Имя: Пароль:
1C
1С v8
Интерактивное редактирование записи регистра сведений
,
0 saksaul
 
30.04.20
08:14
Платформа: 8.3.15.1778

Регистр такой:
Измерения - ВидПрививки и Сотрудник
УФ
Задача: при изменении сотрудника надо перезаполнить его должность и другие значения зависящие от значения сотрудинка.
Проблема:
При редактировании значения одного из измерений записи регистра сведений (в форме записи) возникает новая запись, а старая остается без изменений.
На форме Запись имеет тип МенеджерЗаписи
Как-то я не правильно работаю именно с записью передаваемой на сервер и обратно на форму. Пытаюсь при записи удалять старые данные, в регистре всеравно они остаются, хотя код по удалению отрабатывает без ошибок.

В модуле формы записи у меня такие процедуры:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    //СтарыеЗначенияЗаписи
    ПериодЗаписи = Запись.Период;
    Сотрудник = Запись.Сотрудник;
    ВидПрививки  = Запись.ВидПрививки;
КонецПроцедуры


&НаКлиенте
Процедура СотрудникПриИзменении(Элемент)
    
    СотрудникПриИзмененииНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура СотрудникПриИзмененииНаСервере()
    
    ЗаписьРегистраСервер = РеквизитФормыВЗначение("Запись"); //менеджер записи
    Если НЕ ЗаписьРегистраСервер.Сотрудник = Неопределено Тогда
        ЗаписьРегистраСервер.ФизическоеЛицо = ЗаписьРегистраСервер.Сотрудник.ФизическоеЛицо;
        ЗаписьРегистраСервер.ДатаРождения = ЗаписьРегистраСервер.Сотрудник.ФизическоеЛицо.ДатаРождения;
        
        ДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудников(Истина, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЗаписьРегистраСервер.Сотрудник),
            "Должность", ТекущаяДата());        
        Если ДанныеСотрудника.Количество() > 0 Тогда
            ЗаписьРегистраСервер.Должность = ДанныеСотрудника[0].Должность;
        КонецЕсли;
    Иначе
         ЗаписьРегистраСервер.ДатаРождения  = '00010101';
         ЗаписьРегистраСервер.ФизическоеЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
         ЗаписьРегистраСервер.Должность  = Справочники.ДолжностиОрганизаций.ПустаяСсылка();    
    КонецЕсли;
    
    ЗначениеВРеквизитФормы(ЗаписьРегистраСервер,"Запись");
    
КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    Если НЕ ТекущийОбъект.Сотрудник = Сотрудник Тогда
        НаборПрививки = РегистрыСведений.ХВ_Прививки.СоздатьНаборЗаписей();
        НаборПрививки.Отбор.Период.Установить(ПериодЗаписи);
        НаборПрививки.Отбор.Сотрудник.Установить(Сотрудник);
        НаборПрививки.Отбор.ВидПрививки.Установить(ВидПрививки);
        НаборПрививки.Прочитать();
        Если НаборПрививки.Количество()=1 Тогда
            НаборПрививки.Удалить(0);
        Иначе
            Сообщить("Дублирование записей регистра");    
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры
1 hhhh
 
30.04.20
08:40
(0) старую запись ты должен удалить
2 saksaul
 
30.04.20
10:13
(1) при записи на сервере она и удаляется типа...
Но после закрытия формы появляется обратно. И в процедуру СотрудникПриИзмененииНаСервере я тоже удаление ставил - набор записей отбирается, удаляется и появляется после закрытия формы снова + новая запись. Т.е. где-то в памяти она болтается еще и после закрытия формы записывает обе записи