Имя: Пароль:
1C
 
Поиск номенклатуры в другой базе через COM
,
0 Gossar1C
 
24.02.15
12:19
Здравствуйте! Возникла проблема с перебросом номенклатуры в другую базу, пишу собственную обработку, и когда записываю через ком номенклатуру он пишет что справочник номенклатура не имеет владельца в другой базе? как понятЬ? если конфигурации одинаковые

Пытаюсь например записать группу номенклатуры "Временная"
создается элемент, через ЗаполнитьЗначениеСвойств() пытаюсь записать он мне выдает такую ошибку:
Произошла исключительная ситуация (1C:Enterprise 8.3.5.1443): Справочник не имеет владельца
по отладчику смотрю в приемнике нет владельца, а в источнике есть.
И что за чудеса?
1 Stim
 
24.02.15
12:21
"Справочник не имеет владельца"
а ты ему владельца загружаешь
2 Gossar1C
 
24.02.15
12:22
(1) я ему передаю папку, поля как такового нет в приемник, не значения, а именно поля
3 Рэйв
 
24.02.15
12:22
(0)Владелец? У номенклатуры?...Даж заинтриговал что это может быть за справочник.
Неужели склад?:-)
4 Gossar1C
 
24.02.15
12:24
(3) надо бы у платформы спросить) а может и я код коряво пишу. Но суть в том что у номенклатуры иерархия и как таковой должен быть реквизит Родитель, какой нахрен владелец я не понял
5 Stim
 
24.02.15
12:24
(2) вот  он тебе и ругается
6 Ненавижу 1С
 
гуру
24.02.15
12:24
"если конфигурации одинаковые" - врешь же
7 Stim
 
24.02.15
12:24
какую папку ты передаешь номенклатуре? с документами?
8 Ненавижу 1С
 
гуру
24.02.15
12:25
на крайняк в ЗаполнитьЗначениеСвойств укажи это поле в списке исключений
9 Gossar1C
 
24.02.15
12:30
(7) я передаю ссылку номенклатуры неважно, папка или элемент
(6) и нет не вру идентичные
10 Gossar1C
 
24.02.15
12:31
(8) а как объяснить почему отсутствует поле и владелец и родитель по отладчику в приемнике?) хотя иерархия включена
11 Stim
 
24.02.15
12:32
(9) какая папка.. ты одинесники или где??
группа или родитель - пиши точнее
12 Рэйв
 
24.02.15
12:32
(10)давай код как и чего ты туда передаешь и записываешь
13 Stim
 
24.02.15
12:33
(10) ты родителя тоже через ЗаполнитьЗначениеСвойств() передаешь??
типа ты хочешь в базе1 у элемента установить родителя из базы2

ну дерзай,чо
14 Ненавижу 1С
 
гуру
24.02.15
12:35
(10) скажем так, эти поля у объекта есть всегда, даже когда нет подчинения и иерархии, просто тогда они равны Неопределено и недоступны для записи
15 Gossar1C
 
24.02.15
12:36
(11) :) ок, проще, так как я реализую возможность чтобы можно было перекинуть любую Группу вместе с номенклатурой в ней содержащейся в другую базу разумеется первым делом я передаю группу, то есть я передаю папку "Временная" вместе с номенклатурой в нее входящей, следовательно я ищу сначала Группу в другой базе а если не находит то пытаюсь создать, из этого вот что получается
16 Godofsin
 
24.02.15
12:37
(15) Код выкладывай.
(13) +1
17 Stim
 
24.02.15
12:37
(14) неопределено или NULL ?
18 Gossar1C
 
24.02.15
12:40
(16) сейчас вместо объяснений начнется высер простите, что "кто так пишет и тд" сразу говорю, впервые с комом разбираюсь :) поэтому просто пишу как походу мыслей


ОбъектПодключения = ПодключитсяКИнформационнойБазе(СтруктураПодключения);
    
    Запрос = Новый Запрос;
    Запрос.Текст =
      "ВЫБРАТЬ
      |    Номенклатура.Ссылка КАК Ссылка
      |ИЗ
      |    Справочник.Номенклатура КАК Номенклатура
      |ГДЕ
      |    Номенклатура.Ссылка В ИЕРАРХИИ(&Родитель)
      | И Номенклатура.ПометкаУдаления = ИСТИНА";
    Запрос.УстановитьПараметр("Родитель",Группа);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    МенеджерНоменклатуры = ОбъектПодключения.Справочники.Номенклатура;
    
    НайтиОбъект(Группа,МенеджерНоменклатуры,ОбъектПодключения);
    
    Пока Выборка.Следующий() Цикл
        НайтиОбъект(Выборка.Ссылка,МенеджерНоменклатуры,ОбъектПодключения);
    КонецЦикла;
            
    Возврат "Перенос выполнен";
    
КонецФункции

Процедура НайтиОбъект(Ссылка,МенеджерНоменклатуры,ОбъектПодключения);
    
    ЗапросCOM = ОбъектПодключения.NewObject("Запрос");
    ЗапросCOM.Текст =
         "ВЫБРАТЬ
     |    Номенклатура.Ссылка КАК Ссылка
     |ИЗ
     |    Справочник.Номенклатура КАК Номенклатура
     |ГДЕ
     |    Номенклатура.Наименование = &Наименование";

     ЗапросCOM.УстановитьПараметр("Наименование",Ссылка.Наименование);
    
     РезультатПоиска = ЗапросCOM.Выполнить().Выбрать();
    
     Если РезультатПоиска.Количество() <> 0 Тогда
         Пока РезультатПоиска.Следующий() Цикл
             ОбъектПоиска = РезультатПоиска.Ссылка.ПолучитьОбъект();
             ЗаполнитьЗначенияСвойств(ОбъектПоиска,Ссылка);
             ОбъектПоиска.Записать();
         КонецЦикла;
     Иначе
         ОбъектНоменклатуры = МенеджерНоменклатуры.СоздатьЭлемент();
         ЗаполнитьЗначенияСвойств(ОбъектНоменклатуры,Ссылка);
         ОбъектНоменклатуры.Записать();
     КонецЕсли;
    
КонецПроцедуры
19 Stim
 
24.02.15
12:43
эхх.. жестко.. он и вправду родителя другой базы записывает найденному объекту((
20 Stim
 
24.02.15
12:43
+ не говоря про все остальные служебные реквизиты
21 Рэйв
 
24.02.15
12:44
(18):-)
Ну ты орел.
А ссылочные реквизиты ты решил COMObject все заполнить?
Лихо!:-)
22 Рэйв
 
24.02.15
12:44
(18)Переносить через сом новые объекты -это тот еще гемор.
советую использовать КД Много проще и надежнее
23 Gossar1C
 
24.02.15
12:52
(21) без КД никак?) имхо com объекты можно также перенести или создать, хоть и геморнее
24 Рэйв
 
24.02.15
12:54
(23)Потому что тьоам может быть чертовски тяжелая вложенность ссылок.
как в том анекдоте - "А за деревом -дерево, а за деревом-дерево, а задеревом- дерево, а за деревом -Лес!...а за ним снова дерево..."и т д ..:-)
25 Рэйв
 
24.02.15
12:54
и не все они уже могут быть в базе и поэтому все придется проверять на .Пустая()
26 Gossar1C
 
24.02.15
12:57
(25) спасибо за совет, а вы не могли бы мне пару статеек скинуть как работать с кд именно в своем переносе использовать? просто я как бы с правилами знаком и кд давно пользуюсь для обменов, универсальных обменов и тд. Тоесть корректировал правила, создавал, но именно в разработке переноса не доводилось участвовать.
27 Рэйв
 
24.02.15
13:00
(26)Свой лучше и не начинать писать:-)
Есть Универсальный обмен данными.
Запускаешь его из обработки, заполняешь, читаешь правила, пограммно же запускаешь и выгружаешь файл.
Потом по СОм подключаешься к другой базе, уже там запускаешь программно Универсальный обмен данными и не отходя от кассы тут же читаешь свеже выгруженный файл.
Вот тебе вариант почти онлайн обмена:-)
28 Godofsin
 
24.02.15
13:01
(27) +100500!
29 Gossar1C
 
24.02.15
13:02
(27) вариант тоже не из легких) но ладно буду пробовать, спасибо!
30 Рэйв
 
24.02.15
13:03
(29)Если сделаешь правила, то ничего особо сложного
А если конфы и правдв идентичные, то правила прекрасно делаются автоматом
31 Godofsin
 
24.02.15
13:12
Если конфы идетичные, тогда ВыгрузкаЗагрузка - наилучший вариант и правил никаких не надо
32 Рэйв
 
24.02.15
13:13
(31)Ну можно и так.