Почему не получается отменить закрытие месяца в 1С:УПП из-за даты запрета изменения данных?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

При попытке отменить регламентные операции закрытия месяца в конфигурации «Управление производственным предприятием» (УПП, редакция 1.3) пользователи часто сталкиваются с ошибкой, сообщающей, что редактирование данных периода закрыто. При этом изменение даты запрета в настройках интерфейса не всегда дает мгновенный результат. Разберем по шагам, почему возникает эта проблема, где система хранит скрытые ограничения и как гарантированно отменить закрытие периода.

Причина 1. Несохраненные настройки и кэширование параметров сеанса

Проанализируем первую и самую распространенную ситуацию: настройки даты запрета были изменены визуально в форме, но не применились к текущей работе системы.

Обратим внимание на следующие технические особенности платформы 1С:Предприятие:

  1. Сохранение формы. Если в заголовке формы настройки дат запрета отображается символ звездочки, данные были модифицированы, но еще не записаны в информационную базу. Обязательно нажмем кнопку сохранения перед повторной попыткой.
  2. Кэширование в сеансе пользователя. Даже для пользователей с полными правами новые значения границ запрета не всегда применяются «на лету». Значения инициализируются в специальном параметре ПараметрыСеанса.ГраницыЗапретаИзмененияДанных. Чтобы сеанс перечитал обновленные настройки, необходимо полностью завершить работу пользователя и заново войти в программу.
  3. Клиент-серверный кэш процессов. В клиент-серверном варианте работы (SQL) значения могут кэшироваться рабочими процессами кластера rphost. Если перезапуск клиента не помог, завершим все зависшие сеансы через консоль администрирования кластера серверов 1С или перезапустим службу ragent.

Причина 2. Ограничения на закладках «Основная дата», группах и пользователях

Механизм контроля дат запрета в УПП 1.3 является многоуровневым. Если дата снята по конкретной организации, это не гарантирует отсутствия блокировок по другим разрезам. Проверим структуру регистра сведений ГраницыЗапретаИзмененияДанных:

  1. Закладка «Основная дата». Проверим, не установлена ли дата запрета на общей закладке. Если там задана граница, она может распространяться на операции, не привязанные к конкретной организации.
  2. Вхождение в группы пользователей. Проанализируем права пользователя. Если сотрудник входит в группу пользователей, для которой установлена более строгая дата запрета, система применит максимальное ограничение.
  3. Персональные настройки пользователя. Добавим в форму настройки дат запрета конкретного пользователя, под которым запускается процедура, и явно укажем для него открытую дату или снимем ограничения.
  4. Флаг контроля полных прав. Убедимся, снят ли флажок «Применять дату запрета для пользователей с полными правами» в настройках программы.

Причина 3. Скрытые записи и движения по регистрам без аналитики организации

Регламентные операции закрытия месяца затрагивают не только документы по одной организации. При проведении или отмене проведения документов расчета себестоимости и распределения затрат система может перезаписывать наборы записей регистров, где измерение «Организация» вовсе отсутствует или не заполнено.

В этом случае срабатывает подписка на событие, проверяющая границу запрета для пустой организации или общую границу. Чтобы обнаружить такие скрытые хвосты, откроем регистр сведений ГраницыЗапретаИзмененияДанных напрямую через меню «Операции — Регистр сведений» или воспользуемся консолью запросов.

Выясним, нет ли в регистре записей со следующими признаками:

  1. Записи, содержащие «Объект не найден» в измерениях пользователей или организаций (битые ссылки после некорректного удаления данных).
  2. Строки с незаполненными (пустыми) ссылками в колонках организации.
  3. Установленные даты по другим организациям информационной базы: при выполнении межхозяйственных расчетов или корректировок система может обращаться к смежным организациям, по которым период остался заблокирован. В таком случае откатим дату запрета по всем организациям базы.

Причина 4. Смещение границ последовательностей документов

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

Если серверный отладчик недоступен (например, служба агента сервера запущена без параметра -debug в системной службе Windows), воспользуемся альтернативными методами локализации:

  1. Журнал регистрации. Откроем «Журнал регистрации» с отбором по уровню события «Ошибка». Запись об отказе всегда содержит точное наименование объекта метаданных (например, РегистрБухгалтерииНаборЗаписей.Хозрасчетный или имя регистра накопления) и период, в который происходила попытка записи.
  2. Пошаговая ручная отмена документов. Вместо использования групповой обработки отмены закрытия месяца, выполним отмену документов вручную в обратной хронологической последовательности:
    1. Определение финансовых результатов / Расчет налога на прибыль;
    2. Расчет себестоимости выпуска;
    3. Списание расходов будущих периодов;
    4. Амортизация ОС и НМА.
    Это позволит точно выявить конкретный регламентный документ, вызывающий ошибку.

Решение проблемы через программную отмену проведения

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

Посмотрим на пример кода:


// Получаем ссылку на проблемный документ регламентной операции
ДокументОбъект = ВыбранныйДокумент.ПолучитьОбъект();

// Включаем режим загрузки данных для отключения проверок и подписок на события
ДокументОбъект.ОбменДанными.Загрузка = Истина;

// Выполняем непосредственную отмену проведения документа
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Свойство ОбменДанными.Загрузка = Истина отключает выполнение прикладных проверок в обработчиках событий и подписках, в том числе стандартную проверку границ запрета изменения данных. Это позволяет очистить движения регламентного документа без глобального открытия периода для всех пользователей базы.

← На главную