1С:Программисту: Как вывести ссылку на платежную ведомость в документе отпуск — 1C-h
 

1С:Программисту: Как вывести ссылку на платежную ведомость в документе отпуск

Как вывести ссылку на платежную ведомость в документе отпуск

В решение задачи заложены два основных принципа:

  1. Все изменения затрагивают только модуль формы отпуска. Гиперссылка не определяется на самой форме, а тоже выводится программно, т.е. ее вывод определен в модуле формы, в предопределенной процедуре ПриСозданииНаСервере
  2. Отпуска связаны с ведомостями через реквизит Документ табличной части Основания документов ВедомостьНаВыплату…

В предопределенной процедуре ПриСозданииНаСервере модуля формы документа Отпуск добавляем код:

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

В модуль формы документа Отпуск добавляем функцию ПолучитьВедомость() и процедуру прогр_ДействиеПоКнопкеВедомость():

&НаСервере
Функция ПолучитьВедомость()

		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВедомостьНаВыплатуЗарплатыВБанкОснования.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.ВедомостьНаВыплатуЗарплатыВБанк.Основания КАК ВедомостьНаВыплатуЗарплатыВБанкОснования
		|ГДЕ
		|	ВедомостьНаВыплатуЗарплатыВБанкОснования.Документ = &Документ
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ВедомостьНаВыплатуЗарплатыВКассуОснования.Ссылка
		|ИЗ
		|	Документ.ВедомостьНаВыплатуЗарплатыВКассу.Основания КАК ВедомостьНаВыплатуЗарплатыВКассуОснования
		|ГДЕ
		|	ВедомостьНаВыплатуЗарплатыВКассуОснования.Документ = &Документ
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ВедомостьНаВыплатуЗарплатыПеречислениемОснования.Ссылка
		|ИЗ
		|	Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Основания КАК ВедомостьНаВыплатуЗарплатыПеречислениемОснования
		|ГДЕ
		|	ВедомостьНаВыплатуЗарплатыПеречислениемОснования.Документ = &Документ";
		
		Запрос.УстановитьПараметр("Документ", Объект.Ссылка);
		
		РезультатЗапроса = Запрос.Выполнить();
		ЗаголовокВедомости = "Ведомость не найдена";
		
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			ЗаголовокВедомости = ВыборкаДетальныеЗаписи.Ссылка;
		КонецЦикла;
		Возврат ЗаголовокВедомости;

КонецФункции // ПолучитьВедомость()

&НаКлиенте
//кнопка Ведомости
Процедура прогр_ДействиеПоКнопкеВедомость(Элемент) // прогр_КнопкаВедомости
	Ведомость = ПолучитьВедомость();
	Если Ведомость <> "Ведомость не найдена" Тогда
		
		П = Новый Структура("Ключ", Ведомость);
		
		//Определяем тип документа:
		Если ТипЗнч(Ведомость) = Тип("Документссылка.ВедомостьНаВыплатуЗарплатыВБанк") Тогда
			Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыВБанк.Форма.ФормаДокумента", П);
		ИначеЕсли ТипЗнч(Ведомость) = Тип("Документссылка.ВедомостьНаВыплатуЗарплатыВКассу") Тогда
			Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыВКассу.Форма.ФормаДокумента", П);
		Иначе //ТипЗнч(Ведомость) = Тип("Документссылка.ВедомостьНаВыплатуЗарплатыПеречислением")
			Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", П);
		КонецЕсли;
		
		Форма.Открыть();
	КонецЕсли;
КонецПроцедуры // прогр_ДействиеПоКнопкеВедомость()

В результате в отпуске появляется ссылка на ведомость (нажав на которую можно открыть и саму ведомость):

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Next Post

Где находится "Модуль обычного приложения" (1С:Программисту)

Пт Сен 13 , 2019
При анализе метаданных в конфигураторе 1С, если нажать правой кнопкой мыши на корень метаданных и посмотреть открывшееся подменю, видны только пункты: Модуль приложения Модуль сеанса Модуль внешнего соединения Почему нет пункта «Открыть модуль обычного приложения»? Дело в том, что скорее всего установлено редактирование конфигурации для режима запуска «Управляемое приложение». См. […]