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