Консультация № 156310
30.12.2008, 13:13
0.00 руб.
0 1 1
Здравствуйте!
Вопрос состоит в том, что в базе нумерация используется дважды.
Одна идет порядковая у каждого документа своя, другая должна быть присвоена лицами принимающими документ (одна нумерация на все документы по поядку).
Но на у меня почему-то работает со сбоями, не знаю что влияет, то идет правильно, то останавливается на одной цмфре при Временном Запросе, потом опять начинает работать но уже со сбитой нумерацией.
Заранее благодарен

Приложение:
В диалоге есть: кнопка "Процедура получить номер" (для получения предыдущего номера из реестра) и кнопка "Регистрация" (для присвоения нового номера - просто стоит при нажатии +1)

Процедура ПолучитьНомер()
ВремРегистры=СоздатьОбъект("Регистры");
Рег=ВремРегистры.Товар;
//РассчитатьРегистрыНа(ДатаДок);
Рег.ВыбратьИтоги();
Рег.ПолучитьИтог();
(Поле "Оформить" - берется из перечисления нескольких пунктов приема документов, и поле "НомерРег" - отражает нумерацию.)
Если Оформить = Перечисление.Пост.НомерРегПостА Тогда
НомерРег=Рег.НомерРегПостА;
ИначеЕсли

Оформить = Перечисление.Пост.НомерРегПостБ Тогда
НомерРег=Рег.НомерРегПостБ;
ИначеЕсли

Оформить = Перечисление.Пост.НомерРегПостС Тогда
НомерРег=Рег.НомерРегПостС;
КонецЕсли;

КонецПроцедуры

Процедура Регистрация()
НомерРег=НомерРег+1;
Если НомерРег>0 Тогда
Форма.Регистрация.Доступность(0);
Форма.ПолучитьНомер.Доступность(0);
КонецЕсли;
КонецПроцедуры

// И еще в модуле документа
Если Оформить = Перечисление.Пост.НомерРегПостА Тогда
Регистр.Товар.НомерРегПостА = НомерРег+1;
Регистр.Товар.ДвижениеВыполнить();
Регистр.Товар.НомерРегПостА = НомерРег;
Регистр.Товар.ДвижениеРасходВыполнить();
ИначеЕсли
Оформить = Перечисление.Пост.НомерРегПостБ Тогда
Регистр.Товар.НомерРегПостБ = НомерРег+1;
Регистр.Товар.ДвижениеПриходВыполнить();
Регистр.Товар.НомерРегПостБ = НомерРег;
Регистр.Товар.ДвижениеРасходВыполнить();
ИначеЕсли
Оформить = Перечисление.Пост.НомерРегПостС Тогда
Регистр.Товар.НомерРегПостС = НомерРег+1;
Регистр.Товар.ДвижениеПриходВыполнить();
Регистр.Товар.НомерРегПостС = НомерРег;
Регистр.Товар.ДвижениеРасходВыполнить();
КонецЕсли;

Если ПустоеЗначение(Оформить) = 1 Тогда
Предупреждение("Введите место оформления");
Предупреждение("Получите регистрационный номер документа");
СтатусВозврата(0);
Возврат;
КонецЕсли;

Обсуждение

Неизвестный
30.12.2008, 15:45
общий
это ответ
Здравствуйте, Germanik!
Не знаю точно в чем проблема, но в самой идее имеется ошибка.
Насколько я понимаю - нумерация сквозная? Тогда расчитывать регистр во временные итоги не нужно, в противном случае при создании документа задним числом будет взят номер из того дня, в котором создался документ, а не следующий в принципе.

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