Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Формирование печатной формы этикетки , В цикле присвоить новый штрихкод          
Yevhenii Подменю пользователя
сообщение 14.04.17, 8:52
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Хмельницкий
Спасибо сказали: 0 раз
Рейтинг: 0

1С Предприятие 8.2 обычное приложение, обычная форма
Конфигурация "Управление торговым предприятием для Украины", редакция 1.2.

День добрый!


 ! 

Правила: 3,4
 


Сообщение отредактировал logist - 14.04.17, 9:16


Signature
Хороший код - работающий код.

Bernet Подменю пользователя
сообщение 14.04.17, 8:57
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Yevhenii @ Сегодня, 9:52 * ,
в чем вопрос собственно?


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Yevhenii Подменю пользователя
сообщение 14.04.17, 9:14
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Хмельницкий
Спасибо сказали: 0 раз
Рейтинг: 0

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;
        КонецЦикла;    
КонецПроцедуры


процедура перерисовки макета

Процедура НарисоватьМакет2()
    Макет = Обработки.ПечатьШтрихкодов.ПолучитьМакет("ПечатьНаклейки");
    ОбластьНадпись = Макет.ПолучитьОбласть("Надпись");
    ОбластьМодель = Макет.ПолучитьОбласть("Модель");
    ОбластьШтрихКод = Макет.ПолучитьОбласть("ШтрихКод");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ЭлементыФормы.ТабДок.ВерхнийКолонтитул.Выводить = Ложь;
    ЭлементыФормы.ТабДок.НижнийКолонтитул.Выводить = Ложь;
    ЭлементыФормы.ТабДок.АвтоМасштаб = Истина;
    ЭлементыФормы.ТабДок.ПолеСверху = 0;
    ЭлементыФормы.ТабДок.ПолеСнизу=0;
    ЭлементыФормы.ТабДок.ПолеСлева = 0;
    ЭлементыФормы.ТабДок.ПолеСправа = 0;
    ЭлементыФормы.ТабДок.РазмерКолонтитулаСверху = 0;
    ЭлементыФормы.ТабДок.РазмерКолонтитулаСнизу = 0;
    ЭлементыФормы.ТабДок.ИмяПринтера = "TSC TTP-244 Pro_Server";
    ЭлементыФормы.ТабДок.Очистить();
    ЭлементыФормы.ТабДок.Вывести(ОбластьНадпись);
    ОбластьМодель.Параметры.Модель  = Строка(ЭтотОбъект.Номенклатура.Наименование);
    ЭлементыФормы.ТабДок.Вывести(ОбластьМодель);
    РисунокШтрихкод  = ОбластьШтрихКод.Рисунки.КодРисунок;
    СтрШтрихКод=ШтрихКод+"000";
    Если Счётчик <=9 Тогда
        СШтрихКод = Лев(СтрШтрихКод,12)+Строка(Счётчик);
    ИначеЕсли Счётчик >9 И    Счётчик <=99 Тогда
        СШтрихКод = Лев(СтрШтрихКод,11)+Строка(Счётчик);
    ИначеЕсли  Счётчик >99 И    Счётчик <=899     Тогда
        СШтрихКод = Лев(СтрШтрихКод,10)+Строка(Счётчик);
    Иначе
        Сообщить("Напечатано 900 этикеток!!!");
    КонецЕсли;
    
    
    ОбластьШтрихКод.Рисунки.КодРисунок.Объект.ТипКода = 4;   // тип штрихкода Code-128
    ОбластьШтрихКод.Рисунки.КодРисунок.Объект.Сообщение = ?(ПустаяСтрока(""),СШтрихКод,"");
    ЭлементыФормы.ТабДок.Вывести(ОбластьШтрихКод);
    
    Если Флаг=Истина Тогда
        ОбластьПодвал.Параметры.Флаг = Строка("Ростовка");
    Иначе
        ОбластьПодвал.Параметры.Флаг = Строка("Вязка");
    КонецЕсли;
    ЭлементыФормы.ТабДок.Вывести(ОбластьПодвал);
    
    
    
КонецПроцедуры


процедура печати

Процедура ПечатьЭтикетки()
    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ТабДок;
    Shell = Новый COMОбъект("WScript.Shell");
    //Shell.SendKeys("%+A+H)");
    Shell.SendKeys("^P"); //имитируем нажатие Ctr+Р   Предварительный просмотр
    //Shell.SendKeys("%фм");   //Параметры страницы
    ////· "Shift" - +;
    ////· "Ctrl" - ^;
    ////· "Alt" - %.
                          
КонецПроцедуры



Bernet @ Сегодня, 9:57 * ,

Сори, клацнул Enter в Теме в пустом посте, потом пришлось редактировать уже опубликованый)


Signature
Хороший код - работающий код.

Bernet Подменю пользователя
сообщение 14.04.17, 9:41
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Yevhenii @ Сегодня, 10:14 * ,
Ну на вскидку первое что приходит на ум:
когда я игрался со штрих-кодами, то была такая фигня с EAN-13: мне надо было также по порядку печатать какое-то количество этикеток, но там был прикол в том, что просто добавлением 1 в конце не обойдешься, т.к. BarCode в зависимости от типа штрих-кода должен по символьному представлению числа выдать нам сам штрих-код (расположение черных штрихов), так вот не каждое число он мог так нарисовать. Там должен быть определенный шаг по своему алгоритму. Если я правильно понял вы пытаетесь использовать тип штрих-кода CODE-128, я вот не помню точно, но мне кажется он 6-и значный (могу и ошибаться), может он просто не может представить ваши числа в штрих-кодированном представлении... Это предположение, попробуйте может просто с вашим алгоритмом распечатать 6-и значные этикетки пару штук и посмотрите будет ли итерироваться значение. Если да - значит с кодом все нормально и проблема с представлением штрих-кода, может не тот тип используете


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Спасибо сказали: Yevhenii,

Yevhenii Подменю пользователя
сообщение 14.04.17, 10:13
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Хмельницкий
Спасибо сказали: 0 раз
Рейтинг: 0

Bernet @ Сегодня, 10:41 * ,

Штрих код правильный, тут все проверено. Т.е. печатает 13-значный код от ХХХХХХХХХХ001 до ХХХХХХХХХХ999 и сканируеться он без проблем из заданым значением.

Как я думаю, тут есть 2 зацепки, это собственное "родная" процедура печати в 1С и приоритет выполнения процедур, т.е. сама печать происходит после выполнения процедуры из которой она вызывается. т.е. программа не может передать управление в точку печати, а потом вернуть ее в обратно в цикл, таким образом команды печати накапливаются с параметрами и ссылками на макет для печати, но выполняются только когда идет выход с процедуры нажатия кнопки..... но это только домыслы...


Signature
Хороший код - работающий код.

Bernet Подменю пользователя
сообщение 14.04.17, 10:16
Сообщение #6

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Yevhenii @ Сегодня, 11:13 * ,
Выложите внешнюю обработку, может отладчиком потыкаю, авось что-то в голову прийдет


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Yevhenii Подменю пользователя
сообщение 14.04.17, 10:21
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Хмельницкий
Спасибо сказали: 0 раз
Рейтинг: 0

Нашел! Нашел где собака зарыта.
Присвоил счётчику при старте значение 1.
Залипил в новую кнопку
НарисоватьМакет2();
    ПечатьЭтикетки();
    Счётчик = Счётчик +1;


И вот что происходит, макет перерисовывается и печатается если на кнопку нажимать не очень быстро, если же быстро нажать пару раз "даблкликом" на мыше, то он напечатает 4 этикетки но с последним значением счётчика.

т.е. процедура печати работает медленее чем процедура перерисовки и сам цикл соответственно

теперь вопрос: как в 1С установить задержку? ну или таймер что б делать печать на каждый "тик" ???


Signature
Хороший код - работающий код.

Bernet Подменю пользователя
сообщение 14.04.17, 10:26
Сообщение #8

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Yevhenii @ Сегодня, 11:21 * ,
а зачем так сложно? не проще ли сформировать ваши этикетки, запихнуть их последовательно в один ТабДок и вызвать функцию "Напечатать" табличного документа? и пусть себе одной процедурой печати печатается


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Yevhenii Подменю пользователя
сообщение 14.04.17, 12:06
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Хмельницкий
Спасибо сказали: 0 раз
Рейтинг: 0

Bernet @ Сегодня, 11:26 * ,
не проще, так как принтер этикеток такая зараза, что я долго-долго подгонял под него макет и настраивал на нем печать нескольких копий.
а перекраивать макет это означает ещё долго добиваться правильной и ровной печати.

а так, поставил таймер на данный кусок кода и всё работает))) просто в С# кодил немного, то там с таймерами много интересностей можно сделать, и работа с ними довольно не сложная)


Signature
Хороший код - работающий код.

Bernet Подменю пользователя
сообщение 14.04.17, 12:52
Сообщение #10

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Yevhenii @ Сегодня, 13:06 * ,
Ну и я с принтерами этикеток игрался, печатал также свои макеты с штрих-кодами и нормально все было, подогнал размер, в свойствах самого принтера выбрал размер этикетки и вывожу каждую этикетку с нового листа, печаталось нормально сотнями. Ну это дело вкуса. А насчет таймера в 1С есть только Обработчик ожидания, где можно указать через сколько секунд выполнить какую-то процедуру, он вам поможет. Больше там ничего такого нет.


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Спасибо сказали: Yevhenii,

Yevhenii Подменю пользователя
сообщение 14.04.17, 13:15
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Хмельницкий
Спасибо сказали: 0 раз
Рейтинг: 0

Bernet @ Сегодня, 13:52 * ,


Отлично, попробую попилить обработчик ожидания, а если не выйдет то тогда уж и с макетами повожусь)

спасибо!


Signature
Хороший код - работающий код.

logist Подменю пользователя
сообщение 14.04.17, 13:50
Сообщение #12

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Yevhenii @ 14.04.17, 13:06) *
а перекраивать макет это означает ещё долго добиваться правильной и ровной печати.

Зачем перекраивать макет? Все формированные табдоки добавляются в один, с разделителями страниц.
И почему нельзя использовать стандартное "Напечатать" ? Тогда не надо изобретать костыли с обработчиками ожидания и т.п.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 20:43
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!