Имя: Пароль:
1C
1С v8
Превышен лимит итераций перезаполнения видов запасов
0 Hisberg
 
24.05.19
12:16
День добрый.

При использовании помощника исправления остатков товаров организаций, при закрытии месяца, в определенный момент появляется окно с ошибкой "Превышен лимит итераций перезаполнения видов запасов".
После этого сколько не повторяй процедуры, все повторяется. Сообщение не информативно, ни проблемную аналитику, ни проблемный документ не показывает.

Вопрос - как с этим жить. Самое интересное, что для пользователя, не обладающего программными навыками и знанием подкопотного естества 1С эта ситуация перегораживает дорогу к закрытию месяца, ни давая ни информации что не так, ни информации что делать.
Курение гугла результатов не дало.
Хелп.

Конфа Ут 11.4.6.188
Платформа 1с 8.3.13.1513
1 Hisberg
 
24.05.19
12:17
В коде ветка следующая:

Процедура ПерезаполнитьВидыЗапасов() Экспорт
    
    Если Константы.КонтролироватьОстаткиТоваровОрганизаций.Получить() Тогда
        ПараметрыСеанса.ПроводитьБезКонтроляОстатковТоваровОрганизаций = Истина;
    КонецЕсли;
    
    Завершение = Ложь;
    Итерация = 1;
    Пока Не Завершение Цикл
        Если Итерация > 50 Тогда
            ТекстИсключения = НСтр("ru = 'Превышен лимит итераций перезаполнения видов запасов'", Метаданные.ОсновнойЯзык.КодЯзыка);
            ЗаписьЖурналаРегистрации(
                ИмяСобытия(),
                УровеньЖурналаРегистрации.Ошибка,
                Метаданные.Обработки.ПомощникИсправленияОстатковТоваровОрганизаций,
                ,
                ТекстИсключения);
            ВызватьИсключение ТекстИсключения;
        КонецЕсли;
        
        ЗаполнитьСписокДокументовКПерезаполнению();
        Если ДокументыКПерезаполнению.Количество() = 0 Тогда
            Если СледующаяАналитикаРазвернутогоСальдо() Тогда
                ОчиститьРезервы("ПоАналитике");
                Итерация = 1;
                Продолжить;
            Иначе
                Завершение = Истина;
            КонецЕсли;
        Иначе
            СнятьФлагВидыЗапасовУказаныВручную();
            ПерезаполнитьВидыЗапасовИтерация();
            Итерация = Итерация + 1;
        КонецЕсли;
        ДокументыКПерезаполнению.Очистить();
    КонецЦикла;
    
КонецПроцедуры
2 shuhard
 
24.05.19
12:18
(0) [Самое интересное, что для пользователя, не обладающего программными навыками и знанием подкопотного естества 1С эта ситуация перегораживает дорогу к закрытию месяца, ни давая ни информации что не так, ни информации что делать. ]
форум рыдает
3 Hisberg
 
24.05.19
12:19
Как я понимаю, система как то рекурсивно правит виды запасов и в какой то момент налетает на лимит итераций рекурсии.
Вот только разрабы не потрудились данную ситуацию как то документировать.

Второй клиент, вторая подобная ситуация.
4 Valkyrie
 
24.05.19
12:31
(2) К вопросу вымирания программистов 1С как класса лол.
5 Вафель
 
24.05.19
12:35
ну только отладчик в руки.
Что еще скажешь
6 Hisberg
 
24.05.19
14:00
Отладчик показывает, что в процессе перезаполнения видов запасов к 50ой итерации все еще остаются документы к перезаполнению.

Только соль в том, что та проверка, что указана в коде, очевидно является просто заглушкой. Т.е. разработчики УТ\ЕРП просто не предполагали, что до этого дойдет. Иначе описание было бы более более детальное, у ошибки.

Просто я предполагал, что из посетителей форума не я один закрываю\перезакрываю себестоимость в УТ, и может кто то уже нашел универсальное решение данной проблемы, или хотя бы объяснение куда копать.
7 mistеr
 
24.05.19
14:39
(0) >для пользователя, не обладающего программными навыками и знанием подкопотного естества 1С
...существует поддержка.
8 Hisberg
 
27.05.19
06:22
(7) Мне кажется, что Вы перегибаете.
В таком случае из программы можно и отчеты убрать, пусть поддержка консолью смотрит остатки товаров и сообщает их по запросу.

