Имя: Пароль:
1C
 
Значение поля "Номер" не уникально
0 windows98a
 
02.03.16
22:12
Здравствуйте.

Извините, сначала много букв, потому что все равно будут вопросы.

УТ 10.3, немного дописанная.

Есть холдинг из n организаций. Есть универсальный документ продажи, куда кассир долбит товары, не заморачиваясь, какой организации он принадлежит - все в один док. Этот универсальный документ, в зависимости от установленной галочки может принимать вид чек, реализация, возврат. В конце дня обработка преобразует эти универсальные кассовые документы в стандартные документы УТ 10.3 "отчеты ккм", "реализации товаров услуг", "возвраты от покупателя",  фасуя их по нужным организациям.
Проблема в том, что реализацию клиенту уже нужно отдать с номером, а поскольку документ "реализация товаров и услуг" будет создан только вечером, программа по определенному алгоритму формирует и запоминает их номера в универсальном кассовом документе.

Номера реализации формируются по принципу:
префикс подразделения + "к" + номер кассового документа + "n"
n - счетчик доков "реализация товаров услуг", которые содержит в себе один конкретный кассовый документ(соответсвует количеству различных организаций, присутствующих в кассовом документе).

Эта схема работает уже 4 года без проблем, но вот настал день..

При преобразовании кассового документа в одну из "реализаций товаров услуг" выдается ошибка Значение  поля "Номер" не уникально.
Отладчик с условием по этому номеру перед записью документа останавливается только один раз. Документа за период с таким номером в базе нет.

Обновление нумерации не помогает.

Попытка
ДокументОбъект.Записать();
Исключение
Сообщить("Пытаюсь записать реализацию с номером " + Строка(ДокументОбъект.Номер));
Сообщить(ОписаниеОшибки());
ОтменитьТранзакцию();
Возврат;
КонецПопытки;

Есть мысли?
1 Cyberhawk
 
02.03.16
22:29
"Документа за период с таким номером в базе нет" // Я тебе не верю, убеди меня
2 Записьдампа
 
02.03.16
22:34
(1) Написано же:
ОтменитьТранзакцию();
=)
3 windows98a
 
03.03.16
09:19
Хрень какая то... вот такой код:


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

Попытка
ДокументОбъект.Записать(РежимЗаписиДокументов);
Исключение
Сообщить("Пытаюсь записать реализацию с номером " + Строка(ДокументОбъект.Номер));
Сообщить(ОписаниеОшибки());
ОтменитьТранзакцию();
Возврат;
КонецПопытки;


Выдает вот что:

МКк00050491
02.03.2016 14:33:58
ТЦк00142711
02.03.2016 21:55:24
Реализация товаров и услуг ТЦк00142711 от 02.03.2016 17:40:48
Пытаюсь записать реализацию с номером ТЦк00142711
{Форма.Форма.Форма(1020)}: Ошибка при вызове метода контекста (Записать): Значение "ТЦк00142711" поля "Номер" не уникально
4 Ma3eIIa
 
03.03.16
09:20
так у тебя разная длина номера. приведи в одну длину
5 mistеr
 
03.03.16
09:24
(0) Может ТИИ для начала?
6 Serg_1960
 
03.03.16
09:25
(4) Не принципиально. Если номер формируется вручную, а не автонумерацией - не принципиально.
7 windows98a
 
03.03.16
09:28
МКк00050491
02.03.2016 14:33:58
!
ТЦк00142711
02.03.2016 21:55:24
!
{Форма.Форма.Форма(1054)}: Ошибка при вызове метода контекста (Записать): Значение "ТЦк00142711" поля "Номер" не уникально
Создание документов прервано!
8 Serg_1960
 
03.03.16
09:29
(0) Перед записью найди документ с номером нового и сообщи. А также сообщи номер нового документа, но после неудачной попытки записи. Будет весело - гарантирую :)
9 Serg_1960
 
03.03.16
09:31
Упс (3) невидел
10 DJ Anthon
 
03.03.16
09:33
может, нумератор какой есть на несколько видов документов?
11 aleks_default
 
03.03.16
09:35
(3)А че непонятного, вот же написано что уже есть документ с таким номером:

Реализация товаров и услуг ТЦк00142711 от 02.03.2016 17:40:48
12 windows98a
 
03.03.16
09:37
(8)вроде все подежания учел

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

Попытка
Сообщить("Номер перед записью " + ДокументОбъект.Номер);
ДокументОбъект.Записать(РежимЗаписиДокументов);
Исключение
Сообщить("Пытаюсь записать реализацию с номером " + Строка(ДокументОбъект.Номер));
Сообщить(ОписаниеОшибки());
ОтменитьТранзакцию();
Возврат;
КонецПопытки;

выдает

ТЦк00142711
02.03.2016 21:55:24
!Не найден!
Номер перед записью ТЦк00142711
{Форма.Форма.Форма(1055)}: Ошибка при вызове метода контекста (Записать): Значение "ТЦк00142711" поля "Номер" не уникально
Создание документов прервано!
13 Serg_1960
 
03.03.16
09:41
(предположение) Ты, наверно, уже не первый раз запускаешь обработку, вылизывая алгоритм,... на тех-же исходных данных.
14 windows98a
 
03.03.16
09:48
(13) ну колечно, я вот в 100 раз пытаюсь "свернуть" эту реализацию. Это имеет значение?
Не пойму почему в исключении не отрабатывает строка
Сообщить("Пытаюсь записать реализацию с номером " + Строка(ДокументОбъект.Номер));
15 Cyberhawk
 
03.03.16
09:50
Думаю, при записи документа где-то вызывается код по записи этого же вида документа с этим же номером
16 Serg_1960
 
03.03.16
09:53
(14) "Не пойму почему в исключении не отрабатывает строка" - отрабатывает, судя по твоим постам - см.(3) - перед текстом ошибки, строка "Пытаюсь записать...".

(15) Может напомнить автору что уникальность номера не только по периоду, но и по организации? Как вы думаете? :)
17 windows98a
 
03.03.16
09:56
(16) в (3) строчка есть, а в (12) уже нет...
18 Cyberhawk
 
03.03.16
09:58
(16) Это ж платформенное сообщение вроде у него, а не прикладным кодом выдаваемое, так что про организацию вряд ли
19 aleks_default
 
03.03.16
10:00
а у докмента-то периодичность нумерации вообще включена?
20 Cyberhawk
 
03.03.16
10:01
Или периодичность месяц, например, и документ в феврале есть такой
21 Cyberhawk
 
03.03.16
10:01
Хотя в этом случае ругаться не должен, отбой (20)
22 windows98a
 
03.03.16
10:06
(19) периодичность год, но я в найтипономеру указываю дату, так что в периоде нет
23 Serg_1960
 
03.03.16
10:13
(17) По поводу "а в 12 уже нет": не исключаю варианты что а) автор изменил обработку, но не сохранил; б) платформа взяла "из кэша" обработку (предыдущий вариант запустила)
24 Serg_1960
 
03.03.16
10:18
(пальцем в небо, ибо мыслей уже нет)

В (0) алгоритм указан создания номера, в частности "Номера реализации формируются по принципу:
префикс подразделения +..." - ты уверен в уникальности префикса подразделения?
25 Serg_1960
 
03.03.16
10:26
Ага, появилась мысль: покажи не только номер и дату, но и тип нового документа. Фиг его знает, может поиск номера по одному типу, а новый документ совсем другого...

Всё, опять нет мыслей :)
26 windows98a
 
03.03.16
10:34
короче ошибка вылетала при записи приходника, который делался на основании этой реализации. номер у приходника такой же, поэтому произошла путаница. поэтому же не попадало в исключение. больно не пинайте, каюсь, большое Вам всем спасибо
27 windows98a
 
03.03.16
10:35
вчера падало на реализации, но теперь это уже не важно, исследование невозможно
28 Cyberhawk
 
03.03.16
11:08
Ну т.е. (15) оказался ближе всего :)
29 DJ Anthon
 
03.03.16
15:11
(28) да? ;)
30 Cyberhawk
 
03.03.16
15:24
(29) С вызовом прикладного кода угадал, но ошибся насчет "этого же вида"
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший