Имя: Пароль:
1C
1С v8
Сложная ситуация при создании правил обмена
0 Rollam
 
27.01.15
13:06
Возникла необходимость написания правил обмена БП3.0->УТ11.
Столкнулся с моментом, при котором Объект-Источник имеет табличную часть, на основании которой нужно создать документы в Базе-Приемнике, чтобы потом ссылками на эти документы заполнить табличную часть в Объекте-Приемнике.
Выгружаю реквизиты табличной части Объекта-Приемника в параметры, но не совсем представляю себе, можно ли из них при загрузке в Базу-Приемник составить ТаблицуЗначений, на основании которой можно формировать документы, или есть другой способ. Например, создать ТаблицуЗначений перед выгрузкой и работать уже с ней при загрузке, а если так, то как ее передать в обработчик загрузки?
В голове возник так же вариант создать дополнительные правила для этих двух документов, но в Конвертации, вроде, нельзя создать правила "ТабличнаяЧастьОбъекта->Объект".
В Конвертации и правилах обмена я вообще полный нуб, поэтому даже не знаю, каким методом вообще реально воспользоваться.
1 Godofsin
 
27.01.15
13:09
Не могу понять, в чем проблема-то?
2 Godofsin
 
27.01.15
13:10
Ну и сопоставь ТЧ документов и укажи нужное тебе ПКО для ссылок, делов-то...
3 Godofsin
 
27.01.15
13:10
Зачем параметры...
4 Rollam
 
27.01.15
13:12
(2) ТЧ Объекта-Источника содержит кучу реквизитов, а ТЧ Объекта-Приемника всего два: Документ и Сумма. Получается, нужно на основании ТЧ Объекта-Источника создать документы и указать их в ТЧ Объекта-Приемника.
5 Godofsin
 
27.01.15
13:13
(4) В сопоставлении оставляешь приемник пустым, а в при выгрузке пишешь какой хочешь алгоритм. Твои реквизиты будут доступны тебе через ОбъектКоллекции
6 Godofsin
 
27.01.15
13:13
Тьфу, не приемник, а источник
7 Godofsin
 
27.01.15
13:14
Для ПКО создания документа можно воспользоваться таблицейЗначений
8 Rollam
 
27.01.15
13:16
(6) Приемник и должен пустовать вроде. Я его потом программно ссылками буду заполнять.
9 Rollam
 
27.01.15
13:17
(5) ОбъектКоллекции доступен ПриЗагрузке или ПослеЗагрузки?
10 Godofsin
 
27.01.15
13:21
Реквизитов ТЧ источника хватает для создания документа?
11 Rollam
 
27.01.15
13:23
(10) Да.
12 Godofsin
 
27.01.15
13:28
(11) ОбъектКоллекции доступен и в ПередВыгрузкой. В ПередВыгрузкой пишешь что-то вроде:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Дата");
ТЗ,Колонки.Добавить("Номер");
.....
.....
СтрокаТз = ТЗ.Добавить();
СтрокаТЗ.Дата = ОбъектКоллекции.Дата;
СтрокаТЗ.Номер = ОбъектКоллекции.Номер;
....
....
....
Значение = ТЗ;

Для это реквизита определяешь тип приемника и ПКО, которое, ессесно, должно иметь в себя свойства созданной тобой ТЗ.
Вместо ТЗ можно структуру использовать.
13 Rollam
 
27.01.15
13:33
(12) Ок. Это должно срабатывать в ПередВыгрузкой Объекта-Источника, или нужно в свойствах Объекта добавить свойство для ТЧ-Источника (без ТЧ-Приемника), где это будет происходить. Я вот этого чего-то не понял(
14 Godofsin
 
27.01.15
13:39
(13) Да, для ПКО объекта источника ты создаешь ПКС ТЧ источника, которая будет содержать в себе 2 строки: документ и сумма. Откуда там сумма берется, я не в курсе, если она есть в ТЧ источника, значит просто сопоставляешь реквизит источника и реквизит приемника. Для строки "Документ" источник оставляешь пустой, в ПередВыгрузкой этого свойства пишешь (12), приемник указываешь тип документов, которые должны создаться и указываешь ПКО для этого типа документов.
15 Godofsin
 
27.01.15
13:43
(14) "указываешь тип документов, которые должны создаться"
Поправочка, не тип, а реквизит ТЧ приемника.
16 Rollam
 
27.01.15
13:54
(14) Это сумма созданного документа.
17 Rollam
 
27.01.15
13:54
(15) Сейчас попробуем.
18 Rollam
 
27.01.15
14:05
(15) Вышло как-то так:

Объект-Источник = ТабличнаяЧасть "Товары".
Объект-Приемник = ТабличнаяЧасть "ЗакупкаЗаНаличныйРасчет".
Никакие свойства у них не синхронизированы.

Текст ПередВыгрузкой:

ТаблицаТоваров = Новый ТаблицаЗначений;
ТаблицаТоваров.Колонки.Добавить("ПредъявленСФ");
ТаблицаТоваров.Колонки.Добавить("НомерСФ");
ТаблицаТоваров.Колонки.Добавить("ДатаСФ");
ТаблицаТоваров.Колонки.Добавить("НомерВходящегоДокумента");
ТаблицаТоваров.Колонки.Добавить("ДатаВхоящегоДокумента");
ТаблицаТоваров.Колонки.Добавить("Поставщик");
ТаблицаТоваров.Колонки.Добавить("Номенклатура");
ТаблицаТоваров.Колонки.Добавить("Количество");
ТаблицаТоваров.Колонки.Добавить("НомерГТД");
ТаблицаТоваров.Колонки.Добавить("Сумма");
ТаблицаТоваров.Колонки.Добавить("СтавкаНДС");
ТаблицаТоваров.Колонки.Добавить("СуммаНДС");
ТаблицаТоваров.Колонки.Добавить("Склад");

Для каждого Строка из Источник.Товары Цикл
    НоваяСтрока = ТаблицаТоваров.Добавить();
    НоваяСтрока.ПредъявленСФ = Строка.ПредъявленСФ;
    НоваяСтрока.НомерСФ = Строка.НомерСФ;
    НоваяСтрока.ДатаСФ = Строка.ДатаСФ;
    НоваяСтрока.НомерВходящегоДокумента = Строка.НомерВходящегоДокумента;
    НоваяСтрока.ДатаВхоящегоДокумента = Строка.ДатаВхоящегоДокумента;
    НоваяСтрока.Поставщик = ПСтрока.Поставщик;
    НоваяСтрока.Номенклатура = Строка.Номенклатура;
    НоваяСтрока.Количество = Строка.Количество;
    НоваяСтрока.НомерГТД = Строка.НомерГТД;
    НоваяСтрока.Сумма = Строка.Сумма;
    НоваяСтрока.СтавкаНДС = Строка.СтавкаНДС;
    НоваяСтрока.СуммаНДС = Строка.СуммаНДС;
    НоваяСтрока.Склад = Строка.Склад;
КонецЦикла;    
    
Значение = ТаблицаТоваров;
19 SleepyHead
 
гуру
27.01.15
14:08
(0) Не вижу ничего сложного. Опиши ПКО без источника, но с приемником. в ПВД установи произвольный алгоритм и заполни коллекцию ВыборкаДанных, каждый элемент которой будет иметь такую же структуру, как приемник. Наслаждайся.
20 SleepyHead
 
гуру
27.01.15
14:20
(18) открой для себя ЗаполнитьЗначенияСвойств()

:)

Для каждого Строка из Источник.Товары Цикл
    НоваяСтрока = ТаблицаТоваров.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЦикла;
21 Rollam
 
27.01.15
14:58
(20) ОООУ... :)
22 Rollam
 
27.01.15
15:02
(15) А как теперь  обратиться к таблице При/После Загрузки?
23 SleepyHead
 
гуру
27.01.15
15:09
(22) А нафига тебе к ним обращаться? Ты главное структуру приемника опиши и в ПВД заполни коллекцию ВыборкаДанных.
24 Rollam
 
27.01.15
15:12
(23) ТабличнаяЧасть Объекта-Приемника не имеет этих реквизитов, мне нужно создать документы по данным, введеным в созданную ТаблицуЗначений.
25 SleepyHead
 
гуру
27.01.15
15:17
(24) Пока ты не поймешь, что такое ПВД с произвольным алгоритмом, не видать тебе удачи.
26 Rollam
 
27.01.15
15:20
(25) При выгрузке я могу указать любое значение, да. Или имеется в виду нечто иное?
27 Rollam
 
27.01.15
16:58
(25) Если я создам правила для табличной части Объекта-Приемника , не указывая в соответствии табличную часть Объекта-Источника, и заброшу сформированную программно таблицу в переменную КоллекцияЗначений или ВыборкаДанных, я все равно не смогу обратиться к этой переменной при загрузке.
Я пытался закинуть всю табличную часть в параметр разом, но при загрузке этот параметр не определяется, хотя ошибок нет.
28 Rollam
 
27.01.15
17:23
(25) Я создал произвольный алгоритм. ТабличнаяЧасть-Источник не указана. Структуру приемника я описал параметрами, где каждый параметр заполняется перед выгрузкой:
Значение = ОбъектКоллекции."ИмаРеквизитаТЗ";
29 Rollam
 
27.01.15
17:57
Короче, передать табличную часть, не имея Приемник, невозможно?
30 SUA
 
27.01.15
18:02
ТЧ в параметр прекрасно передается
а при загрузке параметр разворачивается кодом в документы как угодно
31 Rollam
 
27.01.15
18:04
(30) Я пытался. У объекта после загрузки вообще параметры не определены. Может, нужно сделать что-то особое?
32 hhhh
 
27.01.15
18:07
(31) после загрузки обращаешься к переменной Объект. Не надо никаких параметров
33 SUA
 
27.01.15
18:11
(31) ПараметрыОбъекта что? - RTFM
Обработчики "Правила конвертации объектов"
После загрузки
Условия возникновения события
Только для платформы V8.
Событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта.

Параметры:
Отказ - Булево - Если Истина, то объект загружен не будет.

Объект - Произвольный - загруженный объект.

Ссылка – Произвольный – ссылка на найденный объект в информационной базе.

ОбъектНайден - Булево. Если значение параметра равно Ложь, то объект не идентифицирован, то есть не найден в информационной базе

ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры переденные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено.
34 Rollam
 
28.01.15
09:06
(33) При попытке передать ТЧ как параметр ПараметрыОбъекта = Неопределено.
35 Alex S D
 
28.01.15
09:21
тч как параметр , содержащую ссылочные значения ты не передаешь. Передавать нужно в виде ХранилищаЗначений
36 Alex S D
 
28.01.15
09:22
ну и опять же. Нужно передавать уиды вместо ссылок
37 Godofsin
 
28.01.15
09:33
А что типа мой вариант не сработал? Вроде самый простой...
38 Rollam
 
28.01.15
09:35
(37) Я создал таблицу значений и передал реквизиты строк в параметры (если я правильно все понял, ибо куда их кидать еще неясно, ведь таких полей в приемнике не существует), но получить значения в приемнике все так же не смог.
39 hhhh
 
28.01.15
09:45
(38) так только примитивные типы можно передать: строки, числа. ПРавильней делать ак    SleepyHead сказал, в (19)
40 Rollam
 
28.01.15
09:50
(39) Я плохо понял, зачем мне ВыборкаДанных со структурой Приемника, если структура Приемника мне изначально не подходит.
41 Godofsin
 
28.01.15
10:05
(38) Покажи скрины где ты что там прописал.
42 hhhh
 
28.01.15
10:05
(40) как не подходит структура приемника? Вы ведь в нее грузите. И другой структуры нет.
43 Rollam
 
28.01.15
10:16
44 hhhh
 
28.01.15
10:19
(43) ну, ставите галочку "Получить из входящих данных"?
45 Rollam
 
28.01.15
10:20
(42) Если бы в ТабличнойЧасти Приемника были необходимые поля, которых нет в Источнике, проблем бы у меня не возникло. Ситуация же обратная. ТабличнаяЧасть источника имеет кучу реквизитов, а у ТЧ Приемника их всего два. В данном случае мне нужно на основании данных ТЧ Источника создать документ (или несколько, все зависит от данных ТЧ).
46 Godofsin
 
28.01.15
10:22
(43) Не там ты пишешь
47 Godofsin
 
28.01.15
10:22
Не у самой ТЧ писать надо, а у РЕКВИЗИТА ТЧ
48 Godofsin
 
28.01.15
10:23
+(47) Правило конвертации не указал
49 Rollam
 
28.01.15
10:33
(47) Тоже пробовал. Сек.
50 Rollam
 
28.01.15
10:36
51 Godofsin
 
28.01.15
10:38
(50) рукалицо*
52 Rollam
 
28.01.15
10:40
(51) Я понял слишком буквально фразу "реквизит ТЧ"? =(
53 Godofsin
 
28.01.15
10:43
(52) Ща...
54 hhhh
 
28.01.15
10:46
(52) вообще-то вам говорили выборку данных делать в ПВД. Это Правило выборки данных. А вы куда зафигачили? В ПКС?
55 hhhh
 
28.01.15
10:47
Правило выгрузки данных
56 Godofsin
 
28.01.15
10:48
57 Godofsin
 
28.01.15
10:48
А теперь внимательно сравнивай свои скрины и мои
58 Godofsin
 
28.01.15
10:49
Внимание на ПКС "ТипЦенРозничнойТорговли"
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан