|   |   | 
| 
 | 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) избавься от этого
  Справочники.Контрагенты.НайтиПоНаименованию(Выборка.Ссылка.Наименование);Плохой тон :) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |