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

Программы на Clarion, шаблоны, библиотеки и пр.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 25 Январь 2018, 20:43

Размещу небольшую демонстрацию организации визуальной настройки бланков для вывода в отчеты с 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. В значениях для них указываются номер листа, строка и колонка стартовой ячейки, количество строк и количество колонок в секции.

Продолжение переношу на следующий пост.
Последний раз редактировалось finsoftrz 25 Январь 2018, 21:30, всего редактировалось 6 раз.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 25 Январь 2018, 20:52

К сожалению, отображаются только 2 последние картинки ... А самые интересности не видно ... :(
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 25 Январь 2018, 20:53

Движок форума глючит. Сейчас погляжу, как поправить...
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 25 Январь 2018, 20:55

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

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 25 Январь 2018, 21:02

У меня появились...
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 25 Январь 2018, 21:06

Да, изменения есть. Теперь отображается только последняя картинка. :)
(Проверил на 2-х компьютерах и 3-х броузерах)
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2276
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 25 Январь 2018, 21:10

ещё зайцы справа видны :-)
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 25 Январь 2018, 21:14

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

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 25 Январь 2018, 21:27

Завершение первого сообщения в ветке...

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

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 25 Январь 2018, 21:37

Спасибо - картинки появились.
Скажите пожалуйста, а этот способ формирования бланка допускает разгруппировку списка ?
Ну например, если показанный список товаров надо разделить по производителям.
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 25 Январь 2018, 21:50

Конечно. Создаем еще одну секцию и выводим, когда надо через outSection. Логика построения отчета вся в приложении, в шаблоне только внешний вид и формулы для заполнения ячеек.
Рязань решает.

gopstop2007
✯ Ветеран ✯
Сообщения: 1254
Зарегистрирован: 25 Март 2009, 21:55

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

Сообщение gopstop2007 » 25 Январь 2018, 22:59

Нужная тема, востребована!
finsoftrz писал(а):
25 Январь 2018, 21:27

Транслятор содержимого xlsx бланка в промежуточный формат у меня написан на vbscript. Мне так проще. Возможны варианты. Результат выполнения теста показан на следующем скриншоте:
Мне не одаренному, не понятно :) , зачем бланк с промежуточным форматом? Почему нельзя без него?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 25 Январь 2018, 23:59

См. в первом посте.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 26 Январь 2018, 8:36

Ну вот, у Вас уже свой фан-клуб потихоньку собирается. :)
А Вы не хотели выходить из сумрака ... ;)
«V» значит Вендетта !

gopstop2007
✯ Ветеран ✯
Сообщения: 1254
Зарегистрирован: 25 Март 2009, 21:55

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

Сообщение gopstop2007 » 26 Январь 2018, 10:24

finsoftrz писал(а):
25 Январь 2018, 23:59
См. в первом посте.
Может я не достаточно ясно выразил мысль, в excel есть готовый шаблон + свой справочник переменных, зачем еще что то? :D
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Ответить