При обновлении конфигурации 1С:Зарплата и управление персоналом 8 на ветку 3.1.10 многие администраторы и программисты сталкиваются с критической остановкой процесса обновления. Система выдает сообщение о том, что выполнение прервано для предотвращения зацикливания механизма обработки данных. Чаще всего это происходит на шагах, связанных с заполнением данных по документам Возврат из отпуска по уходу за ребенком или Отпуск по уходу за ребенком.
В этой статье мы подробно разберем, почему возникает эта ошибка, как найти проблемные документы в базе и какие существуют способы решения — от ручной корректировки до использования программных методов.
Для начала проанализируем, что именно изменилось в версии 3.1.10. Разработчики 1С перешли от использования регистра накопления ЗанятыеПозицииШтатногоРасписания к новой системе, построенной на базе регистров сведений. Теперь за учет занятости отвечают ЗанятостьПозицийШтатногоРасписания и его вспомогательный интервальный регистр.
Проблема зацикливания (ошибка 30168669) возникает в механизме Библиотеки стандартных подсистем (БСП). Когда обработчик обновления пытается пересчитать движения документа, он натыкается на логическую коллизию в данных (например, накладывающиеся периоды). Система помечает порцию данных как необработанную и пробует запустить процедуру снова. БСП по умолчанию предоставляет 10 попыток. Если после десятого раза ситуация не исправляется, выдается исключение: Превышено допустимое количество запусков процедуры обновления.
Проанализируем наиболее частые случаи, на которых спотыкается алгоритм формирования интервалов:
Возврат из отпуска по уходу за ребенком) и в этот же самый день увольняется или уходит в новый отпуск по беременности и родам.Освободить ставку, а в другом документе, введенном той же датой, происходит движение по той же позиции штатного расписания.Если документов в базе немного, мы можем воспользоваться методом исключения. Рассмотрим алгоритм действий:
Возврат из отпуска по уходу за ребенком.Функции для технического специалиста — Регистры сведений — Обновление информационной базы.Иногда коллизия возникает из-за того, что два документа имеют одинаковое время (например, 00:00:00). Разберем, как можно развести эти события. Если Возврат из отпуска по уходу за ребенком и Увольнение созданы одной датой, попробуем установить время возврата на 09:00:00, а увольнения — на 18:00:00.
Для массовой проверки можно воспользоваться простейшим запросом в консоли отчетов, чтобы найти сотрудников, у которых в один день зарегистрировано несколько кадровых изменений:
ВЫБРАТЬ
КадровыеПереводы.Сотрудник,
КадровыеПереводы.Период,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КадровыеПереводы.Регистратор) КАК КолДокументов
ИЗ
РегистрСведений.ДанныеСостоянийСотрудников КАК КадровыеПереводы
СГРУППИРОВАТЬ ПО
КадровыеПереводы.Сотрудник,
КадровыеПереводы.Период
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КадровыеПереводы.Регистратор) > 1
Важный момент: Если вы обнаружили такие записи, попробуйте разнести их по времени или убедитесь, что последовательность документов логична с точки зрения программы.
Существует еще одна техническая ошибка (30168494), которая проявляется на этапе обновления кадрового учета. Она связана с тем, что в коде запроса используется конструкция УПОРЯДОЧИТЬ ПО без использования ПЕРВЫЕ внутри вложенных запросов или при формировании временных таблиц. Это вызывает ошибку на стороне СУБД (особенно на актуальных версиях платформы 8.3.12+).
Если вы столкнулись с сообщением При формировании временной таблицы предложение УПОРЯДОЧИТЬ может использоваться только совместно с предложением ПЕРВЫЕ, необходимо либо обновить конфигурацию до релиза 3.1.10.50 и выше, либо (если вы программист) внести правки в общий модуль КадровыйУчетРасширенный, удалив лишнюю сортировку в проблемном запросе.
Фирма 1С официально признала данные ошибки и выпустила исправления. Рассмотрим хронологию:
Посмотрим на рекомендации вендора: если ваша база «застряла» на промежуточном тестовом или раннем релизе 3.1.10, лучшим решением будет обновиться до версии 3.1.10.110 или выше. В этих сборках алгоритмы обновления стали гораздо устойчивее к некорректным историческим данным.
Подводя итог, отметим, что ошибка зацикливания — это не всегда признак поломки базы данных. Чаще всего это следствие неоднозначности кадровых данных, которые новая строгая модель интервального учета не может переварить автоматически.
Рассмотрим краткий чек-лист при возникновении проблемы:
Возврат из отпуска по уходу на предмет корректности флага освобождения ставок.