|
Туплю и не могу заполнить РС программно | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |