Настройка открытия форм при начале работы системы в 1С:ERP 2.5
В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок).
Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а так же в моб. приложении.
Что нам потребуется:
- Регистр сведений НастройкиОткрытияФормПриНачалеРаботыСистемы
- Общий модуль ОткрытиеФормПриНачалеРаботыСистемыКлиентСерверПереопределяемый процедура НастройкиФормы()
- Перечисление ФормыОткрываемыеПриНачалеРаботыСистемы
- Новая роль
- Новая обработка в конфигурации
- Новая внешняя обработка
Доработку типовых механизмов будем вести в расширении. На момент написания статьи версия ERP — 2.5.17.155.
Contents
Настройка открытия нетиповой обработки при начале работы системы
- Создаем новую обработку в дереве конфигурации. Назовем ее Расш_НачальнаяОбработка. Добавляем в нее новую форму “Форма”. В рамках этой части задачи важно лишь наличие формы и ее имя. Структура формы не имеет значения.

2. Создаем новую роль. Назовем ее Расш_ИспользованиеНачальнойОбработки. Синоним – Использование начальной обработки. Даем права на использование и просмотр обработке из п.1.

По этой роли надо будет настроить группы доступа. Но об этом чуть позже.
3. Переносим перечисление ФормыОткрываемыеПриНачалеРаботыСистемы в расширение и в это перечисление добавляем новое значение, равное имени обработки из п. 1 — Расш_НачальнаяОбработка.

4. В общем модуле ОткрытиеФормПриНачалеРаботыСистемыКлиентСерверПереопределяемый ищем функцию НастройкиФормы().
Переносим ее в расширение с типом вызова вызывать вместо (изменение и контроль) и вставляем след. код (наша доработка окаймлена метками #Вставка #КонецВставки):
#Вставка
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.Расш_НачальнаяОбработка") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.Расш_НачальнаяОбработка.Форма.Форма");
СтруктураПараметров.Вставить("Роль", "Расш_ИспользованиеНачальнойОбработки");
СтруктураПараметров.Вставить("ПараметрЗапуска", "rash_UseProcessing");
#КонецВставки
Функция настройкиФормы() приобретает следующий вид:
&ИзменениеИКонтроль("НастройкиФормы")
Функция Расш_НастройкиФормы(Форма)
СтруктураПараметров = ОписаниеНастроекФормы();
Если Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.ПомощникПродаж") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.ПомощникПродаж.Форма.Форма");
СтруктураПараметров.Вставить("Роль", "ИспользованиеПомощникаПродаж");
СтруктураПараметров.Вставить("ПараметрЗапуска", "SaleAssistant");
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.РабочееМестоРаботникаСклада") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.РабочееМестоРаботникаСклада.Форма.ФормаРабочегоМеста");
СтруктураПараметров.Вставить("Роль", "ИспользованиеРабочегоМестаРаботникаСклада");
СтруктураПараметров.Вставить("ПараметрЗапуска", "WarehouseMobileWorkplace");
СтруктураПараметров.Вставить("НеобходимыНастройки", Истина);
СтруктураПараметров.Вставить("ИмяФормыНастроек", "Обработка.РабочееМестоРаботникаСклада.Форма.НастройкиПараметров");
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.ЧекККМ") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Документ.ЧекККМ.Форма.ФормаДокументаРМК");
СтруктураПараметров.Вставить("Роль", "ДобавлениеИзменениеЧековККМ");
СтруктураПараметров.Вставить("ПараметрЗапуска", "CashRegisterReceipt");
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.РабочееМестоМенеджераПоДоставке") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.РабочееМестоМенеджераПоДоставке.Форма.Форма");
СтруктураПараметров.Вставить("Роль", "ИспользованиеРабочегоМестаДоставки");
СтруктураПараметров.Вставить("ПараметрЗапуска", "DeliveryWorkplace");
//++ НЕ УТКА
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.РабочееМестоВыполнениеОпераций") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.ВыполнениеОпераций2_2.Форма.МобильноеПриложениеНачальнаяСтраница");
СтруктураПараметров.Вставить("Роль", "ИспользованиеРабочегоМестаВыполнениеОпераций");
СтруктураПараметров.Вставить("ПараметрЗапуска", "ShopFloorManagement");
СтруктураПараметров.Вставить("НеобходимыНастройки", Истина);
СтруктураПараметров.Вставить("ИмяФормыНастроек", "Обработка.ВыполнениеОпераций2_2.Форма.НастройкаПараметровРабочегоМеста");
//-- НЕ УТКА
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.МобильноеРабочееМестоСборкиИКурьерскойДоставки") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.МобильноеРабочееМестоСборкиИКурьерскойДоставки.Форма.РабочийСтол");
СтруктураПараметров.Вставить("Роль", "ИспользованиеРабочегоМестаСборкиИКурьерскойДоставки");
СтруктураПараметров.Вставить("ПараметрЗапуска", "AssemblyAndCourierDeliveryWorkplace");
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.МобильноеРабочееМестоКладовщика") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка.МобильноеРабочееМестоКладовщика.Форма.РабочийСтол");
СтруктураПараметров.Вставить("Роль", "ИспользованиеРабочегоМестаКладовщика");
СтруктураПараметров.Вставить("ПараметрЗапуска", "WarehouseWorkplace");
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.МониторЦелевыхПоказателей") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Отчет.МониторЦелевыхПоказателей.Форма.ФормаМониторЦелевыхПоказателей");
СтруктураПараметров.Вставить("Роль", "РазделОтчетыИМониторингЦелевыеПоказатели");
СтруктураПараметров.Вставить("ПараметрЗапуска", "PerformanceDashboard");
#Вставка
ИначеЕсли Форма = ПредопределенноеЗначение("Перечисление.ФормыОткрываемыеПриНачалеРаботыСистемы.Расш_НачальнаяОбработка") Тогда
СтруктураПараметров.Вставить("ИмяЗапускаемойФормы", "Обработка. Расш_ НачальнаяОбработка.Форма.Форма");
СтруктураПараметров.Вставить("Роль", " Расш_ИспользованиеНачальнойОбработки");
СтруктураПараметров.Вставить("ПараметрЗапуска", "rash_UseProcessing ");
#КонецВставки
КонецЕсли;
Возврат СтруктураПараметров;
КонецФункции
Обратим внимание на Ключ «ПараметрЗапуска». О нем поговорим чуть позже.
5. Обновляем базу.
6. Заходим в режим предприятия. Для роли из п.2 создаем профиль и группу доступа.
Создаем профиль с ролью из п.2.

Создаем группу доступа по этому профилю. Добавляем пользователей.

7. После создания профиля и группы доступа по п.6 появится настройка открытия нашей обработки. Настройку можно увидеть в карточке пользователя по этой гиперссылке. Данные настроек хранятся в регистре сведений НастройкиОткрытияФормПриНачалеРаботыСистемы.

8. Заходим в настройку, ставим галочку “открывать по умолчанию”.

9. Кликаем “Записать и закрыть”. Галочка установлена

10. Перезаходим в базу. Наша форма действительно открывается при начале работы системы. Задача решена!

В п.4. мы упоминали про ключ “ПараметрЗапуска”. Так вот если базу запустить с этим параметром запуска, то галочку из п. 8 ставить необязательно.
ВАЖНО! На мобильном клиенте данная особенность может не работать.

Настройка открытия нетиповой ВНЕШНЕЙ обработки при начале работы системы
Часто бывает, что необходимо быстрое изменение обработки, а штатное обновление базы происходит всего 1-2 раза в неделю.
Немного доработаем нашу обработку, чтобы при начале работы системы открывалась внешняя обработка.
- В форму “Форма” обработки Расш_НачальнаяОбработка добавим реквизит ИмяОбработкиСлужебное. Тип — строка неограниченной длины.

2. В модуль формы добавим следующий код:
Не забываем добавить обработчики событий ПриСозданииНаСервере, ПриОткрытии и ПередЗакрытием.
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЭтотОбъект.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Не Отказ Тогда
ОткрытьНовуюФорму();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИмяОбработки = РеквизитФормыВЗначение("Объект").Метаданные().Имя;
ПостФикс = "ВО";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ДопОтчетыИОбработки.Ссылка КАК Ссылка
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки
|ГДЕ
| ДопОтчетыИОбработки.ИмяОбъекта = &ИмяОбработки
| И ДопОтчетыИОбработки.Публикация =
| ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)";
Запрос.УстановитьПараметр("ИмяОбработки", СтрШаблон("%1_%2", ИмяОбработки, Постфикс));
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Отказ = Истина;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
ИмяОбработкиСлужебное =
ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(Выборка.Ссылка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ОткрытьНовуюФорму()
ИмяФормы = СтрШаблон("ВнешняяОбработка.%1.Форма.Форма", ИмяОбработкиСлужебное);
ОткрытьФорму(ИмяФормы);
КонецПроцедуры
#КонецОбласти
Как нетрудно догадаться, здесь мы открываем форму внешней обработки из справочника доп. отчетов и обработок через форму нашей обработки Расш_НачальнаяОбработка.
ВАЖНО!
Во избежание лишнего “хардкода” для внешней обработки должны выполняться 3 условия:
1) Имя объекта в справочнике доп. отчетов и обработок должно совпадать с именем обработки конфигурации, из которой она открывается + постфикс (значение указано в коде).
В качестве постфикса можно использовать любое строковое значение быть пробелов и спецсимволов.
2) Настройка публикации – используется

3) Наименование формы внешней обработки должно быть “Форма”
3. С соблюдением условий выше создаем внешнюю обработку и сохраняем ее в справочник доп. отчетов и обработок.
Таким образом, при начале работы системы будет открываться уже внешняя обработка.
Резюме
Аналогичным образом можно добавлять и другие обработки. Пропишем плюсы и минусы фичи.
Достоинства:
- Способ не требует вмешательства в основную конфигурацию и подходит для расширений
- Максимально эффективное использование типовых механизмов с минимумом изменений
- Простая и быстрая реализация
- Работает как на тонком клиенте, так и на мобильном или веб-клиенте, а так же в моб. приложении.
- В случае внешних обработок — возможность быстрого внесения изменений без обновления базы.
Недостатки:
- В расширении в общем модуле используются тип вызова вызывать вместо (изменение и контроль).
На этом все 🙂
Comments
So empty here ... leave a comment!