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

25.01.10

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

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

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

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

См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1371    14    user706545_kseg1971    0    

5

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

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2339    zhenyat    7    

8

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

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    5138    Zoltan_Black    11    

2

Универсальные функции Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13933    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10766    malovandrey    7    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18887    2    HAMMER_59    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. awk 744 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. Арчибальд 2709 25.01.10 11:50 Сейчас в теме
(1) Вот этот кусочек
   Четн = 0;
   Нечетн = 0;
   Для Индекс = 1 По 6 Цикл
    Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
    Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
   КонецЦикла;
   Четн = Четн * 3;
   КонтЦифра = 10 - (Четн + Нечетн) % 10;

Взят прямо из стандартной конфы копипастом :|
4. awk 744 25.01.10 12:00 Сейчас в теме
(3) Не боги горшки обжигают... Странно, но раньше в этой поговорке я видел другой смысл... :) Я просто был удивлен, что такой специалист, пишет такой код. Вы меня успокоили. А по поводу стандартных конфигураций... У меня иногда волосы встают дыбом - когда вижу их код... А особенно когда вижу комменты... Функция была прокомментирована в стандартной бухгалтерии 8. Списание партий по методу ФИФО. Как она списывала, я так и не понял (ни ФИФО, ни ЛИФО, ни по среднему там и рядом не лежало, а то бы не полез)... Просто переписал... Код функции сократился вдвое...
5. Арчибальд 2709 25.01.10 12:08 Сейчас в теме
(4) Но ДесятьПервых - это таки Одинадцать :o
А боги не обжигают горшки потому, что боятся лажануться :D
6. awk 744 25.01.10 12:33 Сейчас в теме
(5) Ух.. да... Вот и польза читабельности кода...
2. awk 744 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 744 25.01.10 12:53 Сейчас в теме
(0) По моему статья с комментариями - получилась наглядным пособием "Для чего читабельность нужна...". Хоть оформляй как отдельную тему... А то новички (по себе знаю) форматирование кода отрицают. Типа мол я же читаю свой код... И чем менее понятно напишут, тем круче себя считают...
Поручик; artbear; +2 Ответить
Оставьте свое сообщение