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

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

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

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

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

Продолжение переношу на следующий пост.
Последний раз редактировалось finsoftrz 25 Январь 2018, 21:30, всего редактировалось 6 раз.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

К сожалению, отображаются только 2 последние картинки ... А самые интересности не видно ... :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Движок форума глючит. Сейчас погляжу, как поправить...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

finsoftrz писал(а): 25 Январь 2018, 20:53 Движок форума глючит. Сейчас погляжу, как поправить..
Вау ! Будем чинить форум ! А можно я тоже что-нибудь покручу ? ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

У меня появились...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Да, изменения есть. Теперь отображается только последняя картинка. :)
(Проверил на 2-х компьютерах и 3-х броузерах)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

ещё зайцы справа видны :-)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Дед Пахом писал(а): 25 Январь 2018, 21:10ещё зайцы справа видны
Это от броузера зависит .... В Opera - зайцы, в Edge - крестик и т.д. ;)
Может просто картинки отдельными постами ? (если есть ограничение на кол-во картинок в сообщении).
Также надо в личном кабинете проверить - там тоже было какое-то ограничение на общее кол-во прикрепляемых файлов ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

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

После трансляции мы получаем информацию о содержимом xlsx в следующем виде:
xlsx4.jpg
Транслятор содержимого xlsx бланка в промежуточный формат у меня написан на vbscript. Мне так проще. Возможны варианты. Результат выполнения теста показан на следующем скриншоте:
xlsx5.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Спасибо - картинки появились.
Скажите пожалуйста, а этот способ формирования бланка допускает разгруппировку списка ?
Ну например, если показанный список товаров надо разделить по производителям.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Конечно. Создаем еще одну секцию и выводим, когда надо через outSection. Логика построения отчета вся в приложении, в шаблоне только внешний вид и формулы для заполнения ячеек.
C6/C11, ШВС, tps/btrieve.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

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

Сообщение gopstop2007 »

Нужная тема, востребована!
finsoftrz писал(а): 25 Январь 2018, 21:27
Транслятор содержимого xlsx бланка в промежуточный формат у меня написан на vbscript. Мне так проще. Возможны варианты. Результат выполнения теста показан на следующем скриншоте:
Мне не одаренному, не понятно :) , зачем бланк с промежуточным форматом? Почему нельзя без него?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

См. в первом посте.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Ну вот, у Вас уже свой фан-клуб потихоньку собирается. :)
А Вы не хотели выходить из сумрака ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

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

Сообщение gopstop2007 »

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