Имя: Пароль:
1C
1С v8
Конвертация данных : ПараметрОбъекта
,
0 camomile
 
03.04.12
08:56
Помогите разобраться как им пользоваться. Задача  в том что необходимо по некоему ключу   «документа источника» подобрать нужный «документ приемника» .   «Документ источника» это реквизит таб части документа «корректировка записей регистров» и   может  соответствовать  нескольким документам приемника, где «документ приемника» это реквизит документа «опер  бух».  Поскольку не сильна в конвертации решила что сделаю так  - передам через параметр ключ и  найду по ключу нужный документ.  Передать  то получается , но получаю  «не определено».
В ПКС  таб части  для реквизита «Документ» указываю источник – «документ», передавать данные в параметр, имя параметра «ДокументСторно». Перед выгрузкой для ПКС пишу:
значениеПараметра = ОбъектКоллекции.Документ.Номер;  //здесь задаю ключ но для простоты примера пусть  пока будет  только номер
ПередатьОдинПараметрВПриемник("ДокументСторно", значениеПараметра);

После загрузки ПКО:
Если ПараметрыОбъекта <> Неопределено тогда
   сообщить(ТипЗНЧ(ПараметрыОбъекта["ДокументСторно"])); //выдает :  Не определено
   сообщить(ПараметрыОбъекта); //выдает : Соответствие
   ДокументСторно = ПараметрыОбъекта[ДокументСторно]; // выдает : Не определено
Иначе
   ДокументСторно = Неопределено;
КонецЕсли;
Что не так ? почему «не определено»?
1 patapum
 
03.04.12
09:03
с параметрами пока не работал, но сделать хочешь что-то непонятное. из строки табличной части формируешь ключ, и он может соответствовать нескольким документам в приемнике. и ты тогда пишешь в первый попавшийся или во все? или это разные строки могут соответствовать разным докам приемника?
в общем, понять бы чего ты хочешь, а там уже искать пути решения
2 camomile
 
03.04.12
09:17
переношу   "корректировка записей регистров" (БП 8.1) в "опер бух" (БП Корп 2.0), причем переносить следует для одного типа операции - сторно и одного типа документа  источника (документ не типовой), этот документ из таб части ЗаполнениеДвижений в КЗР переносится в реквизит "документ" соответственно "Опер бух"  приемника и имеет там составной тип "ПТиУ" и такой же тип как в источнике. поэтому решила формировать ключ  - скажем структура "номер, дата , тип " и по этому ключу потом искать нужный документ приемника. может конечно есть и проще способ решения но конвертация для меня пока темный лес.
3 patapum
 
03.04.12
09:22
интересно, но сумбурно :)
то есть тебе надо реквизит таб. части перенести в реквизит документа?
4 camomile
 
03.04.12
09:27
из таб часть в таб часть, согласна что кривовато, но это индивидуальный случай такой , таб часть КЗР "заполнение движение" и таб часть Опер бух "заполнение движений" , но реквизит "Документ" имеет разный тип в источнике и приемнике , в приемнике  - составной, и строка всегда одна.
5 patapum
 
03.04.12
09:29
уходит он одним типом, а приходит одним - или разным, в зависимости от условий?
6 camomile
 
03.04.12
09:31
нет, точнее сказать реквизит и там и там  имеет  составной тип , но  нужно переносить только одного типа документ и в применике он превращается либо в поступление товаров и услуг либо в "свой" тип - это не типовой документ (в источнике тип такой же).
7 camomile
 
03.04.12
09:33
(5) уходит одним  , приходит таким же или другим. определяется в зависимости от условий.
8 patapum
 
03.04.12
09:35
а вычислить тип, в котором он придет, в источнике можно? или только в приемнике?
9 Aprobator
 
03.04.12
09:36
вообще то в 8 ке уже есть в ПКС галочка - куда передавать в приемник ил в параметр. Если из 8 - ки в 8 - ку. Вот какое значение в конечном счете будет в параметрах объекта при выгрузке туда данных из коллекции - вопрос. Поскольку параметры объекта привязаны к объекту целиком, а не к строке коллекции.
10 camomile
 
03.04.12
09:38
(9) вот я эту галочку использую, ставлю передавать в параметр и пишу имя параметра перед выгрузкой ПКС пишу либо так
значение = ОбъектКоллекции.Документ.Номер;  //здесь задаю ключ но для простоты примера пусть  пока будет  только номер

либо так
ПередатьОдинПараметрВПриемник("ДокументСторно", значениеПараметра);

но в любом случае получаю ничего.
11 camomile
 
03.04.12
09:39
я и  хочу понять как использовать эту галочку , информации по ней совсем мало, и не понятно как передавать ПараметрОбъекта
12 Aprobator
 
03.04.12
09:41
ПараметрОбъекта, а не строки какой то коллекции внутри его.
13 patapum
 
03.04.12
09:42
с параметром понятно - если ты передаешь в параметр, то в приемнике в параметрах объекта будет переданное тобой значение. но объекта, а не строки ТЧ. можно ли передать в параметр реквизит строки ТЧ, и что будет - непонятно. можно в разных обработчиках сообщалок наставить и поотслеживать. но при том что ты мало знаешь о конвертации, думаю, пока не для тебя путь
14 Aprobator
 
03.04.12
09:43
имхо, логичнее сделать переадресовку из ПКС элемента коллекции в нужное ПКО и уже там юзать параметр.
15 patapum
 
03.04.12
09:43
ты бы лучше задачу изложила подробнее, в конвертации почти всегда можно больше одного пути придумать
16 Рыцарь
 
03.04.12
09:45
Может лучше в зависимости от типа источника соответствующее правило  предлагать?
17 СноваЗдорова
 
03.04.12
09:47
Вообще непонятно, что хочет сделать (0)
18 patapum
 
03.04.12
09:48
(16) там не в зависимости от типа источника, там еще от каких то условий зависит. если их можно определить на стороне источника, то так и надо сделать. но развести девушку на изложить задачу подробно пока не получается :)
19 camomile
 
03.04.12
10:00
я не знаю куда еще подробей написать :), значит так , есть в БП8.1 документ корректировка с операцие сторно документа "движения товаров" (не типовой документ) , эти сторно корректировки нужно перетащить в БП2.0 в документ "Операция бух" , документ "Движения товаров" в источнике  формирует движения в РН "Движения товаров" по партиям, в применике ведется учет по партиям, но партионные учеты почему то разные! так вот  мне поставили задачу перетащить сторно  из источника в приемник так чтобы сторнируемый документ из источника встал в сторнируемый документ "Операция бух" приемника а потом произошло заполнение движений документа "Операция бух" по указанному документу.   при этом в источнике  сторно  = один тип документа а в приемнике это может быть либо "поступлдение товаров и услуг" либо такой же тип "Движения товаров"
20 camomile
 
03.04.12
10:05
"но при том что ты мало знаешь о конвертации, думаю, пока не для тебя путь" , ну вы уж не думайте только что совсем дуб товарищ, я способная , только конвертация такой лес , тяжеловато  для нестандартных задач освоить сходу. поэтому, прошу,  подсказывайте если есть идеи  как правильно сделать, а я уж разберусь
21 patapum
 
03.04.12
10:11
на (8) ответь?
(20) я тоже не дуб, а гений, как и ты :). но КД осваивал не за один раз, и с большими затратами времени и нервов, с матами-перематами когда доходило. и пока до конца не освоил.
22 camomile
 
03.04.12
10:19
(8) можно, вообще он тип один - и в приемнике такой тип тоже есть.  я пробовала в ПКС этого реквизита указывать источник "документ", приемник "документ", но в приемнике получаю всеравно пусто - брала типовое правило из БП81-БП20 + добавляла ПКО для нового документа этого типа.
23 patapum
 
03.04.12
10:19
как самый топорный вариант, делаешь два правила конвертации, и соответственно, два правила выгрузки. зарубаешь ненужное, если не подошло по условиям: либо в ПВД при выгрузке - если можно определить на стороне источника (в этом случае изящнее пользоваться ВыгрузитьПоПравилу, но я пока не умею), либо в ПКО перед загрузкой - если только в приемнике.
24 camomile
 
03.04.12
10:26
(23) зарубаю ненужное я сейчас в ПКО перед выгрузкой, но пожалуй будет правильнее еще на этапе ПВД, а зачем по два правила я не поняла?
25 Рыцарь
 
03.04.12
10:29
(22) Возможно стоит попробовать так: в ПКС источник "документ", приемник "документ", и в ПриВыгрузкой что то наподобие следующего:
Если ТипЗнч(Значение) = Тип("Документ1типа") Тогда
ИмяПКО = "Наименование1правила";
ИначеЕсли ТипЗнч(Значение) = Тип("Документ2типа") Тогда
ИмяПКО = "Наименование2правила";
КонецЕсли;
26 camomile
 
03.04.12
10:33
(22) так не получается, т.к. документ в приемнике уже есть, но его нужно найти либо среди  документов "поступление.." либо среди документов "Движения.." и вставить его в  в реквизит таб части "документ"  пришедшедшего "Опер бух"
27 camomile
 
03.04.12
10:33
ой, (22) = (25)
28 patapum
 
03.04.12
10:34
(24) два правила - очень просто. в одном выгружаешь по одному варианту, в другом - по другому. а тот вариант, который неправильный - убиваешь. но Рыцарь вариант лучше предлагает
29 patapum
 
03.04.12
10:35
(25) правило не предполагает всегда создание нового элемента. если он по полям поиска нашелся док, то он и не будет создаваться, а подцепится найденный
30 patapum
 
03.04.12
10:36
(25) = (27) :)
31 camomile
 
03.04.12
10:37
начинаю врубаться , но тогда не понимаю как формировать правила . допустим делаю как в (25) . пусть будет правило ПКО1  кот будет искать по условиям среди докмуентов "поступление", как передать туда эти условия и как вытащить от туда найденный документ   - не понимаю.
32 camomile
 
03.04.12
10:38
ок, попробую что то сделать как вы сказали , может по ходу дела пойму , но я  уже 4й день с этим ковыряюсь и тоже с матами, тяжело разобраться что как куда передавать и как получать...
33 camomile
 
03.04.12
10:47
вот что, вся загвоздка в том что условия какой документ будет в приемнике  - появляются только в приемнике
34 patapum
 
03.04.12
10:47
смотри, ты передаешь объект, в нем есть реквизит объекта (или строки ТЧ, неважно). для ПКС указано ПКО, по которому выгружается этот реквизит. начинается выгрузка объекта, соответствующего реквизиту. при загрузке - загружается объект. смотрит - надо реквизит загрузить. читает данные объекта, соответствующего реквизиту, из файла. смотрит по полям поиска (или ссылке, если задано) - а есть ли уже такой? если есть, берет его, подставляет в качестве реквизита. если нет, создает и подставляет.
35 patapum
 
03.04.12
10:51
если (33) тогда труднее. тогда кроме моего варианта с двумя ПКО я не знаю как сделать.
ты создаешь два ПКО для Сторно. в одном реквизит документ преобразуется в ПТиУ, в другом - в другой тип. то есть, каждое твое сторно ты выгрузишь два раза. но в приемнике ты один из этих пришедших объектов зарубишь, как неподходящий
36 camomile
 
03.04.12
10:55
вот если (35), то зарубать не нужный вариант где? в обработчике конвертации - перед загрузкой объекта? перед конвертацией объекта? или еще где то?
37 patapum
 
03.04.12
10:57
в ПКО, ПередЗагрузкой, если не ошибаюсь
38 patapum
 
03.04.12
10:58
в ПКО твоего Сторно, а не реквизита
39 camomile
 
03.04.12
11:00
я поняла что сторно, т.е в перед загрузкой пишу  типа Отказ = истина и он не загрузит?
40 camomile
 
03.04.12
11:01
что то начало проявляться , попробую сделать , спасибо огромное! но мне кажеться я еще вернусь :)
41 patapum
 
03.04.12
12:23
кстати то, что я тебе посоветовал, похоже работать не будет... было написано разве что с расчетом на реквизит документа, не ТЧ.
и чтобы было не так топорно, да еще и работало, надо сделать так:
ПВД и ПКО на Сторно - одно. но в нем два ПКС на твой один реквизит ТЧ, одно с одним типом в приемнике, другое с другим. и одно из этих ПКС надо отключать перед его загрузкой
42 camomile
 
05.04.12
09:41
с условием в (33) я наврала, нашла как выцепить какой тип будет в приемнике еще на этапе выгрузки. Решила задачу так (может кому то начинающему в КД поможет привести мозг в порядок) : в ПКС ТЧ реквизита "Документ" при выгрузке указываю в зависиомти от условия ПКО
Если ОбъектКоллекции.Документ.ВидОперации = Перечисления.ВидыОперацийДвиженияТоваров.ВозвратПоставщику Тогда
   ИмяПКО = "ДвиженияТоваровВозврат";
Иначе
   ИмяПКО = "ПоступлениеТоваровУслуг";
КонецЕсли;

по сути все что мне нужно сделать это найти документ который уже есть в приемнике и подставить его в ТЧ  загружаемого объекта. В первом случае документы источника и приемника идентичны а во втором случае искать нужно по такому ключу "организация, контрагент, дата, номер", где номер -это номер документа источника другого типа и в приемнике он указан в комментарии, поиск делаю след. образом:
в ПКО "ПоступлениеТоваровУслуг" ставлю галки Поиск на нужных мне реквизитах, правила всех остальных реквизитах отключаю ,  в обработчике "поля поиска" прописываю варианты поиска нужного мне документа запросом, если ничего не нашел то ПрекратитьПоиск = истина, если нашел  то также прекращаю поиск СсылкаНаОбъект = найденныйДокумент.
Далее, в  "после загрузки"  уже в КЗР, прописываю заполнение движений.
и все работает, оляля!