Коллеги, представляю вашему вниманию, свою очередную наработку.
Как всегда, в качестве мотиватора выступила бухгалтерия на моей новой работе. Напиши им такой отчет, напиши им этакий отчет, а можно ли сделать чтобы выгруженные документы как-то сравнивать с управленческой базой, вдруг там что-то изменили, или неправильно выгрузилось, или отчетик который вытащит им какие то кривые документы, по определенным критериям.
В общем, ничего особенного, обычная работа. Для обычных форм существовал подобный отчет.
А вот для управляемых форм, все оказалось несколько сложнее. И так-как мне не удалось найти ничего готового подходящего, то пришлось все делать самому и так, как мне хочется, с учетом накопившихся потребностей и новых идей.
Итак консоль.
Внешне она выглядит как обычная консоль запросов, с деревом отчетов. Хранятся все отчеты в едином файлике.
Подключаем к конфигурации, как обычный внешний отчет. ну или просто открываем из файла.
Слева мы видим дерево наших отчетов. Закладки параметры, Порядок и отбор - это стандартные настройки вариантов отчетов для пользователя, дабы он мог их крутить.
Далее, закладка "внешние источники" - это закладка, где мы настраиваем базы, к которым мы будем подключатся (если таковые есть).
В дерево добавляем нужный отчет, задаем имя. По правой кнопке мыши, в контекстном меню, есть пункты "Описание" и "Изменить".
Описание - позволяет сделать описание текущего отчета (для чего он нужен, что выводит и т.п.), при большом количестве отчетов и пользователей, очень удобно, иначе забывается. Если описание есть, то строка отчета выделена подчеркиванием.
Выбрав описание, открывается фрейм, где мы видим описание, а в нем по правой кнопке мыши попадаем в редактор. Редактор описаний я делал давно, используя HTML-поле. Можно вставлять картинки, гиперссылки, раскрашивать и т.п. Сейчас,я бы сделал используя форматированный документ, но пока времени переделывать, то, что оттестировано и давно работает, нет, да и форматированный документ, это такой же HTML. В принципе там особо описывать нечего, все должно быть интуитивно понятно.
Изменить - это редактор внутренностей нашего отчета. Вот тут все интересней.
Тут рассмотрим все по порядку.
В левой колонке, список наших источников данных, по которым будем строится наш отчет.
Введем новый источник - обзовем его, к примеру, "ЛокальнаяБаза".
Также в окне мы видим несколько кнопок, которыми будем настраивать наш источник.
Открыть консоль - это стандартный редактор запроса, либо форма транспорта для внешней базы.
Вывести запрос - просто выведет результат нашего заделанного запроса, в нижний фрейм. Чек бокс "редактировать", это просто включение возможности открытия ссылочных полей по расшифровке. Регулятор внизу - меняет масштаб выведенной таблицы.
Обработки - форма ввода произвольного обработчика.
Радиопереключатель Внешний/Локальный - это источник данных. В случае с внешним, откроется выбор наших внешних баз, заданных ранее, где мы и выберем к какой оно будет подключатся и выгребать данные. Для локальной базы, дополнительной настройки не требуется.
Чекбокс Использовать ВТ - нужен для того, если мы предполагаем комбинацию из разных источников. Т.е. например, имеем несколько источников, а нам нужно их, объединить в один запрос через виртуальную таблицу. Создав новый источник, и активировав кнопку ВТ, появится кнопка - добавления в запрос, кода из выбранного нужного источника.
Итак, подготовим запросик
и зададим его параметры
нажав кнопку ок, вернемся в окно редактирования.
Теперь мы можем уже тестово вывести запрос, посмотреть что он там нам выводит.
Следующим шагом, нам необходимо заполнить поля источника, нажав соответствующую кнопку.
Если все сделано верно и корректно, то увидим названия полей, и тип полей. Это будут ключевые поля, для работы и с временными таблицами, и в самой схеме СКД,
если поля не заполнились, то ищем ошибки в запросе, или в обработчиках, без автоматом заполненных полей ничего работать не будет.
Ну и для примера заполним обработчик произвольного алгоритма.
следует помнить, что обработчик вызывается после выполнения основного запроса. Результат запроса выгружен в переменную "таблица", с которой мы и оперируем.
если это таблица удаленной базы, то в переменной ВнешнийИсточник находится наш ком соединитель. Чтобы не забыть, кликнув на поле правой кнопкой мыши, можно посмотреть пример.
Итак, после заполнения обработчиков, нажмем еще раз "Заполнить поля источника", чтобы там появилось программно добавленная нами колонка, и переходим к следующему шагу.
Закладка параметры, нужна для задания связок и визуализации параметров непосредственно у пользователя, с параметрами запросов наших источников.
Для начала нажмем кнопку "Обновить структуру".
И введем названия параметров, как их будет видеть пользователь, а в колонке с именем источника, выберем параметр из запроса, которому он будет соответствовать.
Параметры необязательно задавать все, какие есть в запросе. Мы можем задать, только Дату начала и дату конца, а организацию и контрагента, вообще не задавать,
тогда его значение по умолчанию, будет тем, каким мы его задали в консоли запроса.
Ну и после задания связок параметров, создадим схему СКД.
К слову сказать, конструктор схемы СКД, в тонком клиенте не работает, поэтому, чтобы его задать, нам придется запустить все приложение в режиме Толстого клиента, управляемого приложения. Других серьезных платформенных ограничений нет. Но пользоваться готовыми отчетами, вполне можно и в режиме тонкого клиента.
Итак, нажав, "ОК", перейдя в начальную форму отчета, нам нужно только у заполненного списка параметров, выбрать тип, задать какие-то значения, которые наиболее часто будут использоваться. Ну и можно его уже вывести и пользоваться.
--------------------------------------------------------
Несколько слов о внешних базах.
Работа с КОМ-объектами, требует, некоторого опыта при работе. Поэтому, не нужно расстраиваться что, не работает то или другое. Курите, изучайте мат часть. В принципе, консоль это инструмент разработчика, а не обычного пользователя.
Итак.
Чтобы сделать запрос, во внешней базе - необходимо запустить консоль, в этой самой внешней базе. Делаем там источник, "локальный", также редактируем запрос.
у редактора есть форма транспорт. Когда мы подготовим текст запроса, и зададим параметры, то перейдя на эту закладку видим абрукадабру.
это ни что иное, как сериализованный в строку, весь наш запрос, вместе с параметрами, функцией ЗначениеВСтрокуВнутр.
Сразу отвечу на вопрос, почему не сериализатор. Да потому, что опытным путем, выяснилось, что не со всеми базами это прокатывает, при десеарилизации в другой базе. Может быть из за разных режимов совместимости заданных у конфигураций, может еще из за чего-то. А данная функция, работает железобетонно. Поэтому оставил ее.
Эту абракадабру копипастим,
а в той базе, где строим отчет, при нажатии ОткрытьКонсоль, у нас откроется форма ввода транспортной строки.
Важно !!! При составлении запроса, не нужно выводить ссылочные поля !! Ссылки выводим через представления. Ну и примитивные типы.
При задании параметров, для внешней базы, требуется задать код связки. Это там же, на вкладке параметров.
Например, имеет стандартный отчет, по сверке поступлений. Там 2 источника данных, один реестр "Поступлений товаров услуг" в бухгалтерской базе,
другой берет документы "Приходная накладная" во внешней базе УНФ.
Ключевыми параметрами для обоих запросов, у нас является Дата начала, дата окончания, и Организация.
Дата - это примитивный тип, преобразования не требует, а вот с организацией посложнее.
Выбирать организацию мы будем в локальной базе, там это будет элемент справочника "Организации", а в удаленной базе будем искать выбранную организацию по "ИНН" (предположим, что наименования, и коды справочников у нас различаются).
На закладке параметры, после обновления структуры, мы видим поле "Преобразование", именно туда нам и необходимо вписать нужный код преобразования.
Если код не указать, то она просто попытается в лоб воткнуть значение параметра, что у нее конечно же не получится. А вот примитивные типы, без всякого преобразования указываем.
В контекстном меню, оставил памятку, по примеру преобразований (а то и сам, забываю).
На этом, пожалуй закончу данное повествование.
Пожелания, и баги приветствуются, претензии не принимаются (кому что не нравится, делайте свои поделки).
Всевозможные способы и вариации работы, тестировать нет ни потребности ни возможности. Но если что, по возможности буду дорабатывать. В принципе, итак перерабатывал его уже несчетное количество раз, идеи развития есть...поэтому буду тут и выкладывать обновления.
На авторство самой идеи не претендую, подобные работы давно делались. При кодировании, также не все из головы брал, использовал и куски чужих разработок (точно помню где-то подсмотрел раскраску текста), только источников этих сейчас уже и не смогу найти.
В общем всем удачи, и плодотворной работы.
UPD. 27.11.2017 v.2.0.0.1 исправлено некоторое количество багов.
UPD. 29.11.2017 v.2.0.1.0 выявлен и исправлен баг с расшифровкой (работал только в толстом клиенте), добавлена проверка корректности задания имени источника. Добавлена возможность тестового подключения к внешнему источнику. Добавлена возможность установить пароль на весь файл отчетов, для того чтобы обычный пользователь не мог случайно испортить и после этого сохранить отчеты.
UPD. 30.11.2017 v.2.0.1.1 Теперь настройки отчетов (отборы, сортировки) пользователем сохраняются и восстанавливаются через хранилище общих настроек, сам файл отчетов перезаписывать при этом не нужно.
UPD. 08.12.2017 v.2.0.1.2 Исправлена следующая ошибка. "Если пользователь ошибочно указывал файл, каталог, или неподходящий по структуре, путь запоминался и при открытии отчет выдавал ошибку и не открывался. " Завернул чтение и запись файла в попытку.
UPD. 14.12.2017 v.2.0.1.3 В целях удобства, по кнопке восстановить настройки, сделана инициализация настроек компоновщика по умолчанию. При многократном изменении схемы, настройки от предыдущих вариантов сильно мешали. Также немного почистил интерфейс, на кнопки с надписями сделал картинки, и информационные надписи сделал более лаконичными.
UPD. 15.12.2017 v.2.0.2.1 Добавлена автосумма выделенных ячеек, что-то наподобие ОСВ в БУХ.
UPD. 22.12.2017 v.2.1.0.1 Расширен функционал отчета. Появилась возможность расширенного редактирования настроек отчета, включая оформление, поля, структуру, и при необходимости экспертное редактирование всех параметров отчета.
Для этого в настройках появилась галка - расширенное редактирование.
после этого появляются дополнительные вкладки в параметрах, и несколько дополнительных кнопок в вариантах отчета.
Также появилась возможность работы с вариантами настроек.
По умолчанию варианты, подтягиваются из самой схемы СКД, и по желанию пользователя, меняются, либо добавляются собственные.
В отчете также, разграничились функции по управлению настройками, надеюсь стало более интуитивно понятно, как все работает. Отдельные кнопки сохранение восстановление и очистка хранилища пользователя, и отдельные кнопки помещения отрегулированных настроек в саму структуру отчета, а также возможность их инициализации.
Ну и в придачу убрал недочет, связанный с тем что при открытии отчета на полный экран (кнопка скрытия списков и параметров), при нажатии переформировать отчет - он теперь спокойно заново формируется.
И сделал вопрос, при попытке закрытия консоли, подтверждение о закрытии (дабы пользователь случайно esc не нажал и все свои настройки закрыл).
UPD. 01.08.2018 v.2.1.0.3. Столкнулся со старенькой УТ-шкой 11.0 с древним режимом совместимости. Как и написали в отзывах, не взлетело. Пришлось подшаманить, и заменить новые функции, на старые, и один вызов функции из БСП перенести. Предыдущую версию удалять не буду, т.к. она уже проверена а эту еще тестить нужно в различных вариантах.
UPD. 16.11.2018 v2.2.1.3. Расширен функционал. Сделана возможность хранения созданных отчетов внутри базы данных.
для этого в настройках необходимо установить галочку
При этом поле с выбором файла станет недоступным, а все созданные отчеты будут сохранятся внутри базы данных.
Данная функция будет работать, только на конфигурациях с БСП !. В качестве места хранения используется регистр сведений "ПользовательскиеМакетыПечати". При открытии отчета происходит поиск регистра по метаданным, и если такого нет, то и функция не будет доступна.
Для того чтобы удалить из базы сохраненные отчеты, сделал кнопку удаления.
Также перенес внутрь отчета, процедуру из БСП, для того чтобы максимально отвязать, и использовать отчет там где этой процедуры нет.
UPD. 16.11.2018 v2.2.1.4. Заметил и исправил ошибочку, возникшую после переноса общего модуля. Не считалась сумма выделенных ячеек.
UPD. 10.01.2020 v2.3.3.2. Устранен ряд ошибок. При передаче параметра (булево) при работе с источником данных через ком, требовалось преобразование, хоть это и примитивный тип. Также затирался произвольный алгоритм, в случае обновления структуры внешнего источника данных, что доставляло неудобство, требовалось копипастить код и заново вставлять. Также исправлена ошибка, нельзя было выбрать перечисления в параметрах запроса с типом список значений. Также переделал добавление источников, кнопками, вместо добавления из контекстного меню по правой кнопке мыши, для исключения случайных ошибок.
Также расширен функционал. Теперь можно в качестве отдельного источника данных использовать файл эксель и компоновать эти данные как угодно в своих отчетах.
Для этого, при добавлении нового источника данных выбираем тип "эксель".
далее, нажимая кнопку "открыть консоль", попадем в форму настроек источника данных.
По аналогии с настройкой запросов, сначала нажимаем "Обновить параметры" - у нас заполнятся предопределенные параметры для данного вида источника данных.
Первая строка - это номер строки с которой начинаем чтение файла.
Последняя строка - соответственно последняя строка. В случае задания 0, чтение будет до самого конца файла.
ПутьКФайлу - соответственно путь к файлу.
далее, можно попробовать прочитать выбранный файл, который подтянется в первую вкладку, и можно предварительно увидеть
с чем имеем дело. И нам нужно добавить номера колонок, которые нам нужны.
Для упрощения ввода, можно нажать автоопределение колонок, тогда заполнятся все колонки файла, со стандартным именем, и типом колонки "строка". Имена можно задать свои, но с учетом, что фактически это будут колонки таблицы значений, а значит имена надо давать соответствующие. Также можно выбрать сразу тип. Тип может быть строка, дата и число. Которые сразу будут преобразованы при чтении в нужный тип.
После того как все настроили, нажимаем "ок".
Без проблем можно дополнительно обработать нашу получившуюся таблицу, собственными алгоритмами, добавить колонки, преобразовать или вычислить. Это все делается в обычном порядке, как и для других видов источников данных.
если мы хотим дать возможность пользователю менять наши параметры, номера строк чтения, или самому выбирать файл, то задаем параметры для пользователя и связываем из с требуемыми параметрами источника, по тому же принципу что и обычными источниками. На закладке "параметры".
далее, делаем нашу схему, компонуем данные как нужно.
Переданные параметры появятся на главной странице у пользователя, и он сможет их сам крутить.
UPD. 07.02.2020 v3.1.1.2 После вынужденного обновления на новую платформу 8.3.15.1830 перестал работать редактор описаний, и все информационные блоки отчета, по причине того что в новой версии платформы отказались от использования Exprorer-а, и сделали собственный объект, в котором старые методы уже не работают. Произведена переделка о отчете с учетом новшеств. Редактор описаний переделал на ФорматированныйДокумент. Если описание уже существовало, то оно, в целях совместимости, будет отображаться - но отредактировать его уже нельзя, только пересоздать новое описание.
Также произведена оптимизация работы с источником данных excel - увеличилось быстродействие при работе с большими файлами. Также немного в интерфейсе источника данных, сделана работа в одном окне - для удобства. Функционально осталось все тоже самое.
Отчет добавляю отдельным, пунктом - для новых версий платформ. Далее совершенствоваться будет именно он. Старую версию 2.3.3.2 оставляю как стабильную, для версий платформы меньше чем 8.3.15
UPD. 27.12.2021 v3.1.2.8
Расширен функционал, сделана возможность в качестве источника указывать не только файлы excel но и обычные txt файлы.
Вид файла определяется по расширению. В случае с txt - считывание информации происходит построчно, а по столбцам разделяется посредством символа-разделителя, который можно менять в появившейся настройке источника.
Также появилась возможность, сразу настроить фильтр (маску) файла, чтобы пользователям было проще выбирать - то что нужно в открывшемся списке выбора файла.
все это настраивается в настройке источника, вот тут
по умолчанию, разделитель строки ставится ";"
а маска файла, универсально "Лист Excel (*.xls;*.xlsx) Текстовый документ (*.txt)|*.xls;*.xlsx;*.txt|Все файлы (*.*)|*.*"
при этом будет отбор на файлы xls, xlsx, txt и можно переключить на все файлы.
если поставить фильтр "Текстовый документ (*.txt)|*.txt|Все файлы (*.*)|*.*" , то выбрать можно будет только файлы txt.
Также в новой версии, устранен ряд старых ошибок.
- не корректно работало преобразование в нужный тип, при загрузке из файловых источников. Загружалось всегда как текст, даже если явно указано число или дата. Теперь при указании нужно типа колонки, данные автоматически будут преобразованы в нужный тип.
- нельзя было использовать в источнике, с применением виртуальных таблиц..таблицы полученные файловыми источниками. Теперь это стало работать.
- исправлен баг, при редактировании источника с виртуальными таблицами, после его настройки, чтобы заполнить поля источника приходилось выходить в список отчетов, и снова открывать редактирование, только тогда оно переинициализировалось. Теперь этого делать не нужно, все работает сразу.
- также оптимизированы процедуры заполнения полей источников, теперь они работают быстрее. В случае в с внешними источниками, заполнение было длительными.
UPD. 19.05.2022 v3.3.5.18.
Расширен функционал.
- В параметры запроса, добавлен произвольный алгоритм. Если он задан, то будет предпринята попытка программной установки параметра. Полезно, например, если нам требуется в параметр задавать что-то меняющееся: текущую дату, или что-то другое.
Если запрос, подготавливается для внешнего источника, и будет выполнятся в подключении через ком. То перед функциями необходимо в фигурных скобках указывать {ВнешнийИсточник}.ТребуемыйКод
- Второе новшество, будет полезно для создания отчета, которые подключается к множеству однотипных внешних баз.
Появилась возможность выбора внешнего источника по идентификатору и установки связи по пользовательским параметрам.
Другими словами, если, к примеру - имеем несколько однотипных бухгалтерских баз, по разным организациям. И требуется однотипная сверка, с той базой организацию которой мы выбираем. То достаточно описать запрос одного источника, и установить связь требуемой базы, с выбираемым параметром. И при выборе определенной организации, будет подключатся именно та база какая нужна.
Проиллюстрирую скриншотами.
В форме где указываем параметры внешней базы, появилось поле "ИдентификаторИсточника". Оно может быть любого ссылочного типа. В простом варианте, выбираю справочник организации, и устанавливаю соответсвующий источнику элемент.
далее, при редактировании отчета, в варианте выбора внешней базы, появилось поле в которое можно прописать алгоритм
поиска нужного источника
если поле пустое, или алгоритм ничего не найдет - то по умолчанию будет та база, которая явно указана.
Алгоритм указывается по принципу.
{ИмяПараметра}Организация{Алгоритм}ЗначениеПараметра.Ссылка
слова в фигурных скобках, являются системными атрибутами, и не меняются.
"Организация" это имя пользовательского параметра, на главной странице отчета. Т.е. мы оперируем значением именно этого параметра. После атрибута {Алгоритм} следует произвольный кусочек кода, который должен преобразовать Значение в установленный идентификатор источника. "ЗначениеПараметра" это переменная, которая содержит значение выбранного пользователем параметра.
В моем примере, я в качестве идентификатора явно выбираю Организацию, поэтому преобразований не требуется. Поэтому вписано "ЗначениеПараметра.Ссылка".
Алгоритм таким образом переберет все источники, и найдет тот, в котором будет присутствовать выбранная организация.
Все звучит сложно, но, те кто использует консоль для сверки многочисленных баз - должны оценить. Отчет можно сделать один раз, и при появлении новых баз, останется просто добавлять их в список, и все будет работать.
UPD. 06.02.2024 v3.4.2.5.
Устранен недочет, в инициализации процессора компоновки данных добавлен параметр, позволяющий использовать внешние функции в самой схеме.
Расширен функционал.
Добавлена новая возможность в качестве источника данных использовать google таблицы (при наличии токена)
На данный момент, пока все. Успехов. Пользуйтесь на здоровье.
Проверено на следующих конфигурациях и релизах:
- 1С:Комплексная автоматизация 2, релизы 2.5.12.222, 2.5.12.215
- Управление торговлей, редакция 11, релизы 11.3.4.21