|
Конвертация данных. Привязка складов | ☑ | ||
---|---|---|---|---|
0
ХочуСпец
31.07.12
✎
11:06
|
Есть Документ источника и приемника. Есть реквизит склад. Нужно жестко указать есть в источнике склад такой то, то в приемнике склад такой то.
В ПКС "склад" для этого документа: Источник - пусто. Приемник - склад. ПКО - пусто. В обработчике Перед Выгрузкой в ПКС: Если Источник.Склад.НайтиПоКоду("0001") тогда Значение = Приемник.НайтиПоНаименованию("МойСклад1"); ИначеЕсли Источник.снх_СкладУУ.НайтиПоКоду("0002") тогда Значение = Приемник.НайтиПоНаименованию("МойСклад2"); КонецЕсли; При выгрузке ошибка: метод найти по коду не обнаружен. В чем может быть проблема? |
|||
1
Господин ПЖ
31.07.12
✎
11:10
|
разрешаю написать в правиле
Сообщить("" + Источник.Склад); Сообщить("" + ТипЗнч(Источник.Склад)); |
|||
2
bar0n0
31.07.12
✎
11:10
|
Нада не так Приемник.НайтиПоНаименованию("МойСклад1"), а так Справочники.Склады.НайтиПоНаименованию("МойСклад1")
и не так Источник.Склад.НайтиПоКоду("0001"), а так Источник.Склад.Код = "0001" Дальше сам разберешся |
|||
3
ХочуСпец
31.07.12
✎
15:25
|
(2) в данном случае: Справочники.Склады.НайтиПоНаименованию("МойСклад1")
поиск будет произведен в Источнике или приемнике? |
|||
4
AndrewM
31.07.12
✎
15:29
|
(3) ты этот код пишешь в обработчике "ПередВыгрузкой". Значит, в источнике.
|
|||
5
Naumov
31.07.12
✎
15:30
|
а что гениальный кусок кода из (0) Должен сделать? сдается вообще с ошибкой отвалится
|
|||
6
Naumov
31.07.12
✎
15:30
|
+ Как соотносятся склады в базах? есть ли возможность, например, одинаковые коды им назначить и синхронизировать по коду?
|
|||
7
ХочуСпец
31.07.12
✎
15:31
|
(4) но нужно искать в приемнике
|
|||
8
ХочуСпец
31.07.12
✎
15:34
|
какой обработчик использовать?
|
|||
9
ХочуСпец
31.07.12
✎
15:39
|
(6) нет по коду не синхронизируются
|
|||
10
Naumov
31.07.12
✎
15:40
|
(9) Что мешает этому? Есть принципиальная невозможность?
|
|||
11
ХочуСпец
31.07.12
✎
15:42
|
(10) мешает
в (0) описал как необходимо сделать |
|||
12
ХочуСпец
31.07.12
✎
15:58
|
неужели такой вопрос мудренный?
|
|||
13
Naumov
31.07.12
✎
16:13
|
(11) В (0) Я не понял чего ты хотел конкретно написать. Кусок кода мягко говоря не нормален.
Если опишешь постановку, то предложу варианты решения проблемы. Их как обычно несколько |
|||
14
akaBrr
31.07.12
✎
16:15
|
Источник.Склад.НайтиПоКоду("0001") - это не будет работать на стороне приемника
Значение = Приемник.НайтиПоНаименованию("МойСклад1") это не будет работать на стороне источника |
|||
15
ХочуСпец
31.07.12
✎
16:17
|
(13) кусок кода это просто пример
На данный момент необходимо выгружать документы из источника в приемник. Синхронизации по складу этого документа пока нет. Т.е. пользователь может задать эту связь жестко: Если в Источнике склад1, то в приемнике Склад1111 (14) да, работать не будет. Это просто пример Если прописать перед выгрузкой ПКС "Склад": Если Источник.Склад.Код = "0001" тогда Значение = Справочник.Склады.НайтиПоНаименованию("МойСклад1"); ИначеЕсли Источник.снх_СкладУУ.НайтиПоКоду("0002") тогда Значение = Справочник.Склады.НайтиПоНаименованию("МойСклад2"); КонецЕсли; Но в данном случае будет подставлять склад из Источника |
|||
16
akaBrr
31.07.12
✎
16:18
|
(15) Синхронизация складов должна стоять по наименованию. В ПКО склады должен быть указан реквизит Наименование и поиск по нему. Все.
|
|||
17
akaBrr
31.07.12
✎
16:19
|
+(16) но я бы сделал по ссылке
|
|||
18
ХочуСпец
31.07.12
✎
16:19
|
(16) ну нет синхронизации! ни по наименованию ни по коду!
|
|||
19
Йохохо
31.07.12
✎
16:20
|
Значение = Новый Структура;
Значение.Вставить("Код", Неопределено); Значение.Вставить("Наименование", "МойСклад1"); ПКО - Склады_ПоискПоНаименованию - только 2 поля, поиск по имени |
|||
20
Naumov
31.07.12
✎
16:21
|
(15) ДА блин. каленой кочергой вечно постановку выпытывать.
В источнике можно либо в реквизит справочника складов запихать код из базы в БП и при выгрузке выгрузить нужный нам код для синхронизации, либо в свойства запихать и выуживать из них. (18) Мешает-то что? в чем ограничения на синхрон? |
|||
21
akaBrr
31.07.12
✎
16:22
|
(18)новое ПКО Строка->Склады, строку в имя склада
|
|||
22
akaBrr
31.07.12
✎
16:23
|
+(21) в ПКС указать новое ПКО
|
|||
23
akaBrr
31.07.12
✎
16:24
|
+(22) и тогда Значение = "МойСклад2";
|
|||
24
ХочуСпец
31.07.12
✎
16:24
|
В какой момент (в каком обработчике) можно из приемника по наимованию достать нужный склад?
|
|||
25
Йохохо
31.07.12
✎
16:27
|
(24) у тебя доступна или первая база, или вторая
но никогда обе ты хочешь передать параметром СкладИсточник и потом найти его при загрузке? |
|||
26
ХочуСпец
31.07.12
✎
16:28
|
(25) именно так
А если просто прописать: Если Источник.Склад.Код = "0001" тогда Значение = "МойСклад1"; ИначеЕсли Источник.снх_СкладУУ.НайтиПоКоду("0002") тогда Значение = "МойСклад2"; КонецЕсли; При условии что наименования складов в приемнике различны |
|||
27
akaBrr
31.07.12
✎
16:30
|
(24) ПКС
Если Источник.Склад.НайтиПоКоду("0001") тогда Значение = "МойСклад1"; ИначеЕсли Источник.снх_СкладУУ.НайтиПоКоду("0002") тогда Значение = "МойСклад2"; КонецЕсли; ПКО : у Наименования ПередВыгрузкой Значение = Источник; |
|||
28
Naumov
31.07.12
✎
16:31
|
(24) можно, например так:
ставишь полем поиска для склада Наименование, в правиле конвертации свойства Наименование для склада в событии перед выгрузкой пишешь что-то типа твоего Если Источник.Склад.Код = "0001" тогда Значение = "МойСклад1"; Иначе .... КонецЕсли; как раз так работать будет. искать будет по указанному здесь наименованию |
|||
29
ХочуСпец
31.07.12
✎
16:36
|
(27)
В новом ПКО какие конвертации свойств прописать? |
|||
30
akaBrr
31.07.12
✎
16:37
|
(29)у Наименования ПередВыгрузкой Значение = Источник;
|
|||
31
Йохохо
31.07.12
✎
16:40
|
(29) в ПКС Склад пишешь (19) и всё
|
|||
32
ХочуСпец
31.07.12
✎
16:42
|
(30)
Я создал новое ПКО "СкладыСтрока" Добавил в конвертацию свойств этого ПКО: Источник Пусто, Приемник: Наименование. Поиск по этому свойству. В ПКС Склад для документа выбрал это ПКО. В ПКС Перед выгрузкой: Если Источник.Склад.Код = "0001" тогда Значение = "МойСклад1"; Иначе .... КонецЕсли; но вылетает с ошибкой |
|||
33
akaBrr
31.07.12
✎
16:44
|
(32) у ПКС Наименование, в событии ПередВыгрузкой написал что в (30)?
|
|||
34
akaBrr
31.07.12
✎
16:44
|
+(33) и да в (31) и (19) более наглядный способ
|
|||
35
ХочуСпец
31.07.12
✎
16:44
|
(33) да
|
|||
36
akaBrr
31.07.12
✎
16:46
|
(35) в ПКО документа в ПКС Склад поменял правило?
|
|||
37
ХочуСпец
31.07.12
✎
16:46
|
(36) естествно
|
|||
38
akaBrr
31.07.12
✎
16:46
|
ошибка какая?
|
|||
39
Naumov
31.07.12
✎
16:50
|
ну так у него источник пустой. не может она так. с пустым источником надо делать как в (19) и выгрузить по правилу применять.
|
|||
40
ХочуСпец
31.07.12
✎
16:53
|
(38) при загрузке правил обмена:
Ссылка на несуществующий объект метаданных в правилах обмена Объект = Строка ОписаниеОшибки = Значение не является значением объектного типа (ПКО) ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(2095) КодСообщения = 11 а выгрузка проходит |
|||
41
Йохохо
31.07.12
✎
16:54
|
(39) не надо ни чего по правилу выгружать, ПКО в ПКС Склад и все
|
|||
42
akaBrr
31.07.12
✎
16:55
|
(39) источник может быть пустой
|
|||
43
Йохохо
31.07.12
✎
16:57
|
(40) конечно, кд хочет сделать Склад["Наименование"], а Склад - строка
|
|||
44
ХочуСпец
31.07.12
✎
16:58
|
(41) ну так и сделал. Ошибка.
Добавил ПКО "СкладыСтрока" Добавил в конвертацию свойств этого ПКО: Источник Пусто, Приемник: Наименование. Поиск по этому свойству. Перед выгрузкой для этого свойства Значение = Источник В ПКС Склад для документа выбрал это ПКО. В ПКС Перед выгрузкой: Если Источник.Склад.Код = "0001" тогда Значение = "МойСклад1"; Иначе .... КонецЕсли; |
|||
45
ХочуСпец
31.07.12
✎
17:00
|
Самое что интересное загрузилось на УРА!
Но вот ошибка при загрузки правил огорчает ( |
|||
46
akaBrr
31.07.12
✎
17:01
|
(44) мой способ взят из книжки Бояркина и Филатова, если есть глянь там, может я где ошибся
|
|||
47
Naumov
31.07.12
✎
17:01
|
(44) Источник - строка, а не пусто
|
|||
48
ХочуСпец
31.07.12
✎
17:02
|
(47) нельзя выбрать Строка
|
|||
49
akaBrr
31.07.12
✎
17:03
|
(48) у ПКС нельзя, у ПКО можно
|
|||
50
ХочуСпец
31.07.12
✎
17:04
|
(49) у ПКО Строка!
|
|||
51
akaBrr
31.07.12
✎
17:06
|
http://forum.infostart.ru/forum14/topic36609/ очень подробно
|
|||
52
Йохохо
31.07.12
✎
17:07
|
(48) зачем тебе Источник?
Ошибка не потому, что нет источникав ПКС, а потому, что в ПКО Склад, для объектного типа, у которого есть реквизиты, которые должны быть доступны через [], ты передаешь ТипЗнч(Склад) = "Строка" |
|||
53
akaBrr
31.07.12
✎
17:09
|
(52) он там устанавливает значение
Значение - Неопределено. Конвертируемое значение свойства. Если значение определить в теле обработчика, то стандартная процедура получения значения не будет происходить. |
|||
54
akaBrr
31.07.12
✎
17:10
|
(50) в каком событии прописал Значение = "Склад1"?
|
|||
55
ХочуСпец
31.07.12
✎
17:12
|
(54) В ПКС склады документа "ПередВыгрузкой"
|
|||
56
AndrewM
31.07.12
✎
17:12
|
(44) Зачем в ПКО "СкладыСтрока" создавать кучу ПКС? Достаточно одного ПКС "Строка -> Наименование". И в этом ПКС перед выгрузкой прописать "Значение = Источник".
|
|||
57
akaBrr
31.07.12
✎
17:13
|
(56) это у него в ПКС Склад, ПКО какойтодокумент
|
|||
58
Йохохо
31.07.12
✎
17:13
|
(53) Если Значение = Неопределено то обработчик выгрузки не выполнится ) афаик
|
|||
59
akaBrr
31.07.12
✎
17:14
|
(58) Если значение определить в теле обработчика, то !стандартная процедура! получения значения не будет происходить. Что автор и делает.
|
|||
60
ХочуСпец
31.07.12
✎
17:14
|
(56) так и сделано
|
|||
61
Йохохо
31.07.12
✎
17:15
|
все запутали и поломали, а было так просто )
|
|||
62
akaBrr
31.07.12
✎
17:15
|
(61) не мы, нас так 1С учит :)
|
|||
63
Йохохо
31.07.12
✎
17:16
|
(59) писалкин.
|
|||
64
akaBrr
31.07.12
✎
17:17
|
(63) читалкин.
|
|||
65
Йохохо
31.07.12
✎
17:18
|
=) если Значение = Неопределено, то
1. то !стандартная процедура! получения значения не будет происходить sic 2. не будет вызван ПКО |
|||
66
akaBrr
31.07.12
✎
17:21
|
(65)
(1)Если значение определить в теле обработчика <> Значение = Неопределено (2)домыслы, в описании правила об этом ни слова |
|||
67
akaBrr
31.07.12
✎
17:22
|
чтобы не выполнялось правило есть флаг Отказ
|
|||
68
AndrewM
31.07.12
✎
17:22
|
Кстати, в свойствах ПКО "СкладыСтрока" надо галочку поставить "Автоматически генерировать новый номер или код, если он не задан", т.к. ты в ПКО "СкладыСтрока" добавил только ПКС на наименование. А если по указанной строке ничего не найдётся, кд попробует создать новый элемент, но с пустым кодом.
|
|||
69
Йохохо
31.07.12
✎
17:26
|
(66) в общем случае нет, я взял и написал "Значение = Неопределено"
а про эти домыслы лучше помнить |
|||
70
akaBrr
31.07.12
✎
17:35
|
(69)Если значение = Неопределено, то это штатный режим работы, КД сама определит значение. Впрочем это касается ПередВыгрузкой.
|
|||
71
Абыр
31.07.12
✎
17:39
|
(0) Тему не читал) Но:
1) Создаем новое ПКО. Источник - пустой. Приемник - справочник Склады конфы-приемника. ПКС только одно - для наименования, по нему и поиск. Не забываем в нем написать Значение = Источник; 2) В ПКО документа устанавливаем наше новое правило для реквизита Склад. Ну и соответственно прописываем код для определения значения. |
|||
72
akaBrr
31.07.12
✎
17:40
|
(71) третьим будешь, но у нас здесь есть еретики, которые не признают православный способ :)
|
|||
73
ХочуСпец
31.07.12
✎
17:44
|
Да все таки источник ПКО должен быть пустой. Все выгрузилось и загрузилось без ошибок. Спасибо всем. В частности Йохохо и akaBrr
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |