gifts2017

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7

Опубликовал Anzhey Kul (Anzhey) в раздел Программирование - Практика программирования

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

Процедура проста в эксплуатации: все, что надо сделать, это вставить ее в модуль печатной формы процедуры или обработки. После этого добавить в свойстве ячейки в поле Расшифровка – ссылку на объект (справочник, или документ).

Процедура ОбработкаЯчейкиТаблицы(Расшифровка,Флаг,Табл,Адрес)
    Перем ТекТип,ТекСписок, ТекЗнач, Конт;
    Если ПустоеЗначение(Расшифровка)=0 Тогда
        ТекСписок=СоздатьОбъект("СписокЗначений");
        ТекТип=ТипЗначенияСтр(Расшифровка);
        Если ТекТип="Справочник" Тогда
            ТекСписок.ДобавитьЗначение("1","Редактировать элемент");
            ТекСписок.ДобавитьЗначение("2","Просмотреть элемент");
            ТекСписок.ДобавитьЗначение("3","Найти в форме списка");
            Если ТекСписок.ВыбратьЗначение(ТекЗнач,,,,1)=1 Тогда
				Если ТекЗнач="1" Тогда
					ОткрытьФорму(Расшифровка,,0);
				ИначеЕсли ТекЗнач="2" Тогда
					ОткрытьФорму(Расшифровка,,1);
				ИначеЕсли ТекЗнач="3" Тогда
					Если ПустоеЗначение(Расшифровка.владелец)=0 тогда
						ОткрытьФорму(Расшифровка,,0);
					Иначе
						Конт="";
						ОткрытьФорму("Справочник." + Расшифровка.Вид() + "." + Метаданные.Справочник(Расшифровка.Вид()).ОсновнаяФорма.Идентификатор, Конт);
						Конт.АктивизироватьОбъект(Расшифровка);
						
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТекТип="Документ" Тогда
			ТекСписок.ДобавитьЗначение("1","Редактировать документ");
			ТекСписок.ДобавитьЗначение("2","Просмотреть документ");
			ТекСписок.ДобавитьЗначение("3","Найти в своем журнале");
			ТекСписок.ДобавитьЗначение("4","Найти в общем журнале");
			Если ТекСписок.ВыбратьЗначение(ТекЗнач,,,,1)=1 Тогда
				Если ТекЗнач="1" Тогда
					ОткрытьФорму(Расшифровка,,0);
				ИначеЕсли ТекЗнач="2" Тогда
					ОткрытьФорму(Расшифровка,,1);
				ИначеЕсли ТекЗнач="3" Тогда
					Конт="";
					ТекЖурнал=Метаданные.Документ(Расшифровка.Вид()).Журнал.Идентификатор;
					ОткрытьФорму("Журнал." + ТекЖурнал + "." + Метаданные.Журнал(ТекЖурнал).ОсновнаяФорма.Идентификатор, Конт);
					Конт.УстановитьИнтервал(Расшифровка.ДатаДок, ПолучитьДатуТА());
					Конт.АктивизироватьОбъект(Расшифровка);
				ИначеЕсли ТекЗнач="4" Тогда
					Конт="";
					ТекЖурнал=Метаданные.ПолныйЖурнал.Идентификатор;
					ОткрытьФорму("Журнал." + ТекЖурнал + "." + Метаданные.Журнал(ТекЖурнал).ОсновнаяФорма.Идентификатор, Конт);
					Конт.УстановитьИнтервал(Расшифровка.ДатаДок, ПолучитьДатуТА());
					Конт.АктивизироватьОбъект(Расшифровка);
				КонецЕсли;
			КонецЕсли;
		Иначе
			Флаг=1;
		КонецЕсли;
	Иначе
		Флаг=1;
	КонецЕсли;
КонецПроцедуры

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей (Che) Коцюра (CheBurator) 24.09.15 21:37
Этот же код можно переписать с количеством если и иначе уполовиненым. Задолбали восьмиэтажные конструкции
2. Anzhey Kul (Anzhey) 25.09.15 10:16
Это просто работает, Я не претендую на идеал и прошу строго не судить :)
3. Владислав Чинючин (vcv) 25.09.15 12:07
(1) CheBurator,
"Если Вам в программе нужно условие, то если в нём должны быть ещё несколько вложенных условий, то если без них совсем-совсем никак не обойтись, то если вам позволяет ваше время, то снабдите программу отступами и комментариями, иначе потом будет очень трудно читать такой текст, иначе сделайте это позже - когда будете посвободней, иначе минимизируйте количество условий, иначе не захламляйте код условиями, иначе обойдитесь вообще без условий."
4. Дониэла Иванова (Доня) 25.09.15 12:25
Вставила, посмотрела.
но я пользуюсь другим способом, если очень необходимо, то
не в модуле а в форме документа > свойство ячейки > в окне Расшифровка > ставлю Документ.ТекущийДокумент()# или Справочник.ТекущийСправочник()#
и работает.
Ваше решение тоже работает,
Спасибо
но модуль ковырять не хочется
5. Владислав Чинючин (vcv) 25.09.15 14:07
(4) Доня, Если есть желание и возможность "поковырять", такие мелкие фишки могут неплохо экономить время пользователей. Например, вот так http://1drv.ms/1LBVb8Y
6. rimma_n (rimma_n) 30.09.15 11:13
(4) Доня, здесь в отличие от Документ.ТекущийДокумент() / Справочник.ТекущийСправочник() можно не только открыть форму, но и посмотреть в журнале / списке. Возьму на заметку.
7. Deborah Grobby (debby) 14.10.15 09:15
Не поняла, зачем это вообще надо... :(
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа