Top.Mail.Ru
31 ИЮЛЯ, 17:00 МСК
БЕСПЛАТНО
Online MeetUp «Индекс в 1С: разбираем реальные кейсы»

Настройка открытия форм при начале работы системы в 1С:ERP 2.5

В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок).

Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а так же в моб. приложении.

Что нам потребуется:

  1. Регистр сведений НастройкиОткрытияФормПриНачалеРаботыСистемы
  2. Общий модуль ОткрытиеФормПриНачалеРаботыСистемыКлиентСерверПереопределяемый процедура НастройкиФормы()
  3. Перечисление ФормыОткрываемыеПриНачалеРаботыСистемы
  4. Новая роль
  5. Новая обработка в конфигурации
  6. Новая внешняя обработка

Доработку типовых механизмов будем вести в расширении. На момент написания статьи версия ERP — 2.5.17.155.

Настройка открытия нетиповой обработки при начале работы системы

  1. Создаем новую обработку в дереве конфигурации. Назовем ее Расш_НачальнаяОбработка. Добавляем в нее новую форму “Форма”. В рамках этой части задачи важно лишь наличие формы и ее имя. Структура формы не имеет значения.

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 раза в неделю.

Немного доработаем нашу обработку, чтобы при начале работы системы открывалась внешняя обработка.

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

2. В модуль формы добавим следующий код:

Не забываем добавить обработчики событий ПриСозданииНаСервере, ПриОткрытии и ПередЗакрытием.

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЭтотОбъект.Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	Если Не Отказ Тогда 
		ОткрытьНовуюФорму();
	КонецЕсли;
	
КонецПроцедуры			  

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ОткрытьНовуюФорму()
	
ИмяФормы = СтрШаблон("ВнешняяОбработка.%1.Форма.Форма", ИмяОбработкиСлужебное);	
ОткрытьФорму(ИмяФормы); 
	
КонецПроцедуры

#КонецОбласти

Как нетрудно догадаться, здесь мы открываем форму внешней обработки из справочника доп. отчетов и обработок через форму нашей обработки Расш_НачальнаяОбработка.

ВАЖНО!

Во избежание лишнего “хардкода” для внешней обработки должны выполняться 3 условия:

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

2) Настройка публикации – используется

3) Наименование формы внешней обработки должно быть “Форма”

3. С соблюдением условий выше создаем внешнюю обработку и сохраняем ее в справочник доп. отчетов и обработок.

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

Резюме

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

Достоинства:

  1. Способ не требует вмешательства в основную конфигурацию и подходит для расширений
  2. Максимально эффективное использование типовых механизмов с минимумом изменений
  3. Простая и быстрая реализация
  4. Работает как на тонком клиенте, так и на мобильном или веб-клиенте, а так же в моб. приложении.
  5. В случае внешних обработок — возможность быстрого внесения изменений без обновления базы.

Недостатки:

  1. В расширении в общем модуле используются тип вызова вызывать вместо (изменение и контроль).

На этом все 🙂

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar