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