Каталог решений - Скрываем неиспользуемые виды расчета

Скрываем неиспользуемые виды расчета

Скрываем неиспользуемые виды расчета

В наличии

Копятся ненужные виды расчета в ЗУП? Есть решение с минимальными затратами при последующих обновлениях!

Категория:

Описание

Мне очень понравилось, как реализован механизм «Архив» в справочнике «Сотрудники». Сделаем так же и для видов расчета, но максимально сохранив конфигурацию на поддержке:

Сокращения: ПВР – план видов расчета

  1. Для этого, конечно же, необходимо включить возможность редактирования конфигурации, но замочек необходимо снять только c Корневого элемента конфигурации (чтобы добавлять новые объекты), с ПВР и его формы списка и выбора.
  2. В ПВР добавляем реквизит «Актуальность» — тип «Булево»
  3. Добавляем глобальный модуль «КА_ГлобальныйМодуль» (ИЛИ «ЛКС_ГлобальныйМодуль) код вставляем как указано в публикации TormozIT //sale.itcity.ru/public/16980/, делаем его глобальным и для обычного приложения. У себя в конфигурации я немного изменил префикс не «ЛКС», а «КА», прошу заранее извинить.
  4. Добавляем модуль «КА_ПодпискиНаСобытия» — директивы исполнения «Сервер» и «Клиент (обычное приложение)»
  5. Добавляем модуль «КА_ГенерацияЭлементовФормы» — «Клиент (обычное приложение)».
  6. Добавляем подписку на событие «УстановитьАктуальностьПВР» для события «ПередЗаписью» ПВР, указываем модуль исполнения КА_ПодпискиНаСобытия. В процедуре пишем:  
Если Источник.ЭтоНовый() Тогда
	Источник.Актуальность = Истина;
КонецЕсли; 
  1. Затем добавляем нужные кнопки и командную панель в форму списка и форму выбора ПВР как в форме списка справочники Сотрудники – это кнопки «Поместить расчет в архив» и «Показывать архив показателей», а также кнопку в контекстной панели «Поместить расчет в архив».
  2. Используя обработку из //sale.itcity.ru/public/99363/, любезно предоставленную нам Istur – декомпилируем необходимые нам кнопки (кстати я немного переделал его обработку, чтобы действия стандартных командных панелей представлялись в виде текстовой строки с помощью ЗначениеИзстрокиВнутр, так как по-другому их фиг получишь, и также чтобы автоматически добавлялись стандартные картинки). И затем удаляем все, что мы добавили (делаем формы типовыми).
  3. Добавляем полученный декомпилированный код в модуль «Ка_ГенерацияЭлементовФормы» в процедуру  ПланВидовРасчета_ФормаСписка_ПередОткрытием(Форма, Отказ, Подменю, СтандартнаяОбработка = Ложь) Экспорт
  4. Для универсальности основной исполняемый код перенесем в общий модуль «КА_АктуальностьПВР» — («клиент (обычное приложение)»): 
    Процедура УточнитьНаименованиеИДоступностьКомандыИзменитьАктуальность(лТекСтрока, ЭлементыФормы, Подменю) Экспорт
    	
    	// Если выделенных строк нет - команды недоступны
    	Если лТекСтрока = Неопределено Тогда
    		ТекстЗаголовкаКоманды = "";
    	Иначе	
    	// Если выделенная строка одна - обратимся к текущим данным строки
    		Если лТекСтрока.Актуальность Тогда
    			ТекстЗаголовкаКоманды = "Поместить расчет в архив";
    		Иначе
    			ТекстЗаголовкаКоманды = "Извлечь расчет из архива";
    		КонецЕсли;
    	КонецЕсли;	
    			
    	
    	Если ПустаяСтрока(ТекстЗаголовкаКоманды) Тогда
    		ЭлементыФормы.КоманднаяПанельСписокВидовРасчета.Кнопки.ИзменитьАктуальность.Доступность	= Ложь;
    		Подменю.Кнопки.ИзменитьАктуальность.Доступность		= Ложь;
    	Иначе
    		ЭлементыФормы.КоманднаяПанельСписокВидовРасчета.Кнопки.ИзменитьАктуальность.Доступность	= Истина;
    		ЭлементыФормы.КоманднаяПанельСписокВидовРасчета.Кнопки.ИзменитьАктуальность.Текст		= ТекстЗаголовкаКоманды;
    		Подменю.Кнопки.ИзменитьАктуальность.Доступность		= Истина;
    		Подменю.Кнопки.ИзменитьАктуальность.Текст			= ТекстЗаголовкаКоманды;
    	КонецЕсли;
    	
    КонецПроцедуры
    
    Процедура Кнопка_ИзменитьАктуальность(ЭлементыФормы, Подменю) Экспорт
    	 // команда изменения актуальности доступна только при наличии
    	// выделенных строк и только если у всех выделенных сотрудников одинаковая актуальность
    	
    	лТекСтрока			= ЭлементыФормы.ПланВидовРасчетаСписок.ТекущаяСтрока;
    	Если лТекСтрока = Неопределено Тогда
    		Возврат;		
    	КонецЕсли; 
    	ТекущаяАктуальность	= лТекСтрока.Актуальность;
    	Наименование		= лТекСтрока.Наименование;
    	
    	Форма = ПолучитьОбщуюФорму("ДиалогВопрос");
    	
    	Если ТекущаяАктуальность Тогда
    		Форма.Заголовок	= "Перемещение показателей в архив";
    		Форма.ЭлементыФормы.НадписьТекстВопроса.Заголовок =
    		"Поместить выделенный расчет в архив.
    		|
    		|Показатели, помещенные в архив, не будут показаны в списке.";
    		Форма.ЭлементыФормы.КнопкаДействие1.Заголовок = "Поместить в архив";
    	Иначе
    		Форма.Заголовок	= "Извлечение показателя из архива";
    		Форма.ЭлементыФормы.НадписьТекстВопроса.Заголовок =
    		"Извлечь выделенный расчет из архива. 
    		|
    		|После извлечения из архива показатели будут показываться в списке.";
    		Форма.ЭлементыФормы.КнопкаДействие1.Заголовок = "Извлечь из архива";
    	КонецЕсли;
    	
    	Форма.ЭлементыФормы.КнопкаДействие2.Заголовок = "Отмена";
    	Результат = Форма.ОткрытьМодально();
    	
    	Если ПустаяСтрока(Результат) или Результат = "2" Тогда
    		// отказались от смены актуальности
    		Возврат;
    	Иначе
    		НачатьТранзакцию();
    		лПоказатель = лТекСтрока.ПолучитьОбъект();
    		лПоказатель.Актуальность = Не ТекущаяАктуальность;
    		лПоказатель.Записать();
    		ЗафиксироватьТранзакцию();
    		
    		// после смены актуальности уточним заголовок команды
    		УточнитьНаименованиеИДоступностьКомандыИзменитьАктуальность(лТекСтрока, ЭлементыФормы, Подменю);
    		
    	КонецЕсли;
    
    КонецПроцедуры
    
    Процедура ПВР_ПриПолученииДанных(ОформленияСтрок) Экспорт
    	Для Каждого Оформление Из ОформленияСтрок Цикл
    		ДанныеСтроки = Оформление.ДанныеСтроки.Ссылка;		
    		Если НЕ ДанныеСтроки.Актуальность Тогда
    			Оформление.ЦветТекста = ЦветаСтиля.ЦветРамки;
    		КонецЕсли;
    	КонецЦикла;
    КонецПроцедуры
    
    Процедура ПоказатьАрхив(Форма, Подменю, ПоказыватьАрхив) Экспорт
    	Форма.ПланВидовРасчетаСписок.Отбор.Актуальность.Использование	= Не ПоказыватьАрхив;
    	Форма.ПланВидовРасчетаСписок.Отбор.Актуальность.Значение		= Не ПоказыватьАрхив;
    	Подменю.Кнопки.ПоказыватьАрхив.Пометка							= ПоказыватьАрхив;	
    КонецПроцедуры

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

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

    Теперь, если такие же кнопки мы захотим добавить в форму выбора, нужно поменять инициализацию лПодменю на лПодменю = ЭлементыФормы.ДействияФормы.Кнопки.Подменю;, а если захотим добавить для других ПВР, то также необходимо заменить наименование сохраняемых настроек «сохранить/восстановить значение» на имя ваших пвр.

  6. Не забываем про комментарии вида «//{{ДОБАВЛЕНО» «//}}ДОБАВЛЕНО»

По сути все, но когда вы откроете форму списка необходимого вида расчета, то там будет совершенно пусто. Дело в том, что сейчас все ПВР имеют Актуальность = Ложь, чтобы это исправить используйте мою обработку или сделайте сами, нужно для каждого элемента проставить «актуальность = Истина»

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

И теперь вы можете скрывать эти ненавистные виды расчета. Ха-ха.

 

P.S. Аналогично можно сделать для показателей схем мотивации,  а также убрать их из редактора формул. Для этого пропишите в общей форме «Редактор формула расчета» в процедуре «ЗаполнитьТаблицуПоказателей» такое условие:

Если ВидПВР = "ПлановыеУдержанияРаботниковОрганизаций" Или ВидПВР = "ПлановыеУдержанияРаботников" Или ВидПВР = "ПлановыеДополнительныеНачисленияРаботниковОрганизаций" Тогда
    Запрос.Текст = Запрос.Текст + Символы.ПС + "И ПоказателиСхемМотивации.Актуальность";
Иначе
    Запрос.Текст = Запрос.Текст + Символы.ПС + "ГДЕ ПоказателиСхемМотивации.Актуальность"; 
КонецЕсли; 

Мои работы:

Общее

Перенос данных XML с Анализом и выборочной загрузкой.

Универсальный редактор таблиц и движения документа (LITE) (Обычная Форма)

Универсальный редактор таблиц и движения документа (PRO) (Обычная Форма)

Универсальный редактор Таблиц и Движений документов (Управляемая форма)

Запуск 1С под другим пользователем без пароля.

 

Управление торговлей 11

Установка цен в УТ11. Произвольный запрос к данным ИБ

 

ЗУП 2.5

Скрываем неиспользуемые виды расчета

Резервы отпусков в Документе «Отражение Зарплаты в Регламентированном Учете» (Оценочные Обязательства)

 

Комплексная И УПП

Форма работы с сотрудниками, как из зуп 2.5

 

has been added to your cart:
Оформление заказа