IE2017

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

Программирование - Практика программирования

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 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) 3385 24.09.15 21:37 Сейчас в теме
Этот же код можно переписать с количеством если и иначе уполовиненым. Задолбали восьмиэтажные конструкции
2. Anzhey Kul (Anzhey) 14 25.09.15 10:16 Сейчас в теме
Это просто работает, Я не претендую на идеал и прошу строго не судить :)
3. Владислав Чинючин (vcv) 83 25.09.15 12:07 Сейчас в теме
(1) CheBurator,
"Если Вам в программе нужно условие, то если в нём должны быть ещё несколько вложенных условий, то если без них совсем-совсем никак не обойтись, то если вам позволяет ваше время, то снабдите программу отступами и комментариями, иначе потом будет очень трудно читать такой текст, иначе сделайте это позже - когда будете посвободней, иначе минимизируйте количество условий, иначе не захламляйте код условиями, иначе обойдитесь вообще без условий."
Slypower; rimma_n; +2 Ответить
4. Дониэла Иванова (Доня) 266 25.09.15 12:25 Сейчас в теме
Вставила, посмотрела.
но я пользуюсь другим способом, если очень необходимо, то
не в модуле а в форме документа > свойство ячейки > в окне Расшифровка > ставлю Документ.ТекущийДокумент()# или Справочник.ТекущийСправочник()#
и работает.
Ваше решение тоже работает,
Спасибо
но модуль ковырять не хочется
5. Владислав Чинючин (vcv) 83 25.09.15 14:07 Сейчас в теме
(4) Доня, Если есть желание и возможность "поковырять", такие мелкие фишки могут неплохо экономить время пользователей. Например, вот так http://1drv.ms/1LBVb8Y
6. rimma_n (rimma_n) 165 30.09.15 11:13 Сейчас в теме
(4) Доня, здесь в отличие от Документ.ТекущийДокумент() / Справочник.ТекущийСправочник() можно не только открыть форму, но и посмотреть в журнале / списке. Возьму на заметку.
7. Deborah Grobby (debby) 14.10.15 09:15 Сейчас в теме
Не поняла, зачем это вообще надо... :(
8. Александр Александр (Isay) 15.06.17 18:20 Сейчас в теме
(5) Владислав, ссылка на шикарные фото с шикарными примерами. Ребята, может кто то поделиться живыми рабочими примерами как такие фишки сделать для пользователе? Заранее спасибо. Почта для ответов plastcon@mail.ru
9. Владислав Чинючин (vcv) 83 15.06.17 20:40 Сейчас в теме
(8)
Владислав, ссылка на шикарные фото с шикарными примерами. Ребята, может кто то поделиться живыми рабочими примерами как такие фишки сделать для пользователе? Заранее спасибо. Почта для ответов plastcon@mail.ru

Подозреваю, что кто хотел/мог поделиться, тот уже поделился. Ищите на этом сайте.
У меня много подобных удобств, но так как конфигурация переписанная практически полностью, выделить небольшие независимые куски кода, которые реализуют функционал, слишком трудозатратно.
10. Александр Александр (Isay) 16.06.17 08:30 Сейчас в теме
(9) Владислав, а md-файлом не могли бы поделиться? Не сочтите за наглость. Заранее спасибо.
11. Владислав Чинючин (vcv) 83 16.06.17 14:17 Сейчас в теме
(10) Не могу. Политика предприятия запрещает. Это же собственность компании, за зарплату купленная.
Оставьте свое сообщение