Программная доработка форм типовых конфигураций
В типовых конфигурациях в формах ПриСозданииНаСервере вызывается метод общего модуля СобытияФорм (см. скрин 1). Если расширить только этот модуль, то можно в одном модуле собрать все программные модификации форм (см. скрин 2).
Получается удобная универсальная оснастка, которую можно тиражировать во все свои проекты.
@yellow_pad | #совет #оснастка #Форма #листинг
В типовых конфигурациях в формах ПриСозданииНаСервере вызывается метод общего модуля СобытияФорм (см. скрин 1). Если расширить только этот модуль, то можно в одном модуле собрать все программные модификации форм (см. скрин 2).
Получается удобная универсальная оснастка, которую можно тиражировать во все свои проекты.
@yellow_pad | #совет #оснастка #Форма #листинг
Как правильно сделать условное оформление
По правилам системы стандартов и методик условное оформление рекомендуется делать программно в коде формы при создании на сервере, а не в настройках оформления элемента формы. Вот выдержка из ССиМ:
Такой подход имеет ряд преимуществ перед заданием настроек условного оформления в свойствах формы:
• настройки однотипного условного оформления можно вынести в общие модули
• при объединении конфигураций есть возможность объединять условное оформление
• при изменении в метаданных (например, переименовании значения перечисления) условное оформление может перестать работать. Если условное оформление настраивается в коде конфигурации, то при синтаксическом контроле модулей эта ошибка будет выявлена.
Пример процедуры установки условного оформления:
По правилам системы стандартов и методик условное оформление рекомендуется делать программно в коде формы при создании на сервере, а не в настройках оформления элемента формы. Вот выдержка из ССиМ:
Такой подход имеет ряд преимуществ перед заданием настроек условного оформления в свойствах формы:
• настройки однотипного условного оформления можно вынести в общие модули
• при объединении конфигураций есть возможность объединять условное оформление
• при изменении в метаданных (например, переименовании значения перечисления) условное оформление может перестать работать. Если условное оформление настраивается в коде конфигурации, то при синтаксическом контроле модулей эта ошибка будет выявлена.
Пример процедуры установки условного оформления:
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыУпаковка.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("АдресноеХранение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ТипыНоменклатуры.Товар;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Статус");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.СтатусыПриходныхОрдеров.КПоступлению;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
КонецПроцедуры
@yellow_pad | #СтандартыРазработки #ССиМ #Форма #УсловноеОформление #1сКеширование предопределенных значений на клиенте
При использовании функции глобального контекста
@yellow_pad | #1с #Форма #КлиентСервер #ССиМ
При использовании функции глобального контекста
ПредопределенноеЗначение
нет необходимости реализовывать механизмы кеширования на клиенте, т.к. результаты этой функции автоматически кешируются платформой.ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо");При использовании БСП вместо
ПредопределенноеЗначение
можно использовать ОбщегоНазначения.ПредопределенныйЭлемент
или ОбщегоНазначенияКлиент.ПредопределенныйЭлемент
. Это то же самое, только не падает с ошибкой, если получать несуществующее значение.@yellow_pad | #1с #Форма #КлиентСервер #ССиМ
Обработка данных динамического списка
У динамического списка есть событие
Поле, в которое мы будем выводить данные, нужно заранее добавить в динамический список как пустое поле произвольного запроса.
@yellow_pad | #1С #Форма #ДинамическийСписок
У динамического списка есть событие
ПриПолученииДанныхНаСервере()
, и через это событие можно выводить в список расчетные данные для выводимых элементов списка. Получение данных будет выполняться только для тех данных, что выводятся в список, если правильно написать метод. Например, можно получить список ответственных и вывести их строкой через запятую, или, как в примере с Зазеркалья (см. скриншот), вывести остаток товара.Поле, в которое мы будем выводить данные, нужно заранее добавить в динамический список как пустое поле произвольного запроса.
@yellow_pad | #1С #Форма #ДинамическийСписок
Модуль изменения управляемых форм
При доработке типовых конфигураций, для уменьшения издержек на сопровождение конфигурации при ее обновлении, доработка форм должна производиться с максимальным приоритетом программной доработки.
Целью модуля является упрощенное добавление реквизитов формы, добавление их на форму (в том числе и таблиц), так же добавление групп, команд формы и кнопок к ним.
Ссылка и источник: https://github.com/huxuxuya/1cFormEditor
@yellow_pad | #Инструментарий #Форма
При доработке типовых конфигураций, для уменьшения издержек на сопровождение конфигурации при ее обновлении, доработка форм должна производиться с максимальным приоритетом программной доработки.
Целью модуля является упрощенное добавление реквизитов формы, добавление их на форму (в том числе и таблиц), так же добавление групп, команд формы и кнопок к ним.
Ссылка и источник: https://github.com/huxuxuya/1cFormEditor
@yellow_pad | #Инструментарий #Форма
Проверка действительного изменения реквизита формы
Например, нужно перезаполнить табличную часть при изменении вида операции и только если его действительно поменяли, а не перевыбрали. Хорошо бы еще и пользователя предупредить о том, что данные будут перезаполнены.
Часто встречал реализацию проверки кешированием текущего значения в реквизит формы. Но в типовой нашелся такой пример.
@yellow_pad | #1С #ПриИзменении #Форма
Например, нужно перезаполнить табличную часть при изменении вида операции и только если его действительно поменяли, а не перевыбрали. Хорошо бы еще и пользователя предупредить о том, что данные будут перезаполнены.
Часто встречал реализацию проверки кешированием текущего значения в реквизит формы. Но в типовой нашелся такой пример.
@yellow_pad | #1С #ПриИзменении #Форма
Использование недоступных в расширении событий
Ситуация на скриншоте: не все события ТЧ доступны для использования в расширении. Сделано это было в редакции 8.3.14, чтобы сократить количество заимствованных свойств формы: см. Упрощение работы с расширениями формы в Зазеркалье.
Способ решения - добавить в модуль расширения формы метод нужного обработчика:
Ситуация на скриншоте: не все события ТЧ доступны для использования в расширении. Сделано это было в редакции 8.3.14, чтобы сократить количество заимствованных свойств формы: см. Упрощение работы с расширениями формы в Зазеркалье.
Способ решения - добавить в модуль расширения формы метод нужного обработчика:
&НаКлиентеА в
Процедура ext_ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
...
КонецПроцедуры
ПриСозданииНаСервере
(или в методе программной доработки формы) назначить обработчик события программно:ЭтаФорма.Элементы.Товары.УстановитьДействие("ПриНачалеРедактирования", "ext_ТоварыПриНачалеРедактирования");@yellow_pad | #1С #Расширения #Форма #ОбработчикиСобытий
Заполнение формы объекта без записи в БД
Пример кода, которым можно заполнить и открыть формы объектов (например, загрузить несколько документов), не записывая их. Например, чтобы пользователь мог самостоятельно проверить и дозаполнить документы. Можно заполнить любые реквизиты объекта без доработки конфигурации (даже если реквизит не заполняется из входящих данных).
@yellow_pad | #1С #ОткрытьФорму #Форма
Пример кода, которым можно заполнить и открыть формы объектов (например, загрузить несколько документов), не записывая их. Например, чтобы пользователь мог самостоятельно проверить и дозаполнить документы. Можно заполнить любые реквизиты объекта без доработки конфигурации (даже если реквизит не заполняется из входящих данных).
&НаКлиентеШаблон: fastcode | Кодом поделился читатель I N
Процедура ОткрытьФормуНового(Команда)
Форма = ПолучитьФорму("Документ.ПродажаТоваровУслуг.Форма.ФормаДокумента");
ДанныеФормы = Форма.Объект;
ЗаполнитьНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНаСервере(НовыйОбъект)
НовыйОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000005");
КонецПроцедуры
@yellow_pad | #1С #ОткрытьФорму #Форма