Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

6 Апрель 2020, 14:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Печать копий документа с инкрементным счетчиком внутри  (Прочитано 710 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Lesovik
Новичок
*
Offline Offline

Сообщений: 4


« Стартовое сообщение: 22 Февраль 2020, 00:12 »

Привет всем.
Помогите решить задачу, пожалуйста.
Есть многостраничный документ (паспорт продукции) в формате *.doc (MS Ofiice 97-2003), в одной одном конкретном месте (страница/строка/сдвиг) которого необходимо указывать серийный номер (SN) продукции из заданного диапазона.
В качестве офисного пакета используется LibreOffice (Writer).
Нужно, чтобы при печати n-копий этого документа, в каждой его копии в конкретном месте печатался уникальный серийный номер, последовательно перебирая этот диапазон.
Соответственно, кол-во копий, отправляемых на печать совпадает с кол-вом серийных номеров и задается в диалоге печати принтера.
В идеале, диапазон серийных номеров нужно как-то/где-то задать - внутри этого документа (например, по клику на поле, в котором д.б. SN), или каком-то внешнем файле - например в *.txt или *.xls,
в формате, условно: 600000:600020, 600025, 600030:600100
- т.е. внутри диапазона (600000:600100) могут быть пропуски. Или просто диапазон, если первое сильно сложнее.
Или печатать n-копий начиная с заданного номера.
Подскажите, как прикрутить такой счетчик?
Есть ощущение, что это типовая задача и должно быть готовое решение. Но в меню (Поле/Переменные, Поле/Формула и т.д.) я ничего не нарыл (или не понял, как пользоваться), а с макросами я никогда не работал..
Или м.б. это проще делается каким-то другим инструментом?..
« Последнее редактирование: 22 Февраль 2020, 00:36 от Lesovik » Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 877


« Ответ #1: 22 Февраль 2020, 10:28 »

Посмотрите в сторону рассылка писем
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 169


« Ответ #2: 22 Февраль 2020, 15:29 »

Про рассылку:  

1) создаете файл *.xls/*.ods "с номерами" в столбик (со 2-й строки, первая - заголовки), а в строке правее - связанные с ними даты, email покупателей, ФИО контролеров ОТК итп. Именуете полученный диапазон в левом верхнем углу Calc.

2) создаете и сохраняете Базу данных LO Base (*.odb) в режиме подключения к вашему *.xls/*.ods. Вы увидите в ней "таблицу" - тот сам диапазон

3) открываете ваш *.doc и жмете Ctrl+Shift+F4 - вверху экрана вы видите свою "таблицу" - тот сам диапазон. Теперь в перетаскиваете в документ заголовки столбцов "таблицы", они превращаются в серые <поля>. Выделив в таблице любую строку - можно нажать кнопку Данные в поля и увидеть готовый док.

4) вверху экрана появилась строка с кнопками той самой "Рассылки писем". Она перебирает ВСЮ таблицу и подставляет номера из таблицы - в документ DOC. Полученные "письма" можно автосохранить в один/несколько DOC/ODT/PDF-файлов, автоотправить их, каждому покупателю по email (если он был в xls)

5) текст DOC-шаблона может самопереверстываться, т.е. скрывать показывать слова, абзацы и разделы в зависимости от того, что написано в xls.

6) Рассылка работает по всей таблице, а если нужна не вся, а только с-по и по такой-то номенклатуре - то, о чудо, идете в ODB b пишете/конструируете SQL-запрос и далее пп 3-4.
  
Но если вам нужен просто "нумератор" печатных копий, то задача описана неполно, и непонятно почему могут быть пропуски - они исключают привязку к принтеру. Делать из принтера Журнал регистрации - очень плохая идея.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Lesovik
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #3: 22 Февраль 2020, 19:30 »

Bigor, economist - спасибо! )
economist - отдельное большое спасибо!, за детальное руководство.
Я к тому времени, спустя часа 4 экспериментов, уже добрался до вставки "серого поля", но посредством "Рассылки писем", без Ctrl+Shift+F4
И было не очевидно, что кроме таблицы нужна и база данных, через которую эта таблица подключается.
Да и вообще, что нужна обязательно таблица - стало очевидно не сразу.. )
И счетчик работать отказывался..
Твой пост помог снять ряд вопросов и понять общую структуру механизма.

Есть еще пару вопросов:

1. Можно ли в файле базы данных (ODB) подключить несколько таблиц?

Как бы формулировка "ТаблицЫ"  подразумевает, что там можно больше одной таблицы подключать, но как - я не понял.
Если только несколько файлов ODB добавлять, но это как-то не красиво..

2.
Цитата:
Выделив в таблице любую строку - можно нажать кнопку Данные в поля и увидеть готовый док.
У меня эта кнопка не активируется. Есть ли идеи - почему?
---
Цитата:
Но если вам нужен просто "нумератор" печатных копий, то задача описана неполно, и непонятно почему могут быть пропуски - они исключают привязку к принтеру. Делать из принтера Журнал регистрации - очень плохая идея.
Для решения этой задачи - этого достаточно, нужен просто нумератор.
Про пропуски - имелось ввиду, что пропуски не в таблице (не пустые ячейки), а в номерах, т.е.:
не обязательно подряд 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
а, например:  1, 2, 3, 5, 7, 8, 9, 10 (без 4 и 6)
Какие-то товары не проходят ОТК и возвращаются она производство, но к этому времени им уже присвоены серийные номера (зашиты в прошивку, приклеены наклейки).
На момент формулирования задачи я не отчетливо представлял, в каком типе файла и с каким форматированием будет указываться перечень номеров,  в моих фантазиях это могло, например, быть и в строку как в табличных формулах :
1:3, 5, 7:10
« Последнее редактирование: 22 Февраль 2020, 19:36 от Lesovik » Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 169


« Ответ #4: 24 Февраль 2020, 14:53 »

1) Можно ли в файле базы данных (ODB) подключить несколько таблиц?
ODB, подключенный к одному ODS-файлу - покажет все таблицы в нем (все именованные диапазоны Calc и все листы).
ODB, подключенный к папке с TXT-файлами - покажет все таблицы из всех TXT-файлов.
Но по неск. таблицам нельзя сделать одно слияние. Но несколько таблиц можно объединить Запросом в одну таблицу, простым SQL-запросом и делать слияние уже по нему:
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2
Такой запрос можно превратить в Представление (View) - вирутальную таблицу, что м.б. удобнее.

2) Кнопка Данные в поля - д.б. доступна всегда, попробуйте все сохранить и вытащить поле в чистый DOC/ODT-файл. Был какой-то промежуточный релиз LO в котором кнопка не работала, но его быстро исправили. Обновите LO.

Кстати, оч. удобно иметь "план Б" в виде стабильного экз portable-LO с офсайта: https://www.libreoffice.org/download/portable-versions/  Он хорош тем что не требует прав админа, не мешает основному LO, не лезет в профиль пользователя, не ругается с системными папками где лютует UAC. Даже Java есть jPortable для такого LO (Java нужна для всяких интерактивных конструкторов таблиц/запросов итп).

3) с т. зр. целостности - номера нежелательно задавать через дефис, лучше пусть будет так: сколько строк - столько и сертификатов. Пропуски не имеют значения. Если будет строка без номера - при слиянии она выведется без номера.  
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 756


« Ответ #5: 24 Февраль 2020, 14:58 »

Если в системе предусмотрено ведение базы, в которой указывается серийник, дата и состояние (скажем, "отбракован"), то можно просто использовать в рассылке фильтр (типа "дата после [предыдущей даты рассылки] и не отбракован").
Записан

С уважением,
Михаил Каганский
Lesovik
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #6: 24 Февраль 2020, 16:18 »

economist, эм, у меня "таблица" - синоним файлу.. Каюсь )
Поэтому переспрошу -
1. а можно ли к одному ODB подключить более одного ODS/XLS файла?
2.
Цитата:
ODB, подключенный к папке с TXT-файлами - покажет все таблицы из всех TXT-файлов.
Т.е. TXT-файл таки можно к ODB подключать? С каким синтаксисом? Серийники в столбец?
ODB как-то же должен догадываться, как интерпретировать *.txt-файл, в смысле признака последовательного перечисления или указания диапазона?
Версия LO распоследняя, скачивал и устанавливал с оф.сайта позавчера.. Еще поэкспериментирую, в т.ч. с portable-версией, да..
От SQL я сейчас очень далёк, но концептуально, кажется, понимаю, о чём Вы. Будет потребность - буду курить, всему свое время )

mikekaganski, серийники ведутся в 1С. Сейчас идея не актуальна, но м.б. и пригодится когда-нить, спасибо )
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 756


« Ответ #7: 24 Февраль 2020, 16:25 »

mikekaganski, серийники ведутся в 1С. Сейчас идея не актуальна, но м.б. и пригодится когда-нить, спасибо )

1С - это не проблема сама по себе. В 1С такие данные разве нельзя вести? И выгружать в CSV, подключаемый к ЛО.
Записан

С уважением,
Михаил Каганский
Lesovik
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #8: 24 Февраль 2020, 17:29 »

mikekaganski.
в целом - так и планирую, да.
В реализацию будут заноситься серийники, путем считывания штрихкодов с наклеек на приборах.
Из реализации - выгружать в табличный файл. Оттуда копипастить в табличный файл, подключенный к ODB.
Хотя можно даже не выгружать, а копипастить из предпечатного предпросмотра 1С.
Почему не выгружать напрямую в файл, подключенный к ODB?
Потому что у шаблона выгрузки серийников сложная "шапка", и сейчас я не представляю, как настроить так, чтобы игнорировалось всё лишнее:

Т.е., видимо, как-то можно фильтрами настроить, но как именно - я сейчас не представляю.. )
« Последнее редактирование: 24 Февраль 2020, 17:32 от Lesovik » Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 169


« Ответ #9: 24 Февраль 2020, 17:39 »

К одному ODB несколько XLS/ODS - нельзя. А вот несколько TXT - в одном ODB увидеть можно (Соединиться - Текст - Путь - Выбор папки). Каждая строка в TXT становится строкой таблицы в ODB. Чтобы неск/ TXT соединить в одну вирт. таблицу для рассылки - см. ответ #4, правда там фигурируют конкретные имена таблиц (они же имена файлов). Если их очень много и они произвольные, скажем датавремя.txt - то можно написать простой BAT-файл для их объединения. Серийник может быть в любом столбце, и он м.б. единственным содержимым TXT-файла (хотя я писал про исполнителей итп полезную инфу).

1С 7/8 сохраняет все табличные документы в файл с разделителем полей/колонок -  {Tab} (табуляция), его и укажите в Мастере баз данных.

Но TXT-файлы в папке д.б. все с одинаковым разделителем и в одинаковой кодировке! Если они разные (например они из разных программ) - то или конвертировать, или использовать более мощный коннектор к TXT-файлам, который есть в любой Windows  - MS ISAM/JET/ADO (прямой и через ODBC). Он позволяет задать произвольную спецификацию каждого TXT-файла в файле schema.ini, записывать данные в файлы и многое другое. Похожие возможности есть еще в 2-х способах (HSQLDB, FireBird), но они посложнее.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
economist
Форумчанин
***
Offline Offline

Сообщений: 1 169


« Ответ #10: 24 Февраль 2020, 17:48 »

у шаблона выгрузки серийников сложная "шапка", и сейчас я не представляю, как настроить так, чтобы игнорировалось всё лишнее
- не парьтесь, пусть всё загружается с мусорными строками <Продавец>, <Покупатель> итп - их в рассылке можно игнорировать, если сделать Представление таблицы (однострочным SQL-запросом). 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!