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

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 13:40
George
Игорь Столяров писал(а): 30 Март 2024, 13:33 Чем больше функционала реализовано в прикладной программе без привлечения внешних компонент - тем лучше.
Но выбор реализации через стороннюю коммерческую библиотеку, вместо бесплатного офисного пакета не так уж и очевиден. ;)

Опыт показывает, что Open Source проекты более стабильны и последовательны в своём развитии, чем стартапы
где несколько человек пытаются платить ипотеку с одной DLL. :)
В идеале согласен, только где такой Open Source по данной теме, который бы удовлетворял всем моих "хотелкам"? :)
Искал долго - не нашел к сожалению! :(

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 13:43
George
finsoftrz писал(а): 30 Март 2024, 13:02 Я не очень понимаю в принципе, зачем надо уйти от использования офисных пакетов, при этом формируя отчеты в их формат? Понимаю задачи формировать быстро и без привязки к конкретному офисному пакету. В первую очередь подразумевается от привязки к Excel, который платный. Причем сейчас легальность Excel еще меньше принципиальна, чем раньше.
Этот Вы обсудите с Банком России и подчиненными кредитными организациями. :)

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 13:51
finsoftrz
Банк России присылает в коммерческие банки бланки шаблонов форм отчетности и требует их заполнить без использования офисных пакетов? :sur: :mrgreen:

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 13:53
Губин Игорь
finsoftrz писал(а): 30 Март 2024, 12:55 Я делаю шаблон в Calc, затем распаковываю архив и скриптом на vbscript вытаскиваю нужную для формирования отчета информацию из xml таблиц, сохраняю в промежуточный текстовый файл (препроцессинг). Этот текстовый файл и используется при формировании отчета. Шаблоны меняются редко, и для формирования xlsx по шаблону ничего стороннего не нужно.
Однако... "мы всё так делаем" :dizzy:

Ничего личного, но перебор.

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 13:59
Губин Игорь
finsoftrz писал(а): 30 Март 2024, 13:51 Банк России присылает в коммерческие банки бланки шаблонов форм отчетности и требует их заполнить без использования офисных пакетов?
Я бы поверил... Имея дело с госструктурами и не на такое наткнёшься. :facepalm:

Мы бодались с одной конторой, которая мало того, что требовала отчёты в docx (по конкретному файлу-шаблону), это ещё куда ни шло, но и проверяла их в автоматическом режиме, отбрасывая все, которые не созданы конкретной версией ворда. :dizzy:

При этом истерику ("почему не принимают отчёт?!") закатывали именно мне, который ну совершенно не при чём (пришлось разбираться :nr: )

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 14:06
Игорь Столяров
Губин Игорь писал(а): 30 Март 2024, 13:59 отбрасывая все, которые не созданы конкретной версией ворда
Такое бывает ... :) Везде свои "внутренние стандарты" ! Сидит человек в конторе, и уже ничего не хочет делать до пенсии.
Мы делали отчётность по продажам через XLSXWriter и директор поставщика с нами свзывался, т.к. их системный архитектор
(именно так он себя сам называл !) утверждал, что такое сделать в XLSX ну в принципе невозможно ... :)

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 14:10
George
finsoftrz писал(а): 30 Март 2024, 13:51 Банк России присылает в коммерческие банки бланки шаблонов форм отчетности и требует их заполнить без использования офисных пакетов? :sur: :mrgreen:
Не совсем так, офисные пакеты использовать можно :).
Правда, только те, которые подходят по импортозамещению - по крайней мере, банки готовятся по полной к данному моменту.
Здесь и Linux (Astra Linux, ALT Linux и другие) и офисные пакеты (Мой офис, Р7-Офис и другие).

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 14:20
finsoftrz
George писал(а): 30 Март 2024, 14:10
finsoftrz писал(а): 30 Март 2024, 13:51 Банк России присылает в коммерческие банки бланки шаблонов форм отчетности и требует их заполнить без использования офисных пакетов? :sur: :mrgreen:
Не совсем так, офисные пакеты использовать можно :).
Правда, только те, которые подходят по импортозамещению - по крайней мере, банки готовятся по полной к данному моменту.
Здесь и Linux (Astra Linux, ALT Linux и другие) и офисные пакеты (Мой офис, Р7-Офис и другие).
И среди них нет клонов OpenOffice?

libxlsxwriter for Clarion

Добавлено: 30 Март 2024, 14:23
George
finsoftrz писал(а): 30 Март 2024, 14:20 И среди них нет клонов OpenOffice?
Это зависит от банков, некоторые будут использовать Мой офис, другие - Р7 Офис, а третьи - Libre Office.
Как-то так :)

libxlsxwriter for Clarion

Добавлено: 01 Апрель 2024, 11:07
Alex_G
Губин Игорь писал(а): 30 Март 2024, 12:32 Насколько я понял задачу, в программе требуется использовать внешний файл xls/xlsx в качестве шаблона вывода. Тут увы, без чтения/записи никак.
Добрый день. Спасибо всем , кто откликнулся.
Задача стоит именно такая (использовать внешний файл xls/xlsx в качестве шаблона вывода), только с ограничением, что на компьютере может не быть установлен никакой OFFICE, в том числе и ОО.
Как я понял, кроме LibXL (оригинальной или от KlariSoft), доугих решений нет. Значит "будем копать" в этом направлении.

libxlsxwriter for Clarion

Добавлено: 01 Апрель 2024, 12:03
Дед Пахом
OpenXlsx ещё есть, только её надо самому собрать.

libxlsxwriter for Clarion

Добавлено: 01 Апрель 2024, 18:42
Игорь Столяров
Давно (и не мною) была высказана идея, выполнять генерацию отчёта по шаблону через
трансформацию шаблона в некую последовательность команд, его описывающий.

Т.е. да, для загрузки шаблона нам нужен некий инструмент который умеет читать XLSX файлы.

Но далее он создаёт редактируемый текстовый скрипт (список записей в БД и т.д.) по которому уже строится
сам отчёт с подстановкой значений полей, например той же прекрасной библиотекой XLSXWriter.
Быстро и уже без самого Microsoft Excel.

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

1.jpg

libxlsxwriter for Clarion

Добавлено: 01 Апрель 2024, 19:31
finsoftrz
Я прямо в Calc рисую. В свойствах xlsx прописываю разделение на детальки в терминах клариона.

xlsx_templ.jpg

Код построения отчета выглядит так.

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

reestrSotr_r  routine   !реестр по сотрудникам
  DATA
FsXLSXL      &FsXLSX
lor:i        long
lor:sumIt_r  real
  CODE
        
     do FsViewQueue_r
   
     if records(Loc:Queue)=0
        FsMessagePr('Данные не найдены!')    
        exit
     .       
     sort(Loc:Queue,Loc:NameCardPayK,Loc:IDCardPay,Loc:NameTovarK,Loc:IDTovar)   
     do raschSotrIt_r
     do formSotr_r
     FsPrimary:Param(1) 
     FsPrimary:Klients(Loc:IDKlient)
   
     Loc:Filename=GetNameTmp(FsAccess:ActiveUserDir,'xlsx',0)    

     FsXLSXL &= NEW(FsXLSX)
     FsXLSXL.init(Loc:FileName,FsAccess:ActiveUserDir)
     FsXLSXL.LoadTemplate('reports\reestrCardsPay.xlfx')

     !FsXLSXL.SetPageSetup(,,-1,,1,999)

     FsXLSXL.SetValue('PeriodStart',Loc:PeriodStart)
     FsXLSXL.SetValue('PeriodEnd',Loc:PeriodEnd)
     FsXLSXL.SetValue('NameMag',PAR:Adress)
     FsXLSXL.OutSection('secHeader')

     lor:sumIt_r=0
     loop lor:i=1 to records(Loc:Queue)
        get(Loc:Queue,lor:i)
        case Loc:TypeRec
            of 0
               FsPrimary:CardsPay(Loc:IDCardPay) 
               clear(Loc:QueueCardsIt)
               Loc:IDCardPayIt=Loc:IDCardPay
               get(Loc:QueueCardsIt,Loc:IDCardPayIt)  
               lor:sumIt_r+=Loc:SumPayIt
               FsXLSXL.SetValue('Sum',Loc:Sum) 
               FsXLSXL.SetValue('SumTalon',Loc:SumPayIt) 
               FsXLSXL.OutSection('secGroup')
            of 1
               FsPrimary:Tovar(Loc:IDTovar)
               FsXLSXL.SetValue('Kol',Loc:Kol) 
               FsXLSXL.SetValue('Sum',Loc:Sum) 
               FsXLSXL.OutSection('secDetail')
            of 3
               FsXLSXL.SetValue('Sum',Loc:Sum) 
               FsXLSXL.SetValue('SumTalon',lor:sumIt_r) 
               FsXLSXL.OutSection('secFooter')               
        .    
     .
     
     free(Loc:Queue)   
     free(Loc:QueueCardsIt)   
   
     FsXLSXL.Make
     if FsAnyScreen=0
        FsXLSXL.kill(1)
     else
        FsXLSXL.Kill(2) 
        FsMessagePr('Отчет будет загружен на Ваш компьютер в файле ' & clip(FsFileShort(Loc:Filename,0)) & ' !')
        AnyScreen:DownloadFile(clip(longpath(Loc:Filename))) 
     .   

     dispose(FsXLSXL)

Calc требуется только для редактирования бланка, при построении не нужен, xlsx формируется напрямую в файл. Для xls бланков очень похоже. Отчеты такие рисовать очень быстро, быстрее не бывает, используются все возможности офисных пакетов.

libxlsxwriter for Clarion

Добавлено: 01 Апрель 2024, 19:43
Игорь Столяров
В обоих случаях показаны для примера простые списочные отчёты.
А бывают навороченные бланки - например та же транспортная накладная или таможенная декларация.
Их так просто не нарисуешь ... будет проще загрузить и распарсить готовый бланк и по нему уже отрисовывать отчёт.

Конечно же первое, что приходит в голову - это тупо расставить и заполнить поля в самом бланке и всё. :)
Но тогда нужно средство для работы с XLSX везде где создаются отчёты.

libxlsxwriter for Clarion

Добавлено: 01 Апрель 2024, 20:01
finsoftrz
Игорь Столяров писал(а): 01 Апрель 2024, 19:43 В обоих случаях показаны для примера простые списочные отчёты.
А бывают навороченные бланки - например та же транспортная накладная или таможенная декларация.
Их так просто не нарисуешь ... будет проще загрузить и распарсить готовый бланк и по нему уже отрисовывать отчёт.

Конечно же первое, что приходит в голову - это тупо расставить и заполнить поля в самом бланке и всё. :)
Но тогда нужно средство для работы с XLSX везде где создаются отчёты.
Я думаю, надо разделять табличные формы и произвольные (листовые) формы. 1С долго все делали с помощью табличных форм, и с этим было в определенных ситуациях трудно. Затем в 1С8 добавились отчеты произвольной формы. Нечто похожее на кларионовские репорты, если так можно провести параллели. Это я к тому, что для упомянутых в цитате форм лучше использовать другие инструменты.

xlsx_templ2.jpg