Имя: Пароль:
1C
 
Удаление и создание новых записей подчиненного регистра сведений
↓ (Волшебник 02.10.2025 10:06)
0 Way
 
02.10.25
09:01
Добрые люди, прошу помощи.При проведении документа записи регистра сведений успешно создаются, если перепровести документ, то записи по этому регистру не пересоздаются, а удаляются, но если провести третий раз - они снова создаются.  
В чем причина? Влияет ли как-то тот факт, что регистр сведений создан в расширении?

Процедура СформироватьДвиженияИсторииДополнительныхПоказателейШтатногоРасписания(Регистратор) Экспорт
    
    // Удаляем старые движения регистра
УдалитьСтарыеЗаписиРегистра(Регистратор);
    
    НаборЗаписейДобавление = РегистрыСведений.ИсторияДополнительныхПоказателейШтатногоРасписания.СоздатьНаборЗаписей();
    НаборЗаписейДобавление.Отбор.Регистратор.Установить(Регистратор);
    // Определяем дату в зависимости от типа документа
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ИзменениеШтатногоРасписания") Тогда
        Дата = Регистратор.ДатаВступленияВСилу;
    ИначеЕсли ТипЗнч(Регистратор) = Тип("ДокументСсылка.УтверждениеШтатногоРасписания") Тогда
        Дата = Регистратор.МесяцВступленияВСилу;
    КонецЕсли;

    // Добавляем новые записи
    Для каждого СтрокаТЧ из Регистратор.Позиции Цикл
        НоваяЗапись = НаборЗаписейДобавление.Добавить();
        НоваяЗапись.Регистратор = Регистратор;    
        НоваяЗапись.Дата = Дата;
        
        Если Не СтрокаТЧ.Позиция.Закрыта Тогда
            НоваяЗапись.Используется = Истина;
        Иначе
            НоваяЗапись.Используется = Ложь;
        КонецЕсли;
        
        НоваяЗапись.ПозицияШтатногоРасписания = СтрокаТЧ.Позиция;
        НоваяЗапись.КлассПозицииШтатногоРасписания = СтрокаТЧ.КлассПозицииШтатногоРасписания;
        НоваяЗапись.ПА_Категория = СтрокаТЧ.ПА_Категория;
        НоваяЗапись.ПА_Участок = СтрокаТЧ.ПА_Участок;
        НоваяЗапись.ПА_РазрядКатегорияИТР = СтрокаТЧ.ПА_РазрядКатегорияИТР;
    КонецЦикла;

    НаборЗаписейДобавление.Записать();
    
КонецПроцедуры

Процедура УдалитьСтарыеЗаписиРегистра(Регистратор)
   НаборЗаписейУдаления = РегистрыСведений.ИсторияДополнительныхПоказателейШтатногоРасписания.СоздатьНаборЗаписей();
    НаборЗаписейУдаления.Отбор.Регистратор.Установить(Регистратор);
    НаборЗаписейУдаления.Прочитать();
    НаборЗаписейУдаления.Записать();    
КонецПроцедуры
1 Волшебник
 
02.10.25
09:13
Надо обращаться через Движения
2 Way
 
02.10.25
09:35
(1) Регистраторами выступают документ "Изменения штатного расписания" и "Утверждение штатного расписания". У них же нет движений
3 Way
 
02.10.25
09:40
(1) Я дурачек, движения есть, буду пробовать, спасибо!
4 Irbis
 
02.10.25
09:42
А зачем НаборЗаписейУдаления.Прочитать(); при очистке набора?
5 СвинТуз
 
02.10.25
09:44
(3)
Еще есть обработка проведения с конструктором движений.
При этом если нормально организоваться удалять записи не нужно старые.
Отборы ставить не надо.
6 СвинТуз
 
02.10.25
09:45
Осторожно у неумелого программиста конструктор движений
стирает старый текст модуля обработки проведения.
7 Way
 
02.10.25
09:47
(6) Можно пожалуйста подробнее, чтобы не попасть в просак
8 СвинТуз
 
02.10.25
09:49
просак это место у женщины между тем и этим

в книгах много что есть.
9 СвинТуз
 
02.10.25
09:51
конструктор движений при вызове
должен предупреждать, что затрет обработку проведения.
не игнорьте.

откуда он вызывается?
Коллег рядом совсем нет?
10 Way
 
02.10.25
09:52
(8) Да, я в курсе
11 СвинТуз
 
02.10.25
09:56
(10)
Просак - это станок, предназначенный для плетения веревок и канатов. Попадание в него бороды или волос могло привести к тяжелым увечьям.
12 Way
 
02.10.25
10:16
(11) Разобрался. Движения по всем подчиненным регистрам очищаются в основном коде. Создал новые через НаборЗаписейДобавление = Регистратор.Движения.ИсторияДополнительныхПоказателейШтатногоРасписания; и все заработало :)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс