Как сохранить штрих код из 1с в pdf
Рассмотрим подключение подсистемы штрихкодирования документов на примере подключения такого механизма в конфигурации 1С 8.2 и 8.3 Управление торговлей.
Зачем нужно штрихкодирование документов в 1С?
Штрихкодирование документов может понадобиться для наведения порядка в бумажном документообороте — любому бумажному документу за считанные секунды можно найти электронный аналог в системе. Например, очень удобно, когда клиенты приходят в офис с уже распечатанным заказом, в котором есть штрих-код, — в этом случае обслуживание клиента занимает существенно меньше времени.
Настройка штрихкодирования документов 1С
Первый шаг к настройке штрихкодирования — создание штрих-кода, хранение его в базе данных и распечатка на бумажном носителе.
Генерация штрих-кода и сохранение его в 1С
Для хранения штрих-кода создадим у документа новый реквизит — назовём его «штрихкод».
С генерацией нового штрих-кода немного труднее. Необходимо воспользоваться процедурой РаботаСТорговымОборудованием.СформироватьШтрихКод() из конфигурации управление торговлей и сформировать его перед записью нового документа:
Распечатка штрих-кода на печатной форме описана в отдельной статье — вывод на печатную форму штрих-кода.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
С установкой, хранением и распечаткой документов мы разобрались. Перейдем к другому этапу — поиск документов по штрих-коду.
Настройка поиска документа в 1С по штрих-коду
Рассмотрим поиск документа по штрих-коду из формы списка документа «Заказ покупателю».
Первым делом необходимо скопировать из других форм (например, форма списка номенклатуры), отвечающих за работу с внешним оборудованием — сканером штрих-кода. Вот процедуры, которые необходимо поместить в форму списка:
Обратите внимание на процедуру СШКНеизвестныйКод, если стандартные механизмы не смогли найти номенклатуру, они вернут нас в функцию «СШКНеизвестныйКод», где мы его и обработаем.
Опишем процедуру НайтиЗаказПоШтрихкоду, с помощью которой мы найдем нужный документ по штрих-коду и откроем его форму:
При выполнении данной процедуры будет происходить поиск нужного заказа по штрих-коду. Если заказ найден по штрих-коду, то система откроет заказ, не найден — сообщит об этом.
"Мы словно живём в комнате, где на стене висит плакат. Уставимся на него и думаем, что это и есть весь мир. Комната. И плакат. На плакате что-то симпатичное: пейзаж, знаменитость. Как в том фильме про тюрьму. Как же он назывался? Комната — тюремная камера. А картинку каждый из нас видит по-своему. Она может быть прекрасной или ужасающей, но все мы к ней прикованы. Но это всё неправда: лишь ширма, скрывающая истину. Они нам врут. Мы врём самим себе. Комната — не весь мир. Мир намного больше, намного удивительнее. Плакат на стене скрывает лаз, ведущий в реальный мир. Мы ощущаем себя в безопасности в той комнате. Но иногда. Иногда нечто выползает из-за плаката. И каждый, кто становится тому свидетелем, в страхе пытается забыть о том, что видел."
- Джесси Фейден, Control
Итак, одеваем свой фурсьюит и ставим задачу:
Есть база 1С, в которой есть документы, к которым привязаны штрихкоды. Для простоты возьмём EAN13, но вообще более перспективными выглядят QR.
Штрихкоды печатаются в печатных формах, а еще есть возможность печатать их на этикетках и лепить на готовые бумажные документы.
Обе эти задачи решаются тривиально, например, с помощью специального шрифта для печати EAN13 и дополнительного реквизита.
Но теперь, после того, как эти распечатанные документы подписали, мы хотим их засунуть обратно в 1С. Для хранения файлов в БСП есть готовые средства, соответственно, они присутствуют во всех типовых конфигурациях.
Прикрепление небольшого количества файлов не вызывает затруднений - мы можем сканировать и добавлять их вручную. Однако, не будем забывать о том, что уже изобрели пакетное сканирование.
Будем считать, что пользователь кладет в сканер сразу все листы, относящиеся к одному документу. Например, это может быть счет на трёх страницах, коммерческое предложение и прайс. Условимся, что весь этот пакет будет отсканирован в один PDF-документ (для удобства дальнейшего использования).
Теперь у нас получилась папка с pdf-файлами, в которых содержатся сканы документов со штрихкодами. Нужно распознать штрихкоды и привязать их к документам. Естественно, часть про привязать находится на стороне 1С, но что с распознаванием?
Варианты примерно следующие:
Собственно, третьим вариантом и попробуем воспользоваться. А так как сейчас довольно популярен Python, и я про него практически ничего не знаю, то я попробовал решить эту задачу с его помощью.
Архитектура будет такая:
в одной локальной сети стоит три машины:
- 1C (сервер или клиент - в данном случае не важно)
- Веб-сервер на питоне
- Обычная сетевая папка, пусть будет Windows
Что понадобится для реализации?
Очевидные варианты IDE - Microsoft Visual Studio Code, она у меня как раз есть, и PyCharm. Мне нравится IDEA, решил попробовать PyCharm.
Следующие три компонента устанавливаются с помощью пакетного менеджера:
pip install flask
pip install pyzbar
pip install pdf2image
К сожалению, так как на самом Питоне написано ничего, то для работы нужно установить некоторые компоненты. В нашем случае пришлось установить @app.route ( "/decode_ean13//" , methods =[ "GET" ])
Теперь осталось сохранить указанную страницу файла, путь к которому получили, и распознать с неё штрихкод EAN13.
За сохранение страницы как раз отвечает pdf2image, и делает это с помощью единственного вызова:
Здесь pages - список полученных страниц. Так как мы получаем только одну страницу, то она у нас будет pages[0].
За распознавание штрихкода отвечает pyzbar:
Здесь я сразу ограничиваю виды штрихкодов, которые нужно распознавать - думаю, так будет работать быстрее. Кроме того, я так снижаю вероятность распознавания чужих штрихкодов - ведь, например, на документе поставщика может быть штрихкод поставщика и наш. Конечно, они оба могут быть EAN13, но какую-то часть ошибок я отсеку.
Как выяснилось, decode в качестве параметра принимает объект типа Image, и convert_from_path возвращает объект типа Image, но это разные Image :(
В общем, пока для простоты я полученную страницу сохраняю в PNG-файл, и тут же загружаю его обратно и распознаю штрихкод. В результате распознавания возвращается список со всеми штрихкодами, которые удалось распознать, и это очень полезно - помним про штрихкоды поставщика? Эти штрикоды в виде JSON я и возвращаю в ответ.
В процессе выяснилась странная особенность то ли Flask, то ли не знаю чего: нельзя передать слэш (разделитель пути) даже в виде url-кода %2F. Поэтому я его заменил на |:
Вот пример изображения:
В принципе, для случая с сетевой папкой, которая доступна для обеих машин, всё уже работает - осталось научиться сохранять картинку во временный файл, а не в папку с исходным PDF (она по идее не должна быть доступна на запись).
Для случая, когда папка недоступна, нужны доработки: 1С будет отправлять двоичные данные, а сервер на Питоне будет распознавать штрихкод из них. Для этого в pdf2image уже есть convert_from_bytes, и еще нужно выяснить, как объект-изображение из pdf2image преобразовать в изображение pyzbar. Заглушки в коде я уже поставил ;)
Конфигурация содержит 1 регистр сведений и 1 серверный модуль. Т.к. алгоритм использует в системе Бизнес событий (автоматически по регламентному заданию), понадобился регистр, чтобы исключить множественную вставку. Работает через ImageMagick.
1. Срабатывает обработчик бизнес события (изменение внутренего документа)
2. Проверяется, что есть файл pdf и не был еще добавлен штрихкод
3. Вставляется штрихкод
4. Формируется новая версия, т.е. при желании можно откатиться на предыдущую
Штрихкод вставляется в левый нижний угол. Выполняется все на сервере, но может работать и на клиенте. При сравнении отметить по подсистеме.
Специальные предложения
Добрый день, поясните пожалуйста механизм работы данного механизма, так как при запуске на нашей базе он не работает
хотелось бы еще и регистрационный штамп печатать с № и датой. а также видел в DocsVision штрих код наносится слева на полях. и вертикально. что очень удобно т.к. это место всегда не занято текстом
Добрый день, поставил прогу ImageMagick , увеличил время "ОжиданиеФайлаВСекундах" но ничего не происходит файлы так и не создаются.
(8)19.04.2019 10:15:44: ПутьКПрограммеКонвертации C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:15:44: Команда конвертации "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:15:45: Код возврата "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:15:45: ПутьКПрограммеКомпоновки C:\Program Files\ImageMagick-7.0.6-Q16\composite.exe
19.04.2019 10:15:45: КомандаУвеличенияШтрихКода "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 -resize 150% "C:\Users\User\Documents\Настраиваемые шаблоны Office\321.jpg" "C:\Users\User\AppData\Local\Temp\321.jpg"
19.04.2019 10:15:45: Штриход увеличен C:\Users\User\AppData\Local\Temp\\321.jpg
19.04.2019 10:16:01: ПутьКПрограммеКонвертации C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:16:01: Команда конвертации "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:16:01: Код возврата "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:16:01: ПутьКПрограммеКомпоновки C:\Program Files\ImageMagick-7.0.6-Q16\composite.exe
19.04.2019 10:16:01: КомандаУвеличенияШтрихКода "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 -resize 150% "C:\Users\User\Documents\Настраиваемые шаблоны Office\321.jpg" "C:\Users\User\AppData\Local\Temp\321.jpg"
19.04.2019 10:16:01: Штриход увеличен C:\Users\User\AppData\Local\Temp\\321.jpg
19.04.2019 10:16:34: ПутьКПрограммеКонвертации C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:16:34: Команда конвертации "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:16:34: Код возврата "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:17:11: ПутьКПрограммеКомпоновки C:\Program Files\ImageMagick-7.0.6-Q16\composite.exe
19.04.2019 10:17:11: КомандаУвеличенияШтрихКода "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 -resize 150% "C:\Users\User\Documents\Настраиваемые шаблоны Office\321.jpg" "C:\Users\User\AppData\Local\Temp\321.jpg"
19.04.2019 10:17:11: Штриход увеличен C:\Users\User\AppData\Local\Temp\\321.jpg
19.04.2019 10:29:56: ПутьКПрограммеКонвертации C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:29:56: Команда конвертации "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:29:56: Код возврата "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "C:\Users\User\AppData\Local\Temp\463-order.jpg"
19.04.2019 10:33:31: ПутьКПрограммеКонвертации C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:33:31: Команда конвертации "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:33:31: Код возврата "C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:37:00: ПутьКПрограммеКонвертации D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:37:00: Команда конвертации "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:37:00: Код возврата "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:40:04: ПутьКПрограммеКонвертации D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:40:04: Команда конвертации "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:40:04: Код возврата "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:45:19: ПутьКПрограммеКонвертации D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:46:40: Команда конвертации "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:46:41: Код возврата "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
19.04.2019 10:48:59: ПутьКПрограммеКонвертации D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe
19.04.2019 10:48:59: Команда конвертации "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\epicentr_1.jpg" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\epicentr_1.jpg"
19.04.2019 10:48:59: Код возврата "D:\1C\1C_Base\ПДФ и Штрихкод\ImageMagick-7.0.6-Q16\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\epicentr_1.jpg" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\epicentr_1.jpg"
"C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg" попробуйте в консоле просто запустить такую команду. или сделать bat файл с таким текстом. Возможно программа что-то говорит.
"C:\Program Files\ImageMagick-7.0.6-Q16\convert.exe" -density 200 -quality 100 "D:\1C\1C_Base\ПДФ и Штрихкод\463-order.pdf" "D:\1C\1C_Base\ПДФ и Штрихкод\Файлы\463-order.jpg"
pause
(10) выполнил в командной строке
convert.exe: RegistryKeyLookupFailed `CoderModulesPath' @ error/module.c/GetMagickModulePath/657.
convert.exe: no decode delegate for this image format `PDF' @ error/constitute.c/ReadImage/509.
convert.exe: no images defined `D:\Foto\F\activate_final1.jpg' @ error/convert.c/ConvertImageCommand/3275.
Все платформы 1С, начиная с версии 8.2, а следовательно 8.3 и 8.4 могут сохранять табличные документы, печатные формы и отчеты в формате PDF, причем для этого не нужно устанавливать другие программы. Как сохранить из 1С 8.2 в PDF Для этого нужно подготовить документ к печати и перейти в меню “Файл – Сохранить как…” и в […]
Все платформы 1С, начиная с версии 8.2, а следовательно 8.3 и 8.4 могут сохранять табличные документы, печатные формы и отчеты в формате PDF, причем для этого не нужно устанавливать другие программы.
Как сохранить из 1С 8.2 в PDF
Для этого нужно подготовить документ к печати и перейти в меню “Файл – Сохранить как…” и в поле “Тип файла” выберите Документ PDF (*.pdf). Для примера сохраним в программе 1С Управление торговлей, редакция 10.3 печатную форму “Приходный кассовый ордер (ПКО)”:
Как сохранить документ из 1С 8.3 в файл PDF
В платформе 8.3 сохранение происходит аналогично, только здесь меню “Файл – Сохранить как…” находится под кнопочкой со стрелкой внизи в поле “Тип файла” выберите Документ PDF (*.pdf). Дальше, аналогично – в поле “Тип файла” выбрать “Документ PDF.
Если пункт меню “Сохранить как…” недоступен в 1С, то сначала нажмите левой кнопкой мыши в любом месте документа, который хотите сохранить и после этого пункт меню должен стать доступным:
Куда пропало меню “Сохранить” в 1С 8.3.15
После обновления платформы на версию 8.3.15 изменилось расположение пунктов “Сохранить как…”, теперь для его вызова нужно нажать на кнопку с тремя вертикальными точками, в правом верхнем углу формы:
Как программно сохранить табличный документ в PDF?
Часто программистам нужно программно сохранить табличный документ 1С в формате PDF. Для этого нужно использовать метод Записать() и в качестве второго параметра указать ТипФайлаТабличногоДокумента.PDF
Оптимальным решением является установка Bullzip PDF Printer . После установки в системе появляется виртуальный принтер, с помощью которого можно "печатать" в файл pdf из любого приложения. Программа бесплатная, работает в терминале и имеет поддержку русского языка.
После установки, можно печатать напрямую используя код:
Код 1C v 8.х
Здесь функция ПолучитьПринтерПоУмолчанию() нужна для того чтобы вернуть печатной форме принтер по умолчанию, т.к. если напечатать без предварительного просмотра то печать пойдет на виртуальный PDF принтер BullzipPDFPrinter.
Код 1C v 8.х
Печать в PDF используя bioPDF
Похожие FAQ
Вывести табличный документ в PDF 18
Данный пример работает на платформе выше 8.2.13 Макет = ПолучитьМакет(" Макет" ); ОбластьШапка = Макет.ПолучитьОбласть(" Шапка" ); ТабДок = Новый ТабличныйДокумент; ОбластьШапка.Параметры.НомерДок = Номер; ОбластьШапка.Параметры.ДатаДок = Выгрузка в PDF из 1С (Средствами OpenOffice) 0
Возникла задача отправлять счета почтой. PDFcreator не подошел поскольку не удалось вместить счет на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашел быстро, а вот как уместить счет на одну страницу вширь искал долго. Горячие клавиши 1С Пользователю [ Предприятие] 5
Основные команды: Интерфейс: F6 - переключение между формами рабочего стола F10 - переход в главное меню окна Alt+1 - переход на панель Разделов Alt+2 - переход на панель Навигации Alt+3 - переход на панель Действий Alt+9 - переход Горячие клавиши 1С Разработчику [ Конфигуратор ] 128
Основные команды: Кодирование: Ctrl+Пробел - вызов подсказки Ctrl+Q - вызов шаблона Ctrl+F1 - поиск в синтакс-помощнике Ctrl + L - удалить текущую строку Alt+Shift+F - отформатировать код Исследование: F12 - ставим курсор на про Добавление поддержки нестандартного штрих-кода в обработке ПечатьЭтикеток 1
Обработка ПечатьЭтикеток использует компоненту " 1С:Печать штрихкодов" (доступную на диске ИТС) для печати штрих-кодов(далее ШК). Эта компонента поддерживает следующие типы штрих-кодов: EAN8, EAN13, EAN128, Code39, Code128. Что делать если на пред Посмотреть все результаты поиска похожих
Еще в этой же категории
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
Большое спасибо за инструкцию! Но в новой версии BullZip видимо что-то поменялось. Сначала у меня не создавалось Com соединение, а потом не записывались параметры. Даже на оф. сайте ничего не было, нашел случайно, в описаниях классов.
Для создания Com: ПДФПринтер = Новый COMОбъект("Bullzip.PDFSettings");
Для записи параметров: ПДФПринтер.WriteSettings(Истина);
Параметры принтера, как писали до меня, можно увидеть в файле ini, который можно сохранить из окошка настройки параметров. Настройки открываются запуском gui.exe из папки с установленной программой.
Читайте также: