Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Групповое проведение документов

Групповое проведение документов
Я
   Ugr2019
 
22.04.19 - 10:33
Добрый день.
На протяжении длительного времени не получается решить следующую проблему:
Существует дописка к бухгалтерии 3.0, реализующая производственный блок.
В числе прочих, есть обработка перевыдачи заданий на смену, которая собирает все невыполненные Задания за предыдущую смену, формирует один документ ЗакрытиеЗаданий, который делает Расход по регистру накопления Задания и множество документов Задания, повторяющие закрытые Задания. В обработке проведения документа Задание описано формирование Прихода по регистру накопления Задания, а также Расход по данному регистру (механизм аналогичен документу ЗакрытиеЗаданий, но имеет другое назначение).
Так вот, если Приход в документе Задание формируется жестко по табличной части самого документа, то Расход формируется динамически, путем запроса к остаткам регистра накопления Задания на момент времени проводимого документа.
Обработка собирает ссылки на Задания в массив; затем, после формирования всех документов осуществляется проведение ЗакрытияЗадания и затем всех Заданий.
    
МассивНовыхЗаданийКоличество = МассивНовыхЗаданий.Количество();
    Если ДокЗакрытия.СписокЗакрытия.Количество() > 0 тогда
        ДокЗакрытия.Дата = ТекущаяДата()-МассивНовыхЗаданийКоличество-121;
        ДокЗакрытия.Записать();
        ЕстьОшибка = Ложь;
        Попытка
            Докзакрытия.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Исключение
            Сообщить("Не удалось провести документ закрытия заданий " +  Докзакрытия);
        КонецПопытки;
        
    КонецЕсли;
    
    Сч = МассивНовыхЗаданийКоличество;
    Для каждого НовЗадание из МассивНовыхЗаданий Цикл
        ДокЗаданиеЦикла = НовЗадание.Ссылка.ПолучитьОбъект();
        
        ДокЗаданиеЦикла.Дата = ТекущаяДата()-Сч;
        Сч = Сч - 1;
        Попытка
            ДокЗаданиеЦикла.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
        Исключение
            Сообщить("Не удалось провести задание " +  ДокЗаданиеЦикла);
        КонецПопытки;
    КонецЦикла;

Теперь собственно о проблеме: Иногда в результате проведения документов Задание появляются отрицательные остатки в регистре Задания. То есть, проводимое задание не видит движений, создаваемых ЗакрытиемЗадания! Причем
1. Это происходит не всегда, в большинстве случаев алгоритм отрабатывает нормально.
2. Иногда проблема проявляется только на части документов (следующих первыми) последняя часть проводимых документов видит расход.
3. При перепроведении проблемного Задания, сделавшего лишнее расходное движение, Расход исчезает (дата, время остаются неизменными).

Пробовал и оперативное и неоперативное проведение. Как видите, разнес документы по времени (в целях эксперимента повторял цикл проведения Заданий дважды), проблема остается.
Может кто знает, что нужно сделать, чтобы при проведении все Задания всегда видели движения документа ЗакрытиеЗадания?
 
 

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует