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

Публикация № 17183

Разработка - Печать - Печатные формы документов

Иногда хочется увидеть все реквизиты документа, в том числе и те, которые на форме отсутствуют.
Особенно, если они автоматом понаустанавливались.
Приведенный код позволяет по горячим клавишам 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 1201 14.04.08 10:26 Сейчас в теме
А еще лучше закинуть этот код в класс 1С++ и наслаждаться в любой конфе :)
2. maloi_a 14.04.08 17:54 Сейчас в теме
Внутренний оператор Если
Код
Если (Контрол=1) И (Альт=1) И  (КодКл=80)   Тогда
Показать полностью

надо сделать внешним, т. е. поставить его первым оператором,
и процедура будет эффективной.
3. Abadonna 3866 14.04.08 17:57 Сейчас в теме
>надо сделать внешним, т. е. поставить его первым оператором,
Тут ты неправ, потому как у меня лично на
Если Тип="Документ" Тогда срабатывает еще куча всяких прибамбасов, а это только кусок
4. CheBurator 15.04.08 00:10 Сейчас в теме
..да... только русские с их изощренной фантазией могли назвать включатель выключателем...
5. O-Planet 6899 15.04.08 02:34 Сейчас в теме
Хм... А оно без FormEx-а - никак? Я вообще-то это делаю внешней обработкой...
6. Abadonna 3866 15.04.08 03:04 Сейчас в теме
>А оно без FormEx-а - никак?
>Я вообще-то это делаю внешней обработкой...
А еще можно на корове ездить, а не на лошади.
Ага! Запусти внешнюю обработку, выбери в ней документ... Планет, можно подумать, я до такой фигни не додумался.
Тут как раз весь смысл в горячих клавишах.
8. ADirks 184 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 2852 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);
         Таб.Показать("Документ " + Конт.ТекущийДокумент()); 
      КонецЕсли;            
   КонецЕсли;     

   ФормаРасш = "";     
КонецПроцедуры 
Показать полностью
Abadonna; +1 Ответить
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76823    Serginio    108    

Заполнение реквизитов документов из предыдущего документа

Практика программирования Универсальные функции Разработка v7.7 1cv7.md Бесплатно (free)

Функция для автоматического заполнения реквизитов документов.

04.02.2019    5143    drevilo    1    

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

Практика программирования Универсальные функции v7.7 1cv7.md Бесплатно (free)

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

24.09.2015    17732    Anzhey    14    

Получение характеристик и управление текущим процессом 1С на основе WMI

Универсальные функции v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Функционал для работы из 1С с текущим процессом класса Win32_Process. Пример получает текущее значение ОЗУ занятое процессом 1С. По описанной методике можно получать значения пиковых нагрузок на ОЗУ, время запуска текущей сессии 1С с точностью до миллисекунд. Определять загрузку активного ядра процессом и даже поменять приоритет самого процесса.

09.07.2012    21304    dusha0020    8    

Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8

Перенос данных из 1С7.7 в 1C8.X Универсальные функции v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)

28.09.2011    16663    dnikolaev    9    

Быстрый поиск подчиненного документа, с помощью прямого запроса

Практика программирования Универсальные функции openconf 1cv7.md Россия Бесплатно (free)

При ситуации, когда необходимо проверить, есть ли у документа подчиненный документ, конкретного вида или нет, если есть, вывести на экран, в этой ситуации будет полезна следующая функция глобального модуля. Работает только в SQL версии и при установленной внешней компоненте 1С++ !

26.05.2011    13306    Vix    1    

Программное изменение текста в надписях Word

Печатные формы документов Практика программирования v7.7 1cv7.md Бесплатно (free)

Печатная форма договора в шаблоне Word. Реквизиты в 1С. Заполнение шаблона реквизитами: все стандартно, но в надписях долго получалось. Получилось :) Может кому пригодится.

06.12.2010    17793    АннаШ    10    

Мьютексы в 1С 7.7

Файловые протоколы обмена, FTP Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Бесплатно (free)

Существует ряд задач, которые требуют строго последовательного исполнения. Чаще всего это возникает при многопоточном программировании, в этом случае используются критические секции, но иногда надо синхронизировать и разные приложения - для этого существуют такие объекты ядра операционной системы как Мьютекс-ы. http://ru.wikipedia.org/wiki/Мьютекс В статье рассказывается как можно сделать аналогичный объект средствами 1С v7.7

02.07.2010    14079    Sk0rp    24    

Как получить GUID без v7plus.dll в Предприятии 7.7

Практика программирования Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

Часто в терминальных сессиях у пользователю Windows не хватает прав на регистрацию v7plus.dll. Соответственно нельзя воспользоваться, например методом СоздатьGUID() класса V7SysInfo.

12.05.2010    14512    prolancer    5    

Алгоритм расчета периодов

Практика программирования Универсальные функции v7.7 1cv7.md Россия Бесплатно (free)

Вычисление периодов в формате ГГММДД. Вычисление дат по формуле Дата + ГГММДД. Примечание: Даты передаем в виде 'ДД.ММ.ГГГГ', периоды - "ГГ-ММ-ДД". Пользуйтесь.

10.03.2010    9874    arithmometr    1    

Восстанавливаем штрих-код (7.7)

Универсальные функции v77::ОУ v77::БУ v77::Расчет 1cv7.md Бесплатно (free)

Если сканер плохо читает...

25.01.2010    19410    Арчибальд    8    

1С Предприятие 7.7 и Mozilla Thunderbird. Отправка писем из командной строки

Универсальные функции Email v77::ОУ v77::БУ 1cv7.md 1С7:Бух Бесплатно (free)

Клиент захотел чтобы у него из 1С формировались письма с вложениями и отправлялись через Mozilla Thunderbird. Из этого вышла маленькая процедура.

30.11.2009    14516    kasperok    15    

Транслитерация в латиницу

Практика программирования Универсальные функции v7.7 1cv7.md Россия Бесплатно (free)

При отправке SMSок из 1С столкнулся с тем, что текст отправлялся только латиницей, а данные-то в кириллице. В результате написал функцию перевода текста в латиницу. Может, кому-нибудь пригодится

02.10.2009    28026    yuraer    18    

Создаем сортировку по подразделению в любом документе (Зарплата и Кадры 7.7)

Универсальные функции v77::Расчет 1С7:ЗиК Бесплатно (free)

Создаем сортировку по подразделению (Зарплата и Кадры 7.7) на примере документа Выплата заработной платы

27.05.2009    13229    Craig    67    

Функция перезагрузки Таблицы Значений по условиям

Универсальные функции v7.7 1cv7.md Россия Бесплатно (free)

Возвращает таблицу значений, отфильтрованную по условию в заданной колонке (равно, не равно, больше, меньше, содержит, равны две указанные колонки)

06.11.2008    6095    stellavolf    9    

Предупреждение о превышении размера mlg

Универсальные функции v77::БУ 1С7:Бух Россия Бесплатно (free)

Предупреждение о превышении размера mlg

18.12.2007    7962    AklexK    5