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