gifts2017

Печать штрих-кодов ЕАН 13 средствами 1С без внешних компонент и специальных шрифтов

Опубликовал Трактор Трактор (Трактор) в раздел Печать - Ценники

В далёкие времена, когде не было достойных внешних компонент и шрифтов, я сподобился написать обработку для печати штрих-кодов средствами 1С. Вот что получилось.

К публикации этого счастья меня подвигла вот эта разработка http://infostart.ru/projects/5818/ Почему ему можно, а мне нельзя?

Вот эта http://infostart.ru/projects/5817/ ,  например, гораздо толковее и в ней есть функция КонтрольныйСимвол_EAN.

По просьбе 8-рочников вытаскиваю код. Перевести его на язык 8-ки нетрудно.

Перем А[10],В[10],С[10],ЭтикетокВСтроке,Таб,НомерКолонки,НомерСтроки;
//_____________________________________________________________________________
Процедура Этикетка(СНовойСтроки,Код)
    // Цифра, стоящая на 13-й позиции (она-же первая при чтении кода справа налево) определяет,
    // в какой комбинации A или B, согласно паритета цифрового знака, будет исполнена каждая из
    // цифр левой половины символа кода. По таблице:
    ПерваяЦифра=Строка(Число(Сред(Код,1,1)));
    Если ПерваяЦифра="0" Тогда
        ПеременностьПаритета=" ААААААСССССС";
    ИначеЕсли ПерваяЦифра="1" Тогда
        ПеременностьПаритета=" ААВАВВСССССС";
    ИначеЕсли ПерваяЦифра="2" Тогда
        ПеременностьПаритета=" ААВВАВСССССС";
    ИначеЕсли ПерваяЦифра="3" Тогда
        ПеременностьПаритета=" ААВВВАСССССС";
    ИначеЕсли ПерваяЦифра="4" Тогда
        ПеременностьПаритета=" АВААВВСССССС";
    ИначеЕсли ПерваяЦифра="5" Тогда
        ПеременностьПаритета=" АВВААВСССССС";
    ИначеЕсли ПерваяЦифра="6" Тогда
        ПеременностьПаритета=" АВВВААСССССС";
    ИначеЕсли ПерваяЦифра="7" Тогда
        ПеременностьПаритета=" АВАВАВСССССС";
    ИначеЕсли ПерваяЦифра="8" Тогда
        ПеременностьПаритета=" АВАВВАСССССС";
    ИначеЕсли ПерваяЦифра="9" Тогда
        ПеременностьПаритета=" АВВАВАСССССС";
    КонецЕсли;
    
    // Выведем разделитель перед штрихкодом (две удлиненные тонкие линии)
    Если СНовойСтроки=1 Тогда
        Таб.ВывестиСекцию("Р0|Штрих");
        НомерКолонки=1;
        НомерСтроки=НомерСтроки+5;
    Иначе
        Таб.ПрисоединитьСекцию("Р0|Штрих");
    КонецЕсли;
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р1|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р1|Штрих");
    НомерКолонки=НомерКолонки+11;
    Обл=Таб.Область("R"+Строка(НомерСтроки+2)+"C"+Строка(НомерКолонки-11)+":R"+Строка(НомерСтроки+2)+"C"+Строка(НомерКолонки-4));
    Обл.Объединить();
    Обл.Текст=ПерваяЦифра;
    //Таб.ПрисоединитьСекцию("Р0|Штрих");
    Для Поз=2 По 13 Цикл
        ИмяМассива=Сред(ПеременностьПаритета,Поз,1);
        Позиция=Строка(Число(Сред(Код,Поз,1)));
        КодЦифры=Шаблон("["+ИмяМассива+"["+?(Позиция="0","10",Позиция)+"]]");
        Стр="";
        Для Поз1=1 По 7 Цикл
            НольОдин=Сред(КодЦифры,Поз1,1);
            Стр=Стр+НольОдин;
            Таб.ПрисоединитьСекцию(НольОдин+"|Штрих");
            НомерКолонки=НомерКолонки+1;
        КонецЦикла;
        Обл=Таб.Область("R"+Строка(НомерСтроки+2)+"C"+Строка(НомерКолонки-7)+":R"+Строка(НомерСтроки+2)+"C"+НомерКолонки);
        Обл.Объединить();
        Обл.ВертикальноеПоложение(1);
        Обл.Текст=Позиция;
        Если Поз=7 Тогда
            // Выведем разделитель
            Таб.ПрисоединитьСекцию("Р0|Штрих");
            Таб.ПрисоединитьСекцию("Р1|Штрих");
            Таб.ПрисоединитьСекцию("Р0|Штрих");
            Таб.ПрисоединитьСекцию("Р1|Штрих");
            Таб.ПрисоединитьСекцию("Р0|Штрих");
            НомерКолонки=НомерКолонки+5;
        КонецЕсли;
    КонецЦикла;
    Таб.ПрисоединитьСекцию("Р1|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("Р1|Штрих");
    Таб.ПрисоединитьСекцию("Р0|Штрих");
    Таб.ПрисоединитьСекцию("1|Надпись");
    НомерКолонки=НомерКолонки+6;
    Обл=Таб.Область("R"+Строка(НомерСтроки+3)+"C"+Строка(НомерКолонки-106)+":R"+Строка(НомерСтроки+3)+"C"+Строка(НомерКолонки-2));
    Обл.Объединить();
    Обл.РазмерШрифта(10);
    Обл.Контроль(4);
    Обл.Полужирный(1);
    Обл.Текст=?(ПустаяСтрока(Товар.ПолнНаименование)=1,Товар.Наименование,Товар.ПолнНаименование);
    Обл=Таб.Область("R"+Строка(НомерСтроки+4)+"C"+Строка(НомерКолонки-106)+":R"+Строка(НомерСтроки+4)+"C"+Строка(НомерКолонки-2));
    Обл.Объединить();
    Обл.РазмерШрифта(7);
    Обл.ВысотаСтроки(15);
    Обл.Текст="Ед. изм: литр";//+Товар.БазоваяЕдиница;
КонецПроцедуры //Этикетка
//_____________________________________________________________________________
Процедура ПриОткрытии()
    А[1] ="0011001";
    А[2] ="0010011";
    А[3] ="0111101";
    А[4] ="0100011";
    А[5] ="0110001";
    А[6] ="0101111";
    А[7] ="0111011";
    А[8] ="0110111";
    А[9] ="0001011";
    А[10]="0001101";
    
    В[1] ="0110011";
    В[2] ="0011011";
    В[3] ="0100001";
    В[4] ="0011101";
    В[5] ="0111001";
    В[6] ="0000101";
    В[7] ="0010001";
    В[8] ="0001001";
    В[9] ="0010111";
    В[10]="0100111";
    
    С[1] ="1100110";
    С[2] ="1101100";
    С[3] ="1000010";
    С[4] ="1011100";
    С[5] ="1001110";
    С[6] ="1010000";
    С[7] ="1000100";
    С[8] ="1001000";
    С[9] ="1110100";
    С[10]="1110010";
    
    ЭтикетокВСтроке=6;
КонецПроцедуры //ПриОткрытии
//_____________________________________________________________________________
Процедура ПечатаемНесколькоЭтикеток()
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица2");
    НомерКолонки=1;
    НомерСтроки=-4;
    Для Поз=0 По 13 Цикл
        СНовойСтроки=?(Цел(Поз/ЭтикетокВСтроке)=Поз/ЭтикетокВСтроке,1,0);
        Этикетка(СНовойСтроки,4600561021030+Поз*15);
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Опции(0,0,0,0);
    Таб.Показать("");
КонецПроцедуры //ПечатаемНесколькоЭтикеток()

//_____________________________________________________________________________

Скачать файлы

Наименование Файл Версия Размер
- 356
.1252048993 36,50Kb
25.09.09
356
.1252048993 36,50Kb Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Рытов (Арчибальд) 04.09.09 11:36
Добро пожаловать в мастер-класс от Трактора :))
2. sound sound (sound) 04.09.09 11:47
Все должно измеряться в литрах! :)
3. Трактор Трактор (Трактор) 04.09.09 11:49
(2) Это потому что мне лень было ставить ТиС и проверял перед выкладкой на Бухгалтерии, а там нет базовой единицы измерения.
4. Александр Рытов (Арчибальд) 04.09.09 11:52
(2,3) БАЗОВАЯ единица измерения, т.е. литр есть везде, имхо.
5. sound sound (sound) 04.09.09 11:52
Все таки хотелось бы видеть файлик 8-шный
6. sound sound (sound) 04.09.09 11:53
(4) я и говорю, хорошо когда есть литр, а лучше 2 :)
7. Трактор Трактор (Трактор) 04.09.09 11:56
(5) Зачем он тебе? Сейчас эта обработка не более чем прикол.
8. sound sound (sound) 04.09.09 11:58
(7) поприкалываться хотел:)
9. Сергей (Che) Коцюра (CheBurator) 10.09.09 02:47
Чего-то я при первоначальном просмотре - протащился, но плюсануть забыл... исправляюсь!
.
Решение - супер! Не надо ВК, не надо ocx, не надо шрифтов. Нужен инструмент, который есть - 1Ска! и все! - ее в отличие от ВК/осх/шрифтов - не надо настраивать! она - уже есть! вот если бы автор доделал не только еан13, а любой линейный шрифт 2 из 5 - коде39, коде 128... ммм вкусняшка...
aleks_cons; Vladal; murat_; +3 Ответить 2
10. Валерыч (Valerich) 10.09.09 06:33
11. Евгений Зикунов (jerokee) 10.09.09 06:43
Класс! От BarCode.ocx отказался давно из за геморроя с печатью очень мелких этикеток (20х30), на шрифтах работаю... Однако их можно забыть установить на комп, где надо печатать и все, приехали... Буду пробовать!
12. Трактор Трактор (Трактор) 10.09.09 10:01
(9)>> вот если бы автор доделал
Восемь лет прошло. Я уж и забыл об этой обработке. Вспомнил только из-за того что candy выложил генератор шрихкодов, уж совсем бесполезную вещь.
13. Александр Рытов (Арчибальд) 11.09.09 10:19
(9) Ты плюсанул при первоначальном просмотре. Только тогда это еще в лайфе было. :)))
14. Трактор Трактор (Трактор) 11.09.09 11:54
(11) Чтобы не забывать ставить шрифты есть такой путь решения:
1. Поднять на внутреннем web сервере сервис генерации штрихкодов http://pear.php.net/manual/ru/package.images.image-barcode.intro.php
2. 1С обращается на этот сервер, а тот отвечает сформированной картинкой.
3. Получаешь картинку и встрямляй куда хочешь.
web сервер может работать как обычный хттп сервер. Или как soap сервер. Так будет "1С совместимее" :-) и штрихкоды можно будет формировать на сервере 1С.
15. Евгений Зикунов (jerokee) 12.09.09 06:16
(14) - ну это уж совсем извращение - поднимать WEB-сервак ради генерации штрихкодов... У меня большинство клиентов используют однопользовательскую версию 1С-ки и городить огород ради этого... Проще уж тогда класть штрихкодовский шрифт в базу и, при необходимости, регистрировать его средствами 1С-ки...
16. Трактор Трактор (Трактор) 20.10.09 12:22
17. TSvetlakova2008 21.10.09 11:25
(7) не такой уж и прикол, при небольшой модификации очень полезная штука! :D
18. Осипов Сергей (fixin) 15.02.12 10:30
как говорится, голь на выдумки хитра! ;-)
19. Александр Милютин (sanfoto) 02.11.12 12:27
"+1" за то что исключительно средствами 1с-ины)) за силу мысли так сказать))
"-1" т.к. практическое применение .... увы подойдет далеко не всем т.к. тормозно)) даже по сравнению с картинками.
"||"
"0" (ноль)

я таки все буду продолжат печатать на ШРИФТАХ.
ИБО - активно используем принтеры штрих-кодов и нужна высокая потоковая скорость печати.
20. Трактор Трактор (Трактор) 02.11.12 12:46
(19) Дык ясно-понятно что шрифтами лучше. Потому публикация и начинается словами
[quote]В далёкие времена, когде не было достойных внешних компонент и шрифтов[/quote]
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа