Универсальный генератор отчетов СКД (Управляемые формы, тонкий клиент)




















Универсальная консоль отчетов СКД, сделанная внешним отчетом. Подходит для конфигураций на управляемых формах. Умеет работать с внешними источниками данных (подключатся к другим базам). Позволяет редактировать схему СКД и запросы в пользовательском режиме, без использования конфигуратора.

Коллеги, представляю вашему вниманию, свою очередную наработку.

Как всегда, в качестве мотиватора выступила бухгалтерия на моей новой работе. Напиши им такой отчет, напиши им этакий отчет, а можно ли сделать чтобы выгруженные документы как-то сравнивать с управленческой базой, вдруг там что-то изменили, или неправильно выгрузилось, или отчетик который вытащит им какие то  кривые документы, по определенным критериям.

В общем, ничего особенного, обычная работа. Но еще, давно я упростил себе и людям жизнь, упорядочив все отчеты в единую обработку, которая позволяла "на коленке" рисовать любые отчеты, и умела подключатся к внешним базам, и можно было дополнительно обрабатывать произвольными алгоритмами. Сама идея была, даже не мной придумана, а была основа которую, я уже потом допиливал..и все это много лет успешно работало (и работает до сих пор).

Но есть одно "НО". Все это было на старых конфигурациях, в обычном приложении.

На управляемых конфигурациях, все оказалось несколько сложнее. И так-как мне не удалось найти ничего готового подходящего, то пришлось все делать самому и так, как мне хочется, с учетом накопившихся потребностей и новых идей.

Итак консоль.

Внешне она выглядит как обычная консоль запросов, с деревом отчетов. Хранятся все отчеты в едином файлике.

Подключаем к конфигурации, как обычный внешний отчет. ну или просто открываем из файла.

Слева мы видим дерево наших отчетов. Закладки параметры, Порядок и отбор — это стандартные настройки вариантов отчетов для пользователя, дабы он мог их крутить.

Далее, закладка "внешние источники" — это закладка, где мы настраиваем базы, к которым мы будем подключатся (если таковые есть).

В дерево добавляем нужный отчет, задаем имя. По правой кнопке мыши, в контекстном меню, есть пункты "Описание" и "Изменить".

Описание — позволяет сделать описание текущего отчета (для чего он нужен, что выводит и т.п.), при большом количестве отчетов и пользователей, очень удобно, иначе забывается. Если описание есть, то строка отчета выделена подчеркиванием.

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

Изменить — это редактор внутренностей нашего отчета. Вот тут все интересней.

Тут рассмотрим все по порядку.

В левой колонке, список наших источников данных, по которым будем строится наш отчет.

Введем новый источник — обзовем его, к примеру, "ЛокальнаяБаза".

Также в окне мы видим несколько кнопок, которыми будем настраивать наш источник.

Открыть консоль — это стандартный редактор запроса, либо форма транспорта для внешней базы.

Вывести запрос — просто выведет результат нашего заделанного запроса, в нижний фрейм. Чек бокс "редактировать", это просто включение возможности открытия ссылочных полей по расшифровке. Регулятор внизу — меняет масштаб выведенной таблицы.

Обработки — форма ввода произвольного обработчика.

Радиопереключатель Внешний/Локальный — это источник данных. В случае с внешним, откроется выбор наших внешних баз, заданных ранее, где мы и выберем к какой оно будет подключатся и выгребать данные. Для локальной базы, дополнительной настройки не требуется.

Чекбокс Использовать ВТ — нужен для того, если мы предполагаем комбинацию из разных источников. Т.е. например, имеем несколько источников, а нам нужно их, объединить в один запрос через виртуальную таблицу. Создав новый источник, и активировав кнопку ВТ, появится кнопка — добавления в запрос, кода из выбранного нужного источника.

Итак, подготовим запросик

и зададим его параметры

нажав кнопку ок, вернемся в окно редактирования.

Теперь мы можем уже тестово вывести запрос, посмотреть что он там нам выводит.

Следующим шагом, нам необходимо заполнить поля источника, нажав соответствующую кнопку.

Если все сделано верно и корректно, то увидим названия полей, и тип полей. Это будут ключевые поля, для работы и с временными таблицами, и в самой схеме СКД,

если поля не заполнились, то ищем ошибки в запросе, или в обработчиках, без автоматом заполненных полей ничего работать не будет.

Ну и для примера заполним обработчик произвольного алгоритма.

следует помнить, что обработчик вызывается после выполнения основного запроса. Результат запроса выгружен в переменную "таблица", с которой мы и оперируем.

если это таблица удаленной базы, то в переменной ВнешнийИсточник находится наш ком соединитель. Чтобы не забыть, кликнув на поле правой кнопкой мыши, можно посмотреть пример.

Итак, после заполнения обработчиков, нажмем еще раз "Заполнить поля источника", чтобы там появилось программно добавленная нами колонка, и переходим к следующему шагу.

Закладка параметры, нужна для задания связок и визуализации параметров непосредственно у пользователя, с параметрами запросов наших источников.

Для начала нажмем кнопку "Обновить структуру".

И введем названия параметров, как их будет видеть пользователь, а в колонке с именем источника, выберем параметр из запроса, которому он будет соответствовать.

Параметры необязательно задавать все, какие есть в запросе. Мы можем задать, только Дату начала и дату конца, а организацию и контрагента, вообще не задавать,

тогда его значение по умолчанию, будет тем, каким мы его задали в консоли запроса.

Ну и после задания связок параметров, создадим схему СКД.

К слову сказать, конструктор схемы СКД, в тонком клиенте не работает, поэтому, чтобы его задать, нам придется запустить все приложение в режиме Толстого клиента, управляемого приложения. Других серьезных платформенных ограничений нет. Но пользоваться готовыми отчетами, вполне можно и в режиме тонкого клиента.

Итак, нажав, "ОК", перейдя в начальную форму отчета, нам нужно только у заполненного списка параметров, выбрать тип, задать какие-то значения, которые наиболее часто будут использоваться. Ну и можно его уже вывести и пользоваться.

———————————————————

Несколько слов о внешних базах.

Работа с КОМ-объектами, требует, некоторого опыта при работе. Поэтому, не нужно расстраиваться что, не работает то или другое. Курите, изучайте мат часть. В принципе, консоль это инструмент разработчика, а не обычного пользователя.

Итак.

Чтобы сделать запрос, во внешней базе — необходимо запустить консоль, в этой самой внешней базе. Делаем там источник, "локальный", также редактируем запрос.

у редактора есть форма транспорт. Когда мы подготовим текст запроса, и зададим параметры, то перейдя на эту закладку видим абрукадабру.

это ни что иное, как сериализованный в строку, весь наш запрос, вместе с параметрами, функцией ЗначениеВСтрокуВнутр.

Сразу отвечу на вопрос, почему не сериализатор. Да потому, что опытным путем, выяснилось, что не со всеми базами это прокатывает, при десеарилизации в другой базе. Может быть из за разных режимов совместимости заданных у конфигураций, может еще из за чего-то. А данная функция, работает железобетонно. Поэтому оставил ее.
Эту абракадабру копипастим,

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

Важно !!! При составлении запроса, не нужно выводить ссылочные поля !! Ссылки выводим через представления. Ну и примитивные типы.

При задании параметров, для внешней базы, требуется задать код связки. Это там же, на вкладке параметров.

Например, имеет стандартный отчет, по сверке поступлений. Там 2 источника данных, один реестр "Поступлений товаров услуг" в бухгалтерской базе,

другой берет документы "Приходная накладная" во внешней базе УНФ.

Ключевыми параметрами для обоих запросов, у нас является Дата начала, дата окончания, и Организация.

Дата — это примитивный тип, преобразования не требует, а вот с организацией посложнее.

Выбирать организацию мы будем в локальной базе, там это будет элемент справочника "Организации", а в удаленной базе будем искать выбранную организацию по "ИНН" (предположим, что наименования, и коды справочников у нас различаются).

На закладке параметры, после обновления структуры, мы видим поле "Преобразование", именно туда нам и необходимо вписать нужный код преобразования.

Если код не указать, то она просто попытается в лоб воткнуть значение параметра, что у нее конечно же не получится. А вот примитивные типы, без всякого преобразования указываем.

В контекстном меню, оставил памятку, по примеру преобразований (а то и сам, забываю).

 

На этом, пожалуй закончу данное повествование.

