|
заполнение регистра сведений | ☑ | ||
---|---|---|---|---|
0
vip67
10.07.12
✎
12:27
|
всем добрый день!
в 8-ке не силен (каюсь сразу) но есть задача: импортировать из ДБФ справочник контрагентов. Сам справочник я уже импортнул, остались таки емелочи, как заполнить контактную информацию, которая в 1с хранится в регистре сведений контакнтаяИнформация. При попытке через обработку заполнить регистр - ругается на то, что поле "Объект" не может быть пустым, хотя я его заполняю. Подскажите - в чем ошибка. код привожу: Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлДБФ = новый xBase(); ФайлДБФ.Кодировка = КодировкаXBase.OEM; СпрКонтр = справочники.Контрагенты; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Фильтр = "*.dbf"; Если Диалог.Выбрать() Тогда ВыбФайл = Диалог.ПолноеИмяФайла; Иначе Отказ = Истина; Возврат; КонецЕсли; ФайлДБФ.ОткрытьФайл(ВыбФайл); инд=0; ФайлДБФ.Первая(); Пока ФайлДБФ.ВКонце()=Ложь цикл НаимКонтр = ФайлДБФ.ПолучитьЗначениеПоля("Naim_Kontr"); ИНН = ФайлДБФ.ПолучитьЗначениеПоля("INN"); Код_ = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("Kod")); Код_=СтрЗаменить(Код_," ",""); ОКПО = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("K_Kontrag")); ОКПО = СтрЗаменить(ОКПО," ",""); АДресПолный = ФайлДБФ.ПолучитьЗначениеПоля("Adres"); АДресЮр = ФайлДБФ.ПолучитьЗначениеПоля("Adres_U"); Телефон = ФайлДБФ.ПолучитьЗначениеПоля("Fone"); Спр = СпрКонтр.НайтиПоКоду(Код_); Если спр = Справочники.Контрагенты.ПустаяСсылка() тогда Элемент = СпрКонтр.СоздатьЭлемент(); иначе Элемент = Спр.ПолучитьОбъект(); КонецЕсли; Элемент.Наименование = НаимКонтр; Элемент.НаименованиеПолное = НаимКонтр; Элемент.ИНН = ИНН; Элемент.Код = Код_; Элемент.КодПоЕДРПОУ = ОКПО; Элемент.Записать(); сообщить(НаимКонтр); // Запишем в регистр сведений контактную инфу НаборД = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); //// устанавливаем параметры отбора по полному набору Измерений регистра: //НаборД.Отбор.ОБъект.Установить(Элемент); //НаборД.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес); //ВидКИ_ = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"); // //Запись1.Вид = ВИдКИ_.ПолучитьОбъект(); //НаборД.Отбор.Вид.Установить(ВИдКИ_.ПолучитьОбъект()); // Создаем новую строку в этом наборе записей: СтрокаДанных = НаборД.Добавить(); // определяем значения Измерений этой строки: СтрокаДанных.Объект = Элемент; СтрокаДанных.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; СтрокаДанных.Вид = ВИдКИ_.ПолучитьОбъект(); // определяем значения Ресурсов СтрокаДанных.Представление = АдресПолный; НаборД.Записать(ложь); ФайлДБФ.Следующая(); КонецЦикла; КонецПроцедуры |
|||
1
MSII
10.07.12
✎
12:28
|
Элемент у тебя объект, а тебе нужна ссылка.
|
|||
2
DrShad
10.07.12
✎
12:29
|
СтрокаДанных.Объект = Элемент.Ссылка;
|
|||
3
gosn1ck
10.07.12
✎
12:29
|
вам СоздатьМенеджерЗаписи, а не набор нужен
|
|||
4
gosn1ck
10.07.12
✎
12:30
|
это так на будущее
|
|||
5
DrShad
10.07.12
✎
12:31
|
(4) тогда уж уточняй, что только для независимых РС
|
|||
6
vip67
10.07.12
✎
12:33
|
(3) я пробовал через создатьменеджерзаписи - эффект был тот-же, счас попробую через ссылку.
|
|||
7
gosn1ck
10.07.12
✎
12:34
|
(5) ТС говорит о конкретном РС
(6) в (3) не совет для вашей текущей проблемы |
|||
8
vip67
10.07.12
✎
12:35
|
через ссылку - получилось! спасибо!!!!
|
|||
9
ssh2006
10.07.12
✎
12:36
|
(8) кстати, сколько записей в регистре у тебя оказалось после импорта?
|
|||
10
vip67
10.07.12
✎
14:56
|
(9) так не считал, но если учесть, что контрагентов свыше 1000, и на каждого по 3 записи, то - более 3000
|
|||
11
Eugene_life
10.07.12
✎
14:57
|
(10) Посчитай, будь мужиком, бл..ть!! :D
|
|||
12
vip67
10.07.12
✎
15:08
|
(11) ВЛОМ, да и зачем?!
|
|||
13
vip67
13.07.12
✎
12:47
|
возобновлю тему:
итак - есть справочник контрагентов, который заполнрил импортом из ДБФ, в файле ДБФ есть информация по адресу, поэтому ее я то-же заполняю в регистр сведений "контактнаяИнформация". после заполнения в регистре вижу 3 строки (адрес физ, адрес юр и телефон), а вот в самом элементе справочника в закладке "контактная информация" присутствуют 3 заполненные импортом записи и добалвяются еще 2(если нет телефона) или 3 пустых записи, которые я не могу удалять. как с этим бороться? код обработки прилагаю: Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлДБФ = новый xBase(); ФайлДБФ.Кодировка = КодировкаXBase.OEM; СпрКонтр = справочники.Контрагенты; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Фильтр = "*.dbf"; Если Диалог.Выбрать() Тогда ВыбФайл = Диалог.ПолноеИмяФайла; Иначе Отказ = Истина; Возврат; КонецЕсли; ФайлДБФ.ОткрытьФайл(ВыбФайл); инд=0; ФайлДБФ.Первая(); Пока ФайлДБФ.ВКонце()=Ложь цикл НаимКонтр_ = ФайлДБФ.ПолучитьЗначениеПоля("Naim_Kontr"); НаимКонтр = Стрзаменить(НаимКонтр_,"?","І"); ИНН = ФайлДБФ.ПолучитьЗначениеПоля("INN"); Код_ = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("Kod")); Код_=СтрЗаменить(Код_," ",""); ОКПО = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("K_Kontrag")); ОКПО = СтрЗаменить(ОКПО," ",""); Город_= ФайлДБФ.ПолучитьЗначениеПоля("K_GOROD"); АДресПолный = СокрЛП(Город_)+" "+ФайлДБФ.ПолучитьЗначениеПоля("Adres"); АДресЮр = СокрЛП(Город_)+" "+ФайлДБФ.ПолучитьЗначениеПоля("Adres_U"); Телефон = ФайлДБФ.ПолучитьЗначениеПоля("Fone"); Спр = СпрКонтр.НайтиПоКоду(Код_); Если спр = Справочники.Контрагенты.ПустаяСсылка() тогда Элемент = СпрКонтр.СоздатьЭлемент(); иначе Элемент = Спр.ПолучитьОбъект(); КонецЕсли; Элемент.Наименование = НаимКонтр; Элемент.НаименованиеПолное = НаимКонтр; Элемент.ИНН = ИНН; Элемент.Код = Код_; Элемент.КодПоЕДРПОУ = ОКПО; Элемент.Записать(); сообщить(НаимКонтр); // Запишем в регистр сведений контактную инфу НаборД = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); // Создаем новую строку в этом наборе записей: СтрокаДанных = НаборД.Добавить(); ВидКИ_ = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"); // определяем значения Измерений этой строки: СтрокаДанных.Объект = Элемент.Ссылка; СтрокаДанных.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; СтрокаДанных.Вид = ВИдКИ_.ПолучитьОбъект(); СтрокаДанных.Представление = АдресПолный; СтрокаДанных = НаборД.Добавить(); ВидКИ_ = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00010"); СтрокаДанных.Объект = Элемент.Ссылка; СтрокаДанных.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; СтрокаДанных.Вид = ВИдКИ_.ПолучитьОбъект(); СтрокаДанных.Представление = АдресЮр; СтрокаДанных = НаборД.Добавить(); СтрокаДанных.Объект = Элемент.Ссылка; СтрокаДанных.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; СтрокаДанных.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00005"); СтрокаДанных.Представление = Телефон; НаборД.Записать(ложь); ФайлДБФ.Следующая(); КонецЦикла; КонецПроцедуры |
|||
14
hhhh
13.07.12
✎
12:50
|
вы неисправимы. Ну это что за бред?
СтрокаДанных.Вид = ВИдКИ_.ПолучитьОбъект(); какой еще объект вы опять пытаетесь засунуть? |
|||
15
vip67
13.07.12
✎
12:54
|
получаю элемент справочника
|
|||
16
anddro
13.07.12
✎
12:55
|
(14) человек сразу сказал, что не силен. После 7.7 не сразу люди понимают разницу между СправочникСсылка и СправочникОбъект. Все через это прошли, и он научится.
|
|||
17
vip67
13.07.12
✎
12:55
|
т.е., получаю ссылку на элемент справочника
|
|||
18
anddro
13.07.12
✎
12:55
|
(15) нет, ты получаешь объект, с помощью которого можно изменить элемент справочника. А тебе нужна ссылка на элемент справочника.
|
|||
19
vip67
13.07.12
✎
12:56
|
(16) сенкью за понимание. действительно - иногда в шок прихожу - нахрена так все усложнили?!
|
|||
20
vip67
13.07.12
✎
12:56
|
(18) а это поможет решить мою проблему? (с дублированием строчек)?
|
|||
21
anddro
13.07.12
✎
12:56
|
(17) в режиме отладки посмотри значение переменной и ее тип. Сразу станет понятнее. После 7.7 отладка в 8* очень радует.
|
|||
22
anddro
13.07.12
✎
12:59
|
Вы этом случае (поиск по коду внутри цикла - это отдельная тема) ты заполняешь ссылку:
СтрокаДанных.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00005"); А в этом случае у тебя .Вид не заполнятся (типы не совпадают, но для 1с это не повод вызывать исключение) СтрокаДанных.Вид = ВИдКИ_.ПолучитьОбъект(); Проверь в отладчике значение СтрокаДанных.Вид после каждого из вариантов. |
|||
23
vip67
13.07.12
✎
13:05
|
заменил
СтрокаДанных.Вид = ВИдКИ_.ПолучитьОбъект(); на СтрокаДанных.Вид = ВИдКИ_.Ссылка; да, теперь в закладке контактная информация 3 строки - как и положено. но непонятно - если бы ВИД не заполнялся - почеему он отображался в закладке?! я бы тогда сразу обратил внимание. ок, всем спасибо! с тяпницей и удачных выходных!!! |
|||
24
anddro
13.07.12
✎
13:07
|
ВИдКИ_.Ссылка; - так не надо.
ВИдКИ_ - это уже и есть нужная ссылка. А ты из нее считываешь ссылку (результат тот же, но это лишнее обращение к базе/кэшу) |
|||
25
gosn1ck
13.07.12
✎
13:09
|
(24) +1
(23) нажмите на картинку справа сверху или проблем не оберетесь... зы интересно все ли 7шники когда переходили на 8ку говорили "почему всё так стало сложно?" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |