Как сделать общую форму в 1с

Обновлено: 03.07.2024

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

Обозначим проблему

Прошло уже несколько лет как новая версия платформы 1С активно используется и выпущено множество решений (конфигураций) как фирмой 1С, так и ее многочисленными партнерами.
Сложилось ли за это время у разработчиков единое понимание принципов клиент-серверного взаимодействия при создании форм, и изменился ли подход к реализации программных модулей в новых архитектурных реалиях?

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

Зачем нужна структура кода?
  • Упрощение сопровождения.
  • Упрощение обучения.
  • Фиксация общих/важных/удачных принципов.
  • …ваш вариант
Почему существующий стандарт разработки от фирмы 1С не помогает?
  • Минимизируйте число серверных вызовов.
  • Максимум вычислений на сервере.
  • Неконтекстные вызовы сервера быстрее контекстных.
  • Программируйте с учетом клиент-серверного взаимодействия.
  • и т.п.

Шаблоны проектирования или мудрость поколений

Примеры шаблонов в платформе 1С

Открытие формы внутри другой формы

Управляемые формы позволяют достаточно гибко работать с открытием/переключением форм и окон приложения. В настоящей статье рассмотрим пример открытия одной управляемой формы внутри другой.

Пример

Для демонстрации напишем простую обработку, в которой будет единственный реквизит формы "ИмяФормыДляОткрытия" строкового типа и команда формы.

Изображение

Программный код обработчика команды следующий:

Для открытия новой формы в текущем окне нам нужно в качестве пятого параметра метода "ОткрытьФорму" передать окно текущей формы. Так мы и сделали в примере выше.

Тестируем

В качестве примера имени формы введем путь основной формы объекта справочника "Номеклатура" (пример актуален для конфигурации "Управление торговлей" релиза 11):

Вот так это выглядит в режиме 1С:Предприятие:

Изображение

нажам на кнопку команды "ОткрытьФормуПоИмени" в текущем окне будет открыта форма элемента номенклатуры:

Изображение

Эта возможность повсеместно используется в типовых конфигурациях, например, при переходе от элемента справочника "Номенклатура" к списку присоединенных файлов по общей команде "Присоединенные файлы".

Изображение

Обработчик общей команды представлен на следующем листинге:

Обратите внимание, тут в качестве окна для открываемой формы указывается окно формы-владельца.

Таким образом, открытие формы в текущем окне позволяет экономно использовать экранное пространство и создавать удобный интерфейс для пользователей.

Когда есть возможность сделать работу удаленно появляются специалисты, которые могут сделать ее невыходя из дома, называются они 1C freelance. Чтобы работать 1С фрилансером необходимо отличное знание наиболее распространенных программ 1С версий 7 и 8


Как из 1С правильно УКАЗАТЬ MS EXCEL как нужно печатать документы !


Удаленное управление с помощью нашего сервиса


Табло для управляемого приложения, тонкий клиент


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

Основная форма объекта (открывается по умолчанию) //ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта");

Вспомогательная форма объекта (не основная, нужно указывать) //ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭСЧФ");

Произвольная форма (не привязана к конкретному объекту) //так же ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭСЧФ");

Обычное, Свертываемая и Всплывающая. Первые два используются довольно часто, а вот последняя встречается редко. Такая группа скрывает внутри себя все помещенные в неё элементы. А когда пользователь нажимает на её заголовок, то содержимое "всплывает". Выглядит похоже на открытие новой формы с блокировкой владельца. Но элементы не появляются в отдельном окне, а просто перекрывают основные данные.


✔ Программно открыть форму

Процедура ПоказатьФорму ( ОповещениеОЗакрытие = Неопределено, ПарФормы = Неопределено, ПарОткрытия = Неопределено) Экспорт

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

ОткрытьФорму ( "РегистрСведений.КлассификаторСтранМира.Форма.ЗагрузкаКлассификатора" ,
ПарФормы , ПараметрыОткрытияФормы . ВладелецФормы , ПараметрыОткрытияФормы . УУИД ,
ПараметрыОткрытияФормы . ОкноФормы , ПараметрыОткрытияФормы . СсылкаФормы , ОповещениеОЗакрытие );

Процедура ПоказатьФормуСОтбором ( ОповещениеОЗакрытие = Неопределено, ПарФормы = Неопределено, ПарОткрытия = Неопределено)

ПараметрыОтбора = Новый Структура ( "Спелый" , Истина);
ПарФормы = Новый Структура ( "Отбор" , ПараметрыОтбора );
ОткрытьФорму ( "Справочник.Фрукты.Форма.ФормаВыбора" , ПарФормы );

&НаСервереБезКонтекста
Функция ПолучитьИмяФормыПоСсылке ( Ссылка )

ИмяФормы = "ФормаУправленияНастройками" ;
Возврат Ссылка . Метаданные (). ПолноеИмя () + "." + ИмяФормы ;

&НаКлиенте
Процедура Подбор ( Команда )

//Открытие формы выбора с отбором по цвету(равно), массе(равно или больше) и периоду (в пределах)
НастройкиКД = Новый НастройкиКомпоновкиДанных ;

ОтборКД = НастройкиКД . Отбор . Элементы . Добавить ( Тип ( "ГруппаЭлементовОтбораКомпоновкиДанных" ));
ОтборКД . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . ГруппаИ ;
// 1)
Если ЗначениеЗаполнено ( Объект . Цвет ) И НЕ Объект . Цвет . Пустая () Тогда
ОтборКД = ОтборКД . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
ОтборКД . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "Цвет" );
ОтборКД . ВидСравнения = ВидСравненияКомпоновкиДанных . Равно ;
ОтборКД . Использование = Истина;
ОтборКД . ПравоеЗначение = Объект . Цвет ;
КонецЕсли;
// 2)
Если ЗначениеЗаполнено ( Объект . Масса ) И НЕ Объект . Масса . Пустая () Тогда
ОтборКД = ОтборКД . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
ОтборКД . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "Масса" );
ОтборКД . ВидСравнения = ВидСравненияКомпоновкиДанных . БольшеИлиРавно ;
ОтборКД . Использование = Истина;
ОтборКД . ПравоеЗначение = Объект . Масса ;
КонецЕсли;
// 3)
Если ЗначениеЗаполнено ( Объект . Период ) Тогда
ОтборКД = ОтборКД . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
ОтборКД . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "Дата" );
ОтборКД . ВидСравнения = ВидСравненияКомпоновкиДанных . БольшеИлиРавно ;
ОтборКД . Использование = Истина;
ОтборКД . ПравоеЗначение = Объект . Период . ДатаНачала ;

ОтборКД = ОтборКД . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ));
ОтборКД . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "Дата" );
ОтборКД . ВидСравнения = ВидСравненияКомпоновкиДанных . МеньшеИлиРавно ;
ОтборКД . Использование = Истина;
ОтборКД . ПравоеЗначение = Объект . Период . ДатаОкончания ;
КонецЕсли;
//Настройки
фПараметры = Новый Структура ;
фПараметры . Вставить ( "ФиксированныеНастройки" , НастройкиКД );
фПараметры . Вставить ( "РежимВыбора" ,Истина);
фПараметры . Вставить ( "МножественныйВыбор" ,Истина);

// Элементы.СписокПроизвДок - Табличная часть формы, в которой будет отрабатывать событие "ОбработкаВыбора"
// после того как будут выбраны документы из формы выбора.
ОткрытьФорму ( "Документ.Производство.ФормаВыбора" , фПараметры , Элементы . СписокПроизвДок );

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

Обычные формы

Для передачи параметра в обычную форму существует два способа.

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

Реквизит на обычной форме

Реквизит на обычной форме

И для первого и для второго способа используется одинаковый код:

Управляемые формы

В управляемых формах появилась прекрасная возможность предавать параметры сразу при получении формы. Кроме этого, в управляемых формах появились стандартные параметры для различных объектов (справочники , документы и тд.), большим плюсом которых является отсутствие необходимости какой-либо обработки (задал параметр — получил результат). Список этих параметров, определяется типом объекта.

Получение формы и передача параметра:

Обработка передаваемого параметра в модуле открываемой формы:

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

(оценок: 19, средняя оценка: 3,84 из 5)

Как открыть форму с отбором

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

Работа с Dropbox из 1С

Dropbox — это один самых популярных сервисов облачного хранения данных. Подобному сервису облачного хранения

Читайте также: