Что значит разбора в 1с

Обновлено: 05.07.2024

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

До недавних пор я и сам не задумывался о том, что значат эти символы. Всегда интересовала только первая строка - дата производства. Такая маркировка характерна для всех типов консервов: мясо, рыба, овощи.

У всех консервов на первой строчке дата производства. А дальше что? У всех консервов на первой строчке дата производства. А дальше что?

Как правило, на банках можно рассмотреть ещё две или три строки с непонятными знаками. Варианты могут быть такими:

Информация может располагаться в 2 или 3 строчки, на дне и крышке Информация может располагаться в 2 или 3 строчки, на дне и крышке

Буква во второй или третьей строчке (в таблице - "А") обозначает индекс системы, в ведении которой находится предприятие-изготовитель:

А что означают цифры? Давайте я коротенечко и как можно проще донесу до вас информацию, которую удалось на этот счёт "накопать".

Рыбные консервы

С рыбными консервами все оказалось более-менее прозрачно. Возьмем банку сардины иваси. В первой строке по традиции - дата производства.

По символам на банке можно идентифицировать производителя. Если предприятие работает в одну смену, информация пишется в 2 строки По символам на банке можно идентифицировать производителя. Если предприятие работает в одну смену, информация пишется в 2 строки

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

Мясные консервы

А вот тут начинается все самое интересное. Почему-то производители именно мясных консервов любят пускаться во все тяжкие, подмешивать в банку невесть что и скрывать истинное лицо продукта.

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

Вот так выглядит качественный и честный продукт:

Ассортиментный номер "01" - это говядина высшего сорта Ассортиментный номер "01" - это говядина высшего сорта

Вверху срок годности. Вторая строка - номер смены, ассортиментный номер и код завода. На этикетке значится ГОСТ. В составе - мясо, жир, специи.

А вот так выглядит суррогат. На этикетке гордо и крупными буквами значится "Говядина тушёная".

Смотрим маркировку. Смена и код изготовителя есть, но нам это не столь важно. А вот ассортиментный номер вызывает вопросы. Здесь уже не "01", а "980".

В составе столько всего намешано , что становится ясно: продукт крайне сомнительный. И отметки ГОСТ, кстати, на этикетке нет. Расчёт понятен: то, что написано мелкими буквами, не каждый сможет разглядеть. Здесь выручит информация, выбитая на дне банки.

В составе говядина, жир, субпродукты свиные, соевый белок. Разве это разглядишь? В составе говядина, жир, субпродукты свиные, соевый белок. Разве это разглядишь?

Ещё один экземпляр. Тушёнка, которую купил в Светофоре. На этикетке "Свинина тушёная", а в составе ингредиенты, которых здесь явно быть не должно (например, мясо курицы).

Отметка, о том, что тушёнка "ГОСТ" имеется, а вот ассортиментный номер и вовсе отсутствует .

Производитель не указал ассортиментный номер СОВСЕМ Производитель не указал ассортиментный номер СОВСЕМ

Прочитал в СМИ, что отсутствие ассортиментного номера говорит о том, что:

Консервы не прошли допуск эпидемиологического надзора после пастеризации и стерилизации.

Главное

Таким образом, наличие ассортиментного номера - это знак добросовестного производителя. Если хотите купить натуральные консервированные говядину и свинину, ищите на банке стандартные номера 01 (говядина) и 03 (свинина) . А дополнительная буква "В" укажет на то, что это продукт Высшего сорта.

Маркировка 03В - что значит "Свинина высший сорт". Но не всегда эта буква есть даже на консервах с пометкой "01" и "03" Маркировка 03В - что значит "Свинина высший сорт". Но не всегда эта буква есть даже на консервах с пометкой "01" и "03"

Усложняет задачу распознавания ассортиментных номеров отсутствие реестров в открытом доступе. Долгие поиски по интернету позволили мне найти подробный реестр для рыбных консервов (они, кстати, и в ГОСТе указаны), а об ассортиментных номерах мясных консервов данных очень мало.

Хотелось бы, чтобы в ближайшем будущем такие реестры стали доступны рядовому потребителю. А пока важно знать самые основные, ну и решающую роль играет сам факт наличия ассортиментного номера: раз он есть, значит производитель честен с нами и вероятность получить кота в мешке уменьшается.

Строки сравниваются посимвольно по коду символа, для ясности несколько примеров "Строка12" < "Строка2", "8.3.9.2000" > "8.3.8", "8.3.9.2000" > "8.3.10"

С учетом регистра можно сравнить строки через знаки сравнения как в примерах

Сравнение без учета регистра можно произвести функций СтрСравнить. Поддерживается с платформы 8.3.6.

  • -1 - первая строка меньше второй
  • 1 - первая строка больше второй.
  • 0 - первая строка равна второй

Преобразование в строку (Строка, Формат)

В языке 1С есть автоматическое преобразование типа когда все части выражения приводятся к типу первого выражения

Преобразование функцией Строка

при преобразовании появляется символ неразрывный пробел, а он обычно не нужен

"Правильнее" будет преобразовывать функцией формат, которая приводит к строке простые типы и можно воспользоватся конструктором


Строка на разных языках НСтр

Форматирование строки по шаблону СтрШаблон. Поддерживается с платформы 8.3.6.

Очень полезная функция которая позволяет избежать соединения строк и сделать текст более читабельным

Функции СтрСоединить, СтрРазделить. Поддерживается с платформы 8.3.6.

Очень полезные функции улучшают читаемость кода.

СтрРазделить удобна когда необходимо разобрать строку с разделителями, например CSV файл, разбор текста на слова, строки

Аналогично, только наоборот работает функция СтрСоединить, преобразуя массив к строке.

Другие функции работы со строками, которые могут быть полезны

СтрСократить (Текст, Количество, Многострочная = Ложь) - сокращает текст до заданной длины заменяя окончание на .

ЭтоКорректныйИдентификатор (Строка) - Проверяет является ли строка корректным идентификатором, строка вида СуммаКонтрагента, _Идентификатор

Когда в 1с встает вопрос разбора большого текста это уже зоопарк из СтрДлина, Сред, СтрНайти для повышения читаемости программ для подобных задач использую свои функции: РазборПрочитатьЦелоеЧисло, РазборПрочитатьШестнадцатеричноеЧисло, РазборПрочитатьНезначимые, РазборПрочитатьИдентификатор,

РазборПропуститьНаборСимволов, РазборПрочитатьСимвол, РазборПрочитатьДоСимвола, РазборНайтиТекст

Мир нейросетей становится все более реальным и входят в нашу повседневную жизнь, с целью упростить рутинные дела, которые отнимают наше время от более важных дел. Ни для кого не секрет, что обработка бухгалтерских документов занимает много времени и требует внимательности. Из-за монотонного ручного труда довольно часто допускаются ошибки, которые приводят к искажению учётных данных и влекут за собой еще больше проблем. Во избежание таких ошибок был разработан сервис, позволяющий избавится от ручного ввода документов и сосредоточится уже на финальной части, в формировании документа для проводки и загрузки его в систему.

Для корректной работы сервиса необходимо установить специальный модуль загрузки в 1С, который можно скачать после регистрации и установить в 3 шага самостоятельно без программиста - что очень удобно.

Шаг 1: Выбираем «Администрирование», выбираем пункт «Печатные формы, отчеты и обработки»


Шаг 2: Выбираем пункт «Расширения»


Шаг 3: Выбираем кнопку «Добавить из файла», куда добавляем скаченный модуль загрузки, после чего начинается автоматическая загрузка модуля.


После чего, в выпадающем списке меню появляется модуль, где можно настроить расширения под себя. В нашем случае необходимо было настроить автоматическое распознавание документов с загрузкой в систему.


Нажимаем «Настройка автоматической загрузки изображений на сервис» и в открывшейся вкладке в поле «Каталог сканов для автоматической загрузки» указываем путь к папке, к которой будет обращаться расширение за получением документов для распознавания. Для этого нажимаем на кнопку с тремя точками в конце поля и в открывшемся окне указываем путь к папке, и нажимаем на кнопку «Выбор папки».


После выбора папки, настраиваем расписание, согласно которому расширение будет обращаться к папке за документами к распознаванию. Для этого нажмите на кнопку «Настроить расписание автозагрузки». В открывшемся окне вставляем соответствующие настройки по времени и датам, и нажимаем на кнопку «ОК» и не забываем поставить флажок рядом с полем «Настроить расписание автозагрузки».


Теперь в папку, которую мы выбрали для автоматического распознавания документов, загружаем нужные нам файлы для распознавания (счет-фактура, УПД, ТОРГ-12 и т.д.) и в соответствии с установленным расписанием, файлы будут автоматически забираться из папки и уходить на распознавание. Можно настроить сканер на эту папку и тогда все документы, которые помещаются в сканер будут отправляться на сервис распознавания автоматически.

После распознавания, документы попадают в «Список документов на верификацию», где можно посмотреть, как документ был распознан «уверенно» или «неуверенно».


Да, важный момент, параллельно с автоматическим распознаванием всегда можно запустить документ на распознавание вручную – для этого создается отдельная папка.

Что значит «уверенно» или «неуверенно»?

«Уверенно» — это когда фон документа отображен зеленым цветом, это означает, что все поля документа уверенно распознаны и сопоставлены, соответственно, участие человека не требуется и документ готов к созданию, проводке. При выборе документа и двойном нажатии, откроется карточка документа, где будут отображены результаты распознавания.


Далее открывается окно с распознанным документом, в который можно внести изменения по необходимости, после чего осуществить проводку документа.


«Неуверенно» — это когда требуется участие человека для верификации распознанных данных/сопоставления с позициями в локальных справочниках. В этих случаях фон документа остался белого цвета и для его верификации необходимо открыть документ, дважды нажав на него.


После чего открывается форма документа для верификации:

- при нажатии на поле в области результатов распознавания, подсвечивается соответствующее поле на скане документа;


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


Во время тестирования сервиса отметили для себя следующие моменты:

обработка пакета документов из примерно 3 тыс страниц заняла порядка 2,5 часов (загружали по 20-комплектов, что очень сильно позволило сократить временные издержки;

цена за распознавание 1 страницы составила всего 5р., гораздо дешевле чем заносить данные вручную и привлекать к этому дополнительных сотрудников;

модуль загрузки CORRECT для 1С позволяет на данный момент распознавать 4 вида документов (акты, ТОРГ-12, УПД, счет-фактуры), но как рассказал разработчик планируется в ближайшее время добавить счет и авансовые отчеты.

Данная статья имеет цель собрать воедино и разобрать принципы и механизм работы кодировок текста, подробно этот механизм разобрать и объяснить. Полезна она будет тем, кто только примерно представляет, что такое кодировки текста и как они работают, чем отличаются друг от друга, почему иногда появляются не читаемые символы, какой принцип кодирования имеют разные кодировки.

Чтобы получить детальное понимание этого вопроса придется прочитать и свести воедино не одну статью и потратить довольно значительное время на это. В данном материале же это все собрано воедино и по идее должно сэкономить время и разбор на мой взгляд получился довольно подробный.

О чем будет под катом: принцип работы одно байтовых кодировок (ASCII, Windows-1251 и т.д.), предпосылки появления Unicode, что такое Unicode, Unicode-кодировки UTF-8, UTF-16, их отличия, принципиальные особенности, совместимость и несовместимость разных кодировок, принципы кодирования символов, практический разбор кодирования и декодирования.

Вопрос с кодировками сейчас конечно уже потерял актуальность, но все же знать как они работают сейчас и как работали раньше и при этом не потратить много времени на это думаю лишним не будет.

Предпосылки Unicode

Первые 7 бит (128 символов 2 7 =128) в этой кодировке были отданы под символы латинского алфавита, управляющие символы (такие как переносы строк, табуляция и т.д.) и грамматические символы. Остальные отводились под национальные языки. То есть получилось что первые 128 символов всегда одинаковые, а если хочешь закодировать свой родной язык пожалуйста, используй оставшуюся емкость. Собственно так и появился огромный зоопарк национальных кодировок. И теперь сами можете представить, вот например я находясь в России беру и создаю текстовый документ, у меня по умолчанию он создается в кодировке Windows-1251 (русская кодировка использующаяся в ОС Windows) и отсылаю его кому то, например в США. Даже то что мой собеседник знает русский язык, ему не поможет, потому что открыв мой документ на своем компьютере (в редакторе с дефолтной кодировкой той же самой ASCII) он увидит не русские буквы, а кракозябры. Если быть точнее, то те места в документе которые я напишу на английском отобразятся без проблем, потому что первые 128 символов кодировок Windows-1251 и ASCII одинаковые, но вот там где я написал русский текст, если он в своем редакторе не укажет правильную кодировку будут в виде кракозябр.

Думаю проблема с национальными кодировками понятна. Собственно этих национальных кодировок стало очень много, а интернет стал очень широким, и в нем каждый хотел писать на своем языке и не хотел чтобы его язык выглядел как кракозябры. Было два выхода, указывать для каждой страницы кодировки, либо создать одну общую для всех символов в мире таблицу символов. Победил второй вариант, так создали Unicode таблицу символов.

Небольшой практикум ASCII

Возможно покажется элементарщиной, но раз уж решил объяснять все и подробно, то это надо.

Вот таблица символов ASCII:


Тут имеем 3 колонки:

  • номер символа в десятичном формате
  • номер символа в шестнадцатиричном формате
  • представление самого символа.

Unicode

С предпосылками создания общей таблицы для всех в мире символов, разобрались. Теперь собственно, к самой таблице. Unicode — именно эта таблица и есть (это не кодировка, а именно таблица символов). Она состоит из 1 114 112 позиций. Большинство этих позиций пока не заполнены символами, так что вряд ли понадобится это пространство расширять.

Разделено это общее пространство на 17 блоков, по 65 536 символов в каждом. Каждый блок содержит свою группу символов. Нулевой блок — базовый, там собраны наиболее употребляемые символы всех современных алфавитов. Во втором блоке находятся символы вымерших языков. Есть два блока отведенные под частное использование. Большинство блоков пока не заполнены.

Итого емкость символов юникода составляет от 0 до 10FFFF (в шестнадцатиричном виде).

Записываются символы в шестнадцатиричном виде с приставкой «U+». Например первый базовый блок включает в себя символы от U+0000 до U+FFFF (от 0 до 65 535), а последний семнадцатый блок от U+100000 до U+10FFFF (от 1 048 576 до 1 114 111).

Отлично теперь вместо зоопарка национальных кодировок, у нас есть всеобъемлющая таблица, в которой зашифрованы все символы которые нам могут пригодиться. Но тут тоже есть свои недостатки. Если раньше каждый символ был закодирован одним байтом, то теперь он может быть закодирован разным количеством байтов. Например для кодирования всех символов английского алфавита по прежнему достаточно одного байта например тот же символ «o» (англ.) имеет в юникоде номер U+006F, то есть тот же самый номер как и в ASCII — 6F в шестнадцатиричной и 111 в десятеричной. А вот для кодирования символа "U+103D5" (это древнеперсидская цифра сто) — 103D5 в шестнадцатиричной и 66 517 в десятеричной, тут нам потребуется уже три байта.

Решить эту проблему уже должны юникод-кодировки, такие как UTF-8 и UTF-16. Далее речь пойдет про них.

UTF-8 является юникод-кодировкой переменной длинны, с помощью которой можно представить любой символ юникода.

Давайте поподробнее про переменную длину, что это значит? Первым делом надо сказать, что структурной (атомарной) единицей этой кодировки является байт. То что кодировка переменной длинны, значит, что один символ может быть закодирован разным количеством структурных единиц кодировки, то есть разным количеством байтов. Так например латиница кодируется одним байтом, а кириллица двумя байтами.

Немного отступлю от темы, надо написать про совместимость ASCII и UTF

То что латинские символы и основные управляющие конструкции, такие как переносы строк, табуляции и т.д. закодированы одним байтом делает utf-кодировки совместимыми с кодировками ASCII. То есть фактически латиница и управляющие конструкции находятся на тех же самых местах как в ASCII, так и в UTF, и то что закодированы они и там и там одним байтом и обеспечивает эту совместимость.

Давайте возьмем символ «o»(англ.) из примера про ASCII выше. Помним что в таблице ASCII символов он находится на 111 позиции, в битовом виде это будет 01101111 . В таблице юникода этот символ — U+006F что в битовом виде тоже будет 01101111 . И теперь так, как UTF — это кодировка переменной длины, то в ней этот символ будет закодирован одним байтом. То есть представление данного символа в обеих кодировках будет одинаково. И так для всего диапазона символов от 0 до 128. То есть если ваш документ состоит из английского текста то вы не заметите разницы если откроете его и в кодировке UTF-8 и UTF-16 и ASCII (прим. в UTF-16 такие символы все равно будут закодированы двумя байтами, по этому вы не увидите разницы, если ваш редактор будет игнорировать нулевые байты), и так до момента пока вы не начнете работать с национальным алфавитом.

Сравним на практике как будет выглядеть фраза «Hello мир» в трех разных кодировках: Windows-1251 (русская кодировка), ISO-8859-1 (кодировка западно-европейских языков), UTF-8 (юникод-кодировка). Суть данного примера состоит в том что фраза написана на двух языках. Посмотрим как она будет выглядеть в разных кодировках.



В кодировке ISO-8859-1 нет таких символов «м», «и» и «р».

Теперь давайте поработаем с кодировками и разберемся как преобразовать строку из одной кодировки в другую и что будет если преобразование неправильное, или его нельзя осуществить из за разницы в кодировках.

Будем считать что изначально фраза была записана в кодировке Windows-1251. Исходя из таблицы выше запишем эту фразу в двоичном виде, в кодировке Windows-1251. Для этого нам потребуется всего только перевести из десятеричной или шестнадцатиричной системы (из таблицы выше) символы в двоичную.

01001000 01100101 01101100 01101100 01101111 00100000 11101100 11101000 11110000
Отлично, вот это и есть фраза «Hello мир» в кодировке Windows-1251.

Теперь представим что вы имеете файл с текстом, но не знаете в какой кодировке этот текст. Вы предполагаете что он в кодировке ISO-8859-1 и открываете его в своем редакторе в этой кодировке. Как сказано выше с частью символов все в порядке, они есть в этой кодировке, и даже находятся на тех же местах, но вот с символами из слова «мир» все сложнее. Этих символов в этой кодировке нет, а на их местах в кодировке ISO-8859-1 находятся совершенно другие символы. А конкретно «м» — позиция 236, «и» — 232. «р» — 240. И на этих позициях в кодировке ISO-8859-1 находятся следующие символы позиция 236 — символ "ì", 232 — "è", 240 — "ð"

Значит фраза «Hello мир» закодированная в Windows-1251 и открытая в кодировке ISO-8859-1 будет выглядеть так: «Hello ìèð». Вот и получается что эти две кодировки совместимы лишь частично, и корректно перекодировать строку из одной кодировке в другую не получится, потому что там просто напросто нет таких символов.

Тут и будут необходимы юникод-кодировки, а конкретно в данном случае рассмотрим UTF-8. То что символы в ней могут быть закодированы разным количеством байтов от 1 до 4 мы уже выяснили. Теперь стоит сказать что с помощью UTF могут быть закодированы не только 256 символов, как в двух предыдущих, а вобще все символы юникода

Работает она следующим образом. Первый бит каждого байта кодирующего символ отвечает не за сам символ, а за определение байта. То есть например если ведущий (первый) бит нулевой, то это значит что для кодирования символа используется всего один байт. Что и обеспечивает совместимость с ASCII. Если внимательно посмотрите на таблицу символов ASCII то увидите что первые 128 символов (английский алфавит, управляющие символы и знаки препинания) если их привести к двоичному виду, все начинаются с нулевого бита (будьте внимательны, если будете переводить символы в двоичную систему с помощью например онлайн конвертера, то первый нулевой ведущий бит может быть отброшен, что может сбить с толку).

01001000 — первый бит ноль, значит 1 байт кодирует 1 символ -> «H»

01100101 — первый бит ноль, значит 1 байт кодирует 1 символ -> «e»

Если первый бит не нулевой то символ кодируется несколькими байтами.

Для двухбайтовых символов первые три бита должны быть такие — 110

110 10000 10 111100 — в начале 110, значит 2 байта кодируют 1 символ. Второй байт в таком случае всегда начинается с 10. Итого отбрасываем управляющие биты (начальные, которые выделены красным и зеленым) и берем все оставшиеся ( 10000111100 ), переводим их в шестнадцатиричный вид (043С) -> U+043C в юникоде равно символ «м».

для трех-байтовых символов в первом байте ведущие биты — 1110

1110 1000 10 000111 10 1010101 — суммируем все кроме управляющих битов и получаем что в 16-ричной равно 103В5, U+103D5 — древнеперситдская цифра сто ( 10000001111010101 )

для четырех-байтовых символов в первом байте ведущие биты — 11110

11110 100 10 001111 10 111111 10 111111 — U+10FFFF это последний допустимый символ в таблице юникода ( 100001111111111111111 )

Теперь, при желании, можем записать нашу фразу в кодировке UTF-8.

UTF-16

UTF-16 также является кодировкой переменной длинны. Главное ее отличие от UTF-8 состоит в том что структурной единицей в ней является не один а два байта. То есть в кодировке UTF-16 любой символ юникода может быть закодирован либо двумя, либо четырьмя байтами. Давайте для понятности в дальнейшем пару таких байтов я буду называть кодовой парой. Исходя из этого любой символ юникода в кодировке UTF-16 может быть закодирован либо одной кодовой парой, либо двумя.

Начнем с символов которые кодируются одной кодовой парой. Легко посчитать что таких символов может быть 65 535 (2в16), что полностью совпадает с базовым блоком юникода. Все символы находящиеся в этом блоке юникода в кодировке UTF-16 будут закодированы одной кодовой парой (двумя байтами), тут все просто.

символ «o» (латиница) — 00000000 01101111
символ «M» (кириллица) — 00000100 00011100

Теперь рассмотрим символы за пределами базового юникод диапазона. Для их кодирования потребуется уже две кодовые пары (4 байта). И механизм их кодирования немного сложнее, давайте по порядку.

Для начала введем понятия суррогатной пары. Суррогатная пара — это две кодовые пары используемые для кодирования одного символа (итого 4 байта). Для таких суррогатных пар в таблице юникода отведен специальный диапазон от D800 до DFFF. Это значит, что при преобразовании кодовой пары из байтового вида в шестнадцатиричный вы получаете число из этого диапазона, то перед вами не самостоятельный символ, а суррогатная пара.

Чтобы закодировать символ из диапазона 1000010FFFF (то есть символ для которого нужно использовать более одной кодовой пары) нужно:

  1. из кода символа вычесть 10000(шестнадцатиричное) (это наименьшее число из диапазона 1000010FFFF)
  2. в результате первого пункта будет получено число не больше FFFFF, занимающее до 20 бит
  3. ведущие 10 бит из полученного числа суммируются с D800 (начало диапазона суррогатных пар в юникоде)
  4. следующие 10 бит суммируются с DC00 (тоже число из диапазона суррогатных пар)
  5. после этого получатся 2 суррогатные пары по 16 бит, первые 6 бит в каждой такой паре отвечают за определение того что это суррогат,
  6. десятый бит в каждом суррогате отвечает за его порядок если это 1 то это первый суррогат, если 0, то второй

Для примера зашифруем символ, а потом расшифруем. Возьмем древнеперсидскую цифру сто (U+103D5):

Читайте также: