Шаблон xLabel

Автор JBrown, 28 октября 2019, 21:57

0 Пользователи и 1 гость просматривают эту тему.

JBrown

Шаблон xLabel (содержит макрос) позволяет создать документ в pdf-формате, в котором находятся аккуратно размещенные на страницах этикетки.

В тексте документа, основанного на шаблоне xLabel, - назовем его "исходный документ" - присутствует образец этикетки, который можно изменить под свои задачи, а именно, задать размер, оформить элементы, связать элементы с источником данных. Этикетка в окончательном виде может содержать как текст, так и картинку, в том числе взятую из базы данных. Кроме самих этикеток, на страницы наносится разметка в виде коротких штрихов, отделяющих этикетки друг от друга. Параметры страницы получаемого документа (размер, поля, ориентация) задаются через исходный документ. Исходный документ содержит пошаговую инструкцию со всеми необходимыми пояснениями.

Документ xLabel отличается от стандартного в Libre Office документа Labels следующим:


  • Этикетка может содержать картинку, информация о которой извлекается из базы данных.
  • Этикетки размещаются автоматически исходя из их размера и параметров страницы.
  • Для связывания с источником данных используются закладки.
  • Более наглядная работа с образцом этикетки.

Первоначально задумывался документ, формирующий пропуска. Но можно попробовать использовать его для формирования других однотипных документов с разными данными.

Во вложении сам шаблон xLabel и картинки с примером (Сведения о сотрудниках в примере вымышленные, совпадения - случайны).

economist

#1
Спасибо, хороший, читаемый код, простая настройка в виде указания имени зарег. базы. Также отмечу очень правильный посыл на использование TXT с разделителями табуляцией (TSV-файлы). Дело в том что в exUSSR на 86% предприятий используется 1С:Предприятие, а там справочники Сотрудники и Контрагенты (именно в них лежат все контактные данные для договоров, пропусков итп). Так вот эти справочники легко, за секунды, выгружаются в txt-формат с табуляцией. Мои 65000 контрагентов выгружаются за 10 секунд.

Огромный плюс табуляции - то что её случайно не введешь, если где-то и есть лишняя - то это вина не буха, а программистов, написавших кривую загрузку/выгрузку. А ругать настоящих виновных не просто удобно, но еще и полезно.

Вот еще идеи для подобного механизма, все никак руки не дойдут сделать это "для всех", нужна помощь/поддержка коммьюнити. Если мы тут договоримся использовать "терминологию большинства" (т.е. Сотрудники.txt, Контрагенты.txt, KL_TO_1C.txt и, что еще важнее, готовые имена полей из типовых 1С-решений, ставших стандартом де-факто), - то можно до предела автоматизировать составление:

1) Всех видов Договоров (купли-продажи, аренды, подряда, поставки, займа, уступки) в одном(!) ott (с условным текстом, скрытыми разделами, со спецификацией, с выводом задолженности итп)

2) Анкет, Заявлений на отпуск, отгулы, Пропуска (вот JBrown уже сделал)

3) Писем о погашении задолженности, о возврате переплат, о платеже за 3-х лиц, вообще писем с конвертами, описью вложения 

И этот список каждый работающий может дополнить еще 3-4 пунктами.

Насколько это важно и нужно? У меня есть хронометраж за 15 лет на производственном коллективе в 1 тыс. человек по пунктам 1-3. Затраты времени на все вышеназванное составляют в год 10 часов, после автоматизации - 1 час. Итого 9 часов на человека, или 9 * 1000 * 60000 / 164 = 3,3 млн. руб. (60000 - это ФЗП с налогами и взносами, средняя ЗП - 42 тыс. руб.) Данная экономия 3,3 млн. руб. превышает весь IT-бюджет компании и действительно делает "компьютеры окупаемыми".

У себя я добавил в данный функционал "протоколирование печати", т.е. при каждой печати документа - в БД sqlite (ODBC/JDBC/Python - да на чем угодно) по сети LAN кладется запись о нем (что, где, когда, кому, за что и сколько :-). Получается целая многопользовательская EDM-система, которая может выдать отчеты по формированию документов, своды, протоколы, может формировать Платежные ведомости, списки итп.  

Где был бы OpenOffice|LibreOffice, если бы вместо учебной базы Bibliography и шаблонов "открыток" - сделал бы БД, связанную с 1С-файлами и с шаблонами договоров? Он бы был top on the world в мире ПО! И возможно изменил бы его навсегда. В РФ 40 млн. работников, а это экономия ~132 млрд. руб. Маловато, но это "уже лежит на виду". Если копнуть глубже, в бюджетные учр., образование - можно найти триллионы.        

На мой взгляд подобные решения - это самое правильное применение офисного пакета в жизни, с самым большим экономэффектом и пользой людям. Удачи всем идущим по этому пути!
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

JBrown

Поскольку прошло достаточно много времени, решил проверить работоспособность этого дополнения. Оказалось, что оно не может правильно сформировать документ, состоящий из нескольких этикеток (из одной - может, а из большего количества - нет). Сами этикетки присутствуют, но данные в них, за исключением первой, не заполнены. Проблема оказалась в том, что в документе этикетки создаются копированием образца и раньше к имени для уникальности добавлялось просто число. Теперь к имени кроме числа добавляется слово 'Copy' или 'Копия' (в зависимости от языка, используемого в программе LibreOffice). Для восстановления работоспособности xLabel, можно изменить следующее:

IF rowSet.Row = 1 THEN
        currentBookmarkName = "{" & columnNames(i) & "}"
      ELSE
        'currentBookmarkName = "{" & columnNames(i) & "}" & rowSet.Row - 1
        currentBookmarkName = "{" & columnNames(i) & "}" & " Copy " & rowSet.Row - 1
      END IF
      IF bookmarkElements.hasByName(currentBookmarkName) THEN
        currentBookmark = bookmarkElements.getByName(currentBookmarkName)
        value = rowSet.getString(i + 1)

Приведен кусок подпрограммы MakeLabels со строки 624 (примерно). Закомментированная строка - это то, что было. Следующая строка - та, с которой работает на сегодняшний момент (Интерфейс программы должен быть АНГЛИЙСКИМ!). Если у меня интерфейс на кириллице, то мне следует написать не 'Copy', а 'Копия'!

Не знаю, конечно, на сколько обосновано автоматическое именование объектов в зависимости от языка интерфейса и почему потребовалось что-то в этом менять.

Когда это случилось, мне неизвестно, поскольку дополнением пользуюсь нечасто.