Имя: Пароль:
1C
1С v8
Уникальность артикула номенклатуры
0 korgallom
 
04.10.24
13:21
Добрый день, уважаемые форумчане.
У нас в 1С:КА 2.5.17 существует своя функция, которая создает свой артикул уникальный, функция вызывается перед записью номенклатуры, в ней выполняется запрос, который по шаблону, например 134, ищет последний артикул, где первые 3 символа совпадают, например 134008, находит последний артикул, после чего добавляем 1, и артикул 134009 готов.
Проблема в том, что если несколько пользователей создают одновременно номенклатуру, артикулы задваиваются. Может кто посоветует, куда можно копнуть.
Вариант с блокировкой не подходит.
Может быть, как-то использовать нумератор документов, например.
1 maxab72
 
04.10.24
11:43
При записи артикул не создавать, а записывать ссылки номенклатуры в очередь (например список значений) и потом общим регламентным заданием раздавать им артикулы)
2 shuhard
 
04.10.24
11:50
(0)[несколько пользователей создают одновременно номенклатуру ]
используй MDM и одну точку ввода
3 korgallom
 
04.10.24
13:25
(1) Вариант, заодно и скорость записи увеличить, единственная проблема, что у пользователя будет открыта номенклатура и если её например заблокировать, то будет ошибка. И пользователи будут думать, где же артикул)
4 lEvGl
 
04.10.24
11:54
почему блокировка номенклатуры не вариант?
если совсем не вариант, то можно вынести счетчики в отдельное место, где блокировка вариант
заодно проблем с формированием строковых счетчиков можно избежать, сделать число и прибавлять 1
5 maxab72
 
04.10.24
11:52
(3) если ошибка - ссылка не удалятся из очереди, а ждет когда пользователь проснется, получит по ушам и закроет карточку. потом с очередной порцией получит свой артикул.
6 korgallom
 
04.10.24
11:53
(2) вы про 1С:MDM Управление нормативно-справочной информацией?
7 Timon1405
 
04.10.24
11:55
ищет последний артикул где первые 3 символа совпадают
какой артикул будет следующим для 134999?
8 korgallom
 
04.10.24
12:00
(7) там в случае что больше нет шаблон обновляется на 135, это отдельная функция. Эта функция работала 4 года успешно, пока я так понимаю штат не увеличился))
9 lEvGl
 
04.10.24
12:07
(8) все грамотно там 👍
10 Timon1405
 
04.10.24
12:09
в типовой в справочнике виды номенклатуры в настройках создания номенклатуры для каждого реквизита номенклатуры есть поле-колонка "использовать в контроле уникальности". это должно работать из коробки
11 korgallom
 
04.10.24
12:13
(10) проверил в используемых видах данная настройка стоит истина.
12 СвинТуз
 
04.10.24
13:16
(0)
Главное чтобы разрядность не закончилась ...

в (10) наверное лучшее решение.
13 CepeLLlka
 
04.10.24
12:21
(12)В УТ в кодах весовых товаров есть такой прикол, только 10 000 весовых товаров может быть и всё. Жалко было походу ещё один разряд добавить, хз
14 Timon1405
 
04.10.24
12:26
(11) там еще константа есть КонтролироватьУникальностьРабочегоНаименованияНоменклатурыИХарактеристик
может что-то сломали в дописках что до проверки не доходит? обменданными.загрузка=истина или что-то в этом роде.
впрочем, там контроль рабочего наименования вцелом, а не отдельных его частей, может это и не ваш случай
15 korgallom
 
04.10.24
12:25
(10) проверил перезаписал дубликат перезаписался без ошибки. Может где отключили программно...
16 Aleksey
 
04.10.24
13:14
Так а почему нельзя артикул к коду приравнять?
17 korgallom
 
04.10.24
13:25
(16) код с префиксом, в теории это бы сработало, но бизнес может не оценить.
18 AAA
 
04.10.24
13:30
(17)удалите префикс
Если в артикуле не заложен смысл, то какая разница как он будет формироваться. Ваш артикул все равно бестолковый. Это не артикул, а номер по порядку. И код тоже номер по порядку
Ваш артикул просто не нужен. Он лишний
19 PLUT
 
04.10.24
13:44
(0) ну как вариант добавить свой регистр сведений для "нумератора" артикуйлов: префикс - три первых цыхры артикула, номер - последний присвоенный...

была задача как-то нумеровать договора в отдельный реквизит префикс-номер (причем префиксы разные, длина номера тоже разная - настраивалось в отдельном справочнике префиксов)

в процедуре заполнения на форме была кнопочка [ <= ] присвоить DocumentID

в обормотчике кнопки:

Подробности
ПрефиксНомера     = ВыбранныйПрефикс.ПрефиксНомера;
    ДлинаНомера        = ВыбранныйПрефикс.ДлинаНомера;

    НачатьТранзакцию();
    
    БлокировкаДанных = Новый БлокировкаДанных;
    ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.LastDocumentID");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.УстановитьЗначение("Prefix", ВыбранныйПрефикс);
    БлокировкаДанных.Заблокировать();
    
    Запрос = Новый Запрос;
    Запрос.Текст = ПолучитьТекстЗапросаПоследнегоНомераDocumentID();
    Запрос.УстановитьПараметр("Префикс", ВыбранныйПрефикс);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    
    НовыйНомер = Выборка.Номер + 1;
    
    МЗ                 = РегистрыСведений.LastDocumentID.СоздатьМенеджерЗаписи();
    МЗ.Prefix         = ВыбранныйПрефикс;
    МЗ.LastNumber     = НовыйНомер;
    МЗ.Записать();
    
    ЗафиксироватьТранзакцию();
    
    Объект.DocumentID = СокрЛП(?(ПустаяСтрока(ПрефиксНомера), "", ПрефиксНомера + "-") + Формат(НовыйНомер, "ЧГ=0"));
    
    ЭтаФорма.Модифицированность = Истина;
20 AAA
 
04.10.24
13:33
(19)еще добавить пару подписок на события и регламентное задание
21 PLUT
 
04.10.24
13:45
(20) для чего?

пользователи ручками же создают номенклатуру

регистр с "нумератором" и блокировка обеспечат уникальность артикуйла при одновременном заведении номенклатуры ручками(вручную)
22 arsik
 
04.10.24
13:56
(0) ПередЗаписью создаете новый, а в ПриЗаписи проверяете, есть ли дубликат. При записи в транзакции выполняется, так что дубликатов не будет.
23 lEvGl
 
04.10.24
13:58
(21) та я уже предлагал, не влетело)
ответа на вопрос "что с блокировкой номенклатуры" не последовало
24 PLUT
 
04.10.24
13:58
(23) ага, в (4) то же самое
25 Eiffil123
 
04.10.24
14:33
(0) зачем изобретать велосипед, если с блокировкой можно это решить, причем достаточно не сложно
26 Злопчинский
 
04.10.24
17:32
А почему в артикул тупо не пихать уникальный код номенклатуры?
27 Serg_1960
 
04.10.24
18:09
"Вариант с блокировкой не подходит."(0) Ну почему-же сразу "не подходит"? Можно блокировать константу, которая используется в качестве флага монопольного доступа к механизму автонумерации артикулов.
28 Serg_1960
 
04.10.24
18:15
+(27) Захватил константу / заблокировал / установил флаг / создал / записал уникальный артикул / сбросил флаг / разблокировал константу... "И пусть весь мир подождет"(слоган Даниссимо)
29 craxx
 
04.10.24
18:49
(0) механизм штрихкодов чем плох?
30 DrZombi
 
07.10.24
06:59
(0) При записи элемента блокировать регистр, где у вас там нумератор...

1. Не искать номер, а хранить его в том же регистре, хоть в разобранном состоянии, хоть как-то.
2. Структуру регистра придется продумать... по обстановки (утро, думать все нет желания)
    Но в структуре писать УИД записи, для контроля, что запись не изменилась, пока вы там её ждали :)
3. Перед записью блокировать запись, пока не запишется с новым, следующим номером.
...
4. И так по кругу... По скорости вы не особо заметите просадки :)
31 Рэйв
 
07.10.24
07:36
>>несколько пользователей создают одновременно номенклатуру,
бить ремнем по наглым мордам не пробовали?
32 AlexKimp
 
07.10.24
08:08
(31) за что? движуха у конторы, например, такая, что там один кладовщик коней двинет, поэтому их там 10. нормальная ситуация

(0), (18) да, для поиска решения неплохо бы озвучить бизнесовый смысл артикула
33 Krendel
 
07.10.24
09:02
(0) Что за позорище, скопируй присвоение артикула как кода в типовой
34 СвинТуз
 
07.10.24
09:58
(0)
Вообще надумано.
Артикул такая штука уникальность, которой всегда поддерживалась вне 1с кладовщиками и т.д.

Абы как с потолка в приличных конторах где он реально нужен не назначается.
Артикул = нумератор(порядковый номер) это нонсенс.
Используйте код.
35 maxab72
 
07.10.24
11:20
(34) Уникальность артикула — это зона прямой ответственности товароведа, а не кладовщика. Например, приходит ткань в голубой горошек с текстильной фабрики в Цзянь-Хао с артикулом таким-то, а потом точно такая же ткань с тем же самым рисунком от текстильной фабрики в Чунь-Цинь-Тао (очень частый случай, даже если фабрики между собой никак не связаны) под другим артикулом. И товаровед дает распоряжение кладовщикам присвоить и той и другой ткани единый внутренний артикул, который сам и составит по каким-то внутренним правилам.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn