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