Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 сен 2024, 22:22

Штатная нумерация документа задваивает номера

Автор Vdeg, 11 мар 2013, 18:10

0 Пользователей и 1 гость просматривают эту тему.

Vdeg

Имеется проблема с нумерацией документа "Наряд заказ" в доработанной 1С Управлении торговлей.

Ситуация : длина номера документа в Конфигураторе = 14.

Автонумерация (в свойствах документа в Конфигураторе) отключена, проверка уникальности номера - тоже.

В процедуре ПередЗаписью() в модуле документа методом УстановитьНовыйНомер() документу присваивается номер 3-110313-00014, но затем (по просьбе пользователей) программный обработчик удаляет два ведущих нуля и номер превращается в 3-110313-014.

Проблема однако в том, что впоследствии, в другом новом наряде (в сессии другого пользователя программы) номер 3-110313-00014 тоже может быть присвоен программой (с обрезанием до 3-110313-014). Итого - возникают дубли номеров у совершенно разных нарядов :(

Как можно с этим бороться?

Версия платформы - 8.2.15.289, сервер приложений 1С и СУБД PostgreSQL работают под Linux.

MuI_I_Ika

Заголовок доставляет.
"Штатная нумерация документа задваивает номера"
По описанию получается, что от штатной нумерации ничего не осталось.

Предложение вернуться к штатной нумерации не принимается?

Slin

Цитата: Vdeg от 11 мар 2013, 18:10Автонумерация (в свойствах документа в Конфигураторе) отключена
:)

Добавлено: 12 мар 2013, 12:59


Проверяйте дубли перед записью документов
Что тут еще можно посоветовать?
skype: slin-dev

Vdeg

Цитата: MuI_I_Ika от 12 мар 2013, 12:55Заголовок доставляет.
"Штатная нумерация документа задваивает номера"
По описанию получается, что от штатной нумерации ничего не осталось.

Предложение вернуться к штатной нумерации не принимается?
Номера нужны вида 7-110313-NNN , где 7 - номер филиала, 110313 - дата, NNN - порядковый номер документа в течение дня.

Этот номер присваивается документу методом УстановитьНовыйНомер() - вот почему я написал в заголовке темы "Штатная нумерация задваивает ...".

За заполнение префикса в модуле документа отвечает предопределённая процедура :

ЦитироватьПроцедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
   //   СтандартнаяОбработка = Ложь;
   КодСклада1 = СокрЛП(ПараметрыСеанса.ТекущийПользователь.Склад.Код);
   // строка вида "М7"
   
   Если ПустаяСтрока(КодСклада1) Тогда
      // склад не определен
      НомерСклада = 0;
   ИначеЕсли СтрДлина(КодСклада1) = 1 Тогда
      // слишком короткий код
      НомерСклада = 0;
   Иначе
      // правильный код
      НомерСклада = Сред(КодСклада1, 2);
   КонецЕсли;
   
   Префикс = строка(НомерСклада)+"-"+строка(Формат(ТекущаяДата(),"ДФ=ддММгг"))+"-";
КонецПроцедуры
Добавлено: 12 мар 2013, 13:04


Цитата: Slin от 12 мар 2013, 12:57Проверяйте дубли перед записью документов
Да я поверить не могу, что эта задача не имеет другого решения! :fdbsdfbsd:

Slin

УстановитьНовыйНомер() просто вызывает событие ПриУстановкеНовогоНомера и отрабатывает алгоритм, а поскольку автонумерацию вы отключили.... то выдается последний номер.
Включите автонумерацию и установите длину кода равной 12 - теоретически поможет.
Добавлено: 12 мар 2013, 13:14


И предыдущую нумерацию не забудьте проверить
skype: slin-dev

Vdeg

Цитата: Slin от 12 мар 2013, 13:12Включите автонумерацию и установите длину кода равной 12 - теоретически поможет.
Длину кода установил = 12, не помогло!

Автонумерацию я включал, но она "хватает" номера через 2 : сначала 001, затем 003, потом 005 и так далее. Это в сессии одного пользователя.

Slin

Может вы зря делаете вызов УстановитьНовыйНомер?
skype: slin-dev

Vdeg

Цитата: Slin от 12 мар 2013, 13:24Может вы зря делаете вызов УстановитьНовыйНомер?
Может, и зря. Но в противном случае номер документа - пустой (пустая строка). Автонумерация-то отключена.
Добавлено: 12 мар 2013, 13:28


Цитата: Slin от 12 мар 2013, 13:12УстановитьНовыйНомер() просто вызывает событие ПриУстановкеНовогоНомера и отрабатывает алгоритм, а поскольку автонумерацию вы отключили.... то выдается последний номер.
Это не так.

Этот метод берёт НЕКИЙ последний номер, и к нему прибавляется 1.

Я на практике сейчас вижу : если применить УстановитьНовыйНомер() несколько раз, то все они выдают разные номера, последовательно увеличенные на 1.

Slin

Цитата: Vdeg от 12 мар 2013, 13:26если применить УстановитьНовыйНомер() несколько раз, то все они выдают разные номера, последовательно увеличенные на 1.
При отключенной автонумерации?
skype: slin-dev

Vdeg


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск