В работе с конфигурацией 1С:Управление торговлей редакции 10.3 пользователи часто сталкиваются с ситуацией, когда штатный механизм восстановления последовательностей (партионного учета) перестает функционировать. Типичные симптомы: в поле «Дата» отображается пустое значение 01.01.0001, при попытке нажать кнопку «Выполнить» галочка с даты просто исчезает, а процесс обработки документов не запускается. Разберем подробно, почему это происходит и как реанимировать механизм последовательностей.
Дата 01.01.0001 в системе 1С является «пустой» датой. Если она отображается в границе последовательности, это означает, что система не может определить документ-регистратор, с которого нужно начать перепроведение, либо в таблице границ последовательностей возникла логическая ошибка. Проанализируем основные причины: повреждение индексов базы данных, наличие документов с некорректными датами (например, из будущего или глубокого прошлого) или программный сбой при записи границы. Рассмотрим пошагово методы диагностики и исправления.
Первым делом нам необходимо понять, что именно «видит» система в таблице последовательностей. Для этого воспользуемся консолью запросов. Нам нужно проверить содержимое таблицы Последовательность.ПартионныйУчет. Проанализируем ситуацию с помощью следующего запроса:
ВЫБРАТЬ
ПартионныйУчет.Период КАК Период,
ПартионныйУчет.Регистратор КАК Регистратор,
ПартионныйУчет.МоментВремени КАК МоментВремени
ИЗ
Последовательность.ПартионныйУчет КАК ПартионныйУчет
УПОРЯДОЧИТЬ ПО
Период
Если в результате запроса мы видим записи, где Регистратор имеет значение <Объект не найден>, это явный признак «битых» ссылок. Также обратите внимание на поле Период. Если там встречаются даты 3999 год или 0001 год, именно они блокируют работу штатной обработки.
Если стандартный интерфейс «завис» и не позволяет сдвинуть дату с мертвой точки, мы можем принудительно установить границу последовательности программным путем. Это часто «подталкивает» механизм, и в дальнейшем штатная обработка начинает работать корректно. Создадим небольшую внешнюю обработку и выполним следующий код:
// Выберем дату, на которую мы хотим установить границу (например, начало текущего года)
НужнаяДата = НачалоГода(ТекущаяДата());
// Устанавливаем границу последовательности
Последовательности.ПартионныйУчет.УстановитьГраницу(НужнаяДата);
Сообщить("Граница последовательности успешно установлена на " + НужнаяДата);
Важный момент: если вы знаете конкретный документ, который должен стать точкой отсчета, лучше использовать метод установки по моменту времени конкретного документа. Рассмотрим пример:
СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("000001", ТекущаяДата());
Если Не СсылкаНаДокумент.Пустая() Тогда
МВ = СсылкаНаДокумент.МоментВремени();
Последовательности.ПартионныйУчет.УстановитьГраницу(МВ);
Сообщить("Граница установлена на документ: " + СсылкаНаДокумент);
КонецЕсли;
Часто проблема кроется не в самой последовательности, а в данных, которые в нее попадают. Если в базе есть документ с датой 01.01.0001 или 31.12.3999, система при попытке рассчитать границу может выдать ошибку или просто прекратить выполнение операции. Разберем, как найти такие документы. Проанализируем таблицы через запрос:
ВЫБРАТЬ
Ссылка,
Дата
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Дата < ДАТАВРЕМЯ(1900, 1, 1) ИЛИ Дата > ДАТАВРЕМЯ(2100, 1, 1)
Такой поиск необходимо провести по всем типам документов, которые входят в последовательность ПартионныйУчет (Поступления, Реализации, Перемещения, Требования-накладные и т.д.). Если такие документы найдены, их даты необходимо исправить вручную.
Если программная установка не помогла, следует выполнить физическую проверку базы. Рассмотрим последовательность действий:
bin платформы 1С. Она проверяет физическую целостность файлов .1CD. Часто проблема кроется в поврежденных индексах таблицы границ последовательностей, которые не видны из конфигуратора.Иногда причина «слетающей» галочки тривиальна — нехватка прав доступа. Выясним, достаточно ли прав у пользователя, запускающего восстановление. Попробуйте запустить процедуру под пользователем с ролью ПолныеПрава.
Также проанализируем настройки учетной политики. Перейдите в меню: Настройка учета — Учетная политика. Проверьте, включен ли там «Партионный учет». Если в настройках указано «Списывать партии при проведении документов», но сама последовательность «сломана», система может вести себя непредсказуемо. Попробуйте временно отключить и снова включить опцию партионного учета, это инициирует перезапись некоторых системных констант.
В самых сложных случаях, особенно на SQL-версиях, помогает полная очистка таблицы границ. Это заставит систему пересчитать всё «с нуля». Выполняется это программно командой:
Набор = Последовательности.ПартионныйУчет.СоздатьНаборЗаписей();
Набор.Записать();
После выполнения этого кода граница будет полностью сброшена. После этого вы сможете зайти в стандартную обработку и установить нужную вам дату начала восстановления. Система воспримет это как новую задачу и начнет последовательное перепроведение документов без учета старых ошибок.
Подводя итог, можно сказать, что проблема «пустой даты» в УТ 10.3 обычно решается либо программной установкой границы, либо исправлением битых ссылок через тестирование и исправление. Совместное использование этих методов позволяет восстановить работоспособность базы даже в самых запущенных случаях.