8.х Подскажите со штрихкодом

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Persempre, 18 ноя 2014.

  1. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    Добрый день. Настроил вывод штрихкода в УТ
    код обработчика:
    ЗначениеШтрихкода = "22" + Формат(ДанныеПечати.Дата, "ДФ=ddMMyy")+ Прав(ДанныеПечати.Номер,4);
    ЗначениеШтрихкода = ЗначениеШтрихкода + КонтрольныйСимволEAN(ЗначениеШтрихкода);

    КоличествоМиллиметровВПикселе = 1;//ОбластьМакетаЛ.Рисунки.Квадрат100Пикселей.Высота / 100;

    Для Каждого Рисунок Из ОбластьМакета.Рисунки Цикл
    Если Лев(Рисунок.Имя,8) = "Штрихкод" Тогда
    ПараметрыШтрихкода = Новый Структура;
    ПараметрыШтрихкода.Вставить("Штрихкод", ЗначениеШтрихкода);
    ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
    ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
    ПараметрыШтрихкода.Вставить("ТипКода", 1); //1-EAN13; 4-code128
    ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
    ПараметрыШтрихкода.Вставить("РазмерШрифта", "12");
    Рисунок.Картинка = МенеджерОборудованияСервер.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);//Обработки.ПечатьЭтикетокИЦенников.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);/
    КонецЕсли;
    КонецЦикла;


    а сам штрихкод имеет вид
    Снимок.JPG


    хочу сделать чтоб внизу были цифры, но не пойму как. ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь); менял на истину - толку никакого. Кто знает подскажите плз
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    А уверен, что 4 символа справа будет достаточно всегда?
    В Code128 все запихай полностью и все.
    Насчет отображения значения штрихкода - параметр "ОтображатьШтрихКод", вроде....
    Можно узнать подгрузив внешнюю компоненту выводящую ШК и полазив по ее настройкам интерактивно.
    Persempre нравится это.
  3. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.433
    Симпатии:
    373
    Баллы:
    104
    а под что его не хватит? EAN-13
    не EAN-8 же


    вернёмся чуток назад
    что именно вы хотите выводить в ШК?
    потому на данный момент вы заложили "весовой" тип ШК
    а если точнее - внутренний, весовой, что определяет заданный вами префикс "22"
    первая 2 - внутренний
    вторая 2 - весовой товар
    Persempre нравится это.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    судя по конструкции "22" + Формат(ДанныеПечати.Дата, "ДФ=ddMMyy")+ Прав(ДанныеПечати.Номер,4);
    требуется закодировать некий вид документов с помощью ШК типа ЕAN13.
    Для этого в ШК будет отведено:
    • 2 символа в виде префикса(не понятно, правда, для какой цели, ну да ладно...)
    • 6 символов под дату документа
    • 4 символа под код документа
    т.е. все значащие символы ШК типа EAN13 будут задействованы.

    Как будет закодирован документ, если номер документа будет иметь более 4 значащих символов справа, например А00011102?
    факультативный вопрос: Как будет определятся вид документа в ШК?
    Persempre нравится это.
  5. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    Согласен господа, с типом кода немного ошибся. Но суть остается прежней. Вывод цифрового обозначения нужен... Я что-то не пойму как его туда записать
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    параметр "ОтображатьШтрихКод", вроде....не?
    Открой саму оснастку формирующую ШК в ТабДок, там можно покрутить параметры.
    Persempre нравится это.
  7. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.433
    Симпатии:
    373
    Баллы:
    104
    CODE39 задействуйте или CODE/EAN 128
    --- Объединение сообщений, 18 ноя 2014 ---
    в УТ11 на нумерацию документа вот такое в коде заложено

    Код:
       
        ПараметрыШтрихкода = Новый Структура;
        ПараметрыШтрихкода.Вставить("Ширина",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Высота",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(ЧисловойКодПоСсылке(Ссылка)));
        ПараметрыШтрихкода.Вставить("ТипКода",         4); // Code128
        ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
        ПараметрыШтрихкода.Вставить("РазмерШрифта",    6);
       
    PS
    а может текст просто "режется" при выводе в область?
    --- Объединение сообщений, 18 ноя 2014 ---
    вот целиком
    Код:
    Процедура ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, Знач ОбластьМакета, Ссылка) Экспорт
       
        ВыводитьШтрихкодВОтдельнуюОбласть = Ложь;
        Если Не ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакета) Тогда
            // Картинки штрихкода в этой области макета нет.
           
            Если Макет.Области.Найти("ОбластьШтрихкода") <> Неопределено Тогда
               
                // Проверить картинку штрихкода в области "Штрихкод"
                ОбластьМакетаШтрихкод = Макет.ПолучитьОбласть("ОбластьШтрихкода");
                Если ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакетаШтрихкод) Тогда
                    ОбластьМакета = ОбластьМакетаШтрихкод;
                    ВыводитьШтрихкодВОтдельнуюОбласть = Истина;
                Иначе
                    Возврат;
                КонецЕсли;
            Иначе
                Возврат;
            КонецЕсли;
           
        КонецЕсли;
       
        Если Не ПолучитьФункциональнуюОпцию("ИспользоватьШтрихкодированиеПечатныхФормОбъектов") Тогда
            ОбластьМакета.Рисунки.Удалить(ОбластьМакета.Рисунки.КартинкаШтрихкода);
            Возврат;
        КонецЕсли;
       
        Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
        КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
       
        ПараметрыШтрихкода = Новый Структура;
        ПараметрыШтрихкода.Вставить("Ширина",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Высота",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(ЧисловойКодПоСсылке(Ссылка)));
        ПараметрыШтрихкода.Вставить("ТипКода",         4); // Code128
        ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
        ПараметрыШтрихкода.Вставить("РазмерШрифта",    6);
       
        ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
       
        Если ВыводитьШтрихкодВОтдельнуюОбласть Тогда
            ТабличныйДокумент.Вывести(ОбластьМакета);
        КонецЕсли;
       
    КонецПроцедуры
    
    Последнее редактирование: 18 ноя 2014
    Persempre нравится это.
  8. TopicStarter Overlay
    Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    Кому интересно, или тем кто будет искать подобное выкладываю результат.
    Ниже приведен код которого достаточно для формирования ШК для внешней печатной формы. Что убрано из стандартного - КартинкаШтрихкода заменена на Штрихкод.
    и вызывается главная функция в процедуре формирования печатной формы. и всё. Всё оказалось проще чем я думал.
    В УТ поиск документа идёт отлично. Главное открыть нужную форму списка (с этим и борюсь - хочу чтоб из любого места открывался документ)


    Код интересующимся:
    Код:
    Процедура ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, Знач ОбластьМакета, Ссылка)
      
        ВыводитьШтрихкодВОтдельнуюОбласть = Ложь;
        Если Не ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакета) Тогда
            // Картинки штрихкода в этой области макета нет.
          
            Если Макет.Области.Найти("Шапка") <> Неопределено Тогда
              
                // Проверить картинку штрихкода в области "Штрихкод"
                ОбластьМакетаШтрихкод = Макет.ПолучитьОбласть("Штрихкод");
                Если ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакетаШтрихкод) Тогда
                    ОбластьМакета = ОбластьМакетаШтрихкод;
                    ВыводитьШтрихкодВОтдельнуюОбласть = Истина;
                Иначе
                    Возврат;
                КонецЕсли;
            Иначе
                Возврат;
            КонецЕсли;
          
        КонецЕсли;
      
        Если Не ПолучитьФункциональнуюОпцию("ИспользоватьШтрихкодированиеПечатныхФормОбъектов") Тогда
            ОбластьМакета.Рисунки.Удалить(ОбластьМакета.Рисунки.КартинкаШтрихкода);
            Возврат;
        КонецЕсли;
      
        Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
        КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
      
        ПараметрыШтрихкода = Новый Структура;
        ПараметрыШтрихкода.Вставить("Ширина",          Окр(ОбластьМакета.Рисунки.Штрихкод.Ширина / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Высота",          Окр(ОбластьМакета.Рисунки.Штрихкод.Высота / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(ЧисловойКодПоСсылке(Ссылка)));
        ПараметрыШтрихкода.Вставить("ТипКода",         4); // Code128
        ПараметрыШтрихкода.Вставить("ОтображатьТекст", true);
        ПараметрыШтрихкода.Вставить("РазмерШрифта",    6);
      
        ОбластьМакета.Рисунки.Штрихкод.Картинка = МенеджерОборудованияСервер.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
      
        Если ВыводитьШтрихкодВОтдельнуюОбласть Тогда
            ТабличныйДокумент.Вывести(ОбластьМакета);
        КонецЕсли;
      
    КонецПроцедуры
    
    Функция ЧисловойКодПоСсылке(Ссылка)
        ШестнадчатиричноеЧисло = СтрЗаменить(Строка(Ссылка.УникальныйИдентификатор()),"-","");
        Возврат ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадчатиричноеЧисло);
    КонецФункции
    
    Функция ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакета)
       
        СтруктураПоиска = Новый Структура;
        СтруктураПоиска.Вставить("Штрихкод", Новый УникальныйИдентификатор);
        СтароеЗначение = СтруктураПоиска.Штрихкод;
       
        ЗаполнитьЗначенияСвойств(СтруктураПоиска, ОбластьМакета.Рисунки);
       
        Возврат Не СтруктураПоиска.Штрихкод = СтароеЗначение;
       
    КонецФункции
    
    Функция ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(Знач Значение)
       
        Значение = НРег(Значение);
        ДлинаСтроки = СтрДлина(Значение);
       
        Результат = 0;
        Для НомерСимвола = 1 По ДлинаСтроки Цикл
            Результат = Результат * 16 + Найти("0123456789abcdef", Сред(Значение, НомерСимвола, 1)) - 1;
        КонецЦикла;
       
        Возврат Формат(Результат, "ЧГ=0");
       
    КонецФункции
    
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    В ШК добавьте код вида объекта - 4 символа и код вида документа - 3 символа - этого хватить чтобы закодировать все объекты 90% всех существующих конфигураций :)
    Persempre нравится это.

Поделиться этой страницей