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




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

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

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

<?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='\

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 не будет опубликован. Обязательные поля помечены *