Имя: Пароль:
1C
1С v8
v8: Загрузка из Ексель. Откуда-то берется пустая ссылка.
,
0 Solitar
 
15.04.12
21:49
Написал загрузчик номенклатуры из Екселя в 1С. Загружается Номенклатура поставщика и Номенклатура. Все грузит нормально. Но в 1 случае из 5000 (примерно, может и из 10000)  после загрузки появляется пустая ссылка в номенклатуре. (делаю ТИИ, т.к. УТ начинает сильно тормозить). Но, в номенклатуре поставщика данная позиция есть, а ссылка на номенклатуру пустая.

Заново гружу ту строку, которая не загрузилась, и она появляется в номенклатуре.

Грешу на одновременную загрузку с нескольких компов.

Мб еще есть варианты?
1 andrewks
 
15.04.12
21:54
отсюда невидно, что и где там у тебя
"Грешу на одновременную загрузку с нескольких компов. " чушь
2 SnarkHunter
 
15.04.12
21:54
Вариант: кривые руки...
3 Лефмихалыч
 
15.04.12
21:54
что значит "появляется пустая ссылка в номенклатуре" и откуда вдруг " одновременную загрузку с нескольких компов"?
чего-то ты недоговариваешь
4 andrewks
 
15.04.12
22:00
да, и для чего ТиИ при пустой ссылке?
5 Solitar
 
15.04.12
22:12
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = СокрЛП(Наименование);
Товар.Артикул = Артикул;
Товар.Родитель = ГруппаНоменклатуры;
Товар.ГодИздания = СокрЛП(ГодИздания);
Товар.ЕдиницаИзмерения = Объект.ЕдиницаИзмерения;
Товар.ВидНоменклатуры = Объект.ВидНоменклатуры;
//остальные реквизиты заполняю
Попытка
Товар.Записать()
Исключение
Сообщить ("В строке № "+ НомПервойСтроки +" введены неккоректные данные!" + Символы.ПС +"Проверьте данные в этой строке!");
КонецПопытки;



ТоварПоставщика = Справочники.НоменклатураПоставщиков.СоздатьЭлемент();
               ТоварПоставщика.Наименование = Товар.Наименование;
               ТоварПоставщика.Владелец = Объект.Контрагент;
               ТоварПоставщика.Артикул = Артикул;
               ТоварПоставщика.Номенклатура = Товар.Ссылка;
               ТоварПоставщика.Родитель = Объект.ГруппаНоменклатурыПоставщика;
               ТоварПоставщика.Упаковка = Товар.ЕдиницаИзмерения;
               ТоварПоставщика.Записать();



(3) (4)  После загрузки номенклатуры в УТ 11 начали криво отображаться папки  с номенклатурой или же программа начинает жостко тормозить при обращении к номенклатуре.


Проверка логической целостности. Справочники. Номенклатура.Таблица Reference79 содержит записи с пустым идентификатором в количестве - 3. Записи удалены.
Проверка логической целостности. Справочник.НоменклатураПоставщиков.Реквизит.Номенклатура Тематическое и поурочное планирование по основам безопасности жизнедеятельности.
   Объект, на который ссылается значение, отсутствует. Создан новый объект. Справочник.Номенклатура
и 2 такие же записи.
6 Solitar
 
15.04.12
22:13
загружать номенклатуру могут с нескольких компов, но с разных ексель файлов.
7 Terve-R-
 
15.04.12
23:03
(5) жесть
8 Terve-R-
 
15.04.12
23:05
стесняюсь спросить, а сколько уже в базе насоздавалось дубликатов?
9 Лефмихалыч
 
15.04.12
23:16
ставлю дайм - количество номенклатурПоставщиков без ссылки на номенклатуру равно количеству сообщений "В строке введены неккоректные данные"
10 Solitar
 
16.04.12
07:54
(9) да. ты знаешь в чем проблема?)
(8) дубликатов нет. есть проверка на существование.
   
                   
ВЫБРАТЬ ПЕРВЫЕ 1
   Номенклатура.Ссылка
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Наименование = &Наименование
   И Номенклатура.Артикул = &Артикул

Если РезультатЗапроса.ПУстой () то создаются позиции.
11 Любопытная
 
16.04.12
08:12
(5) Так ты ТоварПоставщика записываешь с пустой ссылкой в случае ошибки. Посмотри внимательно на свой код
12 Solitar
 
16.04.12
08:18
(11) да, на это внимание не обратил. Но сообщение об ошибке не выходит.
13 Любопытная
 
16.04.12
08:19
(12) Программно создаешь, пофиг ему, записывает и все.
14 Solitar
 
16.04.12
08:20
(13) я это понял, тогда бы каждый раз, когда появляется пустая ссылка в базе, он должен был выдавать ошибку. но ниразу еще её не выдал.
15 Любопытная
 
16.04.12
08:22
(14) Так и что теперь непонятно?
16 Solitar
 
16.04.12
08:25
почему тогда не выводилось сообщение ?
Попытка
Товар.Записать()
Исключение
Сообщить ("В строке № "+ НомПервойСтроки +" введены неккоректные данные!" + Символы.ПС +"Проверьте данные в этой строке!");
КонецПопытки;
17 andrewks
 
16.04.12
08:26
(16) а с чего бы ему не записаться-то?
18 Любопытная
 
16.04.12
08:28
(16) Как это не выводилось? Ты в (9) сказал, что количество пустых ссылок равно количеству этих самых сообщений
19 Solitar
 
16.04.12
08:30
ТИИ показывает эти пустые ссылки.
20 Любопытная
 
16.04.12
08:32
(19) Денис! У тебя есть проверка на номенклатуре, но нет проверки на номенклатуре поставщика! Включай мозг уже)
21 Solitar
 
16.04.12
08:41
(20) )))
в реквизите "Номенклатура" у элемента справочника НоменклатураПоставщика делать проверку на пустую ссылку?

и все равно я не совсем понял откуда берется при ТИИ
Проверка логической целостности. Справочники. Номенклатура.Таблица Reference79 содержит записи с пустым идентификатором в количестве - 3. Записи удалены.
Проверка логической целостности. Справочник.НоменклатураПоставщиков.Реквизит.Номенклатура Тематическое и поурочное планирование по основам безопасности жизнедеятельности.
  Объект, на который ссылается значение, отсутствует. Создан новый объект. Справочник.Номенклатура

Ведь я не записываю новый элемент, а следовательно он никак не может попасть в справочник номенклатура.
И почему при ТИИ пишет название номенклатуры на которую ссылается? Оно все таки где то есть?
22 Solitar
 
16.04.12
08:41
мб Товар.Ссылка что то кривое... надо проверить.
23 Любопытная
 
16.04.12
08:49
(22) Ты меня не понимаешь совсем что ли?
Смотри: ты пытаешься записать товар, но он не записывается. Ты выдаешь ошибку и идешь дальше на основании незаписанного(!!!) объекта создавать объект в другой справочник. У тебя есть все поля исходного объекта, ими ты заполняешь ТоварыПоставщика, но ссылки но т.к. Товары не записан, ты получаешь в ТоварПоставщика.Номенклатура пустую ссылку.
Вот и все, что непонятно?
24 Любопытная
 
16.04.12
08:51
Сделай первой в своем ексель-файле косячную строку и прогони обработку отладчиком. Сразу поймешь что к чему
25 alxxsssar
 
16.04.12
08:51
Так у тебя номенклатура записывается через попытку, а НоменклатураПоставщика - нет, даже если не запишется номенклатура, то номенклатураПоставщика создается и записывается. Перенеси Исключение и КонецПопытки ниже, в самый конец фрагмента в (5)
26 Solitar
 
17.04.12
23:56
огромное спасибо за советы!
решил перестраховаться и в исключения перетащил Товар.Записать() и полностью создание и запись Номенклатуры Поставщика. Вроде пока что все грузит без проблем.
27 hhhh
 
18.04.12
00:04
(26) вот это очень подозрительная строчка

Товар.ЕдиницаИзмерения = Объект.ЕдиницаИзмерения;

почему эти единицы равны?
28 Solitar
 
18.04.12
00:16
(27) пользователь сам указывает вид товара для загружаемой номенклатуры.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс