Имя: Пароль:
1C
1С v8
Запись новой номенклатуры. Помогите понять строчку кода
0 shock3r
 
13.03.13
12:49
НоваяНоменклатура = СтрНом.Номенклатура;
НоваяНоменклатура.Код = ""; (**************)
НоваяНоменклатура.Наименование = "Тест";

           Попытка
               НоваяНоменклатура.Записать();
           Исключение
               Предупреждение("Не удалось записать объект """ + НоваяНоменклатура + """!
                  |" + ОписаниеОшибки(), 60);
           КонецПопытки;

Разбираю обработку человека, который уволился, по причине того, что обработка начала ошибку выдавать, не могу понять какой смысл заложен в строку, помеченную звездочками... Если ее закоментить, то в чем принципиальное отличие будет?

лог ошибки:

{ВнешняяОбработка.ЗагрузкаДанныхИзРБ.МодульОбъекта(130)}: Ошибка при вызове метода контекста (Записать)
  НоваяНоменклатура.Записать();
по причине:
Ошибка при попытке вставки записи с неуникальным значением ссылки.
таблица Reference46.
1 НафНаф
 
13.03.13
12:50
>>Разбираю обработку человека, который уволился, по причине того, что обработка начала ошибку выдавать

сурово
2 shock3r
 
13.03.13
12:50
try catch этот блок уже я добавил, его не было на момент записи лога
3 forforumandspam
 
13.03.13
12:51
:)
4 shock3r
 
13.03.13
12:51
(1) мой утрений баг, сорри))
5 НафНаф
 
13.03.13
12:51
что вот вот это?

НоваяНоменклатура = СтрНом.Номенклатура;
6 forforumandspam
 
13.03.13
12:52
НоваяНоменклатура - не "СправочникОбъект" ни разу.
7 zak555
 
13.03.13
12:52
НоваяНоменклатура = СтрНом.СоздатьЭлемент();


где

СтрНом = Справочники[ИмяСправочника]
8 andreymongol82
 
13.03.13
12:52
Круто!
Сделал пакость и смылся!
9 toxicoff
 
13.03.13
12:52
угарел от причины уволнения :)

Скорее всего он обнуляет код в надежде, что автонумерация отработает и выдаст новые код справочника.

Там дальше объект.УстановитьКодНового() нету?
10 Reset
 
13.03.13
12:52
(6) Откуда инфа? :)
11 andreymongol82
 
13.03.13
12:53
(10) СтрНом.Номенклатура
Как правило это ссылка
12 shock3r
 
13.03.13
12:54
(9) Там дальше объект.УстановитьКодНового() нету?
13 Reset
 
13.03.13
12:54
(11) Кто сказал?
14 НафНаф
 
13.03.13
12:54
наверняка записываете с тем же UUID
15 shock3r
 
13.03.13
12:54
(9) нету такого)
16 Reset
 
13.03.13
12:54
Ошибка в том, что такой элемент с такой ссылкой уже загружался
17 Dolphinbet
 
13.03.13
12:55
Причем здесь код, когда ссылка не уникальная? Скорее всего идет загрузка справочника Номенклатуры с установкой ссылки через УстановитьСсылкуНового()
18 shock3r
 
13.03.13
12:55
Ребята уточню: СтрНом.Номенклатура - эта данные которые берутся из xml файла, т.е. обработка выгружает номенклатуру из одной базы в другую.... в данном случае, этот блок уже запиливает в другую базу

подскажите как обойти ошибку
19 АНДР
 
13.03.13
12:55
Смотри что твориться в подписке на событие перед записью элемента справочника.
Но судя по "НоваяНоменклатура.Наименование = "Тест";" фигня это всё.
20 zak555
 
13.03.13
12:56
(18) в xml выгружен как ? как объект ?
тогда в топку код -- грузи сразу весб объект
21 shock3r
 
13.03.13
12:56
//Создаем номенклатуру
   Запрос.Текст = "ВЫБРАТЬ
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура
                  |ГДЕ
                  |    Номенклатура.Ссылка = &Ссылка
                  |    И Номенклатура.ЭтоГруппа = ЛОЖЬ";
   Для Каждого СтрНом Из пТаблицаНоменклатуры Цикл
       Запрос.УстановитьПараметр("Ссылка",СтрНом.Номенклатура.Ссылка);
       Запрос.УстановитьПараметр("Родитель",Справочники.Номенклатура.НайтиПоНаименованию(СтрНом.ГруппаНоменклатуры));
       РезЗапроса = Запрос.Выполнить().Выгрузить();
       Если РезЗапроса.Количество() = 0 Тогда
           НоваяНоменклатура = СтрНом.Номенклатура;
           НоваяНоменклатура.Код = "";
           НоваяНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
           НоваяНоменклатура.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
           НоваяНоменклатура.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(СтрНом.ГруппаНоменклатуры);
           НоваяНоменклатура.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Материальные расходы");
           НоваяНоменклатура.СтранаПроисхождения = Справочники.КлассификаторСтранМира.НайтиПоКоду("112");
22 shock3r
 
13.03.13
12:57
вот весь кусок в котором ошибка вылетает
23 Reset
 
13.03.13
12:57
(21) Номенклатура.ЭтоГруппа = ЛОЖЬ
Лишнее
24 andreymongol82
 
13.03.13
12:58
(21) жесть
25 cw014
 
13.03.13
12:59
ИМХО г0вн0к0д
26 shock3r
 
13.03.13
13:00
(23) вообщем смысл в том, что, в теории, он смотрит чтобы в справонике не было такой номенклатуры, и только тогда ее записывает, почему могла возникнуть ситуация, мол ссылка не уникальная мне не понятно
27 forforumandspam
 
13.03.13
13:00
пТаблицаНоменклатуры - что такое? Откуда?
28 shock3r
 
13.03.13
13:01
(27) это выгруженная номенклатура из XML, которую нужно добавить в текущую базу
29 forforumandspam
 
13.03.13
13:02
Пора говн_окод на мисте отдельно как-то выделять. Коллекция гов_нокода будет.
30 acsent
 
13.03.13
13:02
скорее всего гдето устанавливяется ссылка нового - не уникальная
31 АНДР
 
13.03.13
13:02
Всё прозрачно до неприличия. Есть группа с таким UIDD.
32 andreymongol82
 
13.03.13
13:02
СтрНом.Номенклатура.Ссылка - значение какое в отладчике показывает?
33 Reset
 
13.03.13
13:02
(26) Я понимаю в чем смысл.
Но если если такая ссылка уже есть, и она, по несчастью, является группой, то условие (23) пускает "алгоритм" (с позволения сказать) по неверному пути.
34 shock3r
 
13.03.13
13:02
вообщем вопрос, из-за строчки НоваяНоменклатура.Код = ""; могла возникнуть ошибка? В чем отличие, если ее просто закоментить?
35 Reset
 
13.03.13
13:03
(34) Нет. Закментить строку (23)
36 shock3r
 
13.03.13
13:03
(31) Спасибо! вот это действительно интересная мысль!!!!
37 andreymongol82
 
13.03.13
13:03
(34) Могла, но другая. Заремарить
38 Privalov
 
13.03.13
13:03
(34)Нет.
39 acsent
 
13.03.13
13:03
Может есть группа с той же ссылкой?
40 Reset
 
13.03.13
13:04
(36) Пожалуйста.
41 shock3r
 
13.03.13
13:04
(35) спасибо, я понял косяк! уберу группа = ложь
42 НафНаф
 
13.03.13
13:04
надо проверять существование ссылки вот так ПолучитьСсылку
безо всяких выкрутасов
43 Reset
 
13.03.13
13:05
(42) Хм?
44 НафНаф
 
13.03.13
13:11
(43) брешу, но можно так получить ссылку, а потом запросом ее найти
45 Reset
 
13.03.13
13:15
(44) Да, для проверки существования "объекта по ссылке" нужен запрос в том или ином виде