В практике работы с программами 1С (особенно в версиях 7.7 и 8.x) часто встречается неприятная ситуация: при обычном перепроведении документа Поступление ТМЦ или Реализация его время автоматически смещается. Это приводит к нарушению логической последовательности: документ «улетает» вперед или назад по временной оси, из-за чего отчеты начинают показывать временные отрицательные остатки («красноту»). Особенно странно это выглядит, когда у администратора системы все работает корректно, а у рядовых менеджеров документы «прыгают».
В данной статье мы подробно разберем причины такого поведения системы и пошагово рассмотрим способы лечения этого «пациента».
Проанализируем ситуацию, когда база данных работает в многопользовательском режиме. Если на компьютере менеджера время спешит или отстает даже на несколько минут относительно сервера или других рабочих станций, возникают коллизии. При записи документа система может пытаться синхронизировать время документа с текущим системным временем локальной машины.
Что необходимо сделать:
Выясним, почему проблема часто проявляется именно у менеджеров. В 1С существует разделение на оперативное и неоперативное проведение. Оперативное проведение всегда фиксирует документ текущим моментом времени (здесь и сейчас), чтобы контроль остатков происходил актуально. Неоперативное проведение (которое чаще доступно администраторам) позволяет записывать документ «задним числом» без изменения его позиции на оси времени.
Если у менеджера в настройках пользователя или в коде конфигурации жестко прописано «Использовать текущее время при проведении», то любой сегодняшний документ при перепроведении будет получать новую метку времени — ту самую секунду, когда была нажата кнопка «ОК».
Рассмотрим техническую сторону вопроса на уровне платформы. В свойствах документов существует механизм управления временем. Если для документа включен режим автоматического установления времени, система может вести себя следующим образом:
Если вы столкнулись со смещением, проверьте, как отрабатывает процедура ПриЗаписи() или подписки на события. Часто разработчики вставляют туда «костыли» для автоматического упорядочивания документов внутри дня.
Посмотрим на ситуацию, когда настройки были изменены, но документ продолжает «прыгать». Настройки параметров пользователя (например, «Использовать текущее время») могут храниться в кэше сеанса или в локальных файлах профиля (AppData). Порой настройки просто не обновляются при активном сеансе пользователя.
Решение: Полностью завершите работу пользователя в 1С, удалите папку кэша и выполните повторный вход. Иногда помогает полное пересоздание учетной записи пользователя в справочнике «Пользователи» или в Конфигураторе.
Проанализируем программный код. Если база не является типовой или в нее вносились изменения, возможно, логика сдвига времени зашита в программный код. Нам необходимо выполнить глобальный поиск по конфигурации. Ищем следующие методы и ключевые слова:
УстановитьВремяАвтоВремяСделатьНепроведеннымТекущееВремяПример кода, который может принудительно менять время (и который стоит проверить в модуле документа):
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
ЭтотОбъект.Дата = ТекущаяДата(); // Вот здесь и происходит сдвиг
КонецЕсли;
КонецПроцедуры
Часто пользователи пытаются перепроводить документы, когда «тянут» последовательность (ГП — граница последовательности). Если в цепочке документов возникает затык (например, не хватает товара из-за того, что расход стоит раньше прихода), менеджер интуитивно пытается «передвинуть» документ. Если это происходит в автоматическом или полуавтоматическом режиме, система может сама корректировать время для соблюдения логики «Сначала приход — потом расход».
Разберем, как с этим бороться:
Для того чтобы окончательно «вылечить пациента», выполните следующие действия совместно с системным администратором:
net time /set на проблемных машинах или настройте автоматическую синхронизацию в Windows.ПриЗапись().Соблюдение этих рекомендаций позволит стабилизировать работу базы данных и избежать появления отрицательных остатков, вызванных хаотичным перемещением документов по временной оси.