При работе с управляемыми формами платформы 1С:Предприятие 8 начинающие разработчики часто сталкиваются с неожиданным поведение интерфейса: появлением двоеточия в конце текстовых меток, ошибкой «Поле недоступно для записи» при попытке присвоить значение элементу формы или некорректным отображением дробных чисел. Проанализируем эти проблемы и разберем правильные варианты вывода информации на форму.
Рассмотрим, почему возникают указанные проблемы при попытке динамического формирования надписей на управляемой форме:
ПолеФормы (например, с видом Поле надписи или Поле ввода), платформа автоматически добавляет двоеточие в конец заголовка элемента, если свойство ПоложениеЗаголовка установлено в значение Лево или Верх. Если формировать текст заголовка вручную через код "Сумма: " + Значение, на экране получится удвоенное двоеточие.Элементы управляемой формы отвечает только за визуальное отображение графических элементов (управление видимостью, доступностью, цветом и заголовками). Попытка выполнить конструкцию вида Элементы.МоеПоле = Значение вызывает ошибку платформы. Данные формы хранятся исключительно в реквизитах формы (переменных объекта или реквизитах контекста).Строка(): При преобразовании чисел с плавающей точкой в текст помощью встроенной функции Строка() системный механизм выполняет явную конвертацию без учета формата. Из-за особенностей хранения весовых чисел в памяти вычисленное значение может содержать хвост из девяток или нулей на дальних знаках после запятой.Проанализируем классический подход работы с элементами управления. Для этого мы создаем реквизит формы с типом Число или Строка, связываем его с элементом формы, а в коде обращаемся отдельно к свойству заголовка элемента и напрямую к созданному реквизиту формы.
Разберем пример на коде модуля формы:
// 1. Указываем заголовок поля (платформа сама добавит двоеточие в конец надписи)
Элементы.СуммаПостДопРасх.Заголовок = "Сумма доп. расх.";
// 2. Записываем вычисленное значение в реквизит формы (НЕ в Элементы!)
СуммаПостДопРасх = СуммаДопРасх;
// Аналогично для итоговых показателей
Элементы.ОбщаяСумма.Заголовок = "Сумма всего";
ОбщаяСумма = СуммаПоТекДокументу + СуммаДопРасх;
Если требуется вывести статичную или динамическую информационную надпись без создания дополнительных реквизитов формы и без автоматического добавления двоеточий, идеальным решением служит элемент типа Декорация с видом Надпись.
Преимущества данного метода:
Посмотрим на пример установки значения для декорации на форме:
// Использование функции Формат() гарантирует точное выведение знаков после запятой
Элементы.НадписьИтог.Заголовок = "Сумма всего: " + Формат(СуммаПоТекДокументу + СуммаДопРасх, "ЧДЦ=2; ЧГ=0");
Чтобы избежать ошибок округления и некрасивого вывода чисел, вместо стандартной функции Строка() рекомендуем использовать функцию Формат() или предварительное явное математическое округление функции Окр().
Проанализируем параметры управляющей строки формата:
ЧДЦ=2 — задает количество отображаемых знаков после запятой (дробная часть).ЧГ=0 — отключает группировку триад тысяч пробелами, если это необходимо.ЧРД=, — явно определяет символ-разделитель дробной части.
// Пример форматирования суммы с округлением до двух знаков
ИтоговыйТекст = "Сумма доп. расх.: " + Формат(СуммаДопРасх, "ЧДЦ=2; ЧГ=0");
// Математическое округление перед выводом
ТочнаяСумма = Окр(СуммаПоТекДокументу + СуммаДопРасх, 2, РежимОкругления.Окр15как20);
Таким образом, для правильного вывода данных на управляемую форму 1С достаточно четко разделять обращение к визуальным элементам формы через коллекцию Элементы и обращение к данным через реквизиты, а также использовать Формат() для вывода чисел в текстовом виде.