<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
При формировании штрих кода по дате и номеру нужно учитывать, что если после распечатки документа будет изменен его дата или номер, то вы его не найдете. Поэтому для этих целей лучше использовать УникальныйИдентификатор.
При формировании штрих кода по дате и номеру нужно учитывать, что если после распечатки документа будет изменен его дата или номер, то вы его не найдете. Поэтому для этих целей лучше использовать УникальныйИдентификатор.
Изменение даты в пределах переодичности нумератора документа (чаще всего это год) на поиск не влияют. Измение номера явление достаточно редкое. А уникальный идентификатор слишком большой.
EAN128 допускает наличие в штрих-коде символов кириллицы?
(3) Нет
Лично я юзаю штрихкод «УникальныйИД + сумма документа» для контроля печатной формы, чтобы сразу исключить поддельные печатные формы.
(6) Хочу напомнить, что хотя в EAN128 длина штрихкода не ограниченна, остается еще и задача размещения штрихкода на печатных формах. И здесь чем он короче, тем это проще.
У Вас наверное только одна организация? Ибо может оказаться, а окажется обязательно, что существуют в одном году несколько документов одного типа, с одним номером, точнее с одной цифровой частью. Либо у Вас префикс номеров — латиница! Но об этом ограничении у Вас нигде не сказано.
Мне пришлось реализовывать механизм транслитерации для обхода этого ограничения.
ЗЫ Вроде у 1С есть стандартная компонента «1С:Печать штрихкодов», зачем такие сложности с подключением? … или в 8.2 все иначе 😳
Из каких именно типовых конфигураций можно взять макеты КомпонентаПечатиШтрихкодов…? В УТ 11 — нет, в УПП 1.3 — нет, думал в библиотеке стандарных подсистем должны быть — тоже нет.
Можно взять на диске ИТС, на сайте 1С… Могу выслать на мыло.
Файл называется «1CBarCode.exe»
Нашел макеты не в общих макетах, а в макетах обработки печати ценников и этикеток;
(11) — для 8.2 не покатит по-моему для тонкого и веб клиента
(9)(11)(12) Откройте конфигурацию «управление небольшой фирмой». Сделайте глобальный поиск «КомпонентаПечатиШтрихкодовWindows32» только по свойствам. Скопируйте через буфер обмена готовый макет (сначала встав на него в дереве конфигурации) и вставьте его в ветку «общие макеты» в своей конфигурации. Аналогично остальные макеты.
Я делал двумя путями.
Первый — перекодирование в бинарный формат уникального идентификатора, иначе картинка штрих-кода слишком длинная.
Второй — специальная перекодировочная табличка (регистр сведений) — объект->код.
Печать в обоих случаях без каких либо компонент шрифтом BarCode.
Естественно, макеты нужно менять. Но у меня не стандартная конфигурация, посему это не вызвало проблем.
(0)>3. Модифицируем печатные формы документов следующим образом: Добавим на печатные формы требуемых документов изображение штрихкода как на рисунке с примером макета.
Где взять изображение штрихкода ?
(8) SergeyT2006, компонента 1С:Печать штрихкодов не работает в Тонком клиенте
Помогите разобраться, кусок этого модуля скопировал 1:1. Только, есть одно отличие, модуль находится во внешней обработке.
{ВнешняяОбработка.ххх.МодульОбъекта(296)}: Поле объекта недоступно для записи (Картинка)
Рисунок.Картинка = Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);
Скрин из отладчика:
(19) Почему Объект — ActiveX? Объект должен же быть просто картинкой.
(20)
Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода); — тут возвращается картинка, вот кусок модуля «ПолучитьКартинкуШтрихкода»:
Показать
вот из отладчика
все хорошо, но почему «Рисунок.Картинка » — не доступен для записи?
(21) Внимательно посмотри тип объекта в шаблоне печатной форме. В режиме управляемых форм activex объекты не используются. Удали объект из шаблона и вставь, как в стандартной конфигурации, просто рисунок. Картинка этого рисунка и создается в Рисунок.Картинка = Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);
(22)
Спасибо большое, я уже отчаялся, подставил обычную картинку, все заработало.
Рисунок.Картинка = ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, 361, 50, ЗначениеШтрихкода, 3);
Последний параметр тип штрихкода. 3 это тип Code39.
А вазможно ли эту доработку реализовать в конфигурации УТ 10.3…
(25). Да.
при печати документа штрихкод есть, а на предварительном просмотре нет
в чем может быть проблема
Конф УТ 10.3 Подскажите пожалуйста не сориентируюсь, как добавить в Общий журнал документов, обработку внешнего события, что-бы начать обрабатывать сигнал от сканера для поиска документа?
(28) Arutunov, Скопируйте соответствующий код из любого документа или справочника. Например справочник номенклатура.
(29)Я правильно понимаю, нужно скопировать процедуру
Процедура ВнешнееСобытие(Источник, Событие, Данные)
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, );
КонецПроцедуры // ВнешнееСобытие()
Или ещё что-то? И вставить в модуль формы Документа контрагентов или куда?
(29) Внешнее событие по какойто причине не срабатывает у журнала документов.
К форме привязано, в любых формах кроме журналов срабатывает.
Не подскажите как отловить событие именно в журнале?
(31)Я тоже про это говорю.
(31)(32) Вы не правы, посмотрите формы списка номенклатуры например. Если будет время посмотрю, но сегодня не успеваю.
(33) Я ничего не утверждаю, посему не могу быть неправым. В моем посте содержится вопрос.
По поводу формы списка номенклатуры могу сказать, что наш с товарищем Арутюновым вопрос касается другого объекта конфигурации.
Форма списка номенклатуры относится к справочнику, а мы спрашиваем вас про журнал. Вобщем пока никаие источники информации не позволяют однозначно судить о возможности привязки внешнего события к журналу документов
(34)ratinc это мы с тобой тормозим, а не программа. Просто в свойствах формы журнала документов нужно прописать процедуру Внешнее событие и процедуру при открытии, и все пойдет.
(35) Я конечно понимаю, что как всегда проблема в какой нибудь галочке.
Но у меня в данный момент воз и не сдвинулся.
Событие формы «Внешнее событие» привязано к одноименной процедуре. А что такого вы добавили в событие «При открытии»?
В Процедуру ПриОткрытии надо всего навсего добавить ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
А еще нужно добавить в модуль формы Функцию:
Функция ПоддерживаетсяВидТО(Вид) Экспорт
Результат = Ложь;
Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции // ПоддерживаетсяВидТО()
(38) Спасибо за совет.
Реально не хватало
Я ще вставлю свои пять копеек. Не заморачивайтесь с вариантом создания ШК с кодированием номеров документов. Используйте сразу GUID объекта. Шансов нарваться на кирилический символ в коде объекта очень много. Оно вам надо?
Если вы сильно ограничены областью в которую необходимо выводить ШК, и 36 символов у вас не влезают, то лучше вынести в константы или регистр сведений ту часть гуида, которая повторяется в объектах принадлежащих к одному типу данных. Нужно только помнить, что если вы пересоздадите базу, эти значения изменятся.
Спасибо за код. все получилось! Вставляла в БП 2.0
Правда, не понятно, почему, но для толстого клиента функции работают из общего модуля (добавила в РаботаСТорговымОборудованием), а для тонкого клиента почему-то они не видны — Предприятие даже не загружается — сразу выдает ошибку. Пришлось их вставить в модуль менеджера документа, откуда идет печать.
Может я чего-то недопонимаю?
А мы штрихкод документа храним в доп. свойствах. Компонента печати лежит на сервере. Картинка штрихкода вместе с рисунком вставляется на макет печатной формы. Весь код, приведенный автором — просто встраивается в печатную форму. То есть никаких доработок конфигурации не требуется.
А вот как штрихкод попадает в доп. свойства документа и откуда он берется — об этом я, возможно тоже напишу статью.
Как данный код подстроить под Code39? Как данный код Code39 уменьшить в длинну?
Спасибо за статью, очень много интересного узнала.
Подскажите, пожалуйста, при попытке печати внешней печ. формы со штрих-кодом в управляемых формах, получаю ошибку «Значение не является значением объектного типа (Сообщение)» из строки
В обычном приложении печ.форма формируется правильно(в об.приложении ОбластьМакета.Рисунки.ШтрихКод.Объект=ActiveX, а в управл.приложении ОбластьМакета.Рисунки.ШтрихКод.Объект=Null). Подскажите,в чем может быть проблема? Заранее спасибо
решение рабочее, но для более «мудреного» использования штрих-кодирования предлагаю попробовать наш модульhttp://infostart.ru/public/527954/
встраивание штрих-кодов идёт не через стандартный функционал, а через более функциональную библиотеку.
ВнешняяКомпонента = ИМЯОБЩЕГОМОДУЛЯ.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
Перед выводом макета области со штрихкодом:
ИМЯОБЩЕГОМОДУЛЯ.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,»PER»+СтрЗаменить(Формат(Шапка.Дата,»ДФ=dd.MM.yy»),».»,»»)+Шапка.Номер);
Куда это вставлять можно более детально?
{Документ.РеализацияТоваровУслуг(43,38)}: Неопознанный оператор
ПередВыводомМакетаОбластиСоШтрихкодом<<?>>: (Проверка: Толстый клиент (обычное приложение))
Дает что неопознанный оператор
{Документ.РеализацияТоваровУслуг(43,8)}: Неопознанный оператор
Перед <<?>>Выводом Макета Области Со Штрихкодом: (Проверка: Толстый клиент (обычное приложение))
Точнее так!
Здравствуйте!
Пробую сделать как в статье, но в печатной форме выводится как на скрине.
В переменную «ЗначениеШтрихкода» я передаю строку ГУИДа документа.
На макете картинка как у вас. Код не трогал.
Что я делаю не так?
UPD
Изменил ТипКода на 4 (тип кода — CODE128), выводится ШК
(50) На картинке написано — неправильный штрихкод. Текущий формат штрихкода не может закодировать такую длинную последовательность.
(51) сменил тип и вывелось.
Еще вопрос, чтобы выводился текст под ШК, нужно проставить
?
(52) ОтображатьТекст (TextVisible) Булево + + Свойство указывает необходимость отображать текст штрихкода на его поверхности. Актуально только для тех типов штрихкодов, которые предусматривают вывод данной строки
(53)Понял, спасибо.
я так понимаю EAN8,EAN13,EAN128 могут это?
(8) компонента «1С:Печать штрихкодов» не работает для 64-разрядных и Линукс
Типов печати штрихкодов много:
// Параметры:
// ТипКода число от 0 до 16
// EAN8, EAN13, EAN128, Code39, Code128, Code16k, PDF417, Standart (Industrial) 2 of 5, Interleaved 2 of 5, Расширение Code39, Code93, ITF14, RSS14, CodaBar, EAN13 AddOn 2, EAN13 AddOn 5
Нужно было посмотреть как оно работает и как выглядит (в частности мне нужен был PDF417)
написал обработку для демонстрации возможностей всех типов штрихкодов (во вложении)
My Webpage
так же можно посмотреть по ссылке
в конфигурации обязательно должен быть компонент ОбщийМакет.КомпонентаПечатиШтрихкодов (можно загрузить в свою конфу из указанной папки)