и
bool TPrinter::print(const TReport*)
Где
TReport - заполненный отчет
TReportTemplate - шаблоно тчета
TReportContext - контекст отчета (тот самый мэп)
TPrinter - печать
решить задачу вывода на печать (PDF, XLS ...)
ттн с запросом номера
тут весь букет проблем будет:
внешние ключи, задание параметров, несколько источников данных
тогда будет ясно в каком направлении копать
Вопрос в интерфейсе и API модуля печати. Существующие инструменты
позволяют решить все прочие задачи.
Ни с отчетами ни с печатью особых проблем я не предвижу. ВОт если мы
ВНЕЗАПНО рещим делать построитель отчетов - проблемы могут возникнуть.
Но, надеюсь, делать его мы не будет.
есть еще проще вариант с шаблонами
прога reportf
шаблон хранится в RTF, с разметкой секций и тегами переменных
данные - в текстовом файле в виде тег:данные
можно оттуда взять идею
А вот и "демонстрация"
> Возникает вопрос по переменным - как распознать, когда переменная - это
> единичное значение,а когда - множество значений? Можно оставить это на
> семантику, то есть [] скобки для единичных значений, а <> скобки - для
> множеств. Можно научить движок понимать, что вот такая-то переменная - это
> множество, и их можно обрабатывать по-разному.
> Мне больше импонирует второй вариант.
В случае 2 вам прийдется писать парсер, уходя "влево от задачи".
Вам нужен нормальный "построитель" выполняющий вывод простейшими
командами.
Да и в случае такого как у вас подхода вам прийдется много времени
убить на макетирование "специального" шаблона. Тогда как из скрипта
это можно сделать гибче.
Поверьте, не существует идеального решения кроме скрипта и скуль-
запроса и построителя.
Построитель в моем сообщении следует понимать как объект-манипулятор,
который работает со след. вещами: простой шаблон, результат и
переменные вовремя ему скармливаемые.
например.
есть некий шаблон
<report name = "Накладная">
<section name = "Шапка">
<table>
<tr><td>Накладная No. <temlp>НомерДока</temlp> от <temlp>ДатаДока</
temlp></td></tr>
<tr><td>Поставщик <temlp>Поставщик</temlp> ; договор No.
<temlp>договорНомер</temlp> от <temlp>ДоговорДата</temlp></td></tr>
</table>
</section>
<section name = "ШапкаСтрок">
<table>
<tr><td>No. ПП </td><td>Товар </td> <td>Кол-во</td><td>Цена </
td><td>Сумма</td></tr>
</section>
<section name = "Строка">
<tr><td><temlp>НомерПП</temlp></td><td><temlp>Товар</temlp> </td>
<td><temlp>Колво</temlp></td><td><temlp>Цена</temlp></
td><td><temlp>Сумма</temlp></td></tr>
<section name = "ШапкаСтрокКон">
<table>
</section>
</report>
Абстрактный скрипт:
КО = новый КомпоновщикОтчета;
КО.ИсходныйШаблон(...);
КО.УстановитьПараметр("НомерДока",120);
КО.УстановитьПараметр("ДатаДока",01.12.2011);
КО.УстановитьПараметр("Поставщик","Дятлов ИП");
КО.УстановитьПараметр("договорНомер","----");
КО.УстановитьПараметр("ДоговорДата","----");
КО.ВывестиСекцию("Шапка"); // << компоновщик знает какая секция и
может "достать" переменные ему переданные и поменять в <temlp>Товар</
temlp> "Товар" на его значение.
КО.ВывестиСекцию("ШапкаСтрок");
НомерПП = 0;
Пока Запрос.Следующий() Цикл
НомерПП = НомерПП + 1;
КО.УстановитьПараметр("НомерПП",НомерПП);
КО.УстановитьПараметр("Товар",Товар);
КО.УстановитьПараметр("Колво",Колво);
КО.УстановитьПараметр("Цена",Цена);
КО.УстановитьПараметр("Сумма",Сумма);
КО.ВывестиСекцию("Строка");
КонецЦикла;
КО.ВывестиСекцию("ШапкаСтрокКон");
КО.ПоказатьОкноОтчета();
-------------------------------------------------------------------
А теперь попробуйте придумать кнопочно галочный механизм которые это
реализует.
Поверьте, один хорошо сконструированный компоновщик + пара запросов
сможет убрать много гемороя.
так что без скриптов не обойтись
при сборке отчета компоновщик (ядро,движок) организует цикл по строкам
таблицы (запроса)
внутри же вложить теги подзаголовков/подитогов
у меня в генераторе примерно так и сделано
Выборка из БД в любом случае делается - либо вами либо компоновщиком.
Данные не из воздуха появляются.
Плюс OpenOffice - кривое поделие, и дополнительный депенд.
Я как разработчик и внедренец решительно не приветствую лишние
заплчасти которыми к тому-же рулить надо с помощью лома.
хто как, а я продолжу заниматься: http://code.google.com/p/unnstudioreport/
посмотрим, кто быстрее выдохнется от "пустых ударов в ненужную цель".
> Плюс OpenOffice - кривое поделие, и дополнительный депенд.
> Я как разработчик и внедренец решительно не приветствую лишние
> заплчасти которыми к тому-же рулить надо с помощью лома.
Насчет кривости OpenOffice не согласен. У меня уже несколько лет нет
MicrosoftOffice, работаю только на OO, проблем в связи с этим не
испытываю. К тому же никто не мешает сделать другие варианты, если
нужно будет.
Именно кривой и тормозной.
Могу расказать о последнем баге, который допек.
прислали файл *.xlsx с калькуляцией на одном листе.
На 2-м листе подсчитал кой чего и попробовал распечатать 2 лист.
Он мне выгнал все листы, посмотрел в настройках - стоит печать
текущего листа.
Опять попробовал напечатать: всеравно все листы выгнал.
Ну я его и выкинул. Последняя либра была.
Делаешь хорошую вещь.
помог бы кто более умный )) я ж тупой 1с-ник...
там после рефакторинга надо глюки ловить (((
Бага в расчете ректов страниц после задания масштаба.
Надо лечить (((
Здесь можно посмотреть мои представления о внешнем виде шаблонов
отчетов, их обработке и получаемых рещультатах.
Это просто иллюстрирующий набросок кода, не относитесь к нему
серьёзно.
И, да, итоговый отчет получается в xml. На эту xml-ку можно натравить
XSLT, и получить на выходе что нужно. Проверено, такой метод работает.
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
Надо позырить.
А еще он умеет кросс-таблицы, хотя это задача не отчетника, а СУБД. Но
кому-то будет приятно, наверное.
NCReport (те исходы, что еще живут под открытой лицензией)
1. DLL-ку легко можно использовать из приложения
2. Понимает как переменные так и запросы.
3. Есть предпросмотр.
5. Есть экспорт, как минимум, в XML
Вывод - NC придётся допиливать, нео ему в плюсы идёт наглыдный и
понятный код. OpenRPT можно брать искаропки.
при запуске компонуется с данными
http://doc.openerp.com/v6.0/developer/3_11_reports/11_1_openoffice_report.html
неудобная схема, в топку
хотя сама ерп легко завелась
и имеет много всякого
Чем эта схема неудобная?
но это я так, ворчу
привык к хорошему
Плюс универсальную выгрузку данных в ОО из табличных форм (с
закреплением шапки, фильтров, итогами) - покроет 60% промежуточных
отчетов пользователей. Вот аналогичный пример
http://www.sql.ru/forum/actualthread.aspx?tid=464426&pg=1&mid=4546706#4546706,
тока Delphi+Excel.XML
Прошу прощения, если чего-то пропустил в обсуждении, просто если из
ананаса выдрать библиотеку для построения отчета:
1. уже готовый С++ исходный код
2. в качестве шаблона берет файл *.odt или *.ods
3. распаковывает шаблон в отдельную папку, самостоятельно распарсивает
XML
4. заполняет данными (кажись и итоги считает)
5. сворачивает обратно в zip
6. вызывает программу (не обязательно ОО) для открытия готового *.odt
или *.ods файла
Куда еще проще то?
Нечто подобное я хотел делать в начале. Был даже рабочий код. Затем
решил все же отказаться от этого варианта, т.к. не представляю себе,
как он будет работать с формулами ОО. Теперь у меня есть вариант,
когда заполнение данными делает сам ОО с помощью макросов. Вполне
рабочий и формулы в нем тоже работают. Но он запасной, т.к. мы все же
решили в целях уменьшения зависимости от ОО сделать встроенный
генератор отчетов на основе готового движка.
OpenRPT. Я тут немного подчищаю код приложения, но пора бы и за
отчетник браться. Нужен класс-интерфейс к отчетнику, который будет
получать контекст печати и запускать отчетник.
Тогда наверное есть смысл и мне доделывать свой, что-бы иметь еще один
запасной вариант.
если мы пишем КОНКРЕТНУЮ задачу, тогда не будет сложности в заполнении
отчета,
были бы данные, а алгоритм вывода запрограммировать можно.
> Теперь у меня есть вариант, когда заполнение данными делает сам ОО с помощью макросов. Вполне
> рабочий и формулы в нем тоже работают...
Такой вариант мене нравится, сам я вдохновился еще в 2003, когда
появился http://www.terasoft.ru/ru/pages/xlreport.phtml. Там был
реализован полный функционал, которые могут предоставить электронные
таблицы. Отчеты формируются напрямую из Excela либо через OLE. Все
красиво и удобно, НО, видимо жадность погубила....Тока для такого
варианта необходимо понижать безопасность макросов, что не всегда
хорошо для клиентской станции.
Вообще знаю тока 4 варианта отчетника
1. Полная генерация XML из кода программы - идеально подходит для
промежуточных табличных отчетов по заголовкам колонок грида (пример
http://www.sql.ru/forum/actualthread.aspx?tid=464426&pg=1&mid=4546706#4546706).
Недостаток - сложные шапки с несколькими таблицами создавать не айс...
2. Прямая генерация XML на основе шаблона (например *.odt) - готовый к
использованию из ананаса. Проблема больше не из-за отсутствия формул.
При прямом парсинге XML встречаются уникальные комбинации тегов,
которые ну никак не ожидал встретить, отловить их сложно, но можно...
Вариант испытан на практике.
3. Генерация XML через API (OLE, UNO и др.) на основе шаблона
(например *.odt) - готовое решение у тебя есть (посмотреть бы его), но
образец для подражания у меня http://www.terasoft.ru/ru/pages/xlreport.phtml.
Недостаток - зависимость от сторонних библиотек и программ.
4. Генерация отчета в графическом виде - OpenRPT (FastReport,
CristalReport - как пример реализации). Отличные отчетные системы для
прямой печати на бумагу. Масса возможностей, в т.ч. печать итогов на
каждой странице, чего нормально не реализуешь в предыдущих вариантах.
Недостаток - сложная реализация и непредсказуемый результат при
выгрузке в стандартные форматы документов.
Опять же нет ничего плохого если будет несколько разных вариантов
(даже платные), главное сформулировать единый интерфейс (API) для
подключения к программе, чтобы можно было легко менять систему отчета.
Для этого достаточно создать базовый класс отчетности, который
принимает входящие наборы данных и путь к шаблону отчета. Реализация
для каждой системы отчетности оформляется в отдельном классе.
В этом случае собственная opensource система отчетности
совершенствуется параллельно, а пользователь для уникальных задач
сможет использовать любой (даже проприетарный) аналог не меняя всей
ERP системы
Именно так я себе это и представляю. Полностью с Вами согласен.
запаритесь вы с готовым продуктом.
Я вполне себе представляю работу пользователей с отчетностью и знаю
как они любят разнообразные плюшки:
- Поиск в отчетах:
- Редактирование готового отчета
- фолдинг
и т.п.
в связи с последними пожеланиями пользователей по фильтрам в отчетах я
был вынужден
сделать настраиваемый интерфейс для накладывание условий на выборки и
вывод доп колонок в отчет.
Ибо запарили:
- а можно код товара вывести слева,
- а можно скидку вывести справа.
- а можно вывести только товары у которых последнее поступление было
больше года назад и т.п.
- а можно шрифт красный для строки в отчете сделать для товара у
которого стоит признак "не закупать", а можно это сделать это еще в
шести отчетах
- и т.п.
т.е. идет работа не только с таблицами а с сушностями + универсальные
алгоритмы задействованы - после вывода строки, пеед выводом строки и
т.п.
т.е. сделать универсальный класс для нескольких отчетных систем - это
пипец... т.е. работы немеряно предстоит.
лучше уж один но мощный.
я почему в табличному отчетнику склоняюсь - легче манипулировать.
взял область и окрасил в определенный цвет и все.
не представляю как манипулировать после вывода результатом в том-же
иксаро...
Именно по этому мы используем у себя 3 механизма отчетов
1. Аналитический отчет - пользователю нужно проанализировать данные,
быстро что-то убрать, что-то выделить, куда-то вставить, распечатать.
Для решения используем табличную экранную форму с возможностью
сортировки, фильтрации, поиска, выделения цветом, итогов и выгрузкой в
Excel (некода в чистый ОО переделать) повторяющей формат ячеек, ширину
столбцов, итоги с экранной формы. Пользователь анализирует данные на
экранной форме и может выгрузить в Excel c красивой таблицей,
фильтрами, итогами (формулы Excel) и сразу печатать. Не гарантируется
только, что отчет уместится на одном листе. Никакого шаблона нет,
какая таблица на экране, такая получается в Excele
2. Для печати первичных документов и отчетов в вышестоящие инстанции
используем выгрузку в ОО с шаблоном. Редактировать отчет можно, но не
так удобно как в первом варианте, и формул на шаблоне нет, но всегда
есть кнопка чтобы воспользоваться первым вариантом.
3. Бывают отчеты, которые не реализуются OO-Excel (например, итоговые
строки на каждой странице), такие тяжелые отчеты делаем через Crystal
Reports
4. Для первого варианта алгорим реализуется один раз. Для второго и
третьего случая (и других отчетных систем) можно использовать единый
базовый класс
что значит "мы используем у себя"? "У себя" - это где?
> "У себя" - это где?
On 10 окт, 15:06, Vladimir <MorozovVladi...@mail.ru> wrote:
> Что-то типа ТЗ подготовить?
вот алгоритм, более или менее подходящий, использую его уже лет пяток
в своих разработках.
https://docs.google.com/document/d/1Q9i71E0hhwXzvgRnRk7mJKmp3D_MOIeGHgqOQssbNog/edit?hl=ru
формат вывода зависит от типа ячеек таблицы, который можно узнать из
самой таблицы.
ПС. вы смешиваете работу интерактивное задание настроек отчета и
работу самого рендера.
обычно у отчета куча настроек и фильтров. вы же интерактивное
управление игнорируете.
>> Реализовав подобный механизм - получаем удобную пользователю автоматическую
выгрузку данных из любой табличной формы.
не самая первоочередная задача - экспорт. самая первоочередная -
печать. это удел 99% отчетов.
1) для начала (для быстрого старта) - модуль заполнения шаблона (OO)
готовыми данными (текст).
данные готовить вручную (т.е. работаем с таблицами, считаем итоги
сами), в скриптах
2) стало лень считать итоги - придумываем описание логики работы
отчета(итоги, группировки, запросы, параметры),
формат хранения, и пишем обработчик,
который перегоняет все это в тексты, далее - п1
3) Надоело хранить шаблон в ОО - придумываем формат описания дизайна,
объединяем с логикой (п.2)
делаем дизайнер.
все дела.
я почти все это прошел, и довольно быстро
про разные типы отчетов - не нужно. движок будет один.
если дойти до п3. - то сами отчеты можно будет собирать программно, на
лету, в любом виде.
Нафиг этот ОО нам нужен?
Вот тебе дизайнер, формат, и рендер в одном флаконе:
http://image-uploader.googlecode.com/files/unnstudioreport_demo.7z
Там в папке "Тест" готовые печ формы.
Поглючивает конечно, многое еще недоделано.
Но уж лучше я буду исправлять глюки в своем отчетнике, чем в ОО, в
котором черт ногу сломит О_о..
У нас около 300 пользователей по 5 человек в бюро, в каждом бюро свои
хотелки и дурелки.
Есть отчеты формализованных первичных документов (накладные, фактуры,
ордера...) и отчеты для топ-менеджеров - это серьезные отчеты с
печатью на бумаге но их немога...
А есть отчеты аналитические - исполнители формируют обороты, остатки,
отклонения в разрезе разных аналитик, что-то хотят выделить, показать
руководству, что-то в архив положить. Заранее такую печатную форму
определить сложно. Делаем табличную экранную форму с широкой выборкой
(побольше колонок всяких) с фильтрами итогами и возможностью выгрузки,
далее пользователь либо на экранной форме находит что нужно, либо
выгружает в Excel, удаляет лишнее и печатает или в архивную папку
складывают. Схема 5 лет работает - пользователи привыкли, в любой
табличной форме выгрузку требуют (если вдруг кнопку скроем :-)
Так мы решили хотелки своих пользователей...
Ну это у вас так сделано.
У меня есть такой широкий отчет: "Планирование закупок" там
показателей штук 30.
Все показатели регулируются списком с пометками: есть пометка -
выводить, нет, не
выводится и не расчитывается (если нет зависимостей).
Отчеты в 1С легко редактируются и экспортируются, надо отредактировать
- снял
рид онли с таблицы, и редактируй на здоровье. Эксель - тут лишнее.
единственная вещь для которой ексил используется, если надо
пересортировать
отчет. Но тут и в 1С у меня сортировки понастроены - юзер может
выбрать сортировку на
момент создания.
Я так полегаю, что отчетная система у вас немного недоработана - вот и
приходится
вам пользоваться дополнительным костылем.
по шаблону:
строка таблицы может быть многострочной. Без управляющих тегов не
обойтись.
например
[таблица]
[данные1] [данные2] [данные3]
[данные4]
[/таблица]
при сборке участок между [таблица] [/таблица] заполняется данными пока
есть строки с тегом "таблица" во входном файле
и еще тема подзаголовков/подитогов не раскрыта
в шаблоне теги для подзаголовков/подитогов должны быть внутри
[таблица] [/таблица]
шаблон может выглядеть так
[таблица]
[заг2]
[/заг2]
[заг1]
[/заг1]
[данные1] [данные2] [данные3]
[данные4]
[итог1]
[/итог1]
[итог2]
[/итог2]
[/таблица]
ну и данные:
[заг2]...
[заг1]...
[таблица]...
[таблица]
[таблица]
[итог1]
[заг1]
[таблица]
[таблица]
[таблица]
[итог1]
[итог2]
и т.д.
Это замечательный зуд.
Это входные данные. Но они же используются для чернового построения
шаблона в случае, если он пустой. В этом случае модуль печати должен
игнорировать лишние строки таблицы.
> по шаблону:
> строка таблицы может быть многострочной. Без управляющих тегов не
> обойтись.
> например
> [таблица]
> [данные1] [данные2] [данные3]
> [данные4]
> [/таблица]
> при сборке участок между [таблица] [/таблица] заполняется данными пока
> есть строки с тегом "таблица" во входном файле
Это все можно решить путем расширения имени через точку или другой
знак. Например так:
таблица1.данные1.имя_поля; значение
XML я предполагаю не использовать, чтобы упростить разбор входного
файла в тех приложениях, в которых разбор XML затруднен.
Подзаголовки и подитоги во входном файле задаваться не будут. Их
создание и обработка будут целиком возложены на модуль печати.
Какой заголовок будет нарисован в дизайнере отчета, такой и будет при
печати.
а почему собственно такая зацикленность на сторонних приложениях?
Вроде бы суцельное приложение делаем.
Для табличек нужен всего 1 формат экспорта: в ексил или ОО.
Этим 1-го форматом можно обойтись.
Я так полагаю вы пытаетесь смоделировать язык, который будет работать
в рамках конечной отчетной системы. Или шаблон отчетника?
> Подзаголовки и подитоги во входном файле задаваться не будут. Их
> создание и обработка будут целиком возложены на модуль печати.
> Какой заголовок будет нарисован в дизайнере отчета, такой и будет при
> печати.
слишком много времени для разработки. быстрого старта не получится.
а смысл выводить содержимое таблиц в текстовый файл?
лучше тогда напрямую с таблицами (запросами) работать.
> Для табличек нужен всего 1 формат экспорта: в ексил или ОО.
> Этим 1-го форматом можно обойтись.
Каким? XML?
> Я так полагаю вы пытаетесь смоделировать язык, который будет работать
> в рамках конечной отчетной системы. Или шаблон отчетника?
Речь идет только о формате передачи печатаемых данных в модуль печати.
Если есть желание назвать это языком - пожалуйста. Шаблон может быть
любой.
> а смысл выводить содержимое таблиц в текстовый файл?
> лучше тогда напрямую с таблицами (запросами) работать.
Сравним время записи в локальный файл со временем получения данных от
сервера. В большинстве случаев первое время будет значительно меньше.
Не согласны? Кроме того, в этом случае нужно заново (вручную?)
создавать запросы к БД для каждого отчета. Зачем, если они
генерируются ядром? Не проще ли от него получить уже готовые данные?
Плюс к тому мы можем перед передачей данных на печать обработать их с
помощью скриптов, оперирующих нашей объектной средой. А если это будет
внешнее приложение, в котором делается SQL запрос к БД, то как
произвести дополнительную обработку полученных из запроса данных
используя нашу объектную среду?
Для меня пока модуль печать это класс на с++/Qt
В который собственно не надо передавать ничего кроме строковых данных.
У меня печать вот так выглядит:
QFrame m_Dlg;
uoReport::uoReportView* m_GR = new uoReport::uoReportView(&m_Dlg);
uoReport::uoReportDoc* doc = m_GR->getControl()->getDoc();
QFile file("reference.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)){
QTextStream in(&file);
QChar ch = '\t';
QStringList list;
QString line, linePart;
bool oldCC = doc->enableCollectChanges(false);
bool oldDF = doc->enableFormating(false);
int row = 1;
while (!in.atEnd()) {
QString line = in.readLine();
list = line.split(ch);
for (int y=1; y<=list.size(); y++){
linePart = list.at(y-1);
doc->setCellText(row,y,linePart);
doc->setCellTextAlignment(row,y,uoReport::uoVA_Center,
uoReport::uoHA_Left, uoReport::uoCTB_Transfer);
}
++row;
}
doc->enableCollectChanges(oldCC);
doc->enableFormating(oldDF);
}
m_GR->getControl()->optionShow(true, true, true, true);
m_GR->getControl()->doFixedView(2,2);
m_GR->getControl()->setFocus();
// doc->printDoc(true); // если нужна печать
-----------------------------------------------------------
т.е. заполнять в рукопашную. Т.е. на тот момент, когда вы только
заполняете ваш непонятно зачем нужный шаблон, я уже наполняю
документ, который можно хоть отредактировать, хоть распечатать,
хоть посмотреть. Достаточно установить его во вьюху и скомандовать
вьюхе с пом. контекстного меню.
данные имеют свойство меняться, по этому не вам решать,
за пользователя какой копией набора ему рулить.
Это он сам решит, воспользовавшись либо сохраненным отчетом,
либо заново его сформировав по свежачку.
И еще он говорит вам о том, что писать промежуточные костыли: сначала
модуль форматной выгрузки,
потом модуль, который схавает эту выгрузку (зачем-то) - это и есть
потеря времени на девелопмент.
У нас нет ограничений на выбор решений, мы лишь ограничены по времени
- его всегда нехватает.
Нет смысла гнаться за универсальностью, лучше подумать каким способом
оптимально
воспользоваться отпущенным временем.
Я сейчас работаю в режиме хобби над одним проектом, куда собственно и
вставлю свой отчетник.
Будет использоваться для печати таблиц БД.
Я покажу вам его в работе и тогда у вас надеюсь горизонт выбора
расширится.
> > а смысл выводить содержимое таблиц в текстовый файл?
> > лучше тогда напрямую с таблицами (запросами) работать.
>
> Сравним время записи в локальный файл со временем получения данных от
> сервера. В большинстве случаев первое время будет значительно меньше.
> Не согласны? Кроме того, в этом случае нужно заново (вручную?)
> создавать запросы к БД для каждого отчета. Зачем, если они
> генерируются ядром? Не проще ли от него получить уже готовые данные?
> Плюс к тому мы можем перед передачей данных на печать обработать их с
> помощью скриптов, оперирующих нашей объектной средой. А если это будет
> внешнее приложение, в котором делается SQL запрос к БД, то как
> произвести дополнительную обработку полученных из запроса данных
> используя нашу объектную среду?
имел в виду как раз таблицы из объектной среды,
не могу понять, зачем еще текстовый локальный файл нужен
rep=getReportByName("Накладная")
if rep:
rep.param['docsuid']=15
rep.run()
а вот используемый мной формат описания отчета
https://docs.google.com/document/d/10Z8wqJXsiQnt3j5leP6HR7sJs9rlosoik0uzshio8yY/edit?hl=en_US
в нем хранятся и запросы, и шаблон, и скрипты для доп.обработки
собственно пока до них ход не дошел, но это не так сложно сделать, как
остальное.
да это планируется. я работал над рендером-редактором именно для того
что-бы быстрее создавать эти шаблоны.
в последнее время я для своих 1С-ных отчетов использую всего 2-3
шаблона отчетов - нет смысла больше, ониотличаются только наборами
колонок, а колонки пристыковывать 1С-ко позволяет.
ну еще цветом отличаются немного.