Нужно создать свой нумератор в документе, для уникального штрих кода
10 символов минуя префикс и контрольное число
решил сделать при записи ссылку на справочник или регистр сведений
и у того и у другого можно сделать уникальное чисельное поле,
через что лучше реализовать? я больше склоняюсь к справочнику, мне как выходцу 1с 7.7
как то привычнее.
---
Нумератор лучше вообще самому не делать, а подписать на это платформу. Это избавит от многих проблем.
Из этих соображений напрашивается справочник, у которого можно будет задействовать системный номер в качестве источника нумерации.
---
Если нужна ссылка на объект то справочник. Если срезы на дату то регистр.
По быстродействию они один хрен уже.
---
Нумератор лучше вообще самому не делать, а подписать на это платформу. Это избавит от многих проблем.
Из этих соображений напрашивается справочник, у которого можно будет задействовать системный номер в качестве источника нумерации.
---
Так и собрался делать!
---
А чем не подойдет УникальныйИдентификатор() ? Он ведь уже есть.
---
тем, что человеку нужен уникальный EAN13
---
Если штрихкод идентифицирует документ, то почему не взять номер документа?
---
номер документа уникален обычно в пределах года (ну или как настроить).
---
А если 10 организаций с 10ю префиксами?
---
Абсолютно не проблема. Тебе нужно просто закодировать префиксы и все. Двух цифр думаю хватит. Вряд ли у тебя будет сто префиксов и более.
---
Еще и дату тогда добавить
---
Это не проблема обычно. Пусть автор сначала подробностей насыпет. Что и зачем он штрихкодировать хочет. Тогда дам конкретный рецепт.
---
Если именно документы штрихкодируются, то никаких отдельных нумераторов обычно нафиг не надо.
---
делаете РегистрСведений "Нумераторы" с измерением "Нумератор"(строка) и ресурсом "значение"(число).

и делаете функцию в общем модуле:

```1c
    Функция ПолучитьЗначениеНумератора(Нумератор = "мой нумератор") Экспорт

    ТекущееЗначение = 0;

    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);

    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить();
    ЭлементБлокировки.Область = "РегистрСведений.Нумераторы";
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.УстановитьЗначение("Нумератор", Нумератор);
    Блокировка.Заблокировать();

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Нумераторы.Значение
    |ИЗ
    | РегистрСведений.Нумераторы КАК Нумераторы
    |ГДЕ
    | Нумераторы.Нумератор = &Нумератор";
    Запрос.УстановитьПараметр("Нумератор", Нумератор);

    Выборка = Запрос.Выполнить().Выбрать();

    Если Выборка.Следующий() Тогда
    ТекущееЗначение = Выборка.Значение;
    КонецЕсли;

    НСтр = РегистрыСведений.Нумераторы.СоздатьМенеджерЗаписи();
    НСтр.Наименование = Нумератор;
    НСтр.Значение = ТекущееЗначение + 1;
    НСтр.Записать();

    ЗафиксироватьТранзакцию();

    Возврат Формат(ТекущееЗначение, "ЧЦ=10; ЧН=0; ЧВН=; ЧГ=0");

    КонецФункции
```
---
Вот прелесть системной нумерации именно в том, что она не может стать узким местом по блокировкам. Но я сильно сомневаюсь что ТС вообще нужен отдельный нумератор.
---
да кто ж спорит с тем, что системная нумерация - лучшее решение в плане производительности, чем какое-то свое решение.
Вопрос в том, каким образом получать новый номер системного нумератора так, чтобы оно учитывало многопользовательскую работу.

Есть объект метаданных "нумератор" у документов, можно воспользоваться им, если устроит его функционал.
---
У тебя хотя бы многопользовательский доступ разруливается. Многие об этом даже не задумываются. "А что, у меня все работает. Значит, реализовано правильно".
В качестве альтернативы можно элементы справочника клепать и использовать их нумерацию. Они по блокировкам конфликтовать не будут,. Но места больше будет занимать, да.
---
ИМХО, делать справочник и плодить в нем элементы ради получения номера - такое себе решение, хотя оно и самое простое в реализации.
---
А мне нравится :) Если оставить только номер, то табличка совсем худая будет. Вполне вменяемый размен места на диске на параллельность получения номеров. И это притом, что ее еще и чистить можно. Но на практике не использовал - всегда удавалось выкрутиться без доп-нумераторов.
---
А нумератор это единственное измерение? Может что-то недопонимаю, по измерениям записи уникальны. Как с одним значением измерения делать записи в регистр
---
да, но "имена" нумераторам можно задавать разные, если требуется несколько независимых.
---
просто в 10 написано мой нумератор как переменная, вот и задумался как. На самом деле у себя реализовал через числовое измерение и добавлял единичку в конце. Но в коде написано "Мой нумератор". К тому, что имелось ввиду, что это изменяемая переменная или как написано. Если как написано, то не понял как реализовал. Возможно есть еще одно измерение с нумерацией.
А еще у другого разработчика прочитал техзадание, где нумерацию делали как: добавляли перечисление ПространстваНумерации со значением "СерииНоменлкатуры", добавляли регистр с измерением (ссылкой) на это перечисление и ресурсом "Нумератор". Тут не понял как сделано. Ведь если одно измерение ссылка на перечисление, то как это может работать. Если есть понимание, подскажите.
---
В типовой ут под штрихкодом понимают уникальный идентификатор. Т.е. он зашифрован в штрихкоде. Поскольку он уникален в пределах базы то отличный вариант для кодирвоания.
---
Уникальный идентификатор - это десятичное число с 38 нулями. Получая от него в разы более короткий хеш при желании засунуть его в EAN-13 - было бы неплохо проверить его уникальность, что сразу сводит на нет все плюшки. В общем гуид - далеко не самый оптимальный вариант для штрихкодирования, даже если в qr его пихать. Обычно всегда можно найти гораздо более компактные и несложные варианты.
---
Возможно, что автор штрихкодить хочет несколько видов документов. Тогда Даты и номера недостаточно, нужен хотя бы еще префикс. А для него можно создать справочник - (ВидДокумента,Префикс)
---
Да я тоже писал про уникальный идентификатор
---
..
---
и зачем так усложнять, если EAN13 может содержать ТОЛЬКО цифровые значения?
---
хранить же его нужно, а так уже ведь все есть
---
я уже дал 100% работающее решение в (10) без привлечения УИ и вычисления хэша от него.
---
Умная мысля приходит апосля!
Текущее Unix epoch время:
1636648185

текущий Unix time будет всегда уникален!
2 документа в одну секунду двумя пользователями запишутся по теории вероятности 1 раз из миллиона или даже больше
---
Божечки, очередной велосипед. В БСП уже есть нумерация документов искаропки.
---
а если руками время ставят начало/конец дня?
---
так использовать не время документа, а текущее время формирования штрихкода.
У меня в одном из проектов так и сделано, для штрихкода талона, плюс префикс места выдачи. Но использую CODE128.
---
Code 128 не считывается сканером, не хватает размера этикетки 58х60
с монитора в большом виде читается.
флаг ЧБ печати пробовал не помогает,
Придется переделывать на ean 13