Имя: Пароль:
1C
1С v8
Проблема задваивания записей движений в регистр накопления (остатки)
0 alpha78
 
18.07.22
10:27
Здравствуйте, возникла Проблема задваивания записей движений в регистр накопления
Вот ОбработкаПроведения документа,
работает для каждой строки табличной части документа в регистр накопления записывается 2 строки - так надо - одна для грузчика, другая для водителя
Вот код:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    Движения.ЗарплатаВодителямГрузчикам.Записывать = Истина ;
    
    //зарплата водителям
    Для Каждого Строка Из Маршруты Цикл
        Движение = Движения.ЗарплатаВодителямГрузчикам.Добавить() ;
        Движение.ВидДвижения=ВидДвиженияНакопления.Приход ;
        Движение.Период = Дата ;
        Движение.Регистратор = Ссылка ;
        Движение.Маршрут = Строка.Маршрут ;
        Движение.Тоннаж = Строка.Тоннаж ;
        Движение.Топливо = Строка.Топливо ;
        Движение.Скорость = Строка.Скорость ;
        Движение.Водитель = Строка.Водитель ;
        Движение.Штраф = Строка.Штраф ;
        Движение.Зарплата = Строка.ЗарплатаВодителю ;
        Движение.Итог = Строка.Топливо + Строка.Скорость + Строка.ЗарплатаВодителю - Строка.Штраф ;
        
    КонецЦикла ;
    
    // зарплата грузчикам
    Для Каждого Строка Из Маршруты Цикл

        Если Не Строка.Грузчик.Пустая()Тогда
        
            Движение = Движения.ЗарплатаВодителямГрузчикам.Добавить() ;
            Движение.ВидДвижения=ВидДвиженияНакопления.Приход ;
            Движение.Период = Дата ;
            Движение.Регистратор = Ссылка ;
            Движение.Маршрут = Строка.Маршрут ;
            Движение.Грузчик = Строка.Грузчик ;
            Движение.Зарплата = Строка.ЗарплатаГрузчику ;
            Движение.Итог = Строка.ЗарплатаГрузчику;
        КонецЕсли ;
          
      КонецЦикла ;

    
    Движения.Записать();

    
КонецПроцедуры

Проблема при проведении бывет записывакется как надо - по 1 строке в регистр, а бывает записывается по 2 строки на каждую фамилию (водителя и грузчика),
кто знает подскажите пожалуйста, спасибо.
1 1Сергей
 
18.07.22
10:43
Если в документе не установлено автоматическое удаление движений, и программист не позаботился о их очистке, при каждом проведении будут добавляться новые записи
2 mikecool
 
18.07.22
10:55
+1 значит данные для записи есть
3 mikecool
 
18.07.22
10:56
+2 в первом цикле нет условия
4 alpha78
 
18.07.22
11:49
в начале ОбработкиПроведения()

Движения.ЗарплатаВодителямГрузчикам.Записывать = Истина ;
Движения.ЗарплатаВодителямГрузчикам.Очистить();

затем пишем записи в измерения и ресурсы с документа

процедуру ДвиженияЗаписать() не нужно
5 1Сергей
 
18.07.22
12:13
(4) Тогда ничто не мешает в отладке отловить момент, когда появляются дубли в движениях