Имя: Пароль:
1C
1С v8
Туплю и не могу заполнить РС программно
0 gerthog
 
08.01.15
10:33
Есть код он читает ХМЛ и заполняет РС:

ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл("D:\Nomenclature.xml");
    
    Продолжит = Истина;
    Order = Новый Структура;
  
    Пока ЧтениеXML.Прочитать() Цикл
        Продолжит = Истина;
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Если ЧтениеXML.Имя = "ROW" Тогда
                Набор = РегистрыСведений.лис_Номенклатура.СоздатьНаборЗаписей();
                Имя = ЧтениеXML.Имя;
                Набор.Прочитать();
                Пока Продолжит Цикл;
                    НовЗапись = Набор.Добавить();
                    Продолжит = ЧтениеXML.ПрочитатьАтрибут();
                    Атрибут = ЧтениеXML.Значение;
                    Order.Вставить(ЧтениеXML.Имя, Атрибут);
                КонецЦикла;
                
                ЗаполнитьЗначенияСвойств(НовЗапись, Order);
                Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Order.HXID);
                НовЗапись.Caption = Номенклатура.Ссылка;
                НовЗапись.Группа = Order.Group;
                Набор.Записать();
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

Но выдает ошибку: "Запись с такими ключевыми полями существует!" хотя в этом РС нет ни одной записи и он в итоге ничего не записывает и ошибка вываливается сразу же, т. е. нет таких полей.
Ещё я пробовал с СоздатьМенеджерЗаписи(), но тогда он всё перезаписывает и остается только одна строка(последняя). ЧЯДНТ?
1 DCKiller
 
08.01.15
10:35
РС периодический?
2 Rie
 
08.01.15
10:37
(0) МенеджерЗаписи - но цикл правильно организуй.
Или сформируй таблицу значений - и для НабораЗаписей Загрузить её.
3 gerthog
 
08.01.15
10:38
(1)непериодический
4 Rie
 
08.01.15
10:41
А ещё интересно - какие измерения у этого регистра сведений.
5 gerthog
 
08.01.15
10:42
(2) А в каком смысле правильно? Я делал так:

ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл("D:\Nomenclature.xml");
    
    Продолжит = Истина;
    Order = Новый Структура;
    Набор = РегистрыСведений.лис_Номенклатура.СоздатьМенеджерЗаписи();
    Пока ЧтениеXML.Прочитать() Цикл
        Продолжит = Истина;
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Если ЧтениеXML.Имя = "ROW" Тогда
                Имя = ЧтениеXML.Имя;
                Набор.Прочитать();
                Пока Продолжит Цикл;
                    
                    Продолжит = ЧтениеXML.ПрочитатьАтрибут();
                    Атрибут = ЧтениеXML.Значение;
                    Order.Вставить(ЧтениеXML.Имя, Атрибут);
                КонецЦикла;
                
                ЗаполнитьЗначенияСвойств(Набор, Order);
                Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Order.HXID);
                Набор.Caption = Номенклатура.Ссылка;
                Набор.Группа = Order.Group;
                Набор.Записать();
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
6 gerthog
 
08.01.15
10:44
(4) Там их много в основном тип строка, РС не типовой, мной добавленный
7 Мимохожий Однако
 
08.01.15
10:44
Где отбор при чтении регистра?
8 gerthog
 
08.01.15
10:46
(7) Да вроде не нужен там отбор
9 Explorer1c
 
08.01.15
10:48
А он подчинен регистратору?
10 gerthog
 
08.01.15
10:48
(9) Нет, не подчинен
11 DCKiller
 
08.01.15
10:49
Вот здесь:

Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Order.HXID);
                НовЗапись.Caption = Номенклатура.Ссылка;

У тебя номенклатура-то по такому артикулу находится? А то поди не находит и пустую туда фигачит... Кстати, можно просто

НовЗапись.Caption = Номенклатура;
12 gerthog
 
08.01.15
10:52
(11) В первом случае(1) пусть и пустую за фигачит, но ведь в обще ничего не фигачит. А во втором случае(5) всё находит и всё фигачит, только перезатирает.
13 Rie
 
08.01.15
10:52
(5) Нет добавления записи в набор.
14 Escander
 
08.01.15
10:53
(0) ты в цикле понасоздавал кучу записей с идентичным набором измерений (пустые значения) и чего-то там определяешь для последней записи набора... чему тут удивляться-то?
15 DCKiller
 
08.01.15
10:54
(14) кстати да, неплохо бы после каждой неудачной загрузки РС очищать.
16 gerthog
 
08.01.15
10:56
(14) Это: "Набор = РегистрыСведений.лис_Номенклатура.СоздатьНаборЗаписей();" - переносил перед циклом и ничего не меняется.
(15) Да он и так пустой, только во втором случае одна запись появляется.
17 DCKiller
 
08.01.15
10:57
(16) ты как определил, что он пустой? Открыл форму списка? Там отбор случайно не установлен?
18 gerthog
 
08.01.15
10:58
(13) Он там не нужен
19 gerthog
 
08.01.15
10:59
(17) Запросом из консоли, без условий и отборов, пусто там.
20 Rie
 
08.01.15
11:00
(13) Нужен.
(16) Добавил запись - заполни её. В (0) ты для каждого _атрибута_ создаёшь новую запись (в цикле) - а заполняешь только последнюю. Предыдущие - имя им легион - с пустыми (а значит, одинаковыми) измерениями. Вот и.
А в (5) - записи в набор _не_ добавляешь. Вот и попадает туда одна-единственная (последняя).
21 DCKiller
 
08.01.15
11:01
(16) Если одна запись создается, а следующая за ней - нет, значит, они, скорее всего, имеют одинаковый состав.
22 gerthog
 
08.01.15
11:04
(20) Кажется я тебя понял, запустил уже, пока молотит, жду.
23 gerthog
 
08.01.15
11:26
(20) Спасибо
24 AlexITGround
 
08.01.15
12:43