1с зафиксировать шапку отчета
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Посмотреть все результаты поиска похожих
Еще в этой же категории
Вывод картинки (изображения) на печать, в макет (табличный документ) 32
// 1-й вариант //Как вывести картинку в табличный документ? ТабДок = Новый ТабличныйДокумент; Макет = ОбработкаОбъект.ПолучитьМакет(" Макет" ); ОбластьКартинки = Макет.ПолучитьОбласть(" ОбластьСКартинкой" ); Картинка = Новый Картинка(ПутьККа Вывести табличный документ в PDF 18
Данный пример работает на платформе выше 8.2.13 Макет = ПолучитьМакет(" Макет" ); ОбластьШапка = Макет.ПолучитьОбласть(" Шапка" ); ТабДок = Новый ТабличныйДокумент; ОбластьШапка.Параметры.НомерДок = Номер; ОбластьШапка.Параметры.ДатаДок = Как программно изменить текст, цвет, фон ячейки или области табличного документа? 7
Ниже приведено несколько полезных шаблонов кода по работе с табличным документом: //Пример получения текста ячейки ПолеТабДок = ЭлементыФормы.тдПолеТабличногоДокумента; ПолеТабДок.Область("R1C2").Текст = спрНоменклатура.Наименование; ПолеТабДок Как в отобразить картинку в табличной части 7
В табличной части есть документы заявки от покупателя, нам нужно добавить картинку для отображения статуса документов заявка - проведен , не проведен, помечен на удаление. //Отобразим картинку Процедура СписокПриВыводеСтроки(Элемент, Оформление Вывод колонтитулов программно ВерхнийКолонтитул, НижнийКолонтитул 6
Колонтитул является специальным текстом, выводимым вверху или внизу каждой страницы при выводе документа на печать. В тексте колонтитула можно использовать следующие управляющие конструкции: > ( >) - при печати в данном месте будет выведен номер ст Посмотреть все в категории Табличный документ
also Что-то вроде FAQ Отзывов (7) В закладки
Для того, чтобы зафиксировать шапку в скд, необходимо обрабатывать табличный документ. В инструментах скд этот механизм отсутствует.
Код вывода с фиксацией шапки:
Для того, чтобы зафиксировать колонку по горизонтали, можно просто выполнить следующее:
UPD В 1с 8.2 в отчете у модуля объекта появился метод ПриКомпоновкеРезультата(), у которого есть параметр ДокументРезультат – табдок, который генерирует СКД.
По сути в модуле объекта можно прописать следующее:
Если программировать на 8.2, то можно реализовать проще.
В 1с 8.2 в отчете у модуля объекта появился метод ПриКомпоновкеРезультата(), у которого есть параметр ДокументРезультат – табдок, который генерирует СКД.
По сути в модуле объекта можно прописать следующее:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ДокументРезультат.ФиксацияСверху = 8;
КонецПроцедуры
Спасибо! Добавлю в публикацию
Фиксацию в 8.1 также можно добавить через процедуру ОбновлениеОтображения(), правда смотрел только на небольших отчетах.
Мир Вам! У меня не получилось сделать вашим кодом, а получилось вот таким:
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
//Определение Процессора компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
//Определение Процессора вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
//Получение доп макета для шапки и подвала
Макет = ОтчетОбъект.ПолучитьМакет(“Макет”);
//Вывод шапки
Область = Макет.ПолучитьОбласть(“Заголовок”);
//Область.Параметры.ДатаОтчета = Формат(ТекущаяДата(), “ДФ=dd.MM.yyyy”);
//Область.Параметры.Организация = организация;
//Область.Параметры.Месяц = Формат(Период, “ДФ=’MMММ yyyy'”);
ЭлементыФормы.Результат.Вывести(Область);
//Вывод таблицы
ПроцессорВывода.Вывести(процессорКомпоновки);
Вообще-то в 8.1 тоже можно поступить гораздо проще. В модуле формы отчета прописать процедуру
Процедура ОбновлениеОтображения()
ЭлементыФормы.Результат.ФиксацияСверху=1;
КонецПроцедуры
Только не могу понять что попадает сюда: ЭлементРезультата.ЗначенияПараметров
Не работает (по крайней мере на 8.1).
Не определён объект ПроцессорКомпоновкиДанных.
Для того чтобы заработало надо вверху добавить следующее:
—————————————————————————————————————
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных,
КомпоновщикНастроек.Настройки );
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать( МакетКомпоновки );
—————————————————————————————————————
И не понятно зачем в “Результат.ФиксацияСверху = Результат.ВысотаТаблицы – 1;” минус один, должно быть без него.
also Что-то вроде FAQ Отзывов (7) В закладки
Для того, чтобы зафиксировать шапку в скд, необходимо обрабатывать табличный документ. В инструментах скд этот механизм отсутствует.
Код вывода с фиксацией шапки:
Для того, чтобы зафиксировать колонку по горизонтали, можно просто выполнить следующее:
UPD В 1с 8.2 в отчете у модуля объекта появился метод ПриКомпоновкеРезультата(), у которого есть параметр ДокументРезультат – табдок, который генерирует СКД.
По сути в модуле объекта можно прописать следующее:
Для того, чтобы зафиксировать шапку в скд, необходимо обрабатывать табличный документ. В инструментах скд этот механизм отсутствует. Код вывода с фиксацией шапки: Результат = ЭлементыФормы.Результат; Результат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных ВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.НачатьВывод(); ТаблицаЗафиксирована = Ложь; Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультата= Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); Если Не ТаблицаЗафиксирована И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда ТаблицаЗафиксирована = Истина; Результат.ФиксацияСверху = Результат.ВысотаТаблицы - 1; КонецЕсли; КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); Для того, чтобы зафиксировать колонку по горизонтали, можно просто выполнить следующее: Результат.ФиксацияСлева = 1; UPD В 1с 8.2 в отчете у модуля объекта появился метод ПриКомпоновкеРезультата(), у которого есть параметр ДокументРезультат – табдок, который генерирует СКД. По сути в модуле объекта можно прописать следующее.
also Что-то вроде FAQ 1 отзыв В закладки
Иногда в качестве заголовка отчета требуется задать что-нибудь сложное, вроде:
“Отчет за период с ” + ДатаНачала + “ по ” + ДатаКонца
Задать его таким образом в настройках не получится. Придется сделать это программно следующим образом:
Иногда в качестве заголовка отчета требуется задать что-нибудь сложное, вроде: “Отчет за период с ” + ДатаНачала + “ по ” + ДатаКонца Задать его таким образом в настройках не получится. Придется сделать это программно следующим образом: ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыВывода. НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Title")); ЗначениеПараметра.Значение="Отчет за период с "+ДатаНачала+" по "+ДатаКонца; ЗначениеПараметра.Использование = Истина; Перейти к.
also Что-то вроде FAQ Отзывов (7) В закладки
Иногда возникает желание изменить само слово Итого в общих итогах.
Сделаем это следующим образом:
После этого общие итоги выглядят примерно так:
Иногда возникает желание изменить само слово Итого в общих итогах. Сделаем это следующим образом: //Получаем схему из макета СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Из схемы возьмем настройки по умолчанию Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //Помещаем в переменную данные о расшифровке данных ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); //Очищаем поле табличного документа Результат = ЭлементыФормы.Результат; Результат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных ВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); //Ищем в табличном документе "Итого" и заменяем ТекОбласть = Результат.НайтиТекст("Итого", ТекОбласть, Результат.Область(), Истина, Истина, Истина, Ложь); Если ТекОбласть <> Неопределено Тогда ТекОбласть.Текст = "МоёИтого"; КонецЕсли; После этого общие итоги выглядят примерно так.
also Что-то вроде FAQ 1 отзыв В закладки
Для удобства работы с параметрами типа дата, в системе компоновки данных существует возможность использовать Стандартные периоды.
Как же их использовать?
Мы имеем отчет, в котором 2 параметра: Начало периода и Конец периода. Добавим в параметры третий параметр, назовем его Стандартный период и установим ему тип СтандартныйПериод.
Для параметров Начало периода и Конец периода в Выражение запишем следующее:
&СтандартныйПериод.ДатаНачала
&СтандартныйПериод.ДатаОкончания
Также у этих параметров установим галку Ограничение доступности.
Все. Теперь можно пользоваться возможностями стандартного периода:
Кроме того, стандартная дата окончания содержит время 23:59:59 что избавляет от проблемы, описанной здесь.
Для удобства работы с параметрами типа дата, в системе компоновки данных существует возможность использовать Стандартные периоды. Как же их использовать? Мы имеем отчет, в котором 2 параметра: Начало периода и Конец периода. Добавим в параметры третий параметр, назовем его Стандартный период и установим ему тип СтандартныйПериод. Для параметров Начало периода и Конец периода в Выражение запишем следующее: &СтандартныйПериод.ДатаНачала &СтандартныйПериод.ДатаОкончания Также у этих параметров установим галку Ограничение доступности. Все. Теперь можно пользоваться возможностями стандартного периода: Кроме того, стандартная дата окончания содержит время 23:59:59 что избавляет от проблемы, описанной здесь. Перейти к.
also Что-то вроде FAQ Отзывов (5) В закладки
Пользователь выбрал период формирования отчета с 1июля по 31. Почему при формировании отчета в него не попадают данные за 31 число?
На самом деле, это одна из самых распространенных ошибок при разработке отчетов. В 1С 8.х дата содержит время с точностью до секунды, и если в своем отчете Вы описываете параметры следующим образом:
то при формировании пользователем отчета с 1 по 31 июля, фактически параметры будут заполнены так: НачалоПериода = 01.07.2010. 0:00:00, КонецПериода = 31.07.2010. 0:00:00. Т.е. данные, отличные от начала дня 31-го числа в отчет не попадут.
Пользователь выбрал период формирования отчета с 1июля по 31. Почему при формировании отчета в него не попадают данные за 31 число? На самом деле, это одна из самых распространенных ошибок при разработке отчетов. В 1С 8.х дата содержит время с точностью до секунды, и если в своем отчете Вы описываете параметры следующим образом: то при формировании пользователем отчета с 1 по 31 июля, фактически параметры будут заполнены так: НачалоПериода = 01.07.2010. 0:00:00, КонецПериода = 31.07.2010. 0:00:00. Т.е. данные, отличные от начала дня 31-го числа в отчет не попадут.
Шапку в СКД можно зафиксировать двумя способами. Первый вариант - явное указание параметра:
Данный вариант не удобен когда заранее нельзя понять сколько строка нам нужно зафиксировать (стоит заметить, что в СКД это практически всегда).
Можно позволить пользователю управлять этим параметром и воспользоваться вторым способом. В случае когда пользователю необходима фиксация, он сам указывает количество строк. Так как настройки сохраняются, то этот параметр ему надо будет задать один раз для определенного варианта отчета.
Задаем параметр в СКД:
Выводим его в быстрые настройки:
На форме получаем следующее:
В платформе 8.2 появилась процедура «ПриКомпоновкеРезультата», в ней мы и укажем наше значение:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
//Стандартные описания Компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Внешний отчет
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
//Закончили описание
//В случае если мы можем получить параметр, то установим его, иначе не будем фиксировать
Попытка
ФиксацияСверху = МакетКомпоновки.ЗначенияПараметров.ФиксацияСверху.Значение;
ДокументРезультат.ФиксацияСверху = ФиксацияСверху;
Исключение
КонецПопытки;
Таким образом пользователю не важно количество параметров отбора, он может сам отрегулировать себе шапку. Установить значение фиксации в ручную не так уж затратно по времени, и не сложно.
Многим мало одного примера какого-либо приема разработки, они хотят понимать, где еще на практике можно использовать разобранный способ.
Вопрос
Для чего может использоваться метод поэлементного вывода результата? В каких задачах может это потребоваться? В отладчике считываю данные “ЭлементРезультата“, но никакого смысла не понимаю.
(нажмите, чтобы увеличить картинку)
Ответ
Например, в одном из видеоуроков рассматривается вопрос программной фиксации шапки отчета. Для этого используется поэлементный вывод результата.
Программный код получился вот такой:
Комментарий слушателя
Этот пример работает, но я не понимаю, почему он работает. Что представляет из себя ЭлементРезультата. Сколько их будет в цикле? Что конкретно выводит каждый такой элемент? Почему именно в том элементе, где количество параметров >0, мы добавляем код? Что еще можно получить из перебора этих элементов?
Комментарий тренера
Система компоновки данных выводит результирующий отчет в табличный документ не сразу за одно действие, а определенными порциями. При компоновке выполняются запросы к базе, рассчитываются итоги, учитываются макеты, происходит оформление ячеек отчета, отрисовка ячеек табличного документа и т.д. Все алгоритмы реализованы на уровне платформы, прикладному разработчику недоступны. Ему доступен только тот факт, что вывод отчета происходит порциями, шагами. Каждая порция – это и есть элемент результата компоновки данных. Фактически это специальный вспомогательный объект, при выводе этого элемента в отчет выводится отдельная ячейка, строка, заголовок, описания параметров отчета, описания отборов и т.д.
В элементе результата компоновки данных можно выделить 2 основных свойства. Это Макет (как должна выглядеть выводимая область) и ЗначенияПараметров (какие значения должны принимать параметры в этой области).
Чтобы получить представление, как всё это устроено, можно использовать консоль компоновки от ИР (инструменты разработчика). В ней есть инструмент Исследовать – Элементы результата. Можно посмотреть, как заполнены свойства каждого элемента результата.
Можно провести аналогию с формированием отчета при помощи макета – табличного документа. Сначала мы выводим секцию с заголовком, потом выводим шапку отчета, потом в цикле выводим в отчет строки данных, затем подвал с итоговыми значениями. Каждый такой этап дает нам представление об элементах результата компоновки данных.
Как происходит вывод отчета? При выводе отчета сначала выводится заголовок, описание отборов отчета, шапка отчета. В этих данных нет никаких параметров, все выводимые данные находятся непосредственно в выводимом макете (это можно проверить при помощи инструмента ИР Плоский макет компоновки):
Затем нужно выводить данные самого отчета – строки с данными. И вот тут уже будут заполнены значения параметров.
Значит, у нас есть признак: как только значения параметров становятся заполнены, значит, шапку отчета мы уже вывели, приступаем к выводу строк отчета, но сами строки еще не вывели. Следовательно, это самый подходящий момент, чтобы зафиксировать шапку отчета. Получаем высоту таблицы – именно столько строк в табличном документе и нужно закрепить.
Читайте также: