Как правильно выводить числовые данные и заголовки на управляемую форму в 1С?

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

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

Причины возникновения специфического поведения интерфейса

Рассмотрим, почему возникают указанные проблемы при попытке динамического формирования надписей на управляемой форме:

  1. Автоматическое двоеточие в заголовке: Если для вывода данных используется элемент типа ПолеФормы (например, с видом Поле надписи или Поле ввода), платформа автоматически добавляет двоеточие в конец заголовка элемента, если свойство ПоложениеЗаголовка установлено в значение Лево или Верх. Если формировать текст заголовка вручную через код "Сумма: " + Значение, на экране получится удвоенное двоеточие.
  2. Ошибка «Поле недоступно для записи»: Коллекция Элементы управляемой формы отвечает только за визуальное отображение графических элементов (управление видимостью, доступностью, цветом и заголовками). Попытка выполнить конструкцию вида Элементы.МоеПоле = Значение вызывает ошибку платформы. Данные формы хранятся исключительно в реквизитах формы (переменных объекта или реквизитах контекста).
  3. Неточное округление при использовании функции Строка(): При преобразовании чисел с плавающей точкой в текст помощью встроенной функции Строка() системный механизм выполняет явную конвертацию без учета формата. Из-за особенностей хранения весовых чисел в памяти вычисленное значение может содержать хвост из девяток или нулей на дальних знаках после запятой.

Вариант 1. Разделение заголовка элемента и значения реквизита

Проанализируем классический подход работы с элементами управления. Для этого мы создаем реквизит формы с типом Число или Строка, связываем его с элементом формы, а в коде обращаемся отдельно к свойству заголовка элемента и напрямую к созданному реквизиту формы.

Разберем пример на коде модуля формы:


// 1. Указываем заголовок поля (платформа сама добавит двоеточие в конец надписи)
Элементы.СуммаПостДопРасх.Заголовок = "Сумма доп. расх.";

// 2. Записываем вычисленное значение в реквизит формы (НЕ в Элементы!)
СуммаПостДопРасх = СуммаДопРасх;

// Аналогично для итоговых показателей
Элементы.ОбщаяСумма.Заголовок = "Сумма всего";
ОбщаяСумма = СуммаПоТекДокументу + СуммаДопРасх;

Вариант 2. Использование элемента «Декорация — надпись»

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

Преимущества данного метода:

  1. Элемент не требует привязки к реквизитам формы.
  2. Платформа **не добавляет** двоеточие к тексту заголовка декорации.
  3. Значение формируется динамически в одну строку с помощью явного форматирования.

Посмотрим на пример установки значения для декорации на форме:


// Использование функции Формат() гарантирует точное выведение знаков после запятой
Элементы.НадписьИтог.Заголовок = "Сумма всего: " + Формат(СуммаПоТекДокументу + СуммаДопРасх, "ЧДЦ=2; ЧГ=0");

Как корректно форматировать числовые данные

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

Проанализируем параметры управляющей строки формата:

  1. ЧДЦ=2 — задает количество отображаемых знаков после запятой (дробная часть).
  2. ЧГ=0 — отключает группировку триад тысяч пробелами, если это необходимо.
  3. ЧРД=, — явно определяет символ-разделитель дробной части.

// Пример форматирования суммы с округлением до двух знаков
ИтоговыйТекст = "Сумма доп. расх.: " + Формат(СуммаДопРасх, "ЧДЦ=2; ЧГ=0");

// Математическое округление перед выводом
ТочнаяСумма = Окр(СуммаПоТекДокументу + СуммаДопРасх, 2, РежимОкругления.Окр15как20);

Таким образом, для правильного вывода данных на управляемую форму 1С достаточно четко разделять обращение к визуальным элементам формы через коллекцию Элементы и обращение к данным через реквизиты, а также использовать Формат() для вывода чисел в текстовом виде.

← На главную