При работе с устаревшими, но все еще актуальными системами на базе 1С:Предприятие 7.7, разработчики и администраторы часто сталкиваются с парадоксальной ситуацией. Пользователю назначаются права на проведение документа, но запрещается проведение «задним числом». Казалось бы, логика проста: создавай новые документы текущим моментом, а старые не трогай. Однако система выдает ошибку «Недостаточно прав доступа» даже при попытке провести совершенно новый, только что созданный документ. В этой статье мы подробно разберем, почему штатные механизмы прав 1С 7.7 работают именно так, и как элегантно решить эту задачу с помощью программного кода.
Для начала проанализируем внутреннюю архитектуру платформы 1С 7.7. В отличие от более современных версий (8.x), в «семерке» ключевым понятием является Точка актуальности (ТА). ТА — это своего рода временная метка, по которую система рассчитала все итоги (бухгалтерские и регистровые). Любой документ, записываемый в систему, соотносится с этой меткой.
Рассмотрим подробнее два режима проведения:
Проблема заключается в том, что если в базе уже есть документы, записанные «будущим временем» (например, ошибочно введенный документ следующего дня или даже документ, записанный концом текущего дня), то ТА смещается вперед. Для пользователя, у которого в конфигураторе снята галочка «Проведение документов задним числом», любая попытка провести документ временем раньше этой ТА будет расцениваться системой как нарушение прав. Даже если пользователь пытается провести документ текущей датой, но ТА «убежала» вперед из-за действий коллег или специфических настроек, система выдаст отказ.
Прежде чем приступать к правкам кода, проанализируем ситуацию в журнале документов. Если вы столкнулись с подобной ошибкой, выполните следующие действия:
Если ТА смещена вперед, любой новый документ, который система пытается записать «текущим временем», автоматически становится «документом заднего числа» относительно ТА. Именно поэтому штатный запрет в Конфигураторе оказывается слишком жестким и нежизнеспособным в условиях реальной многопользовательской работы.
Если проблема возникла разово (например, кто-то случайно ввел документ 2029 годом), можно исправить ситуацию административными методами. Разберем, как это сделать:
Однако этот метод не решает проблему системно, так как ТА постоянно движется, и пользователи неизбежно будут «выпадать» из оперативного режима.
Опытные разработчики 1С 7.7 давно пришли к выводу, что стандартная галочка «Проведение документов задним числом» в правах доступа — это «зло», которое лучше не использовать для рядовых сотрудников. Вместо этого мы поступим следующим образом: разрешим пользователю в Конфигураторе всё (и проведение, и проведение задним числом), но добавим жесткую проверку в код самого документа.
Проанализируем пример кода, который нужно разместить в модуле формы документа в предопределенной процедуре ПриЗаписи(). Этот подход позволит нам гибко управлять логикой: например, разрешить редактировать документы текущего дня, но запретить трогать прошлые даты.
Рассмотрим пример реализации:
Процедура ПриЗаписи()
// Проверяем, является ли пользователь администратором
// Если в системе настроены наборы прав, используем НазваниеНабораПрав()
Если НазваниеНабораПрав() <> "Администратор" Тогда
// Если документ уже был проведен и мы пытаемся его перепровести
// или если дата документа меньше текущей рабочей даты
Если (РабочаяДата() > ДатаДок) Тогда
Предупреждение("У вас недостаточно прав для проведения документов прошлыми датами!", 10);
СтатусВозврата(0); // Отменяем запись/проведение
Возврат;
КонецЕсли;
// Дополнительная проверка на изменение уже проведенного документа
Если (Выбран() = 1) И (Проведен() = 1) Тогда
// Здесь можно добавить логику запрета редактирования старых проведенных документов
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Используя данный метод, мы получаем несколько важных преимуществ:
Чтобы минимизировать конфликты с ТА, также рекомендуется проверить настройки в меню Сервис — Параметры — Журналы. Выясним, как установлена опция «Автоматическая установка времени». Для корректной работы без лишних вопросов системы лучше выставлять значения:
В конец дня или После ТА.Текущее время.Это позволит новым документам автоматически «вставать» в очередь максимально близко к Точке актуальности, минимизируя вероятность срабатывания запретов на проведение задним числом.
Мы проанализировали специфику работы 1С 7.7 и выяснили, что стандартный запрет на проведение документов задним числом часто блокирует нормальную работу из-за механизмов управления временем в платформе. Оптимальный путь решения — это сочетание разрешающих прав в Конфигураторе с грамотной программной проверкой в процедуре ПриЗаписи() или ОбработкаПроведения(). Это сохранит целостность данных и избавит администратора от постоянных жалоб пользователей на ошибки доступа.