gifts2017

Горячая печать реквизитов (их значений ) документов с использованием FormEx

Опубликовал Аркадий Кучер (Abadonna) в раздел Печать - Печатные формы документов

Иногда хочется увидеть все реквизиты документа, в том числе и те, которые на форме отсутствуют.
Особенно, если они автоматом понаустанавливались.
Приведенный код позволяет по горячим клавишам CTRL+ALT+P получить распечатку ВСЕХ реквизитов, начиная от общих, заканчивая ТЧ. Код необходимо вставить в Глобальный модуль, или в Дополнительный глобальный модуль, подключенный с помощью Formex
// добавляем в ГМ или допГМ
// предопределенная процедура Formex.dll
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКл, Альт, Шифт, Контрол, Символ, ФСО)  
	ФормаРасш = СоздатьОбъект("РасширениеФормы");   
	Попытка
		ФормаРасш.УстановитьФорму(Конт.Форма);
	Исключение
		Возврат;
	КонецПопытки;   
	Тип=ФормаРасш.ТипОбъекта();  
	Если Тип="Документ" Тогда   
		// Распечатка документа по горячим клавишам CTRL+ALT+P   
		//(форма документа должна быть интерактивно открыта)
		Если (Контрол=1) И (Альт=1) И  (КодКл=80)   Тогда   
			Вид=Конт.Вид();  
			Таб=СоздатьОбъект("Таблица");
			Область=Таб.Область(1,1); 
			Область.РазмерШрифта(10);
			Область.Полужирный(1);   
			Область.ВысотаСтроки(12);
			Область.Текст=  Конт.ТекущийДокумент();       
			Область=Таб.Область(2,1); 
			Область.РазмерШрифта(10);
			Область.Полужирный(1);   
			Область.ВысотаСтроки(12);
			Область.РамкаОбвести(3,3,3,3);
			Область.ЦветФона(200,250,225); 
			Область.ШиринаСтолбца(20);    
			Область.Текст=  "ВР";       
			Область=Таб.Область(2,2);
			Область.РазмерШрифта(10);
			Область.Полужирный(1);   
			Область.ВысотаСтроки(12);
			Область.РамкаОбвести(3,3,3,3);
			Область.ЦветФона(200,250,225);
			Область.ШиринаСтолбца(20);    
			Область.Текст=  "Реквизит";       
			Область=Таб.Область(2,3);
			Область.РазмерШрифта(10);
			Область.ВысотаСтроки(12);
			Область.Полужирный(1);   
			Область.РамкаОбвести(3,3,3,3);
			Область.ЦветФона(200,250,225); 
			Область.ШиринаСтолбца(20);    
			Область.Текст=  "Значение";                     
			Стр=2;            
			// Общие реквизиты
			Для А=1 По Метаданные.ОбщийРеквизитДокумента() Цикл 
				Стр=Стр+1;
				ИД=Метаданные.ОбщийРеквизитДокумента(А).Идентификатор;
				Область=Таб.Область(Стр,1);
				Область.РамкаОбвести(3,3,3,3); 
				Область.РазмерШрифта(10);
				Область.Текст=  "ОБЩ"; 
				Область=Таб.Область(Стр,2);
				Область.РамкаОбвести(3,3,3,3);      
				Область.РазмерШрифта(10);
				Область.Текст=  ИД; 
				Область=Таб.Область(Стр,3);
				Область.РамкаОбвести(3,3,3,3);
				Область.РазмерШрифта(10);
				Область.Контроль(2);
				Область.Текст=  Конт.ПолучитьАтрибут(ИД); 
			КонецЦикла;             
			// Реквизиты шапки
			Для А=1 По Метаданные.Документ(Вид).РеквизитШапки() Цикл  
				Стр=Стр+1;
				ИД=Метаданные.Документ(Вид).РеквизитШапки(А).Идентификатор; 
				Область=Таб.Область(Стр,1);
				Область.РамкаОбвести(3,3,3,3);
				Область.РазмерШрифта(10);
				Область.Текст=  "  Ш"; 
				Область=Таб.Область(Стр,2);
				Область.РамкаОбвести(3,3,3,3);
				Область.РазмерШрифта(10);
				Область.Текст=  ИД; 
				Область=Таб.Область(Стр,3);
				Область.РамкаОбвести(3,3,3,3);
				Область.РазмерШрифта(10);   
				Область.Контроль(2);
				Область.Текст=  Конт.ПолучитьАтрибут(ИД); 
			КонецЦикла;  
			Если Конт.КоличествоСтрок()>0 Тогда
				Стр=Стр+1;  
				// выводим заголовки ТЧ (идентификаторы реквизитов)
				Для А=1  По Метаданные.Документ(Вид).РеквизитТабличнойЧасти() Цикл
					ИД=Метаданные.Документ(Вид).РеквизитТабличнойЧасти(А).Идентификатор;    
					Область=Таб.Область(Стр,А); 
					Область.РазмерШрифта(10);
					Область.Полужирный(1);   
					Область.ВысотаСтроки(12);
					Область.РамкаОбвести(3,3,3,3);
					Область.ЦветФона(200,250,225);    
					Область.ШиринаСтолбца(20);    
					Область.Контроль(2);
					Область.Текст=  ИД;       
				КонецЦикла;   
				// Выводим значения реквизитов ТЧ
				Конт.ВыбратьСтроки();
				Пока Конт.ПолучитьСтроку()=1 Цикл
					Стр=Стр+1;
					Для А=1 По Метаданные.Документ(Вид).РеквизитТабличнойЧасти() Цикл 
						ИД=Метаданные.Документ(Вид).РеквизитТабличнойЧасти(А).Идентификатор;  
						Область=Таб.Область(Стр,А);
						Область.РамкаОбвести(3,3,3,3);
						Область.РазмерШрифта(10); 
						Если Найти(ИД,"Номенклатура")=0 Тогда
							Область.Текст=  Конт.ПолучитьАтрибут(ИД);
						Иначе     
							Атр=Конт.ПолучитьАтрибут(ИД);
							Если Атр.НеВключатьВПрайс=1 Тогда
								Область.Текст=  "З:"+Конт.ПолучитьАтрибут(ИД); 
							Иначе
								Область.Текст=  "П:"+Конт.ПолучитьАтрибут(ИД); 
							КонецЕсли;  
						КонецЕсли; 
					КонецЦикла;   
				КонецЦикла;  
			КонецЕсли;
			Таб.Опции(0,0,1,0);
			Таб.Показать("Документ "+Вид); 
		КонецЕсли;            
	КонецЕсли;     
	ФормаРасш ="";     
КонецПроцедуры 

См. также

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

Комментарии

1. Артур Аюханов (artbear) 14.04.08 10:26
А еще лучше закинуть этот код в класс 1С++ и наслаждаться в любой конфе :)
2. Alexandr (maloi_a) 14.04.08 17:54
Внутренний оператор Если
Код
Если (Контрол=1) И (Альт=1) И  (КодКл=80)   Тогда
Показать полностью

надо сделать внешним, т. е. поставить его первым оператором,
и процедура будет эффективной.
3. Аркадий Кучер (Abadonna) 14.04.08 17:57
>надо сделать внешним, т. е. поставить его первым оператором,
Тут ты неправ, потому как у меня лично на
Если Тип="Документ" Тогда срабатывает еще куча всяких прибамбасов, а это только кусок
4. Сhe Burashka (CheBurator) 15.04.08 00:10
..да... только русские с их изощренной фантазией могли назвать включатель выключателем...
5. Олег Пономаренко (O-Planet) 15.04.08 02:34
Хм... А оно без FormEx-а - никак? Я вообще-то это делаю внешней обработкой...
6. Аркадий Кучер (Abadonna) 15.04.08 03:04
>А оно без FormEx-а - никак?
>Я вообще-то это делаю внешней обработкой...
А еще можно на корове ездить, а не на лошади.
Ага! Запусти внешнюю обработку, выбери в ней документ... Планет, можно подумать, я до такой фигни не додумался.
Тут как раз весь смысл в горячих клавишах.
7. Олег Пономаренко (O-Planet) 15.04.08 03:52
8. Алексей (ADirks) 15.04.08 12:37
А кстати, на proclub'е есть обработина EditRekv.ert, которая позволяет не только просмотреть все реквизиты, но и отредактировать. Незаменимая вещь иногда.
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=1081
9. АЛьФ (АЛьФ) 15.04.08 22:30
2(8) На прошлой моей работе она была подвешена на "клик по пустому месту на тулбаре". Жутко удобно :)
10. GSoft. (GSoft) 15.11.08 02:47
Немножко изменил модуль
добавил печать синонима реквизита если он не совпадает с идентификатором и расшифровка

Код
//_____________________________________________________________________________
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКл, кнАльт, кнШифт, кнКонтрол, Символ)
   ФормаРасш = СоздатьОбъект("РасширениеФормы");   
   
   Попытка
      ФормаРасш.УстановитьФорму(Конт.Форма);
   Исключение
      Возврат;
   КонецПопытки;   
   
   Тип = ФормаРасш.ТипОбъекта();  
   
   Если Тип = "Документ" Тогда 
      //распечатка ВСЕХ реквизитов документа по горячим клавишам CTRL+ALT+P
      //начиная от общих, заканчивая ТЧ
      //(форма документа должна быть интерактивно открыта)
      Если (кнКонтрол = 1) И (кнАльт = 1) И  (КодКл = 80)   Тогда   
         Вид = Конт.Вид();  
         Таб = СоздатьОбъект("Таблица");
         Область = Таб.Область(1, 1); 
         Область.РазмерШрифта(10);
         Область.Полужирный(1);   
         Область.ВысотаСтроки(36);  
         Область.ВертикальноеПоложение(3);
         Область.Текст = Конт.ТекущийДокумент();       
         
         Область = Таб.Область(2, 1); 
         Область.РазмерШрифта(10);
         Область.Полужирный(1);   
         Область.ВысотаСтроки(12);
         Область.РамкаОбвести(3,3,3,3);
         Область.ЦветФона(200,250,225); 
         Область.ШиринаСтолбца(20);    
         Область.Текст = "ВР";       
         
         Область = Таб.Область(2,2);
         Область.РазмерШрифта(10);
         Область.Полужирный(1);   
         Область.ВысотаСтроки(12);
         Область.РамкаОбвести(3,3,3,3);
         Область.ЦветФона(200,250,225);
         Область.ШиринаСтолбца(20);    
         Область.Текст = "Реквизит";       
         
         Область = Таб.Область(2,3);
         Область.РазмерШрифта(10);
         Область.ВысотаСтроки(12);
         Область.Полужирный(1);   
         Область.РамкаОбвести(3,3,3,3);
         Область.ЦветФона(200,250,225); 
         Область.ШиринаСтолбца(20);    
         Область.Текст = "Значение";                     
         Стр = 2;        
         
         // Общие реквизиты
         Для А = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл 
            Стр = Стр + 1;
            ИД = Метаданные.ОбщийРеквизитДокумента(А).Идентификатор;
            Пред = Метаданные.ОбщийРеквизитДокумента(А).Представление(); 
            Область = Таб.Область(Стр, 1);
            Область.РамкаОбвести(3,3,3,3); 
            Область.РазмерШрифта(10);
            Область.Текст = "ОБЩ"; 
         
            Область = Таб.Область(Стр, 2);
            Область.РамкаОбвести(3,3,3,3);      
            Область.РазмерШрифта(10);

            Если СокрЛП(ИД) = СокрЛП(Пред) Тогда
               Область.Текст = ИД; 
            Иначе
               Область.Текст = СокрЛП(ИД) + " (" + СокрЛП(Пред) + ")"; 
            КонецЕсли;
            
            Область = Таб.Область(Стр, 3);
            Область.РамкаОбвести(3,3,3,3);
            Область.РазмерШрифта(10);
            Область.Контроль(2);
            Область.Текст = Конт.ПолучитьАтрибут(ИД); 
            
            ТипЗначРекв = ТипЗначенияСтр(Конт.ПолучитьАтрибут(ИД));
            
            Если (ТипЗначРекв = "Справочник") или (ТипЗначРекв = "Документ") Тогда
                Область.Расшифровка(Конт.ПолучитьАтрибут(ИД)); 
            КонецЕсли;
         КонецЦикла;         
         
         // Реквизиты шапки
         Для А = 1 По Метаданные.Документ(Вид).РеквизитШапки() Цикл  
            Стр = Стр + 1;
            ИД = Метаданные.Документ(Вид).РеквизитШапки(А).Идентификатор; 
            Пред = Метаданные.Документ(Вид).РеквизитШапки(А).Представление(); 
            Область = Таб.Область(Стр, 1);
            Область.РамкаОбвести(3,3,3,3);
            Область.РазмерШрифта(10);
            Область.Текст = "  Ш"; 
            
            Область = Таб.Область(Стр, 2);
            Область.РамкаОбвести(3,3,3,3);
            Область.РазмерШрифта(10);
            
            Если СокрЛП(ИД) = СокрЛП(Пред) Тогда
               Область.Текст = ИД; 
            Иначе
               Область.Текст = СокрЛП(ИД) + " (" + СокрЛП(Пред) + ")"; 
            КонецЕсли;
            
            Область = Таб.Область(Стр, 3);
            Область.РамкаОбвести(3,3,3,3);
            Область.РазмерШрифта(10);   
            Область.Контроль(2);
            Область.Текст = Конт.ПолучитьАтрибут(ИД); 

            ТипЗначРекв = ТипЗначенияСтр(Конт.ПолучитьАтрибут(ИД));
            
            Если (ТипЗначРекв = "Справочник") или (ТипЗначРекв = "Документ") Тогда
                Область.Расшифровка(Конт.ПолучитьАтрибут(ИД)); 
            КонецЕсли;
         КонецЦикла;  
         
         Если Конт.КоличествоСтрок()>0 Тогда
            Стр = Стр + 1;  
            // выводим заголовки ТЧ (идентификаторы реквизитов)
            Для А = 1  По Метаданные.Документ(Вид).РеквизитТабличнойЧасти() Цикл
               ИД = Метаданные.Документ(Вид).РеквизитТабличнойЧасти(А).Идентификатор;    
               Пред = Метаданные.Документ(Вид).РеквизитТабличнойЧасти(А).Представление(); 
               Область = Таб.Область(Стр, А); 
               Область.РазмерШрифта(10);
               Область.Полужирный(1);   
               Область.ВысотаСтроки(12);
               Область.РамкаОбвести(3,3,3,3);
               Область.ЦветФона(200,250,225);    
               Область.ШиринаСтолбца(20);    
               Область.Контроль(2);

               Если СокрЛП(ИД) = СокрЛП(Пред) Тогда
                  Область.Текст = ИД; 
               Иначе
                  Область.Текст = СокрЛП(ИД) + " (" + СокрЛП(Пред) + ")"; 
               КонецЕсли;
            КонецЦикла;         
            
            // Выводим значения реквизитов ТЧ
            Конт.ВыбратьСтроки();
            Пока Конт.ПолучитьСтроку() = 1 Цикл
               Стр = Стр + 1;
               Для А = 1 По Метаданные.Документ(Вид).РеквизитТабличнойЧасти() Цикл 
                  ИД = Метаданные.Документ(Вид).РеквизитТабличнойЧасти(А).Идентификатор;  
                  Область = Таб.Область(Стр, А);
                  Область.РамкаОбвести(3,3,3,3);
                  Область.РазмерШрифта(10); 
                  Область.Текст = Конт.ПолучитьАтрибут(ИД); 

                  ТипЗначРекв = ТипЗначенияСтр(Конт.ПолучитьАтрибут(ИД));
                  
                  Если (ТипЗначРекв = "Справочник") или (ТипЗначРекв = "Документ") Тогда
                     Область.Расшифровка(Конт.ПолучитьАтрибут(ИД)); 
                  КонецЕсли;
               КонецЦикла;   
            КонецЦикла;  
         КонецЕсли;
      
         Таб.Опции(0,0,1,0);                 
           Таб.ТолькоПросмотр(1);
         Таб.Показать("Документ " + Конт.ТекущийДокумент()); 
      КонецЕсли;            
   КонецЕсли;     

   ФормаРасш = "";     
КонецПроцедуры 
Показать полностью
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа