Имя: Пароль:
1C
1С v8
Конвертация данных. Привязка складов
,
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