Восстанавливаем штрих-код (7.7)

Публикация № 64563

Разработка - Универсальные функции

6
Если сканер плохо читает...

Не секрет, что сканеры «в разрыв клавиатуры» иной раз «проглатывают» первый символ при чтении штрих-кода. Простая функция поможет штрих-код восстановить (см. рисунок):

	 Функция ВосстановитьEAN13(пКод)
    Если СтрДлина(пКод) = 13 Тогда
        Возврат пКод;
    ИначеЕсли СтрДлина(пКод) < 12 Тогда
        Возврат "";
    Иначе
        Для й = 1 по 10 Цикл
            ШтрКод = Строка(й - 1) + Лев(пКод,11); //Исправлено
            Четн = 0;
            Нечетн = 0;
            Для Индекс = 1 По 6 Цикл
                Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
                Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
            КонецЦикла;
            Четн = Четн * 3;
            КонтЦифра = 10 - (Четн + Нечетн) % 10;
            КонтКод = ?(КонтЦифра = 10, "0", Строка(КонтЦифра));
            Если Прав(пКод,1) = КонтКод Тогда
                Возврат ШтрКод + КонтКод;
            КонецЕсли;
        КонецЦикла;
        Возврат "";
    КонецЕсли;
КонецФункции //ВосстановитьEAN13
6

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. awk 692 25.01.10 11:08 Сейчас в теме
За алгоритм - плюс, за форматирование кода - минус. Пока не переписал в виде:
Функция ВосстановитьEAN13(пКод)
	ДлинаКода = СтрДлина(пКод);
	Если ДлинаКода = 13 Тогда
		Возврат пКод;
	ИначеЕсли ДлинаКода < 12 Тогда
		Возврат "";
	Иначе
		ДесятьПервых = Лев(пКод,10);
		Для й = 0 по 9 Цикл
			ШтрКод = Строка(й) + ДесятьПервых;
			СуммаЧетныхЧиселВКоде = 0;
			СуммаНечетныхЧиселВКоде = 0;
			Для Индекс = 1 По 6 Цикл
				СуммаЧетныхЧиселВКоде = СуммаЧетныхЧиселВКоде + Сред(ШтрКод, 2 * Индекс, 1);
				СуммаНечетныхЧиселВКоде = СуммаНечетныхЧиселВКоде + Сред(ШтрКод, 2 * Индекс - 1, 1);
			КонецЦикла;
			КонтрольнаяСумма = 10 - (СуммаЧетныхЧиселВКоде * 3 + СуммаНечетныхЧиселВКоде) % 10;
			КонтрольнаяСумма = ?(КонтрольнаяСумма = 10, "0", Строка(КонтрольнаяСумма));
			Если Прав(пКод,1) = КонтрольнаяСумма Тогда
				Возврат ШтрКод + КонтрольнаяСумма;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	Возврат "";
КонецФункции //ВосстановитьEAN13
Показать

алгоритм не понял...
Арчибальд; Istur; +2 Ответить
3. Арчибальд 2708 25.01.10 11:50 Сейчас в теме
(1) Вот этот кусочек
   Четн = 0;
   Нечетн = 0;
   Для Индекс = 1 По 6 Цикл
    Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
    Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
   КонецЦикла;
   Четн = Четн * 3;
   КонтЦифра = 10 - (Четн + Нечетн) % 10;

Взят прямо из стандартной конфы копипастом :|
4. awk 692 25.01.10 12:00 Сейчас в теме
(3) Не боги горшки обжигают... Странно, но раньше в этой поговорке я видел другой смысл... :) Я просто был удивлен, что такой специалист, пишет такой код. Вы меня успокоили. А по поводу стандартных конфигураций... У меня иногда волосы встают дыбом - когда вижу их код... А особенно когда вижу комменты... Функция была прокомментирована в стандартной бухгалтерии 8. Списание партий по методу ФИФО. Как она списывала, я так и не понял (ни ФИФО, ни ЛИФО, ни по среднему там и рядом не лежало, а то бы не полез)... Просто переписал... Код функции сократился вдвое...
5. Арчибальд 2708 25.01.10 12:08 Сейчас в теме
(4) Но ДесятьПервых - это таки Одинадцать :o
А боги не обжигают горшки потому, что боятся лажануться :D
6. awk 692 25.01.10 12:33 Сейчас в теме
(5) Ух.. да... Вот и польза читабельности кода...
2. awk 692 25.01.10 11:35 Сейчас в теме
(0) А вот так будет ещё и быстрее работать, за счет уменьшения количества операций:
Функция ВосстановитьEAN13(пКод)
   ДлинаКода = СтрДлина(пКод);
   Если ДлинаКода = 13 Тогда
      Возврат пКод;
   ИначеЕсли ДлинаКода < 12 Тогда
      Возврат "";
   Иначе
      ДесятьПервых = Лев(пКод,10);
      СуммаЧетныхЧиселВКоде = 0;
      СуммаНечетныхЧиселВКоде = 0;
      Для Индекс = 1 По 6 Цикл
      	СуммаЧетныхЧиселВКоде = СуммаЧетныхЧиселВКоде + Сред(ШтрКод, 2 * Индекс - 1, 1);
      	СуммаНечетныхЧиселВКоде = СуммаНечетныхЧиселВКоде + Сред(ШтрКод, 2 * Индекс, 1);
      КонецЦикла;
      // Подбор
      Для й = 0 по 9 Цикл
         КонтрольнаяСумма = 10 - (СуммаЧетныхЧиселВКоде * 3 + СуммаНечетныхЧиселВКоде + й) % 10;
         КонтрольнаяСумма = ?(КонтрольнаяСумма = 10, "0", Строка(КонтрольнаяСумма));
         Если Прав(пКод,1) = КонтрольнаяСумма Тогда
            Возврат Строка(й) + ДесятьПервых + КонтрольнаяСумма;
         КонецЕсли;
      КонецЦикла;
   КонецЕсли;
   Возврат "";
КонецФункции //ВосстановитьEAN13
Показать
Арчибальд; +1 Ответить
7. awk 692 25.01.10 12:53 Сейчас в теме
(0) По моему статья с комментариями - получилась наглядным пособием "Для чего читабельность нужна...". Хоть оформляй как отдельную тему... А то новички (по себе знаю) форматирование кода отрицают. Типа мол я же читаю свой код... И чем менее понятно напишут, тем круче себя считают...
Поручик; artbear; +2 Ответить
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков 147

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент Универсальные функции

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    62874    Serginio    104       

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    13801    Anzhey    13       

Получение характеристик и управление текущим процессом 1С на основе WMI 36

Статья Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Универсальные функции

Функционал для работы из 1С с текущим процессом класса Win32_Process. Пример получает текущее значение ОЗУ занятое процессом 1С. По описанной методике можно получать значения пиковых нагрузок на ОЗУ, время запуска текущей сессии 1С с точностью до миллисекунд. Определять загрузку активного ядра процессом и даже поменять приоритет самого процесса.

09.07.2012    18989    dusha0020    8       

Хитрость. Использование БУЛЕВО при OLE обмене/подключении из 7.7 к 8 17

Статья Системный администратор Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Перенос данных из 1С7.7 в 1C8.X Универсальные функции

Как известно, при OLE обмене доступны только типы СТРОКА, ЧИСЛО, ДАТА. А вот БУЛЕВО (ИСТИНА, ЛОЖЬ) использовать при подключении из 7.7 к 8 не получается. Как же быть? Есть хитрость, как использовать тип булево в семерке при обмене с 1С8! :)

28.09.2011    14072    bsturtle    9       

Быстрый поиск подчиненного документа, с помощью прямого запроса 1

Статья Программист Нет файла openconf 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

При ситуации, когда необходимо проверить, есть ли у документа подчиненный документ, конкретного вида или нет, если есть, вывести на экран, в этой ситуации будет полезна следующая функция глобального модуля. Работает только в SQL версии и при установленной внешней компоненте 1С++ !

26.05.2011    11494    Vix    1       

Посчитать людей по XML-файлам, выгруженным для ПФ 2010 7

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v77::Расчет 1С7:ЗиК БУ НУ Windows Управление персоналом (HRM) ФОМС, ПФ, ФСС Бесплатно (free) Обмен через XML Универсальные функции

Обработка считает и выводит людей, которые находятся в xml-файлах для пенсионного фонда. Также может служить "рыбой" для дополнительной обработки данных в файлах пенсионного фонда

24.01.2011    10421    81    kserdyukov    1       

Универсальный фильтр 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Универсальные функции

Удобный фильтр. Нет необходимости вешать на форму N-ое количество списков значений.

08.07.2010    8752    115    ShEvOvIcH    8       

Мьютексы в 1С 7.7 10

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Файловые протоколы обмена, FTP Универсальные функции

Существует ряд задач, которые требуют строго последовательного исполнения. Чаще всего это возникает при многопоточном программировании, в этом случае используются критические секции, но иногда надо синхронизировать и разные приложения - для этого существуют такие объекты ядра операционной системы как Мьютекс-ы. http://ru.wikipedia.org/wiki/Мьютекс В статье рассказывается как можно сделать аналогичный объект средствами 1С v7.7

02.07.2010    12266    Sk0rp    24       

Обработка для поиска Контрагентов 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Поиск данных Обработка справочников Универсальные функции

Не первая и не последняя.. Не лучшая, и не худшая. Просто вариант поиска контрагентов по нескольким словам или их частям в наименовании.

19.05.2010    8690    108    aka AMIGO    7       

Как получить GUID без v7plus.dll в Предприятии 7.7 10

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

Часто в терминальных сессиях у пользователю Windows не хватает прав на регистрацию v7plus.dll. Соответственно нельзя воспользоваться, например методом СоздатьGUID() класса V7SysInfo.

12.05.2010    12278    prolancer    5       

Алгоритм расчета периодов 3

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

Вычисление периодов в формате ГГММДД. Вычисление дат по формуле Дата + ГГММДД. Примечание: Даты передаем в виде 'ДД.ММ.ГГГГ', периоды - "ГГ-ММ-ДД". Пользуйтесь.

10.03.2010    8286    arithmometr    1       

Интервал дат прописью 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Универсальные функции

Иногда возникает необходимость подсчитать количество дней, недель, месяцев или лет в интервале дат и вывести результат прописью. Обработка предназначена для демонстрации работы функции ПолучитьИнтервалДат(Дата1,Дата2,Период) Используется стандартный файл прописи для рублей. Специально не оптимизировал функции, чтобы каждый мог настроить их под свои требования.

15.02.2010    7780    143    Vlan    3       

1С Предприятие 7.7 и Mozilla Thunderbird. Отправка писем из командной строки 5

Статья Системный администратор Программист Нет файла v77::ОУ v77::БУ 1cv7.md 1С7:Бух Windows Бесплатно (free) Универсальные функции Email

Клиент захотел чтобы у него из 1С формировались письма с вложениями и отправлялись через Mozilla Thunderbird. Из этого вышла маленькая процедура.

30.11.2009    12504    kasperok    15       

Транслитерация в латиницу 39

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Универсальные функции

При отправке SMSок из 1С столкнулся с тем, что текст отправлялся только латиницей, а данные-то в кириллице. В результате написал функцию перевода текста в латиницу. Может, кому-нибудь пригодится

02.10.2009    24338    yuraer    17       

Альтернатива стандартному предупреждению(вопросу) 18

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

Начальство решило, что на предупреждения оформляемые стандартными средствами 1С малоприметны... В результате родилась прикольная штучка... Вывод текста сообщения бАААААльшими буквами, цвет можно задавать. 7 кнопок видимость и текст задаются при вызове Возвращает текст нажатой кнопки..... ВК у нас не применяются...

28.08.2009    9158    59    nikakoy    29       

Создаем сортировку по подразделению в любом документе (Зарплата и Кадры 7.7) 3

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Windows Бесплатно (free) Универсальные функции

Создаем сортировку по подразделению (Зарплата и Кадры 7.7) на примере документа Выплата заработной платы

27.05.2009    10807    Craig    67       

Напоминалка дня рождения по ИНН 2

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::БУ 1cv7.md Украина Windows Бесплатно (free) Разное Универсальные функции

Используя конфигурацию для сельского хозяйства в Украине, понадобилась напоминалка о днях рождения сотрудников. В самой конфигурации не предусмотрено поле "День рождения", но зато есть ИНН, который и был использован для этой цели. Не судите строго, это первая разработка, выложенная мной на Ваш сайт.

01.04.2009    8487    117    stalker    9       

Функция перезагрузки Таблицы Значений по условиям 1

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Универсальные функции

Возвращает таблицу значений, отфильтрованную по условию в заданной колонке (равно, не равно, больше, меньше, содержит, равны две указанные колонки)

06.11.2008    4564    stellavolf    9       

Пакетный ввод на основании без изменения форм и модулей 20

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Бесплатно (free) Универсальные функции

Обработка демонстрирует подход для ввода на основании большого количества документов без правки модулей, с вызовом метода "ОткрытьФорму" - что позволяет не перетягивать код из модуля формы документа, и не менять его...

10.10.2008    20974    1014    Fragster    22       

Горячая печать реквизитов (их значений ) документов с использованием FormEx 19

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Печатные формы документов Универсальные функции

Иногда хочется увидеть все реквизиты документа, в том числе и те, которые на форме отсутствуют. Особенно, если они автоматом понаустанавливались. Приведенный код позволяет по горячим клавишам CTRL+ALT+P получить распечатку ВСЕХ реквизитов, начиная от общих, заканчивая ТЧ. Код необходимо вставить в Глобальный модуль, или в Дополнительный глобальный модуль, подключенный с помощью Formex

14.04.2008    16254    Abadonna    11       

Конвертер таблиц из 1С (7.7) в MS Office Word 23

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Загрузка и выгрузка в Excel Работа с интерфейсом Универсальные функции

Обработка конвертирует печатную форму 1С в формат Word. Преобразование сложных таблиц проходит медленно. Проверено на Word 2003. Объединение - только горизонтальное. Не идеал, но приемлемо. Если нет параметра - открывается демо таблица.

10.12.2007    12706    219    Джуниор    8       

FormEx. Быстрый поиск в поле ввода 2.1 27

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Бесплатно (free) Поиск данных Разработка внешних компонент Универсальные функции

Универсальный инструмент пользователя, требует FormEx v2.0.5.0 - http://dorex.pro/?projects&formex&download Реализация механизма быстрого поиска элемента по первым символам непосредственно в поле ввода. Ограничения: Не работает для полей ввода многострочной части.

26.09.2007    15485    261    item    27       

[МФ] Тривиальный шаблон обработки с использованием множественного фильтра (МФ) 17

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ 1cv7.md Windows Бесплатно (free) Универсальные функции

Надоело копи-пастить МФ... Простой шаблон обработки с использованием МФ. На форме - минимально требуемые реквизиты для типового МФ, в коде - обработка этих реквизитов... Т.е. - типа "облагороженный" кусок из кода типовой ТиС для быстрого клонирования для своих обработок

15.09.2006    15467    89    CheBurator    10       

Формирование штрихкодов (EAN-13) 54

Инструменты и обработки Программист Внешняя обработка (ert,epf) v77::ОУ v77::БУ v77::Расчет 1cv7.md Windows Розничная торговля Учет ТМЦ Бесплатно (free) Сканер штрих-кода Ценники Универсальные функции

Один из наиболее простых алгоритмов формирования штрихкодов с использованием специализированных шрифтов (BearRock). Обработка автоматически вычисляет контрольную цифру по коду и показывает на экране образец сформированного штрихкода.

10.04.2006    29563    1163    imsoftware    13