Разработка в 1С 8.0

       

Код:


Запрос = Новый Запрос("

| ВЫБРАТЬ

|   ПродажиОбороты.Контрагент КАК Контрагент,

|   ПродажиОбороты.Номенклатура КАК Номенклатура,

|   ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,

|   ПродажиОбороты.СуммаОборот КАК СуммаОборот

| ИЗ

|   РегистрНакопления.Продажи.Обороты(&ПериодС,&ПериодПо,

|               Месяц,,(Контрагент, Номенклатура)) КАК ПродажиОбороты


| ИТОГИ СУММА(КоличествоОборот) , СУММА(СуммаОборот) ПО

|   Контрагент ИЕРАРХИЯ,

|   Номенклатура ИЕРАРХИЯ,



|   ПродажиОбороты.Период,

|   ПродажиОбороты.Номенклатура.СтранаПроисхождения КАК Страна 

| АВТОУПОРЯДОЧИВАНИЕ") ;

Запрос.УстановитьПараметр("ПериодС", ПериодC);

Запрос.УстановитьПараметр("ПериодПо", КонецДня(ПериодПо));

 

Результат = Запрос.Выполнить();

ПолеТабДок = ЭлементыФормы.ПолеТабличногоДокумента;

СводнаяТаблица = ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица1;

СводнаяТаблица.ИсточникДанных = Результат;

СводнаяТаблица.ОтображатьПоля = Истина;

Если СводнаяТаблица.Колонки.Количество() = 0 И

СводнаяТаблица.Строки.Количество() = 0 И  

СводнаяТаблица.Данные.Количество() = 0 Тогда  

 

СводнаяТаблица.Обновление = Ложь;  

// Зададим начальное расположение измерений на осях   

СводнаяТаблица.Колонки.Добавить("Контрагент");  

СводнаяТаблица.Строки.Добавить("Номенклатура");  

СводнаяТаблица.Данные.Добавить("КоличествоОборот");  

СводнаяТаблица.Данные.Добавить("СуммаОборот");  

<

Диаграмма= ЭлементыФормы.Диаграмма;

Диаграмма.Очистить ();

Диаграмма.Обновление = Ложь;

Диаграмма.Серии.Добавить("Серия 1");

Диаграмма.Серии.Добавить("Серия 2");

Диаграмма.Точки.Добавить("Точка 1");

Диаграмма.Точки.Добавить("Точка 2");

Диаграмма.Точки.Добавить("Точка 3");

Диаграмма.УстановитьЗначение(0,0,5);

Диаграмма.УстановитьЗначение(1,0,2);

Диаграмма.УстановитьЗначение(2,0,8);

Диаграмма.УстановитьЗначение(0,1,10);

Диаграмма.УстановитьЗначение(1,1,15);

Диаграмма.УстановитьЗначение(2,1,14);

Диаграмма.Обновление = Истина;




Диаграмма = ЭлементыФормы.Диаграмма;

Диаграмма.Очистить();

Диаграмма.Обновление = Ложь;

Диаграмма.СерииВСтроках = Ложь;

Диаграмма.ИсточникДанных = ТаблицаДанных;

Диаграмма.Обновление = Истина;




ТабДок = Новый ТабличныйДокумент;

 

//Получение макета

Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");

 

//получим область как новый табличный документ (!)

Область = Макет.ПолучитьОбласть("Заголовок");

 

//выведем область в табличный документ

ТабДок.Вывести(Область);

 

//Шапка

ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));

//Состав

Для Каждого СтрСостава Из Состав Цикл

Область = Макет.ПолучитьОбласть("Строка");  

ТабДок.Вывести(Область);  

КонецЦикла;

 

//Подвал

Область = Макет.ПолучитьОбласть("Подвал");

ТабДок.Вывести(Область);

ТабДок.Показать(); //покажем на экране

А следующий пример формирует более сложный отчет. В нем выводятся горизонтальные и вертикальные области, устанавливаются различные свойства области:




ТабДок= ЭлементыФормы.ПолеТабДок;

ТабДок.Очистить();

Макет = ПолучитьМакет("Основной");

 

//получим область как объект ТабличныйДокумент 

ОбластьТабДок = Макет.ПолучитьОбласть("ЛеваяЧастьШапки");

ТабДок.




ОбластьЯчеек = Макет.Область("НазваниеМесяца") ;

ОбластьЯчеек = Макет.Области[ "НазваниеМесяца" ];

ОбластьЯчеек = Макет.Области.НазваниеМесяца;




//получим область как новый табличный документ (!)

Область = Макет.ПолучитьОбласть("Заголовок");

 

//укажем параметры области

Область.Параметры.НомерДокумента = Номер;

Область.Параметры.От = Дата;

Область.Параметры.Кому = Контрагент;

 

ТабДок.Вывести(Область) ;

ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));

 

Область = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрСостава Из Состав Цикл

Область.Параметры.Заполнить(СтрСостава);

ТабДок.Вывести(Область);

КонецЦикла;

Область = Макет.ПолучитьОбласть{"Подвал");

Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");

Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");

РегОтв = РегистрыСведений.ОтветственныеСотрудники;

Область.Параметры.Директор = РегОтв.ПолучитьПоследнее(Дата).Директор;

ТабДок.Вывести(Область);

Обратите внимание на то, что был применен метод Заполнить, который позволяет в краткой форме присвоить значения всем параметрам. Соответствие устанавливается по именам параметров области и именам свойств переданного объекта.  

 




ТабДок = Новый ТабличныйДокумент;

ТекстЗапроса = "ВЫБРАТЬ

|   СпрНоменклатура.Наименование,

|   СпрНоменклатура.ЭтоГруппа,

|   СпрНоменклатура.Ссылка КАК Ссылка,

|   РегОстатки.КоличествоОстаток КАК Остаток 

|ИЗ 

|   Справочник.Номенклатура КАК СпрНоменклатура 

|   ЛЕВОЕ СОЕДИНЕНИЕ 

|     РегистрНакопления.УчетНоменклатуры.Остатки КАК РегОстатки 

|     ПО СпрНоменклатура.Ссылка = РегОстатки.Номенклатура 

|ГДЕ ЭтоГруппа = Ложь 

|ИТОГИ СУММА(Остаток) ПО Ссылка ТОЛЬКО ИЕРАРХИЯ";

Запрос = Новый Запрос(ТекстЗапроса);

Макет = ПолучитьМакет("Остатки");

Обл = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(Обл);

 

//зафиксируем шапку для удобного просмотра 

ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы;

 

Обл = Макет.Область("Строка");

 

ОбычныйШрифт = Обл.Шрифт;

ОбычныйЦветТекста = Обл.ЦветТекста;

ОбычныйЦветФона = Обл.ЦветФона;

 

//один раз получим область Строка

Обл = Макет.ПолучитьОбласть("Строка");

 

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Остаток = ?(Выборка.Остаток = Null, 0, Выборка.Остаток);  

Обл = Макет.Область("Строка");  

Обл.Шрифт = ОбычныйШрифт;  

Обл.ЦветТекста = ОбычныйЦветТекста;  

Обл.ЦветФона = ОбычныйЦветФона;  

Если Выборка.ТипЗаписи()<>ТипЗаписиЗапроса.ИтогПоГруппировке Тогда   

Если Остаток <= 2 Тогда   

<


Процедура тпРезультатОбработкаРасшифровки(Элемент, Расшифровка,

            СтандартнаяОбработка)

Если ТипЗнч(Расшифровка)=Тип("СправочникСсылка.Номенклатура") Тогда   

СтандартнаяОбработка = Ложь; //отключим стандартную обработку   

НовыйТабДок = формаРасшифровки.ЭлементыФормы.ТабДок;  

РасшифроватьСтроку(НовыйТабДок, Расшифровка);  

ФормаРасшифровки. Открыть ();  

КонецЕсли;  

КонецПроцедуры

Обработку расшифровок у ячейки можно отключить, если задать свойство ИспользованиеРасшифровки в значение «Без обработки». Это же свойство позволяет распространить расшифровку ячейки на всю строку, если установить его в значение «Строка».  




ТабДок.НачатьАвтоГруппировкуСтрок();

Пока Выборка.Следующий();

ТабДок.Вывести(ОбластьТабДок, Выборка.Уровень(),   

         Выборка.Наименование, Ложь);  

КонецЦикла;

ТабДок.ЗакончитьАвтоГруппировкуСтрок();

В качестве имени группировки назначается наименование товара. Все группы выводятся сначала свернутыми, но пользователь может развернуть любую группу с помощью маркера. При использовании группировок будет очень удобно, если установить у ячейки свойство АвтоОтступ в какоенибудь ненулевое значение, например, 5. Тогда система будет автоматически добавлять заданное количество пробелов слева текста ячейки, основываясь на текущем уровне группировки. В результате отчет будет иметь пригодный внешний вид для отображения иерархии данных.  

 

Для ручного управления группами применяются следующие методы объекта ТабличныйДокумент:  

 




Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий();

ОбластьЯчеек = Макет.Область("Номенклатура");  

ОбластьЯчеек.Примечание.Текст = Номенклатура.Комментарий;  

ОбластьТабДок = Макет.ПолучитьОбласть("Номенклатура ");  

ОбластьТабДок.Параметры.Номенклатура = Номенклатура;  

ТабДок.Вывести(ОбластьТабДок);  

КонецЦикла;

Обратите внимание, что свойство Примечание у объекта ОбластьЯчеек является объектом типа Рисунок, а не простой строкой. Через этот объект можно редактировать внешний вид примечания, шрифт и цвет текста, фон, линии и т.д.  

 



Содержание раздела