Как изменить позицию и время документа в управляемых формах 1С:Предприятие 8.3

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Выясняем причину отсутствия меню

В управляемых формах концепция взаимодействия с данными изменилась. Платформа стремится минимизировать ручное вмешательство пользователя в системные поля, такие как точное время секунда в секунду, чтобы избежать нарушения последовательностей и логики проведения. Считается, что за правильное позиционирование должна отвечать бизнес-логика конфигурации, заложенная разработчиком. Однако, если пользователю все же необходимо управлять временем, у нас есть несколько путей решения задачи.

Способ 1. Настройка формата отображения даты на форме

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

  1. Откроем управляемую форму документа в конфигураторе.
  2. Найдем элемент формы, связанный с реквизитом Дата.
  3. В свойствах элемента найдем параметр ФорматРедактирования.
  4. Установим строку формата, включающую время: ДФ='dd.MM.yyyy HH:mm:ss'.

После этого пользователь сможет вводить время непосредственно в поле даты, что фактически заменяет ручную установку времени через меню.

Способ 2. Использование свойства «Автовремя» в метаданных

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

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

Способ 3. Программная реализация аналога меню «Установить время»

Если же бизнес-процесс требует, чтобы пользователь иногда (по желанию) менял позицию, мы можем реализовать собственную кнопку. Разберем, как это сделать программно. Для этого используется метод объекта документа УстановитьВремя(). Посмотрим на пример кода, который можно вызвать из команды формы:


&НаСервере
Процедура УстановитьВремяДокументаНаСервере(Режим)
    ОбъектДокумент = РеквизитФормыВЗначение("Объект");
    
    Если Режим = "Начало" Тогда
        ОбъектДокумент.УстановитьВремя(РежимАвтовремени.ВНачалоДня);
    ИначеЕсли Режим = "Конец" Тогда
        ОбъектДокумент.УстановитьВремя(РежимАвтовремени.ВКонецДня);
    Иначе
        ОбъектДокумент.УстановитьВремя(РежимАвтовремени.ТекущееИлиПоследнее);
    КонецЕсли;
    
    ОбъектДокумент.Записать(РежимЗаписиДокумента.Запись);
    ЗначениеВРеквизитФормы(ОбъектДокумент, "Объект");
КонецПроцедуры

Этот метод позволяет гибко управлять позицией, используя системное перечисление РежимАвтовремени. Мы можем вынести эти действия в подменю «Еще» или создать отдельные кнопки на форме.

Важные нюансы: Оперативное проведение и Момент времени

Проанализируем, почему иногда время документа не меняется так, как мы ожидаем. В 1С существует понятие оперативного проведения. Если документ проводится текущей датой в режиме реального времени, система жестко контролирует его позицию, устанавливая актуальное время сервера. В этом случае ручное изменение времени «вперед» или «назад» может быть заблокировано платформой для обеспечения целостности итогов.

Также не стоит забывать о понятии МоментВремени. Позиция документа в базе — это комбинация даты/времени и уникальной ссылки (GUID). Если у двух документов время совпадает до секунды, их относительный порядок определяется именно ссылкой. Это гарантирует отсутствие неопределенности в последовательности документов.

Заключение

Таким образом, хотя прямого аналога старого меню в управляемых формах «из коробки» нет, платформа предоставляет гораздо более мощные инструменты для управления позицией. Мы можем либо настроить визуальное отображение времени для пользователя через Формат, либо автоматизировать процесс через свойства метаданных, либо написать лаконичный программный код для точного позиционирования документа в начале или конце дня.

← На главную