Переход с управляемых форм на обычные (используемые в версиях 8.0, 8.1 и в режиме обычного приложения в 8.2/8.3) часто вызывает сложности у разработчиков. Основная причина заключается в принципиально ином подходе к визуальному конструированию и программной логике. Если в управляемых формах платформа берет на себя значительную часть работы по отрисовке интерфейса, то в обычных формах программист получает полный контроль над каждым пикселем, что требует знания специфических механизмов.
Разберем подробно основные аспекты, которые необходимо изучить для эффективной работы с обычными формами, основываясь на рекомендациях опытных разработчиков и классической литературе 1С.
Для тех, кто ищет структурированные знания, лучшим стартом остается книга «1С:Предприятие 8.1. Практическое пособие разработчика. Примеры и типовые приемы» под авторством М.Г. Радченко. Несмотря на то что книга была выпущена почти 20 лет назад, она остается «библией» обычных форм. В ней подробно рассматриваются:
Эту книгу часто можно найти на вторичном рынке (например, на Авито) или приобрести непосредственно в издательстве «1С-Паблишинг». Для жителей Москвы актуален адрес на Долгоруковской улице, где литература прошлых лет иногда продается по сниженным ценам.
В отличие от управляемых форм, где элементы автоматически выстраиваются в группы, в обычных формах используется позиционирование «pixel-perfect». Рассмотрим, как это работает на практике.
Координаты: Каждый элемент на форме имеет четкие физические параметры: Лево, Верх, Ширина и Высота. Вы можете перетаскивать элементы мышкой в любое место, накладывать их друг на друга и выравнивать по сетке. Однако это создает проблему при изменении размеров окна пользователем.
Привязки (Anchors): Чтобы форма корректно растягивалась, проанализируем настройки привязок. Для каждой границы элемента (Левая, Правая, Верхняя, Нижняя) нужно вручную указать, к чему она «привязана»:
Если пренебречь настройкой привязок, интерфейс вашей обработки при разворачивании на весь экран «сломается»: кнопки останутся в левом верхнем углу, а табличные части не увеличатся.
Проанализируем программный код модуля обычной формы. Здесь вы не встретите привычных &НаКлиенте или &НаСервере. Все процедуры и функции модуля формы выполняются на стороне клиента.
Это накладывает определенные особенности на разработку:
ЭтотОбъект) напрямую. Не нужно передавать данные между клиентом и сервером через параметры.СправочникОбъект.Записать()) платформа сама инициирует серверный вызов.Сервер.Рассмотрим вопрос вывода списков, который часто ставит в тупик новичков. В обычных формах для этого используется элемент управления Табличное поле.
Чтобы вывести, например, список документов, выполним следующие шаги:
Табличное поле.Данные укажем тип значения, например, ДокументСписок.РеализацияТоваровУслуг.В обычных формах нет мощного механизма «Динамического списка» на базе СКД, как в управляемых. Для программной фильтрации списка мы обращаемся к свойству Отбор:
// Пример установки фильтра в обычном приложении
ДокументСписок.Отбор.Дата.Использование = Истина;
ДокументСписок.Отбор.Дата.ВидСравнения = ВидСравнения.Интервал;
ДокументСписок.Отбор.Дата.ЗначениеС = НачалоДня(ТекущаяДата());
ДокументСписок.Отбор.Дата.ЗначениеПо = КонецДня(ТекущаяДата());
Выясним, как раскрашивать строки в обычных формах, так как привычного «Условного оформления» здесь нет. Вся визуализация происходит программно через события.
Событие ПриВыводеСтроки: Это основной инструмент оформления. Оно вызывается для каждой строки, которая в данный момент отрисовывается на экране.
Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Разберем пример выделения цветом проведенных документов
Если ДанныеСтроки.Проведен Тогда
ОформлениеСтроки.ЦветТекста = ЦветаСтиля.ЦветПроведенногоДокумента;
Иначе
ОформлениеСтроки.ЦветТекста = ЦветаСтиля.ЦветНепроведенногоДокумента;
КонецЕсли;
КонецПроцедуры
Важное замечание: Внутри события ПриВыводеСтроки категорически нельзя выполнять запросы к базе данных, так как это критически замедлит прокрутку списка. Если нужно подтянуть данные из других таблиц, используйте событие ПриПолученииДанных, которое позволяет обработать сразу весь массив видимых строк одним запросом.
Поскольку официальная поддержка обычных форм постепенно сокращается, лучшим учителем для вас станет анализ кода типовых конфигураций старого поколения. Посмотрите, как реализованы формы в таких программных продуктах, как:
Проанализируем структуру процедур ПриОткрытии и ПередЗаписью в этих конфигурациях. Вы увидите, как передаются параметры через структуру ПараметрыФормы и как программно создаются элементы управления, если их недостаточно на этапе проектирования в конфигураторе. Сочетание изучения книги Радченко и практики реверс-инжиниринга типового кода позволит вам в кратчайшие сроки освоить обычные формы 1С.