Отображение регистра в табличный документ Печать
Автор: А.Волос   
26.03.2014 11:10

 

 

 

 

 

 

 

 

 

 

 

 

Пользователь выбирает в переключателе (Регистр сведений либо Регистр накоплений).
Далее выбирает в списке выбора имя регистра, который желает отобразить.
Нажимает Выполнить. Регистр отображается в табличном документе,
в поле выбора на форме отображается сформированный программой запрос!

Скачать 1с внешнюю обработку "": Отображение регистра в табличный документ

 


Функция ПриИзмененииТипаРегистра() инициирует данными список выбора.
Данные берутся из регистра, который пользователь выбрал в переключателе
(Регистр сведений либо Регистр накоплений). Так что при переключении радиокнопки
содержание списка выбора меняется.

Функции ПоказатьВыбранныйРегистрСведений() и ПоказатьВыбранныйРегистрНакоплений()
подготавливают и возвращают запрос к БД, касающийся выбранного регистра.

Далее, в основной процедуре производится запрос к БД и вывод результата
в табличный документ:

 


	Регистр     = ЭлементыФормы.Регистр.Значение;
		
	СтрокаЗапроса = ПоказатьВыбранныйРегистрСведений();
	ЭтаФорма.ПолеВвода1 = СтрокаЗапроса; 

	Запрос = Новый Запрос();
	Запрос.Текст =  СтрокаЗапроса;
	
	Таб = Запрос.Выполнить().Выгрузить();
	ТабДок = ВывестиТаблицуЗначений(Таб, Истина);
	ТабДок.Показать();

Кроме того, в поле ввода на форме выводится сам сформированный программой запрос к БД!

Код программы:

 

 
Перем Периодический;

Процедура ПриИзмененииТипаРегистра()
	
	ЭлементыФормы.Регистр.СписокВыбора.Очистить();
	
	//Заполним список регистров сведений по метаданным, только не подчиненные регистратору	
	МетаданныеРегистров = ?(ВыбранРегистрСведений, Метаданные.РегистрыСведений, Метаданные.РегистрыНакопления);	
	
	Для каждого РегистрМетаданные Из МетаданныеРегистров Цикл
		ЭлементыФормы.Регистр.СписокВыбора.Добавить(РегистрМетаданные.Имя, РегистрМетаданные.Синоним);
 	КонецЦикла;
	
	//Отсортируем по алфавиту
	ЭлементыФормы.Регистр.СписокВыбора.СортироватьПоПредставлению();
	
	Регистр = ЭлементыФормы.Регистр.СписокВыбора[0].Значение;	
	
КонецПроцедуры

//********* Заполнение полей отбора ****************
Функция ПоказатьВыбранныйРегистрСведений()
	
	РегСвед = Метаданные.РегистрыСведений[Регистр];
	
	Периодический = (РегСвед.ПериодичностьРегистраСведений <>  Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический);
	
	СтрокаОтбора = "";
	
	Если Периодический Тогда
		СтрокаОтбора = СтрокаОтбора+"Период";
	КонецЕсли; 
	
	Для каждого Реквизит Из РегСвед.Измерения Цикл
		СтрокаОтбора = СтрокаОтбора+?(ЗначениеЗаполнено(СтрокаОтбора), ", ", "")+ Реквизит.Имя + ".*";
	КонецЦикла; 

	Для каждого Реквизит Из РегСвед.Ресурсы Цикл
		СтрокаОтбора = СтрокаОтбора+?(ЗначениеЗаполнено(СтрокаОтбора), ", ", "") + Реквизит.Имя + ".*";
	КонецЦикла; 

	Для каждого Реквизит Из РегСвед.Реквизиты Цикл
		СтрокаОтбора = СтрокаОтбора+?(ЗначениеЗаполнено(СтрокаОтбора), ", ", "") + Реквизит.Имя + ".*";
	КонецЦикла; 
	
	ПостроительОтчета.Текст = 
	"ВЫБРАТЬ РС.* ИЗ РегистрСведений." + Регистр + " КАК РС 
	| {ГДЕ " + СтрокаОтбора + "}";
	
	Возврат ПостроительОтчета.Текст;
	
КонецФункции	

Функция ПоказатьВыбранныйРегистрНакоплений()
	
	РегНакопл = Метаданные.РегистрыНакопления[Регистр];
	
	СтрокаОтбора = "Период";
	
	Для каждого Реквизит Из РегНакопл.Измерения Цикл
		СтрокаОтбора = СтрокаОтбора+?(ЗначениеЗаполнено(СтрокаОтбора), ", ", "")+ Реквизит.Имя + ".*";
	КонецЦикла; 

	Для каждого Реквизит Из РегНакопл.Ресурсы Цикл
		СтрокаОтбора = СтрокаОтбора+?(ЗначениеЗаполнено(СтрокаОтбора), ", ", "") + Реквизит.Имя + ".*";
	КонецЦикла; 

	Для каждого Реквизит Из РегНакопл.Реквизиты Цикл
		СтрокаОтбора = СтрокаОтбора+?(ЗначениеЗаполнено(СтрокаОтбора), ", ", "") + Реквизит.Имя + ".*";
	КонецЦикла; 
	
	ПостроительОтчета.Текст = 
	"ВЫБРАТЬ РС.* ИЗ РегистрНакопления." + Регистр + " КАК РС 
	| {ГДЕ " + СтрокаОтбора + "}";
	
	Возврат ПостроительОтчета.Текст;
	
КонецФункции	


Процедура КнопкаВыполнитьНажатие(Кнопка)

	//Обновим отбор
	Если ВыбранРегистрСведений Тогда
		
		Регистр     = ЭлементыФормы.Регистр.Значение;
		
		СтрокаЗапроса = ПоказатьВыбранныйРегистрСведений();
		ЭтаФорма.ПолеВвода1 = СтрокаЗапроса; 

		Запрос = Новый Запрос();
		Запрос.Текст =  СтрокаЗапроса;
	
		Таб = Запрос.Выполнить().Выгрузить();
		ТабДок = ВывестиТаблицуЗначений(Таб, Истина);
		ТабДок.Показать();
	Иначе
		
		Регистр     = ЭлементыФормы.Регистр.Значение;
		
		СтрокаЗапроса = ПоказатьВыбранныйРегистрНакоплений();
		ЭтаФорма.ПолеВвода1 = СтрокаЗапроса; 

		Запрос = Новый Запрос();
		Запрос.Текст =  СтрокаЗапроса;
	
		Таб = Запрос.Выполнить().Выгрузить();
		ТабДок = ВывестиТаблицуЗначений(Таб, Истина);
		ТабДок.Показать();
		
	КонецЕсли;
	
КонецПроцедуры


//********* ПОДГОТОВКА ФОРМЫ ****************
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	ВыбранРегистрСведений = Истина;
	ПриИзмененииТипаРегистра();
КонецПроцедуры

Процедура ПриОткрытии()	
	ПоказатьВыбранныйРегистрСведений();
КонецПроцедуры

Функция ВывестиТаблицуЗначений(ТЗ, ВыводитьЗаголовкиКолонок)
	
	Если ТипЗНЧ(ТЗ) <> Тип("ТаблицаЗначений") Тогда
		ВызватьИсключение("Входной параметр функции ВывестиТаблицуЗначений() не является таблицей значений ");
	КонецЕсли;	
	
	ТабДок = Новый ТабличныйДокумент;
	НомТекСтр = 1;
	
	Если ВыводитьЗаголовкиКолонок Тогда
		Для Каждого Колонки Из ТЗ.Колонки Цикл
			Область = ТабДок.Область(НомТекСтр, ТЗ.Колонки.Индекс(Колонки)+1);
			Область.Текст = Колонки.Имя;
		КонецЦикла;
		НомТекСтр = НомТекСтр+1;
	КонецЕсли;	
	
	Для СчСтрок = 0 По ТЗ.Количество()-1 Цикл
		Для СчКол = 0 По ТЗ.Колонки.Количество()-1 Цикл
			
			Область = ТабДок.Область(НомТекСтр, СчКол+1);
			ТекстДляВывода = ТЗ[СчСтрок][СчКол];
			Область.Текст = ТекстДляВывода;
			Область.ШиринаКолонки =  Макс(СтрДлина(ТекстДляВывода), Область.ШиринаКолонки);
			
		КонецЦикла;	
		
		НомТекСтр = НомТекСтр+1;
	КонецЦикла;	
	
	Возврат ТабДок;
	
КонецФункции


Процедура ВыбранРегистрНакопленийПриИзменении(Элемент)
	ПриИзмененииТипаРегистра();
КонецПроцедуры


Процедура ВыбранРегистрСведенийПриИзменении(Элемент)
	ПриИзмененииТипаРегистра();
КонецПроцедуры
 

 

В программе использованы:
Материалы сайта http://1cdop.ru,
Материалы видеоурока Романа Дегтярева http://www.youtube.com/watch?v=biW1WZBJLJ4

 

Скачать 1с внешнюю обработку "": Отображение регистра в табличный документ

 

Обновлено 23.09.2014 15:48