Пожелания, и баги приветствуются, претензии не принимаются (кому что не нравится, делайте свои поделки).

Всевозможные способы и вариации работы, тестировать нет ни потребности ни возможности. Но если что, по возможности буду дорабатывать. В принципе, итак перерабатывал его уже несчетное количество раз, идеи развития есть…поэтому буду тут и выкладывать обновления.

На авторство самой идеи не претендую, подобные работы давно делались. При кодировании, также не все из головы брал, использовал и куски чужих разработок (точно помню где-то подсмотрел раскраску текста), только источников этих сейчас уже и не смогу найти.

В общем всем удачи, и плодотворной работы.

UPD. 27.11.2024  v.2.0.0.1 исправлено некоторое количество багов.

UPD. 29.11.2024  v.2.0.1.0 выявлен и исправлен баг с расшифровкой (работал только в толстом клиенте), добавлена проверка корректности задания имени источника. Добавлена возможность тестового подключения к внешнему источнику. Добавлена возможность установить пароль на весь файл отчетов, для того чтобы обычный пользователь не мог случайно испортить и после этого сохранить отчеты.

UPD. 30.11.2024  v.2.0.1.1 Теперь настройки отчетов (отборы, сортировки) пользователем сохраняются и восстанавливаются через хранилище общих настроек, сам файл отчетов перезаписывать при этом не нужно.

UPD. 08.12.2024  v.2.0.1.2 Исправлена следующая ошибка. "Если пользователь ошибочно указывал файл, каталог, или неподходящий по структуре, путь запоминался и при открытии отчет выдавал ошибку и не открывался. " Завернул чтение и запись файла в попытку.

UPD. 14.12.2024  v.2.0.1.3 В целях удобства, по кнопке восстановить настройки, сделана инициализация настроек компоновщика по умолчанию. При многократном изменении схемы, настройки от предыдущих вариантов сильно мешали. Также немного почистил интерфейс, на кнопки с надписями сделал картинки, и информационные надписи сделал более лаконичными.

UPD. 15.12.2024  v.2.0.2.1 Добавлена автосумма выделенных ячеек, что-то наподобие ОСВ в БУХ.

UPD. 22.12.2024  v.2.1.0.1 Расширен функционал отчета. Появилась возможность расширенного редактирования настроек отчета, включая оформление, поля, структуру, и при необходимости экспертное редактирование всех параметров отчета.

Для этого в настройках появилась галка — расширенное редактирование.

после этого появляются дополнительные вкладки в параметрах, и несколько дополнительных кнопок в вариантах отчета.

Также появилась возможность работы с вариантами настроек.

По умолчанию варианты, подтягиваются из самой схемы СКД, и по желанию пользователя, меняются, либо добавляются собственные.

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

Ну и в придачу убрал недочет, связанный с тем что при открытии отчета на полный экран (кнопка скрытия списков и параметров), при нажатии переформировать отчет — он теперь спокойно заново формируется.

И сделал вопрос, при попытке закрытия консоли, подтверждение о закрытии (дабы пользователь случайно esc не нажал и все свои настройки закрыл).

UPD. 01.08.2024  v.2.1.0.3. Столкнулся со старенькой УТ-шкой 11.0 с древним режимом совместимости. Как и написали в отзывах, не взлетело. Пришлось подшаманить, и заменить новые функции, на старые, и один вызов функции из БСП перенести. Предыдущую версию удалять не буду, т.к. она уже проверена а эту еще тестить нужно в различных вариантах.

UPD. 16.11.2024 v2.2.1.3. Расширен функционал. Сделана возможность хранения созданных отчетов внутри базы данных.

для этого в настройках необходимо установить галочку

При этом поле с выбором файла станет недоступным, а все созданные отчеты будут сохранятся внутри базы данных.

Данная функция будет работать, только на конфигурациях с БСП !. В качестве места хранения используется регистр сведений "ПользовательскиеМакетыПечати". При открытии отчета происходит поиск регистра по метаданным, и если такого нет, то и функция не будет доступна.

Для того чтобы удалить из базы сохраненные отчеты, сделал кнопку удаления.

Также перенес внутрь отчета, процедуру из БСП, для того чтобы максимально отвязать, и использовать отчет там где этой процедуры нет.

UPD. 16.11.2024 v2.2.1.4. Заметил и исправил ошибочку, возникшую после переноса общего модуля. Не считалась сумма выделенных ячеек.

17 Comments

  1. netvion

    Пытался вывести простой справочник, никаких параметров — только код и наименование. В запросе данные есть — при выводе отчета только заголовок (все в скд прописано). Все перепроверил, указал путь сохранения отчетов — в результате при повторной загрузке пишет что файл настроек отсутствует и не стартует. Конфигурация ЗКГУ

    Reply
  2. Boneman

    (1) сложно сказать,

    у меня уже десятки отчетов в этой консоли, в УНФ и БУХ. Таких проблем нет.

    Приложите скриншоты хоть чтоли. Интересует, окно с источниками, ну и схема.

    Или лучше файл вашего отчета, сюда выложите, я попробую у себя его открыть посмотреть — что не так. Только справочник, какой нибудь, который в любой конфигурации есть..контрагенты, или сотрудники, дабы в БУХне открытся могло.

    Reply
  3. Boneman

    (1) я кажется, понял в чем проблема.

    Там не каталог надо было указывать, а имя файла.

    Оно и пытается вместо файла, каталог прочитать, и уходит в исключение. А при повторном открытии, путь запомнился — и все по новой.

    Теперь кэш надо почистить, чтобы некорректный путь забылся.

    Такой ситуации я не предусматривал, но сейчас в версии 2.0.1.2 поправил, — заключил файловые операции в попытку.

    По поводу примера — все по прежнему. Пришлите свой файлик, можно в ЛС.

    Reply
  4. netvion

    ОК. Спасибо. Написал запрос с параметрами. Все заработало. Далее тестировать не стал. Неплохо бы по нажатию на Esc сделать запрос на выход, а так случайно теряются данные настройки. При включении в конфигурацию ругается на открытие формы (при добавлении источника), это конечно все можно поправить самому. Периодически не удается добавить параметры (при добавлении не дает выбирать). Все мелочи. В целом все хорошо. А вот хранение отчетов в файле неудобно, разрабатываешь у себя, у клиентов серверный вариант, хорошо если доступен общий диск, а если через web. Из моей практики — все что не в базе, вечно теряется. Вот это было бы поправить неплохо. И еще четко отделить пользователя от разработчика — им ведь нужен только отчет, параметры и кнопка запуска, закладка настройки лишняя. И чем меньше на формах слов тип первозданный ой-уби тем профессиональней смотрится приложение — рекомендую почистить интерфейс. FULL SCREEN также заменить на иконку. За генератор спасибо. Удачи.

    Reply
  5. netvion

    Кстати, попробовал повторить формирование отчета без параметров, все работает — руки автоматом уже нажимают кнопки в правильном порядке. Вопрос снят.

    Reply
  6. tkv44

    Может разработчик подумает о тех, кто сидит в режиме совместимости? Эти новые функции совсем не к месту. Было бы неплохо.

    Reply
  7. nolik12

    Ошибка инициализации модуля: ВнешнийОтчет.ГенераторОтчетов.Форма.Форма.Форма

    по причине:

    {ВнешнийОтчет.ГенераторОтчетов.Форма.Форма.Форма(1841,15)}: Переменная не определена (СтроковыеФункцииКлиентСервер)

    Число = <<?>>СтроковыеФункцииКлиентСервер.СтрокаВЧисло(Ячейка.Текст);

    Reply
  8. Boneman

    (7) Значит ваша конфигурация, не имеет такого общего модуля, который у меня в отчете используется. Больше подробностей. Какая конкретно у вас конфигурация и релиз ? Отчет многократно проверен на конфигурациях ЗУП 3.1, БУХ 3.0, УНФ 1.5-1.6, ERP 2.0. Везде этот типовой модуль присутствует.

    В принципе, наверное, можно и отвязать его.

    Reply
  9. Boneman

    перенес в сам отчет функцию «СтроковыеФункцииКлиентСервер.СтрокаВЧисло(Ячейка.Текст);» из БСП.

    такой ошибки больше не будет.

    Reply
  10. TMV

    Так он генерирует собственно сам файл внешнего отчета? Что-то не видно подобного функционала. Если нет, то это не генератор отчетов, а аналог консоли отчетов для обычных форм, которой мало кто пользуется.

    Reply
  11. Boneman

    (10)

    Так он генерирует собственно сам файл внешнего отчета?

    см.описание

    Универсальная консоль отчетов СКД, сделанная внешним отчетом. Подходит для конфигураций на управляемых формах. Умеет работать с внешними источниками данных (подключатся к другим базам). Позволяет редактировать схему СКД и запросы в пользовательском режиме, без использования конфигуратора.

    как бы, не совсем понимаю, что еще добавить в описание.

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

    не нужно говорить за всех, если не нужно вам — это не значит что не нужно никому. Область применения также описана в публикации.

    Reply
  12. TMV

    (11)

    как бы, не совсем понимаю, что еще добавить в описание.

    Можно так и написать: файла внешнего отчета (тот, что *.erf) не генерируется, т.е. это не генератор в прямом смысле.

    если не нужно вам — это не значит что не нужно никому

    вы не внимательно прочитали и видимо оскорбились, было сказано «мало кто пользуется».

    Reply
  13. JohnConnor

    креатив-Кнопка «окей оу би2-улыбнуло

    Reply
  14. Boneman

    (13) там сейчас, лаконичнее, оставил просто «ОК» )) Почистил интерфейс сразу после 4-ого отзыва Netvion. Скрины у публикации просто геморно переделывать.

    Reply
  15. Aphanas

    Есть отчет, который строит СКД автоматом по любой таблице БД: https://infostart.ru/public/548198/

    В чем-то согласен с TMV, тут кажется конструктор, а не генератор.

    Reply
  16. kaging

    Все это очень напоминает универсальный отчет, который есть практически в каждой типовой базе. Да здесь есть возможность работать со внешними источниками, но как мне кажется не совсем удобно. Сравнение данных двух баз и более, задача не для универсальных обработок. Хотел спросить, как выглядит код на скрин7 на вкладке «цветной текст (Чтение)». А в целом неплохо, только соглашусь с (15), что не генератор, а конструктор все-таки.

    Reply
  17. Boneman

    (16) Все таки отвечу, в последний раз, на подобный пост. 🙂 Может описание, не очень убедительно написано.

    Никакие универсальные отчеты не позволят крутить и собирать в базах сложные отчеты. В данный отчет прекрасно можно засунуть любой запрос, после этого выборку можно обработать произвольным алгоритмом — на случай если возможностей запроса не хватит. Все эти данные можно объединить виртуальными таблицами. И после они попадают в схему СКД, где можно в полной мере использовать возможности самой СКД.

    На каждый отчет можно сделать описание.

    Можно запаролить и заблокировать файл отчетов, защитив его от случайного изменения.

    По поводу внешних источников…знаете. Буквально сейчас, у нас на работе происходит проект объединения 6-ти баз ЗУП, в одну ЗУП корп. Причем половина 3.1, вторая половина 2.5. После объединения, какое то время учет будет вестись паралельно в двух базах. У меня стоит задача, сделать инструмент сверки как выгруженных данных, так и в дальнейшем данных, которые будут заноситься в этих базах паралельно…Это и персональные данные (целый ворох полей), и долги, и начисления…в общем целый ряд отчетов. С помощью своей консоли, я эту задачу решил на раз два три, буквально в течении рабочего дня накидал, раскрасил. Простой и элегантный труд, как в создании так и в дальнейшем пользовании.

    Нисколько не хочу навязывать, но сам юзаю этот инструмент уже не первый год, уже на 3тьем месте работы. Очень много раз перепиливал. Что-получилось — то получилось. Лично мне он очень облегчает жизнь и помогает. Коллегам — на всех местах работы, тоже всем по душе. Собственно поэтому и родилась данная публикация.

    Кто видит какую то пользу — скачивает, кто нет — то нет.

    Этим же отчетом, я пользуюсь, уже по привычке вместо консоли запросов.

    А по поводу названия — вообще никаких проблем не вижу. Мне кажется вполне симпатичным и разнообразит текст. Краткое описание вполне дает понимание, то это является консолью, конструктором, фабрикой, заводом, генератором (и еще миллион слов которые можно придумать) отчетов. А ассоциации с тем или иным словом — это дело личное. Как по мне так, Генератор — это механизм позволяющий заделать кучу отчетов в короткий срок, и это не делает его автогенератором.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *