Имя: Пароль:
1C
 
Значение поля "Номер" не уникально
0 Ticklion
 
01.03.23
10:33
Добрый день.

На сервере стоит 1С 8.3.17.2760 и типовая конфигурация Управление торговлей 11.5.10.73.
Есть веб-сервис, который создаёт документы Реализации товаров и услуг.
Бывают моменты, когда API-функция веб-сервиса запускается в двух потоках (фоновых заданиях) одновременно и пытаются так же одновременно создать Реализацию товаров и услуг.
В таком случае 1С выдаёт ошибку:
    {ОбщийМодуль.***ОбщиеМетоды.Модуль(4251)}: Ошибка при вызове метода контекста (Записать): Значение "***-2914" поля "Номер" не уникально
Также эта ошибка может появиться, если пользователь записывает новую Реализацию товаров и услуг в то время, как веб-сервис это делает.

В веб-сервисе создание объекта довольно простое:
ДокОбъектР = Документы.РеализацияТоваровУслуг.СоздатьДокумент();  
ДокОбъектР.Заполнить(СсылкаНаЗаказКлиента);
<дополнительное заполнение полей>

И в попытке:
ДокОбъектР.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
1 shuhard
 
01.03.23
10:37
(0) вводи префиксацию
2 vicof
 
01.03.23
10:42
Скорей блокировки
3 lodger
 
01.03.23
10:42
как разруливается ситуация когда 2 юзера вводят документ на одну организацию? суть такая же.

шаблон номера "***-2914" выглядит подозрительно.
4 Ticklion
 
01.03.23
10:46
(3) Я замазал часть номера, там формат: ***-***-1234
5 lodger
 
01.03.23
11:04
(4) тоже жуть какая то.
6 Ticklion
 
01.03.23
11:22
(2) Блокировка чего? Всей таблицы? Объект ещё не был создан. Номер автоматически присваивается ему после первой записи. Причём не могу найти, где именно.
В модуле объекта Реализации товаров и услуг:

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    Префикс = ОбщегоНазначенияУТПовтИсп.ДополнительныйПрефиксНумератораДокументыРеализацииТоваров();
КонецПроцедуры

И это ничего не даёт. Там результат "0" или "", а не по шаблону "***-***-1234".
Где прописано формирование префикса в УТ?
7 Dmitrii
 
гуру
01.03.23
11:30
Потому что не надо рукоблудить с автонумерацией документов в типовых конфигурациях и придумывать какие-то свои велосипеды на эту тему. Тем более, что в большинстве случаев велосипеды эти имеют квадратные колёса.
Придумали какую-то свою нумерацию - вот и разруливайте теперь сами.
Если бы нумерация была типовая, такой проблемы бы не возникало. Типовой нумератор на уровне платформы разруливает такие проблемы и ошибка неуникальности номера там может возникнуть только в случае, когда достигнут предел нумерации и невозможно присвоить очередной номер.

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

Проходите в отладке весь код вашего веб-сервиса и смотрите - откуда и в какой момент присваивается номер документа.
8 Гипервизор
 
01.03.23
11:31
(6) Так префикс тут не при чём. Первый документ когда-то создали с хитрым номером, а последующие номера +1 к последнему и всё.
9 Ticklion
 
01.03.23
11:45
(7) В расширениях нет доработок, которые бы меняли номер при записи, при проведении или при установке нового номера.
То, что я написал выше, взято из типовой конфигурации.
10 Ticklion
 
01.03.23
13:20
Причём, этот конфликт начал возникать только в последние две недели, раньше веб-сервис спокойно создавал документы и не жаловался, что не может сам подобрать следующий номерок при записи.
При тестах заполнения на основании Заказа клиента я не заметил, чтобы номер заполнялся откуда-либо, т.е. он остаётся пустым перед первой записью, что должно дать понять 1С, что надо автоматически пронумеровать его.
11 Dmitrii
 
гуру
01.03.23
15:05
(9) Чудес не бывает.
Сервис нумерации является сервисом, предоставляемым кластером серверов. Ему плевать во сколько потоков у вас там одновременно создаются документы. Он очередной номер выдаёт последовательно.

Так что повторюсь. Берите отладчик и смотрите - в какой момент и каким алгоритмом присваивается номер документа.

>>  взято из типовой конфигурации.

О каком типовом веб-сервисе идёт речь?
12 Мультук
 
гуру
01.03.23
15:06
(10)

Отметил себе пересмотреть на выходных доктора Хауса с его "Все пациенты - врут, а 1С-ники при этом ..."
13 Ticklion
 
01.03.23
16:40
(11) Веб-сервис руками написан, создаётся документ безо всяких управляемых транзакций и блокировок.
Но нумерация документов нигде не переработана и не переписана, она типовая.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс