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