Имя: Пароль:
1C
1С v8
v8: Значение поля "Номер" не уникально. Как посмотреть индекс или счетчик в SQL?
0 programmist1cswworld
 
06.06.13
06:08
При переносе документов через текст на определенном номер дает сбой.
Пишет Значение поля "Номер" не уникально.
Такого номера нет. И 999999 тоже нет.
Сбой ни с того ни с сего, посреди файла. n документов загрузил
на n+1 сбойнул. Если смотреть через отладчик сразу после попытки записи, переменная "Менеджер документов" выдает ошибку, как будто её нет и она до этого не инициализировалась.

Изменил в файле, из которого идет загрузка, номер на вообще левый, с нереальным префиксом - все пошло дальше нормально.

Может внутреннее представление номера на SQL не хранит некоторые символы и в результате получается номер, который уже есть?

Из любопытства хочется знать, где посмотреть индекс или счетчик номеров SQL который отвечает за номера. Отладить, по тяжелой, так сказать.
1 Sammo
 
06.06.13
06:24
Не верю.
См - какой номер пытается присвоить.
2 SnarkHunter
 
06.06.13
07:02
Номер 999999 не обязателен, достаточно, например наличия номера 9 или 99. Если номер текстовый, конечно.
3 shuhard
 
06.06.13
07:04
(0) счётчик живёт в оперативной памяти и шансов добраться до него 0
4 etoyaelena
 
26.06.13
15:51
Здравствуйте. Помогите, пожалуйста! а у меня есть номер 999,
и что теперь делать??
5 shuhard
 
26.06.13
15:54
(4) Ваш номер выиграл - получите приз
6 etoyaelena
 
26.06.13
16:04
Спасибо за сарказм!
7 МихаилМ
 
26.06.13
16:13
(6)
заведите отдельную тему.
Ваша проблема с проблемой в (0)
не имеет общего.
8 programmist1cswworld
 
24.07.13
02:14
(3) Ну да. У 1С в коде вроде защита от отладки. Отладчик слетает.
9 Rie
 
модератор
24.07.13
03:32
(0) Лето. Телепаты в отпусках...
"Через текст" - стало быть, есть некий код, который загружает данные. Возникает вопрос: а что в этом коде написано?
10 programmist1cswworld
 
24.07.13
04:51
(9) Документ = Менеджер.СоздатьДокумент();
Документ.Дата    = ... //Дата получена из текста Текст.ПолучитьСтроку...;
Документ.Номер    = ... // номер аналогично;
...
Реквизиты документа,
табличная часть
...
Документ.Записать(РежимЗаписиДокумента.Запись);

И вот здесь вылетает.
Документ в тексте по счету тысяча там какой-то. В номере тоже ничего особенного - "ТАЮт-02128".
Поменял в тексте только этот номер на "ОШ000001". Загрузка прошла нормально.

Проблему проще обойти, чем искать причину.
11 Rie
 
модератор
24.07.13
04:57
(10) А что говорит Менеджер.НайтиПоНомеру(НомерПолученныйИзТекста,ДатаПолученнаяИзТекста?
12 Rie
 
модератор
24.07.13
04:58
(10) Обойти - оно, конечно...
Но есть риск, что в базе имеется неопознанный летающий документ с указанным номером. Может быть, даже проведенный. Со всеми отсюда вытекающими.
13 programmist1cswworld
 
24.07.13
05:15
(11) Условие есть. Перед записью документа проверка
Если Менеджер.НайтиПоНомеру(Документ.Номер, Документ.Дата) = Менеджер.ПустаяСсылка() Тогда
...
Попытка
Документ.Записать(РежимЗаписиДокумента.Запись);
Исключение
...
14 programmist1cswworld
 
24.07.13
05:20
(12) Загрузка была в чистую базу.
Проведен? Т.е. влияние на регистры.
Остатки по регистрам пошли, тестирование не делал.

"неопознанный летающий документ" - вот что-то такое мне кажется и есть. Хорошее выражение.

И таких ошибок - две.
15 alkov
 
24.07.13
05:57
ОбновитьНумерациюОбъектов() уже предлагали?
16 skunk
 
24.07.13
06:36
(13)а с чего ты взял, что он найдет пустую ссылку?

Если Не Менеджер.НайтиПоНомеру(Документ.Номер, Документ.Дата) = Неопределено Тогда
...
Попытка
Документ.Записать(РежимЗаписиДокумента.Запись);
Исключение
17 sda553
 
24.07.13
07:08
(15) тсссс, дай еще поглумимся
18 Rie
 
модератор
24.07.13
09:42
(16) Тогда уж ЗначениеЗаполнено лучше.
19 skunk
 
24.07.13
09:52
(18)зачем ... если найтипономеру возращает "неопределено", когда документ не найден
20 Rie
 
модератор
24.07.13
09:59
(19) Если верить встроенной справке, то
"Возвращаемое значение:

Тип: ДокументСсылка.; Неопределено.
Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.
Если номер не задан (длина = 0), то будет возвращено Неопределено".
21 George Wheels
 
24.07.13
10:05
Если в базе длина номера 9, а в тексте номера такие:
000000123
0000001234
то по моему обрежется десятый символ и вуаля
22 Rie
 
модератор
24.07.13
10:12
(21) +1
23 programmist1cswworld
 
25.07.13
01:22
(15) Спасибо.
24 programmist1cswworld
 
25.07.13
01:39
(17) Смейтесь, смейтесь
25 programmist1cswworld
 
25.07.13
01:39
(21) Везде длина 10.
26 ИсчадиеADO
 
25.07.13
05:18
(4) читайте молитвы, Господь защитит вас от козней Диавола))
27 programmist1cswworld
 
27.07.13
07:50
Ошибка на копии базы не воспроизводится. Всем спасибо.
28 hhhh
 
27.07.13
08:05
наверно, забыл сохранить конфигурацию. Вот номера в оперативной памяти и кучкуются.