1С форма при открытии

Допустим, есть внешняя обработка, написанная для версии 8.1. Можно ли запустить ее в версии 8.2 так, чтобы работать с ее старой, неуправляемой формой? Обработка нужна всего один раз, для переноса данных, и создавать для нее управляемую форму ради одного раза не хочется…

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

Обычные (неуправляемые) формы могут работать только в толстом клиенте. Тонкий и веб-клиенты поддерживают работу только с управляемыми формами.

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

Проще всего запустить толстого клиента в режиме управляемого приложения из конфигуратора, указав это в параметрах: Сервис — Параметры — Запуск 1С:Предприятия — Основные — Толстый клиент (управляемое приложение).

При этом нужно помнить, что запуск клиентов в управляемом режиме возможен только в том случае, если у конфигурации отключена совместимость в версией 8.1 (свойство РежимСовместимости).

Однако этого недостаточно для того, чтобы платформа откорыла старую, неуправляемую форму обработки.

Возможность использования обычных форм в управляемом режиме регулируется специальным свойством конфигурации — ИспользоватьОбычныеФормыВУправляемомПриложении. Это свойство нужно установить.

В палитре свойств конфигурации это свойство отображается не всегда, а только в случае, если в параметрах конфигуратора выбран режим редактирования конфигурации Управляемое приложение и обычное приложение (Сервис — Параметры — Общие).

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

В других случаях (если у объекта нет ни одной основной формы или у объекта есть управляемая основная форма) платформой будет по умолчанию генерироваться или открываться (если она есть) управляемая форма.

Печать (Ctrl+P)

Параметры формы

Общая информация

Параметры формы (закладка Параметры) служат двум целям:
● Описать набор данных, которые будут влиять на открытие формы (параметризация формы). Для этого нужно перечислить все необходимые параметры и указать их типы.
● Определить параметры, которые будут влиять на ключ уникальности формы. Для этого необходимо установить свойство Ключевой параметр у тех параметров, которые должны участвовать в формировании ключа уникальности формы. При попытке открыть форму система производит поиск существующей формы с помощью сформированного ключа уникальности формы. Если в системе существует форма с полученным ключом
уникальности, возвращается именно эта форма; если нет – создается новая форма.
При вызове формы значения параметров, созданных разработчиком, можно указывать в структуре параметров наряду с системными параметрами форм (если таковые имеются).
Параметры формы можно передать в форму в момент ее создания. Анализ переданных параметров можно выполнить в событии ПриСозданииНаСервере() (коллекция Параметры является свойством объекта УправляемаяФорма):

ВНИМАНИЕ! После вызова обработчика события ПриСозданииНаСервере все неключевые параметры формы удаляются из коллекции Параметры.
Совет. Неключевые параметры формы, необходимые для дальнейшей работы, нужно сохранять в данных формы.

Стандартные параметры формы

Для того чтобы поддерживать автоматическое взаимодействие между формами, система предоставляет ряд стандартных параметров, которые используются для управления формами при их открытии. С помощью этих параметров системой реализуется в полях форм выбор из форм выбора, открытие форм объектов, работа стандартных команд и т. д. То есть они обеспечивают различные заложенные в систему сценарии работы интерфейса.
Но разработчик также может использовать эти параметры во встроенном языке, передавая их при вызове метода ОткрытьФорму().
Перечень стандартных параметров форм в зависимости от вида расширения формы можно посмотреть в разделах Встроенный язык – Интерфейс
(управляемый) – Управляемая форма – Расширение… встроенной справки.

Пример работы с параметрами формы

Для демонстрации работы параметров формы рассмотрим реализацию выбора элемента в поле ввода. Сутью примера будет реализация механизма выбора элемента из списка на встроенном языке.
К моменту начала работы с примером нужно иметь конфигурацию, обладающую следующими свойствами:
● имеется справочник Товары с иерархией групп и элементов;
● имеется справочник Аналоги с реквизитом ВыбранныйТовар типа СправочникСсылка.Товары;
● оба справочника имеют формы элементов.
Теперь реализуем в этой конфигурации все механизмы, которые использует платформа для выбора элемента из списка, на встроенном языке. При этом мы увидим:
● как происходит использование стандартных параметров формы;
● каким образом их использует сама система;
● как их может использовать разработчик.
Добавим дополнительный параметр, который будет управлять закрытием формы выбора после выбора элемента. Назовем этот параметр ЗакрыватьПослеВыбора (тип Булево). Добавим его в качестве параметра формы ФормаВыбора справочника Товары.
Для того чтобы открыть форму выбора элемента, необходимо в форме элемента справочника Аналоги создать обработчик события НачалоВыбора у элемента формы ВыбранныйТовар.

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

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

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, СтандартнаяОбработка, Значение)
СтандартнаяОбработка = Ложь;
ОповеститьОВыборе(Значение);
КонецПроцедуры
Нам осталось реализовать обработку выбора элемента в самом поле ввода. Для этого необходимо обработать событие ОбработкаВыбора нашего поля ввода ВыбранныйТовар.

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

ПараметрыВыбора.Вставить(«ЗакрыватьПослеВыбора”, Истина);
на строку:
ПараметрыВыбора.Вставить(«ЗакрыватьПослеВыбора”, Ложь);
то форма выбора перестанет закрываться после того, как будет осуществлен выбор. Это можно использовать, например, для реализации формы подбора (выбор нескольких товаров без закрытия формы выбора).

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

ПолучитьФорму(«Документ.ПоступлениеТоваровУслуг.ФормаДокумента»).Открыть()

Это самый медленный метод открытия форм. Тем не менее, он позволяет программно обработать форму перед открытием. Для обработки код нужно немного изменить:

Форма=ПолучитьФорму(«Документ.ПоступлениеТоваровУслуг.ФормаДокумента»);
//Тут выполняем действия с формой
Форма.Открыть();

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

В этом случае все предельно просто.

СпрСсылка=Справочники.Номенклатура.НайтиПоКоду(«000000001»);
ОткрытьЗначение(СпрСсылка);

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

  • Переменная, в которую будет записано выбранное значение;
  • Подсказка, которая будет отображена в окне выбора;
  • Описание типов выбираемых значений. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

В результате выполнения функции откроется форма выбора по умолчанию для объекта указанного типа.

Перем Значение;
Массив=новый массив;
Массив.Добавить(Тип(«СправочникСсылка.Номенклатура»));
Массив.Добавить(Тип(«СправочникСсылка.Контрагенты»));
ОписаниеТипов=новый ОписаниеТипов(Массив);
Рез=ВвестиЗначение(Значение, «Подсказка», ОписаниеТипов);

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

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

  • Имя формы — тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка. Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер. Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.
  • Режим открытия формы — имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

У каждой формы есть один ключевой реквизит. Он выделен жирным в списке реквизитов формы и обычно называется Объект у форм элементов справочников, документов. У других объектов название может быть другим. Для открытия формы существующего объекта нужно передать в открываемую форму параметр Ключ со значением в виде ссылки на объект.

&НаКлиенте
Процедура Команда1(Команда)
Параметр=новый структура;
Параметр.Вставить(«Ключ», НайтиС());
ОткрытьФорму(«Справочник.Контрагенты.ФормаОбъекта»,Параметр);
КонецПроцедуры
&НаСервере
Функция НайтиС();
Возврат Справочники.Контрагенты.НайтиПоРеквизиту («ИНН», «745107734623»)
КонецФункции

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

&НаКлиенте
Процедура Команда1(Команда)
ОткрытьФорму(«Справочник.Контрагенты.ФормаОбъекта»);
КонецПроцедуры

Нужно передать параметр Основание, значением которого будет являться ссылка на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

&НаКлиенте
Процедура Команда1(Команда)
Параметр=новый структура;
Параметр.Вставить(«Основание», СсылкаНаСчетПокупателю);
ОткрытьФорму(«Документ.РеализацияТоваровУслуг.ФормаОбъекта», Параметр);
КонецПроцедуры

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

Отбор на формах 1С может быть простым и сложным. Простой отбор предусматривает выражения типа Организация = ООО «Рога и копыта». Сложный отбор предполагает и другие типы сравнения, например, В списке. В данной статье рассмотрим организацию простого отбора, а сложному будет посвящена отдельная статья.

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

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура.

&НаКлиенте
Процедура Команда1(Команда)
Параметр=новый структура;
Отбор=новый Структура;
Отбор.Вставить(«Владелец», СсылкаНаНоменклатуру);
Параметр.Вставить(«Отбор», Отбор);
ОткрытьФорму(«Справочник.НомераГТД.ФормаСписка», Параметр);
КонецПроцедуры

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

  1. Заносим в структуру данные ключа записи с необходимыми значениями.
  2. Помещаем полученную структуру в массив.
  3. Из массива создаем ключ записи.
  4. Передаем в открываемую форму параметр Ключ с ключом записи из п.3 в качестве значения.

&НаКлиенте
Процедура Команда1(Команда)
Параметр=новый структура;
ПараметрыКлюча=новый Структура;
ПараметрыКлюча.Вставить(«Номенклатура», СсылкаНаНоменклатуру);
ПараметрыКлюча.Вставить(«ТипЦены», СсылкаНаТипЦен);
ПараметрыКлюча.Вставить(«Период», Дата);
МассивКлюча = Новый Массив;
МассивКлюча.Добавить(ПараметрыКлюча);
КлючЗаписи = Новый(«РегистрСведенийКлючЗаписи.ЦеныНоменклатуры», МассивКлюча);
Параметр.Вставить(«Ключ», КлючЗаписи);
ОткрытьФорму(«РегистрСведений.ЦеныНоменклатуры.ФормаЗаписи», Параметр);
КонецПроцедуры

Открывает произвольную форму

Функция ОткрытьФорму() имеет несколько вариантов синтаксиса:

Функция ОткрытьФорму() имеет следующий синтаксис:

Форма ОткрытьФорму(ИмяФормы, , , , , , , )

А также альтернативный англоязычный синтаксис:

Form OpenForm(Name, , , , , , , )

Форма; УправляемаяФорма

Функция ОткрытьФорму() имеет следующий синтаксис:

Форма ОткрытьФорму(Форма, )

А также альтернативный англоязычный синтаксис:

Form OpenForm(Form, )

Форма; УправляемаяФорма

Описание варианта 2

Функция ОткрытьФорму() открывает форму, полученную ранее функциями ОткрытьФорму() или ПолучитьФорму()

Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).

Пример кода с использованием процедуры ОткрытьФорму():

ОткрытьФорму(«Справочник.ФизическиеЛица.Форма.ФормаПродавца»);

Область применения: управляемое приложение, мобильное приложение.

1. Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий – также ОткрытьФормуМодально ). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму , не рекомендуется.

Рекомендация обусловлена соображениями

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

Кроме того, применение глобального метода ОткрытьФорму гарантирует выполнение инициализации формы на сервере в обработчике ПриСозданииНаСервере . Этот подход помогает сосредоточить весь код инициализации формы в одном месте и исключает «случайное» обращение к серверу, связанное с инициализацией формы, между строками кода

2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.

Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).

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

следует по той же причине использовать параметры формы:

ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));

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

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

Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.

&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт

Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;

Если БольшеНеПоказыватьНапоминание Тогда
// …

При этом возвращаемое значение формы формируется в коде модуля формы с помощью метода формы Закрыть .

5. Другие ограничения:

  • Обработчик события формы ПриОткрытии не должен содержать код по открытию какой-либо другой формы, так как это может привести к нарушению порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы интерактивно, например, по нажатию на кнопку.
  • Не рекомендуется выполнять программное открытие и закрытие формы в одном обработчике. Такие действия должны быть разнесены по времени. Например, закрытие формы можно выполнять в обработчике ожидания.
  • При использовании в конфигурации Библиотека стандартных подсистем и разработке форм (рабочих мест), предназначенных только для внешних пользователей, следует явно блокировать открытие таких форм в сеансах «обычных» пользователей. Для этого следует устанавливать параметр Отказ при создании формы на сервере с помощью функции ЭтоСеансВнешнегоПользователя общего модуля Пользователи или ПользователиКлиент :

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;

КонецПроцедуры

6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:

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

Например, параметр «ТекущееЗначение», позволяет позиционировать форму выбора справочника на определенном элементе. Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода.

Также у разработчика есть возможность определять свои параметры на вкладке «Параметры» конструктора управляемой формы. Время жизни параметров ограничено обработчиком ПриСозданииНаСервере() , что логично т.к. параметры требуются только при создании формы. Но, если данный параметр определяет уникальность формы (установлен флаг «ключевой параметр» в свойствах параметра), он будет доступен и в других обработчиках.

Передача параметров при открытии формы:

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

Стандартные параметры

Стандартные параметры формы динамического списка

  • ВыборГруппИЭлементов . Тип: ИспользованиеГруппИЭлементов . По данному параметру устанавливается свойство ВыборГруппИЭлементов таблицы основного реквизита формы.
  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • КлючПользовательскихНастроек . Тип: Произвольный . Содержит ключ пользовательских настроек, которые нужно использовать для основного динамического списка формы. Если не установлен параметр ПользовательскиеНастройки , то будут загружены пользовательские настройки по указанному ключу.
  • МножественныйВыбор . Тип: Булево . Устанавливает для основной таблицы свойства МножественныйВыбор и РежимВыделения .
  • Отбор . Тип: Структура . Используется для установки отбора в динамическом списке. Ключ структуры — имя поля основной таблицы. Значение элемента структуры содержит значение отбора. Если значение является массивом, фиксированным массивом или списком значений с не одним элементом, то отбор будет применяться с видом сравнения ВСписке .
  • ПользовательскиеНастройки . Тип: ПользовательскиеНастройкиКомпоновкиДанных . Пользовательские настройки, которые будут использоваться в основном динамическом списке формы.
  • РазрешитьВыборКорня . Тип: Булево . Определяет возможность выбора корня в форме с динамическим списком, отображаемом в виде дерева.
  • РежимВыбора . Тип: Булево . Открывать форму в режиме выбора.
  • ТекущаяСтрока . Строка динамического списка, на которую будет установлен курсор после открытия формы. В качестве значения для параметра используются значения ссылок на объекты, которые содержит главная таблица динамического списка. Например, СправочникСсылка.Товары .
  • ФиксированныеНастройки . Тип : НастройкиКомпоновкиДанных. Настройки, помещаемые в фиксированные настройки отчета.

Стандартные параметры формы документа

  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • ЗначениеКопирования . Значение для копирования. Тип параметра соответствует типу объекта, копия которого будет создана.
  • ЗначенияЗаполнения . Тип: Структура . Параметры заполнения нового объекта. Ключ структуры — имя реквизита формы, значение — заполняемое значение.
  • Ключ . Тип: ДокументСсылка.ИмяДокумента . Ключ объекта. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров.
  • Основание . Тип: Произвольный . Объект, являющийся основанием для создания нового объекта.
  • ПараметрыВыбора . Тип: Структура . Содержит значения, по которым проверяется возможность выбора для форм, находящихся в режиме выбора.
  • РежимВыбора . Тип: Булево . Позволяет открывать форму в режиме выбора.
  • ТекстЗаполнения . Тип: Строка . Текст, введенный в поле ввода, при открытии формы в режиме выбора.

Стандартные параметры формы справочника

  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • ЗначениеКопирования . Значение для копирования. Тип параметра соответствует типу объекта, копия которого будет создана.
  • ЗначенияЗаполнения . Тип: Структура . Параметры заполнения нового объекта.
  • Ключ . Тип: СправочникСсылка.ИмяСправочника . Ключ объекта. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров.
  • Основание . Тип: Произвольный . Объект, являющийся основанием для создания нового объекта.
  • ПараметрыВыбора . Тип: Структура . Содержит значения, по которым проверяется возможность выбора для форм, находящихся в режиме выбора.
  • РежимВыбора . Тип: Булево . Позволяет открывать форму в режиме выбора.
  • ТекстЗаполнения . Тип: Строка . Текст, введенный в поле ввода, при открытии формы в режиме выбора.
  • ЭтоГруппа . Тип: Булево . Определяет вид нового объекта — группа или элемент.

Стандартные параметры формы плана видов характеристик

  • ДополнительныеПараметры . Тип: Структура . Дополнительные параметры формы, открываемой при нажатии кнопки «Создать».
  • ЗначениеКопирования . Значение для копирования. Тип параметра соответствует типу объекта, копия которого будет создана.
  • ЗначенияЗаполнения . Тип: Структура . Параметры заполнения нового объекта.
  • Ключ . Тип: ПланВидовХарактеристикСсылка.ИмяПВХ . Ключ объекта. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров.
  • ОбъектОтбораВидовХарактеристик . Тип: Произвольный . Содержит объект отбора видов характеристик. Если значение данного параметра не равно Неопределено , то определяется тип значения.
  • Основание . Тип: Произвольный . Объект, являющийся основанием для создания нового объекта.
  • ПараметрыВыбора . Тип: Структура . Содержит значения, по которым проверяется возможность выбора для форм, находящихся в режиме выбора.
  • РежимВыбора . Тип: Булево . Позволяет открывать форму в режиме выбора.
  • ТекстЗаполнения . Тип: Строка . Текст, введенный в поле ввода, при открытии формы в режиме выбора.
  • ЭтоГруппа . Тип: Булево . Определяет вид нового объекта — группа или элемент.

Откуда проблема растет

Представим такую ситуацию: Вы работаете с конфигурацией «Управление производственным предприятием» версии 1.3. Основной режим запуска для конфигурации — «Обычное приложение», однако в свойствах конфигурации установлена поддержка управляемых форм в обычном приложении.

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

В принципе, настройка полезная, особенное если конфигурация постепенно переводится на управляемые формы. Но есть одно большое «НО». Если мы попытаемся открыть внешнюю обработку или отчет с управляемой формой, то он попросту не запустится.

Демонстрация

Создадим обработку с управляемой формой, на которую поместим декорацию (надпись).

Далее добавим ее в справочник «Внешние обработки», пройдя в меню «Сервис -> Дополнительные внешние отчеты и обработки -> Внешние обработки».

С добавлением проблем не возникнем. Далее попытаемся открыть добавленную обработку двойным щелчком. Никакой рекации не проследует.

Для того, чтобы разобраться в действия платформы, попытаемся открыть внешнюю обработку программным образом. Для этого я добавил в меню «Сервис» команду «Открыть внешнюю обработку». Код обработчика команды следующий:

Процедура ПолныйДействие() Экспорт ВнешнияяОбработка = Справочники.ВнешниеОбработки.НайтиПоНаименованию(«Тест»); ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = ВнешнияяОбработка.ХранилищеВнешнейОбработки.Получить(); ДвоичныеДанные.Записать(ИмяФайла); Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла); Форма.Открыть(); КонецПроцедуры

Если смотреть в отладке, то после выполнения строки

Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);

в переменной «Форма» будет значение «Неопределено», несмотря на то, что объект обработки был успешно получен.

То есть платформа попросту не может получить форму обработки и возвращает результат «Неопределено».

Но у меня все работает!

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

В итоге

Теперь Вы знаете еще одну особенность работы платформы 1С:Предприятие 8.2 и сможете учитывать ее при разработке. Самое интересное: если в управляемом приложении попытаться открыть внешнюю обработку в обычной формой, то будет открыта пустая управляемая форма.

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