Обработка для печати ценников и этикеток




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

63 Comments

  1. cs25

    Вылезает с ошибкой:

    ТекПринтер=scrptCtrl.run(«GetDefaultPrinter»);

    {C:ПЕЧАТЬ ЦЕННИКОВ И ЭТИКЕТОК.ERT(561)}: Ошибка выполнения Microsoft VBScript: Невозможно создание объекта контейнером ActiveX

    Reply ↓
  2. DDD2005

    ТипЦен=Склад.ТипЦен;

    {C:DOCUMENTS AND SETTINGSDENISРАБОЧИЙ СТОЛPECHATJ CENNIKOV I ETIKETOK.ERT(601)}: Поле агрегатного объекта не обнаружено (ТипЦен)

    Reply ↓
  3. newbas

    Исправил и перезалил. Спасибо за тестирование

    Reply ↓
  4. newbas

    Обновление. Исправлены ошибки.

    Reply ↓
  5. Валерий_

    Печатает на лист количество колонок только до 9, нужно 15, а остальное очень удобно, благодарю.

    Reply ↓
  6. Валерий_

    Хорошо, если б в ценнике печаталась и этикетка (штрихкод), например, снизу, между датой и страной производителем.

    Также шрифт наименования необходимо увеличить.

    В остальном, всё нормально.

    Reply ↓
  7. Predator

    А у меня не пашет вот что выдаеть. Что делать???

    Таб.Цена=глПолучитьЦену(Таб.Товар,ТипЦен.ТекущийЭлемент(),РабочаяДата()<<?>>);

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(125)}: Недостаточно фактических параметров

    Таб.Цена=глПолучитьЦену(Таб.Товар,ТипЦен.ТекущийЭлемент(),РабочаяДата()<<?>>);

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(194)}: Недостаточно фактических параметров

    Если глТерминалВключен<<?>>() = 1 Тогда

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(239)}: Функция не обнаружена (глТерминалВключен)

    Если глЕстьРеквизитМнЧ<<?>>(«Номенклатура», Метаданные.Документ(Сч).Идентификатор)=1 Тогда

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(272)}: Функция не обнаружена (глЕстьРеквизитМнЧ)

    ИначеЕсли глЕстьРеквизитМнЧ<<?>>(«Номенклатура»,Док.Вид())=1 Тогда

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(296)}: Функция не обнаружена (глЕстьРеквизитМнЧ)

    Если глТерминалЗагрузитьДанные<<?>>(ТермДанные) = 0 Тогда

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(355)}: Функция не обнаружена (глТерминалЗагрузитьДанные)

    Если глПолучитьТоварПоШтрихкоду<<?>>(ТермДанные.Штрихкод, ВремНоменклатура, ВремЕдиница, ВремКолво) = 0 Тогда

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(366)}: Функция не обнаружена (глПолучитьТоварПоШтрихкоду)

    глТерминалОчиститьПамять<<?>>();

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(386)}: Процедура не обнаружена (глТерминалОчиститьПамять)

    ТаблицаТоваров.Валюта=глРубли<<?>>;

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(459)}: Переменная не определена (глРубли)

    ПечРозн = глФРМ<<?>>(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(461)}: Функция не обнаружена (глФРМ)

    глОживить<<?>>(1);

    {J:ОБНОВЛЕНИЕ 1СПРИЛОЖЕНИЯОБРАБОТКА ДЛЯ ПЕЧАТИ ЦЕННИКОВ И ЭТИКЕТОКPECHATJ_CENNIKOV_I_ETIKETOK.ERT(470)}: Процедура не обнаружена (глОживить)

    Reply ↓
  8. newbas

    Обработка предназначена ТОЛЬКО для ТИС редакции 9.2. Судя по сообщениям ошибок, конфигурация самописная, или сильно измененная

    Reply ↓
  9. sepegka

    Все вроде бы ничего,но надо бы,что бы и автоматом ставилась не только Тип цен,Фирма,но и непосредственно сам товар.

    У кого есть можете скинуть на мыло sergei-dantist@mail.ru

    Reply ↓
  10. newbas

    Какой товар и куда?

    Reply ↓
  11. woland123

    Не работает. Те же ошибки что и у Predator

    Reply ↓
  12. newbas

    Написали бы где запускали, да и ошибка, судя по сообщению пустяковая, видимо у Вас в функции «глПолучитьЦену» больше параметров, чем в ТИС 9.2.

    Reply ↓
  13. xaba

    Спасибо огромное за обработку!!!

    Единственно — не могу добавить в этикетку (не ценник) цену за товар. Не подскажешь — как?

    З.Ы. Артикул — без проблем добавляется.

    Reply ↓
  14. newbas

    Если этикетка печатается с использованием Godex, то в процедуру «ПечатьЭтикетокГодекс» надо добавить строку «ПринтерЭтикеток.ВывестиТекст(1, 1, 1, 0, ТБ.Цена);» например перед «ПринтерЭтикеток.СформироватьШтрихкод…». А если этикетка печатается на Windows принтер, то макет таблицы «Этикетка» добавить поле с типом «выражение» с значением «ПечРозн»

    Reply ↓
  15. xaba

    Уряяяя! Получилось! (Сам я ни разу не программист).

    Только пришлось добавить строку в процедуру «ПечатьЭтикетокГодекс» — «ПечЦена= Лев(ТБ.Цена,10.2);» и соответственно в макет таблицы поле с типом «шаблон» с значением Цена:[ПечЦена]руб.

    🙂

    Reply ↓
  16. newbas

    😉

    Reply ↓
  17. dev014

    > З.Ы. Артикул — без проблем добавляется.

    Как добавить артикул в этикетку ?

    Reply ↓
  18. xaba

    Надо (в модуле) в процедуре «ПечатьЭтикеток(ТБ)()» добавить строчку «ПечКод=Число(ТБ.Товар.ТекущийЭлемент().Артикул);». Например после строчки «ПечТовар = Лев(ПечТовар,80);». Затем создать в табличной форме этикетки поле с атрибутами, как в табличной форме ценника для артикула. И усё.

    Reply ↓
  19. AlexeySH

    Подскажите, у меня не выдается на ценнике артикул, печатает «Артикул: 0». Что нужно сделать? Заранее спасибо.

    Reply ↓
  20. AlexeySH

    «Подскажите, у меня не выдается на ценнике артикул, печатает «Артикул: 0″.» Это только в том случае, если в номенклатре артикул в виде: «Р5511», т.е. когда в нем присутствуют буквы, а если букву убрать, то все нормально печатается. Как сделать, чтобы артикул выводился с буквами?

    Reply ↓
  21. newbas

    1). Строку 617 необходимо заменить на

    Таб.НоваяКолонка(«Артикул»,»Строка»,8,,»Артикул»,8,,2);

    2). Строку 463 заменить на

    ПечКод=ТаблицаТоваров.Товар.ТекущийЭлемент().Артикул;

    Reply ↓
  22. newbas

    Это потому, что тип поля Артикул «Число».

    Reply ↓
  23. xaba

    Из документа основания не подставляется колличество товара. Например из «Поступление ТМЦ». Колличество товара всегда равно 1. Это так и задумано или модуль не корректно работает? 😉

    Reply ↓
  24. newbas

    Количество, указанное в таблице — это количество ценников или этикеток. Если для этикеток это как-то еще оправдано, то для ценника по-моему нет. Поэтому устанавливается в 1. Если кому-то надо, можно переделать, благо не сложно

    Reply ↓
  25. xaba

    Для этикеток это более чем оправдано. Сильно время сокращает. Особенно когда товара много. Для ценников — енто дааа…

    Если можно доработайте плиз или запостите кусочек переделанного модуля…

    Reply ↓
  26. newbas

    (25)Да ну, чего там делать, то

    В функции «ПриВыбореЗначения» заменить ветку

    ИначеЕсли Об=»Добавить из документа» Тогда

    Сп=СоздатьОбъект(«СписокЗначений»);

    Для Сч=1 По Метаданные.Документ() Цикл

    Если глЕстьРеквизитМнЧ(«Номенклатура», Метаданные.Документ(Сч).Идентификатор)=1 Тогда

    Сп.ДобавитьЗначение(Метаданные.Документ(Сч).Идентификатор, Метаданные.Документ(Сч).Представление());

    КонецЕсли;

    КонецЦикла;

    Если Сп.РазмерСписка()=0 Тогда

    Возврат 0;

    КонецЕсли;

    ВидДок=ВосстановитьЗначение(«ПоследнийВидДокумента»);

    Если Сп.ВыбратьЗначение(ВидДок,»Выберите вид документа»)=0 Тогда

    Возврат 0;

    КонецЕсли;

    СохранитьЗначение(«ПоследнийВидДокумента»,ВидДок);

    Попытка

    Док = СоздатьОбъект(«Документ.»+ВидДок);

    Исключение

    Возврат 0;

    КонецПопытки;

    Если Док.Выбрать(«Выберите документ»)<>1 Тогда

    Возврат 0;

    ИначеЕсли глЕстьРеквизитМнЧ(«Номенклатура»,Док.Вид())=1 Тогда

    Док.ВыбратьСтроки();

    Форма.Таб.Видимость(0);

    Пока Док.ПолучитьСтроку()=1 Цикл

    ПриВыбореЗначения(«Добавить»,Док.Номенклатура.ТекущийЭлемент());

    КонецЦикла;

    Если глЕстьРеквизитМнЧ(«Количество», Док.Вид())=1 Тогда

    Таб.Количество = Макс(Док.Количество*Док.Коэффициент,1);

    КонецЕсли;

    Форма.Таб.Видимость(1);

    КонецЕсли;

    Reply ↓
  27. xaba

    (26) Что-то не хотят работать эти три строчки:

    Если глЕстьРеквизитМнЧ(«Количество», Док.Вид())=1 Тогда

    Таб.Количество = Макс(Док.Количество*Док.Коэффициент,1);

    КонецЕсли;

    🙁

    Reply ↓
  28. Eldar1

    Доброго дня всем

    Обьясните пожалуста чайнику, как и куда этот файл прикрепить чтоб все заработало

    Заранее благодарен всем

    Reply ↓
  29. newbas

    Куда нибудь это файл положить и в 1С меню «Файл-Открыть»

    Reply ↓
  30. neprofi

    Всё работает нормально, только при выводе на печать на лист попадает только часть ценников, треть обрезана. В чём может быть причина? Ставлю 5 колонок и 70% — выходит форма с 5 ценниками вряд, но при печати обрез справа — остаётся ток 3 . Спасибо

    Reply ↓
  31. subski

    Все замечтательно работает, автору +

    Reply ↓
  32. subski

    (28) Фаил обработки помещаешь в каталог ExtForms информационной базы, при помощи текстового редактора создаешь текстовый файл с именем таким же, как и имя внешнего файла, и расширением EFD (External File Description), можно в текстовом файле просто заменить *.txt на *.edf.

    Этот файл должен содержать строку такого вида:

    Название=<текстовое название файла>

    //в нашем случае:

    //Название=<Обработка для печати ценников и этикеток>

    Далее в 1С открываешь вкладку Сервис/Дополнительные возможности и ВУАЛЯ наблюдаешь в списке свою обработку!

    При открытии обработка осматривает каталог ExtForms и ищет все файлы

    с расширением EFD.

    И совет, почитай про Доп возможности, в книжке «Описание» идущей в комплекте с программой! Я тоже не гуру, но все доступным языком в принципе описано.

    Reply ↓
  33. Skif_ru23

    Как добавить производителя?

    Reply ↓
  34. newbas

    (33) дописать код и добавить в макет(таблицу)

    Reply ↓
  35. neprofi

    Не могли бы вы прокоментировать позт 30. Проблемма актуальна. ТиС 9.2

    Reply ↓
  36. newbas

    (35) проверяйте флаг «Автомасштаб»

    Reply ↓
  37. R_87

    не могу дорубиться как добавить еще форму другого ценника

    Reply ↓
  38. newbas

    ГОСПОДА! Не выдавайте чужие разработки за свои. Недавно пришел к новому клиенту, приводить в порядок то, что предыдущий «программист» на вертел. И увидел свою обработку, которую предшественник выдавал за свою и не мог в ней настроить размер ценников под высоту держателей, еще и денег не кисло срубил…

    Reply ↓
  39. delete009

    Классная обработка мне пригодилась «ВЕЩЬ!»

    Reply ↓
  40. kruiz111

    Обработка хорошая. Но как же добавить количество из документа?

    Для этикеток очень актуально.

    Reply ↓
  41. kruiz111

    (26) Всё таки я разобрался как добавить количество из документа для этикеток. Всё дело в цикле. У меня получилось вот так.

    Если Док.Выбрать(«Выберите документ»)<>1 Тогда

    Возврат 0;

    ИначеЕсли глЕстьРеквизитМнЧ(«Номенклатура»,Док.Вид())=1 Тогда

    Док.ВыбратьСтроки();

    Форма.Таб.Видимость(0);

    Пока Док.ПолучитьСтроку()=1 Цикл

    ПриВыбореЗначения(«Добавить»,Док.Номенклатура.ТекущийЭлемент());

    Если глЕстьРеквизитМнЧ(«Количество», Док.Вид())=1 Тогда

    Таб.Количество = Макс(Док.Количество*Док.Коэффициент,1);

    КонецЕсли;

    КонецЦикла;

    Форма.Таб.Видимость(1);

    КонецЕсли;

    Reply ↓
  42. deni500

    Не печатается артикул печатает (Артикул0) артикулы у меня с буквами ,что можно сделать

    Reply ↓
  43. newbas

    (42) об этом уже было. Поправлю.

    Reply ↓
  44. Паунин

    У меня не работает! При попытке открыть пишет:

    Таб.Цена=глПолучитьЦену<<?>>(Таб.Товар,ТипЦен.ТекущийЭлемент(),РабочаяДата());

    {F:1СВНЕШНИЕ УТИЛИТЫПЕЧАТЬ ЦЕННИКОВ И ЭТИКЕТОКПЕЧАТЬ_ЦЕННИКОВ_И_ЭТИКЕТОК.ERT(125)}: Функция не обнаружена (глПолучитьЦену)

    и т.д. и т.п.

    Reply ↓
  45. newbas

    (44) Конфигурация предназначена для ТиС ред. 9.2 и построенных на ее основе

    Reply ↓
  46. LitavrinAV

    подскажите как сделать чтобы на этикетке печаталась цена. Спасибо!!!

    Reply ↓
  47. newbas

    (46) нужно дописать код.

    Reply ↓
  48. LitavrinAV

    ну это понимаю просто перепробовал все возможные обработки чего только уже не скачивал и не устанавливал. Размер этикетки 30*20 принтер Zebra. 1C ТИС9,2.

    пробовал в самой конфигурации не через внешнюю обработку тоже не получилось.

    Может подскажет как это все можно сделать

    Reply ↓
  49. newbas

    (48) Исправил, скачайте заново обработку

    Reply ↓
  50. Antoshka-sv

    Спасибо. Сейчас круто!!!! А как сделать чтобы при стандартной печати чека было также? или чтобы на этикетке 30*20 принтер ZEBRA LP2824 штрих код на половину этикетки а верняя половина. наименование и цена?

    Reply ↓
  51. LitavrinAV

    А еще вопрос? сейчас все печатает нормально но штрих код почему то сжимается по длине. по высоте нормальный и по длине на половину почти. Как это можно исправить?

    Reply ↓
  52. MaximUs-61Rus

    1). Строку 617 необходимо заменить на

    Таб.НоваяКолонка(«Артикул»,»Строка»,8,,»Артикул»,8,,2);

    2). Строку 463 заменить на

    ПечКод=ТаблицаТоваров.Товар.ТекущийЭлемент().Артикул;

    Попробовал воспользоваться данным изменением. Но Увы…… Не подхватывает КОЛИЧЕСТВО в соответствующий столбец, если добавлять ИЗ ДОКУМЕНТА.

    Всё равно количество всегда 1шт 🙁

    Reply ↓
  53. Viktorian II

    У меня почему-то не берёт цены из документов 🙁 , в чём может быть дело?)

    Reply ↓
  54. newbas

    (53) Обработка цены из документа и не должна брать — она их берет из справочника цен

    Reply ↓
  55. Viktorian II

    Справочник цен как я понимаю надо вручную забивать?)

    Reply ↓
  56. newbas

    (55) В ручную или обработкой «обновление цен в справочнике»

    Reply ↓
  57. Viktorian II

    Спасибо) 🙂

    Reply ↓
  58. Иволга

    Спасибо! Данная обработка очень облегчила нам работу. Подскажите как добавить штрихкод в ценник? Элемент баркод скопировали из этикетки. А вот изменения в коде какие:(?

    Reply ↓
  59. margo2007

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

    Убила массу времени.

    Оказывается длинна наименования принтера не должна быть больше 31 символа!

    Reply ↓
  60. xDee

    Спасибо! Очень помогли, внедряем штрихкодирование у себя в магазине и это как раз то что нам нужно было , а то вручную печатать было как то не айс. Еще раз Спасибо!

    Reply ↓
  61. post84d

    Спасибо! Обработка подошла на все 100%. Особенно удобен механизм задающий количество строк (ценников).

    Reply ↓
  62. Яшар

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

    Убила массу времени.

    Оказывается длинна наименования принтера не должна быть больше 31 символа!

    Reply ↓
  63. Яшар

    ВСЕ НОРМАЛЬНО ПЕЧАТАЕТ ((((((только вот не хочет печатать на зебру как в Парусе(((( как его сделать так чтоб он печатал на рулон с клейкой бумагой?????

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *