Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
Yevhenii @ Сегодня, 9:52
, в чем вопрос собственно?
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
1С Предприятие 8.2 обычное приложение, обычная форма Конфигурация "Управление торговым предприятием для Украины", редакция 1.2.
День добрый!
Стоит задача печатать этикетки со штрихкодом. Код 13-значный. 10 цифр относительно уникальные, 3 цифры в конце должны меняться относительно количества напечатаных этикеток.
Алгоритм следующий: Нажатие на кнопку -> Цикл от 1 до количества нужных этикеток -> Прорисовка самого макета на ТабДоке -> Печать(програмно, путём имитирования нажатия клавиш Сtrl+P или Ctrl+Shift+P -> Увеличиваю Счётчик на 1;
В итоге вижу отладчиком что код выполняется поэтапно так как нужно, и принтер печатает заданное количество этикеток, но все они идут с кодом который равен количеству печати. Хотя процедура перерисовки вродь как срабатывает, т.е. програмно переназначает значение штрих коду на каждом этапе от 1 до 5 (к примеру до 5) т.е. Штрих код пять раз перерисовывается со значением от ХХХХХХХХХХ001 до ХХХХХХХХХХ005 а на печать вылазит 5 штук одинаковых со значением ХХХХХХХХХХ005. Может кто что знает того что не знаю или не понимаю я? буду весьма благодарен за любые советы.
Код привожу
Нажатие на кнопку:
Процедура Кнопка1Нажатие(Элемент) ЧислоДо = ЭлементыФормы.ПолеВвода2.Значение; ЧислоОт =1; Пока ЧислоОт <=ЧислоДо Цикл Счётчик = ЧислоОт; НарисоватьМакет2(); // процедура перерисовки макета ПечатьЭтикетки(); // процедура печати ЧислоОт=ЧислоОт+1; КонецЦикла; КонецПроцедуры
Если Флаг=Истина Тогда ОбластьПодвал.Параметры.Флаг = Строка("Ростовка"); Иначе ОбластьПодвал.Параметры.Флаг = Строка("Вязка"); КонецЕсли; ЭлементыФормы.ТабДок.Вывести(ОбластьПодвал);
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
Yevhenii @ Сегодня, 10:14
, Ну на вскидку первое что приходит на ум: когда я игрался со штрих-кодами, то была такая фигня с EAN-13: мне надо было также по порядку печатать какое-то количество этикеток, но там был прикол в том, что просто добавлением 1 в конце не обойдешься, т.к. BarCode в зависимости от типа штрих-кода должен по символьному представлению числа выдать нам сам штрих-код (расположение черных штрихов), так вот не каждое число он мог так нарисовать. Там должен быть определенный шаг по своему алгоритму. Если я правильно понял вы пытаетесь использовать тип штрих-кода CODE-128, я вот не помню точно, но мне кажется он 6-и значный (могу и ошибаться), может он просто не может представить ваши числа в штрих-кодированном представлении... Это предположение, попробуйте может просто с вашим алгоритмом распечатать 6-и значные этикетки пару штук и посмотрите будет ли итерироваться значение. Если да - значит с кодом все нормально и проблема с представлением штрих-кода, может не тот тип используете
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Штрих код правильный, тут все проверено. Т.е. печатает 13-значный код от ХХХХХХХХХХ001 до ХХХХХХХХХХ999 и сканируеться он без проблем из заданым значением.
Как я думаю, тут есть 2 зацепки, это собственное "родная" процедура печати в 1С и приоритет выполнения процедур, т.е. сама печать происходит после выполнения процедуры из которой она вызывается. т.е. программа не может передать управление в точку печати, а потом вернуть ее в обратно в цикл, таким образом команды печати накапливаются с параметрами и ссылками на макет для печати, но выполняются только когда идет выход с процедуры нажатия кнопки..... но это только домыслы...
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
Yevhenii @ Сегодня, 11:13
, Выложите внешнюю обработку, может отладчиком потыкаю, авось что-то в голову прийдет
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
И вот что происходит, макет перерисовывается и печатается если на кнопку нажимать не очень быстро, если же быстро нажать пару раз "даблкликом" на мыше, то он напечатает 4 этикетки но с последним значением счётчика.
т.е. процедура печати работает медленее чем процедура перерисовки и сам цикл соответственно
теперь вопрос: как в 1С установить задержку? ну или таймер что б делать печать на каждый "тик" ???
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
Yevhenii @ Сегодня, 11:21
, а зачем так сложно? не проще ли сформировать ваши этикетки, запихнуть их последовательно в один ТабДок и вызвать функцию "Напечатать" табличного документа? и пусть себе одной процедурой печати печатается
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Bernet @ Сегодня, 11:26
, не проще, так как принтер этикеток такая зараза, что я долго-долго подгонял под него макет и настраивал на нем печать нескольких копий. а перекраивать макет это означает ещё долго добиваться правильной и ровной печати.
а так, поставил таймер на данный кусок кода и всё работает))) просто в С# кодил немного, то там с таймерами много интересностей можно сделать, и работа с ними довольно не сложная)
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 327 раз
Рейтинг: 0
Yevhenii @ Сегодня, 13:06
, Ну и я с принтерами этикеток игрался, печатал также свои макеты с штрих-кодами и нормально все было, подогнал размер, в свойствах самого принтера выбрал размер этикетки и вывожу каждую этикетку с нового листа, печаталось нормально сотнями. Ну это дело вкуса. А насчет таймера в 1С есть только Обработчик ожидания, где можно указать через сколько секунд выполнить какую-то процедуру, он вам поможет. Больше там ничего такого нет.
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Yevhenii @ 14.04.17, 13:06)
а перекраивать макет это означает ещё долго добиваться правильной и ровной печати.
Зачем перекраивать макет? Все формированные табдоки добавляются в один, с разделителями страниц. И почему нельзя использовать стандартное "Напечатать" ? Тогда не надо изобретать костыли с обработчиками ожидания и т.п.
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!