Страница 1 из 3

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 20:43
finsoftrz
Размещу небольшую демонстрацию организации визуальной настройки бланков для вывода в отчеты с xlsx форматом.

Небольшое вступление. На сегодняшний день мне представляется более предпочтительным формат xls из-за совместимости со старыми версиями Ms Excel, которые используются у многих клиентов. Да и скорость работы xls чувствительно выше. Но есть общая тенденция движется в сторону использования формата xlsx. В основном, из-за его относительной простоты организации и доступности. Xlsx формат представляет собой zip архив, в котором собран набор xml файлов, файлов графики и т.п. Обработку этих xml файлов вполне по силам написать программисту со средним уровнем квалификации. Аналогичный формат ods, используемый в опен офисах, хотя и базируется на том же стандарте, что xlsx, представляется более сложным. Открытый стандарт, используемый в xlsx, довольно обширен. Это имеют ввиду, когда говорят об общей его сложности. Нам, конечно, нужен некий базовый функционал, позволяющий быстро решать текущие задачи.

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

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

Код: Выделить всё

test_r  routine   !тестирование

    locXLSX.init(clip(FsFilePathNoSlash(FsAccess:ActiveUserDir)) & '\1.xlsx',FsAccess:ActiveUserDir)
    locXLSX.LoadTemplate(Loc:FileName)

    locXLSX.OutSection('secHeader')
    clear(Tov:record,-1)
    set(Tov:keyName,Tov:keyName)
    loop
       next(Tovar)
       if error()
          break
       .
       locXLSX.OutSection('secDetail')
    .

    locXLSX.Make
    locXLSX.kill(1)
Как видно, в приложении делается минимум телодвижений. Все остальное организуем непосредственно в бланке xlsx. Для начала подключаем в приложении по аналогии с другими формами. Я разделяю формы на стандартные, расширенный набор и пользовательские. Пользовательские формы, размещенные в файлах с именами, совпадающими с формами из стандартного или расширенного набора, автоматически их перекрывают. Выглядит это так:
xlsx1.jpg
Далее схема такая. Создаем бланк в виде xlsx файла и транслируем его в простой промежуточный формат. У меня такие файлы промежуточного формата имеют расширение xlfx. Зачем нужен промежуточный формат? Чтобы в процессе формирования отчетов у пользователей не заниматься распаковкой и парсингом xml файлов. Промежуточный формат похож на json, легко и быстро обрабатывается через стандартный ascii драйвер. Шаблон в xlsx выглядит следующим образом:
xlsx2.jpg
В ячейках используются специальные конструкции "форм=", "пер=". Следующие за этими ключевыми словами выражения могут содержать имена полей базы данных, стандартные функции или специально созданные переменные. Кларионовский кодогенератор автоматически биндит поля базы данных и стандартные функции, поэтому специально по ним делать ничего не надо. Можно также через bind подключать и свои функции. Аналогично можно организовать вставку изображений, графиков и т.п.
Далее нам надо привязать фрагменты шаблона к секциям, используемым программой для построения отчета. А также задать заголовки для отображения в дереве форм. Это организуем через пользовательские свойства xlsx файла. Они задаются в меню Файл - Свойства - Свойства пользователя.
xlsx3.jpg
В примере заданы 2 секции secHeader и secDetail. В значениях для них указываются номер листа, строка и колонка стартовой ячейки, количество строк и количество колонок в секции.

Продолжение переношу на следующий пост.

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 20:52
Игорь Столяров
К сожалению, отображаются только 2 последние картинки ... А самые интересности не видно ... :(

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 20:53
finsoftrz
Движок форума глючит. Сейчас погляжу, как поправить...

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 20:55
Игорь Столяров
finsoftrz писал(а): 25 Январь 2018, 20:53 Движок форума глючит. Сейчас погляжу, как поправить..
Вау ! Будем чинить форум ! А можно я тоже что-нибудь покручу ? ;)

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:02
finsoftrz
У меня появились...

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:06
Игорь Столяров
Да, изменения есть. Теперь отображается только последняя картинка. :)
(Проверил на 2-х компьютерах и 3-х броузерах)

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:10
Дед Пахом
ещё зайцы справа видны :-)

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:14
Игорь Столяров
Дед Пахом писал(а): 25 Январь 2018, 21:10ещё зайцы справа видны
Это от броузера зависит .... В Opera - зайцы, в Edge - крестик и т.д. ;)
Может просто картинки отдельными постами ? (если есть ограничение на кол-во картинок в сообщении).
Также надо в личном кабинете проверить - там тоже было какое-то ограничение на общее кол-во прикрепляемых файлов ...

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:27
finsoftrz
Завершение первого сообщения в ветке...

После трансляции мы получаем информацию о содержимом xlsx в следующем виде:
xlsx4.jpg
Транслятор содержимого xlsx бланка в промежуточный формат у меня написан на vbscript. Мне так проще. Возможны варианты. Результат выполнения теста показан на следующем скриншоте:
xlsx5.jpg

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:37
Игорь Столяров
Спасибо - картинки появились.
Скажите пожалуйста, а этот способ формирования бланка допускает разгруппировку списка ?
Ну например, если показанный список товаров надо разделить по производителям.

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 21:50
finsoftrz
Конечно. Создаем еще одну секцию и выводим, когда надо через outSection. Логика построения отчета вся в приложении, в шаблоне только внешний вид и формулы для заполнения ячеек.

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 22:59
gopstop2007
Нужная тема, востребована!
finsoftrz писал(а): 25 Январь 2018, 21:27
Транслятор содержимого xlsx бланка в промежуточный формат у меня написан на vbscript. Мне так проще. Возможны варианты. Результат выполнения теста показан на следующем скриншоте:
Мне не одаренному, не понятно :) , зачем бланк с промежуточным форматом? Почему нельзя без него?

Визуализация работы с xlsx

Добавлено: 25 Январь 2018, 23:59
finsoftrz
См. в первом посте.

Визуализация работы с xlsx

Добавлено: 26 Январь 2018, 8:36
Игорь Столяров
Ну вот, у Вас уже свой фан-клуб потихоньку собирается. :)
А Вы не хотели выходить из сумрака ... ;)

Визуализация работы с xlsx

Добавлено: 26 Январь 2018, 10:24
gopstop2007
finsoftrz писал(а): 25 Январь 2018, 23:59 См. в первом посте.
Может я не достаточно ясно выразил мысль, в excel есть готовый шаблон + свой справочник переменных, зачем еще что то? :D