|
v8: Запись в регистр сведений | ☑ | ||
---|---|---|---|---|
0
manti
01.02.13
✎
18:07
|
Как правильно записать в регистр сведений. Так ругается. Может отбор не так поставил в записываемый регистр?
СпрКонтраг = База.Справочники.Контрагенты; Выборка = СпрКонтраг.ВыбратьИерархически(); РегСведКонтактИнфа = База.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); КонтактыАгАт = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); КонтактыАгАт.Отбор.Объект.Установить(Выборка.Ссылка); РегСведКонтактИнфа.Отбор.Объект.Значение = Выборка.Ссылка; РегСведКонтактИнфа.Отбор.Объект.Использование = Истина; РегСведКонтактИнфа.Прочитать(); Для каждого ТекЗапись Из РегСведКонтактИнфа Цикл //читаем ТИП ЗаписьРегистра = КонтактыАгАт.Добавить(); НомТипа = База.Перечисления.ТипыКонтактнойИнформации.Индекс(ТекЗапись.Тип); ИмяТипа = База.Метаданные().Перечисления.ТипыКонтактнойИнформации.EnumValues.Get(НомТипа).Name; Для Каждого метпер Из Метаданные.Перечисления.ТипыКонтактнойИнформации.ЗначенияПеречисления Цикл Если метпер.Имя = ИмяТипа тогда //КонтактыАгАт.Тип = Перечисления.ТипыКонтактнойИнформации[метпер.ИмяТипа]; Тип = Перечисления.ТипыКонтактнойИнформации[метпер.Имя]; КонецЕсли; КонецЦикла; //ТекЗапись.Объект.Наименование ЗаписьРегистра.Объект = Справочники.Контрагенты.НайтиПоНаименованию(ТекЗапись.Объект.Наименование); ЗаписьРегистра.Тип = Тип; ЗаписьРегистра.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию(ТекЗапись.Вид.Наименование); ЗаписьРегистра.Представление = ТекЗапись.Представление; КонтактыАгАт.Записать(); Сообщить("Х" +ТекЗапись.Объект.Наименование+" "+Тип+" "+ ТекЗапись.Вид.Наименование+" "+ТекЗапись.Представление); //прет(+) КонецЦикла; |
|||
1
Ayvengo
01.02.13
✎
18:08
|
А че ругается то, что пишет?
|
|||
2
Митор
01.02.13
✎
18:09
|
(1) это надо самому протелепатить в этом вся фишка
|
|||
3
GROOVY
01.02.13
✎
18:10
|
Сломал мозг на работе с перечислениями, пошел чинить...
|
|||
4
Ayvengo
01.02.13
✎
18:11
|
КонтактыАгАт.Прочитать() - наверное, нужно...
А вообще код какой-то мозговыносящий :D |
|||
5
Ayvengo
01.02.13
✎
18:12
|
(0) Код супер! Теперь давай ошибку, на что ругается 1Сина :)
|
|||
6
sapphire
01.02.13
✎
18:17
|
(3) Это он через COM-connector работает :)
|
|||
7
DrShad
01.02.13
✎
18:19
|
(6) да это не важно - фееричен цикл по метаданным
|
|||
8
sapphire
01.02.13
✎
18:20
|
(7) Ну там много чего такого интересного, особливо элементы справочника, кои "Полные тезки"
|
|||
9
Ayvengo
01.02.13
✎
18:24
|
(0) А цель какая у процедуры? Скопировать записи регистра из источника в приемник?
|
|||
10
Ayvengo
01.02.13
✎
18:26
|
Одинаковы ли регистры по составу?
Советую вместо этого Справочники.Контрагенты.НайтиПоНаименованию
создать заранее соответствие с ключом- наименование и значением ссылка (будет в 100500 раз быстрее работать), если значений в РегСведКонтактИнфа много. |
|||
11
manti
04.02.13
✎
09:31
|
Выходные были аднако))
пишет такую ошибку Ошибка при вызове метода контекста (Записать) КонтактыАгАт.Записать(); по причине: Запись не верна! Значение поля не соответствует установленному отбору: КонтактнаяИнформация: Войсковая часть 75053, Телефон, Телефон контрагента (Регистр сведений: Контактная информация; Номер строки: 1; Поле: Объект) |
|||
12
manti
04.02.13
✎
09:33
|
(4) запимываем, не считываем из регистра)
|
|||
13
and2
04.02.13
✎
09:33
|
КонтактыАгАт.Отбор.Объект.Установить(Выборка.Ссылка);
ЗаписьРегистра.Объект = Справочники.Контрагенты.НайтиПоНаименованию(ТекЗапись.Объект.Наименование); это 2 разных человека..... |
|||
14
Мыш
04.02.13
✎
09:43
|
> СпрКонтраг = База.Справочники.Контрагенты;
Это из внешнего источника. > Выборка = СпрКонтраг.ВыбратьИерархически(); Выборка соответственно тоже из внешнего источника. > КонтактыАгАт = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); Набор записей из текущей БД. > КонтактыАгАт.Отбор.Объект.Установить(Выборка.Ссылка); И вот здесь кроется зло. Во-первых нет "Выборка.Следующий()", во-вторых отбор для текущей базы по внешней ссылке делать нельзя. > Тип = Перечисления.ТипыКонтактнойИнформации[метпер.Имя]; Называть переменную "Тип" не комильфо. |
|||
15
manti
04.02.13
✎
10:46
|
(13) вот подставил из выборки с проверкой на запись в базе примемнике
РегСведКонтактИнфа = База.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); КонтактыАгАт = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); КонтактыАгАт.Отбор.Объект.Установить(Справочники.Контрагенты.НайтиПоНаименованию(Выборка.Ссылка.Наименование)); РегСведКонтактИнфа.Отбор.Объект.Значение = Выборка.Ссылка; РегСведКонтактИнфа.Отбор.Объект.Использование = Истина; РегСведКонтактИнфа.Прочитать(); Для каждого ТекЗапись Из РегСведКонтактИнфа Цикл ЗаписьРегистра = КонтактыАгАт.Добавить(); НомТипа = База.Перечисления.ТипыКонтактнойИнформации.Индекс(ТекЗапись.Тип); ИмяТипа = База.Метаданные().Перечисления.ТипыКонтактнойИнформации.EnumValues.Get(НомТипа).Name; Для Каждого метпер Из Метаданные.Перечисления.ТипыКонтактнойИнформации.ЗначенияПеречисления Цикл Если метпер.Имя = ИмяТипа тогда //КонтактыАгАт.Тип = Перечисления.ТипыКонтактнойИнформации[метпер.ИмяТипа]; Тип = Перечисления.ТипыКонтактнойИнформации[метпер.Имя]; КонецЕсли; КонецЦикла; ЗаписьРегистра.Объект = Справочники.Контрагенты.НайтиПоНаименованию(Выборка.Ссылка.Наименование);//ТекЗапись.Объект.Код ЗаписьРегистра.Тип = Тип; ЗаписьРегистра.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию(ТекЗапись.Вид.Наименование); ЗаписьРегистра.Представление = ТекЗапись.Представление; КонтактыАгАт.Записать(); Сообщить("Х" +ТекЗапись.Объект.Наименование+" "+Тип+" "+ ТекЗапись.Вид.Наименование+" "+ТекЗапись.Представление); КонецЦикла; (14) << во-вторых отбор для текущей базы по внешней ссылке делать нельзя. сам элемент был записан ранее, Следующий() - уже выполнилось) А как сделать отбор по другому? я же вроде проверю = существует ли в базе НайтиПоНаименованию() |
|||
16
manti
04.02.13
✎
11:00
|
http://help1c.com/faq/view/648.html
вроде получилось)) |
|||
17
Ayvengo
05.02.13
✎
11:36
|
(16) избавься от этого
Справочники.Контрагенты.НайтиПоНаименованию(Выборка.Ссылка.Наименование);
Плохой тон :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |