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

26.01.16

Задачи пользователя - Адаптация типовых решений

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

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

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

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

 

Архив виды расчетов лкс скрыть виды расчета правильное изменение конфигурации Архив справочника сотрудники не помещать сотрудника в архив Актуальность скрыть показатели схем мотивации убрать из списка элемент справочника скрыть элементы справочника ненужные элементы скрыть неиспользуемое

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4448    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2952    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1281    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1991    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. karpik666 3760 22.07.15 12:48 Сейчас в теме
Если кому будет интересно могу выложить пример реализации
2. DoctorRoza 22.07.15 17:01 Сейчас в теме
Хм .. а на сколько это актуально? Скрывать уволенных сотрудников - это да, элементов то много. А вот элементы ПВР, сомнительно.
3. karpik666 3760 22.07.15 17:10 Сейчас в теме
(2) DoctorRoza, ну к примеру в торговой организации, где используется множество разных схем мотивации и они постоянно меняются. Да и просто, если база старая, то в ней очень большое количество разных видов расчета, как используемых так и нет. Почему бы не оставить расчетчикам только используемые виды расчета, что упростит подбор их в документы.
9. DoctorRoza 23.07.15 09:01 Сейчас в теме
(3) ИМХО, Ваша доработка хороша как лабораторная работа, не больше. Почему? Ну хотя бы потому, что спрятанные элементы могут быть востребованы в будущем! На дубли ФИО ЗУП еще среагирует, мол, есть уже такой, тут же нет! Значит, опять дорабатывать!? Хм .. сомнительно!
10. karpik666 3760 23.07.15 10:17 Сейчас в теме
(9) DoctorRoza, на такие случаи есть кнопка "показывать скрытые показатели". Никто не мешает, когда человек заводит новый вид расчета просто отобразить другие виды расчета из списка, при желании их можно восстановить.Некоторые программно правят формулы видов расчета, хотя по ним уже есть рассчитанные документы, а я их просто скрываю.
4. Константин С. 665 22.07.15 17:34 Сейчас в теме
Есть решение с минимальными доработками!

Столько букв, называется минимальные доработки !!!!!))))

Минимально, это добавил реквизит и при открытии формы списка сделал включение отбора по колонке (реквизиту).
5. karpik666 3760 22.07.15 17:43 Сейчас в теме
(4) Константин С., а вы прочли статью? по сути здесь тоже самое, но сделано так, чтобы минимизировать затраты при обновлении. Плюс мой вариант более навороченный, так как в вашем нужно писать код в обработчик события "при открытии", у меня же это отдельная процедура. Также я добавил возможность интерактивного скрытия вида расчета из списка, и возможность просмотра скрытых элементов, а также их графическое выделения и все это с минимальным изменением типового кода.
6. karpik666 3760 22.07.15 17:46 Сейчас в теме
(4) Константин С., наверное неправильное название, лучше написать" с минимальными затратами при последующих обновлениях". Кстати, такую реализацию можно экстраполировать и на другие справочники, например, скрытие неиспользуемых контрагентов, или скрытие номенклатуры.
7. Константин С. 665 22.07.15 18:08 Сейчас в теме
минимальными затратами при последующих обновлениях"

ага сравнить 12 пунктов по внесению изменений и 2-мя.
Описанное мной решение также не проблемно в обновлении.

более навороченный,

больше вероятности запутаться
8. karpik666 3760 22.07.15 18:35 Сейчас в теме
(7) Константин С., каждому свое, если вас устраивает ваш вариант пользуйтесь им, меня устраивает мой. тем более он уже проверен на реальных базах и с реальными обновлениями.
больше вероятности запутаться
- здесь-то уж точно не запутаться, от желающего внедрить данную возможность требуется только копировать и вставить свою базу.
11. karpik666 3760 23.07.15 11:41 Сейчас в теме
karpik666, для примера, выкладываю конфигурацию с выполненными изменениями. Из нее можно почерпнуть, как переопределять обработчики событий формы, и программно генерировать новые элементы формы
Прикрепленные файлы:
ПримерРеализацииАрхиваВПвр.cf
12. ccserg 63 31.07.15 10:26 Сейчас в теме
копируем алгоритм справочника Сотрудники и всё ))
спрятать в архив
у меня так сделано
13. karpik666 3760 31.07.15 12:46 Сейчас в теме
(12) ccserg, посмотрите прикрепленный файл в комментарии выше, у меня сделано также, как вы сказали, но при минимуме правки типовой конфигурации. В принципе этот алгоритм можно вставить и в справочник номенклатуры или для контрагентов
Оставьте свое сообщение