Суть же в том, что месяц закрывает бухгалтер. И если бухгалтер не мудрит, а учет ведется на 99% корректно, без правок задним числом и т.п. да еще и в коробочном продукте, то поддержка для операции закрытия месяца не нужна, так как отчетов должно хватать для анализа, выявления проблем и их исправления.

А тут получается, что при корректном учете и в коробочном продукте даже программист разобраться сходу не может, в чем проблема. Непорядок.
9 ДенисЧ
 
27.05.19
07:05
(8) Значит, учёт ведётся не так, как предполагали разработчики. Т.е. некорректно с их т.з.
10 dmpl
 
27.05.19
07:09
(3) Оно просто зациклилось, потому и превышен лимит.
11 dmpl
 
27.05.19
07:10
(5) Обычно консоль запросов помогает найти косячные виды запасов.

(6) Ну так отмени проведение этих документов и заново проведи.
12 dmpl
 
27.05.19
07:12
(8) А нефиг задним числом править документы и прочие хакерские штучки тоже отложите. Следуйте инструкции. Да, у вас там программно ничего не формируется?
13 Hisberg
 
27.05.19
13:42
Расковырял механизм перезаполнения, понял причину.

Cуть:
Механизм работает следующим образом

1) Еще в процессе захода в помощник исправления остатков товаров организаций, система формирует список отрицательных остатков (с учетом регистра резервов товаров организаций, которые раньше были к передаче, ога).
2) Когда вы, для исправления развернутого сальдо запускаете перезаполнение видов запасов, система начинает циклом обходить аналитики номенклатуры, по которым есть отрицательные остатки.
3) В процессе обхода аналитик запускается цикл с 50 итерациями на каждую аналитику
4) В теле данного цикла система получает список документов регистраторов по данной аналитике за закрываемый период (читай месяц).
5) Каждый полученный регистратор отправляется на принудительное перезаполнение видов запасов.
6) Значение итерации увеличивается
7) После обхода всех документов система вновь получает по данной аналитике остатки с учетом резервов и если они не алё, то повторяет весь карнавал.
8) Если вдруг вы налетели на 50 итераций подряд, словите эксепшен, уважаемый.
9) PROFIT??7

Т.е. если по какой-либо причине, ваши остатки система не выравняла сама, своими силами, хотя бы по одной из аналитик, то она не пропустит ее и пойдет дальше, не остановится и скажет с какой аналитикой проблема, а просто вывалит ошибку ошибку с сообщением о том, что количество итераций превышено.

Конкретно в нашем случае УТ просто не смогла найти остатки для списывания, так как не указан номер ГТД.

(9) Да нет, все по заветам УТ и с доступными настройками учета

(10) Это по вашему достаточное оправдание и объяснение ситуации? Во-первых "зацикливания" как такового не было, это просто ограниченный количеством итераций цикл, Во-вторых - данный подход ставит пользователя програмного продукта в положение "делай с этим что хош теперь))0)"

(11) Проблема не в видах запасов, да и суть вопроса была скорее в том, что ошибка не информативна, и поначалу мне показалось, что проблема системная, а оказалось, что реализация просто некачественная.

(12) Программно ничего не формируется, "Хакерские штучки" даже не брали в руки и точно следовали инструкции закрытия месяца.
Но даже если бы мы это все делали, попутно обмазываясь перепроведением документов задним числом с анальным редактированием всего что только редактируется, то это все еще не объясняет неинформативности сообщения УТ и отсутствия возможности "разрулить" вопрос без отладчика и горчичника в районе седалища.
14 dmpl
 
27.05.19
14:57
(13) Пользователям просто надо правильно вводить данные. И включить контроль отрицательных остатков.
15 Cyberhawk
 
27.05.19
15:52
Несоответствие ожиданий и наблюдаемого - частая причина боли
16 Hisberg
 
28.05.19
09:19
(14) при интеркампани "правильно" как раз отключать контроль отрицательных остатков.

>Пользователям просто надо правильно вводить данные
Заявление типа: "НАРМАЛЬНА ДЕЛАЙ - НАРМАЛЬНА БУДЕТ, ЕЖЖИ!"

Коню понятно, что нужно данные вводить правильно. Вот только правильно - понятие растяжимое. Штатный функционал УТ позволяет отключать контроль остатков организаций для интеркампани, так же как и позволяется отключать жесткий контроль по ГТД, что никак не мешает работе системы.

Повторюсь, в третий раз, мое недовольство основано на том, что в программе явно есть концептуальная дыра, которая не предполагается в продуктах таких масштабов как УТ.

Саму же проблему я решил да и разобрался как работает, так что всем зрителям сего процесса - спасибо.