|
Конвертация данных 1с - параметры перед выгрузкой | ☑ | ||
---|---|---|---|---|
0
cmex
17.12.13
✎
13:29
|
Доброго времени суток.
Как сделать так, чтобы при переносе иерархического справочника, автоматом создавалась папка с названием организации, из которой я переношу данные. Написал ПередВыгрузкой данных: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Организации.Наименование |ИЗ | Справочник.Организации КАК Организации |ГДЕ | Организации.ПометкаУдаления = ЛОЖЬ"; Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Параметры.Вставить("Организация", Выборка.Наименование); Однако при загрузке в Параметрах пусто. Что не так?Спасибо |
|||
1
rmrush
17.12.13
✎
13:42
|
Используй
ПередатьОдинПараметрВПриемник("Организация", Выборка.Наименование, "Организации"); |
|||
2
cmex
17.12.13
✎
14:00
|
(1) это куда смотреть?
|
|||
3
cmex
17.12.13
✎
14:03
|
(1) мне надо во много ПКО передать, как это сделать? То есть я переношу в 1 базу много разных организаций, и хочу чтоб данные не смешались, где возможно создать папку с именем организации и туда создавать новые элементы
|
|||
4
rmrush
17.12.13
✎
14:05
|
(3) что тогда в этом ПКО мешает передать эту организацию в качестве параметра и при загрузке уже подставлять ему родителя с именем этой организации (если такого нет - создавать)
|
|||
5
cmex
17.12.13
✎
14:08
|
(4) не совсем понял, как это организовать?
|
|||
6
cmex
17.12.13
✎
14:12
|
(4) захожу в нужно мне ПКО, в событии перед выгрузкой пишу Параметры.Вставить("Организация", НаименовиеОрг), а в событии после загрузки из Параметр выбрать наименованиеорг?
|
|||
7
rmrush
17.12.13
✎
14:18
|
(6) в ПКС этого ПКО добавляешь строку, которая будет грузиться в параметр (при выборе поля приемника выбирается либо параметр, либо поле-приемник). Или я не правильно тебя понял?
|
|||
8
rmrush
17.12.13
✎
14:21
|
||||
9
cmex
17.12.13
✎
14:23
|
(8) щас объясню, что мне надо
|
|||
10
cmex
17.12.13
✎
14:31
|
база 1, организация "Организация1", Справочник "Номенклатура", элементы -Группа1
- Группа2 -Номенклатура1, мне надо перекинуть этот справочник в базу 2, где уже есть организация "Организация2", причем в справочнике Номенклатура создать папку "Орагнизация1" и туда перекинуть иерархию, то есть в базе 2 получится следующее: -Организация1 -Группа1 -Группа2 -Номенклатура1 |
|||
11
fisher
17.12.13
✎
14:32
|
(0) На стороне приемника что-то руками надо делать только в исключительных случаях (например - данных для принятия решения вообще нет в источнике).
Правильно задача решается так (один из вариантов навскидку): 1. Создаешь отдельное ПКО "ПапкаОрганизацииМоегоСправочника", источником у которой организация, а приемником твой справочник. Оно будет только создавать папку (на основании источника подставляешь нужные значения в ПКС "Код" и "Наименование" и "ЭтаГруппа". 2. А в ПКС "Родитель" твоего справочника пишешь Если НЕ ЗначениеЗаполнено(Источник.Родитель) Тогда ИмяПКО = "ПапкаОрганизацииМоегоСправочника"; Значение = НужнаяОрганизация; КонецЕсли; |
|||
12
cmex
17.12.13
✎
14:34
|
(11) а если несколько таких справочников в приемнике? Например, "СтатьиЗатрат", "НГ"
|
|||
13
fisher
17.12.13
✎
14:35
|
(12) В чем проблема? То же самое делаешь и для них.
|
|||
14
fisher
17.12.13
✎
14:36
|
В идеале ВСЯ конвертация должна происходить в источнике. Вся идеология КД на это заточена. Это и прозрачнее и максимальная производительность при этом будет.
|
|||
15
fisher
17.12.13
✎
14:37
|
В приемник только загружаются готовые образы объектов оптимизированно. Без лишних обращений к БД.
|
|||
16
cmex
17.12.13
✎
14:43
|
(15) спасибо, щас попробую
|
|||
17
cmex
17.12.13
✎
16:16
|
все получилось,спасибо
только вот как бы избавиться от частого обращения к БД: Если НЕ ЗначениеЗаполнено(Источник.Родитель) Тогда ИмяПКО = "СозданиеПапкиОС"; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Организации.Ссылка КАК Организация |ИЗ | Справочник.Организации КАК Организации |ГДЕ | Организации.ПометкаУдаления = ЛОЖЬ"; Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Значение = Выборка.Организация.Наименование; КонецЕсли; можно где то перед обработкой общий параметр задать? |
|||
18
fisher
17.12.13
✎
17:28
|
(17) Можно и нужно.
1) Добавляешь общий параметр конвертации "ТекущаяОрганизация" (в свойствах конвертации). Галку диалога не ставишь - типа интерактивно его править не надо. 2) Там же в событии "После загрузки правил обмена" устанавливаешь его, юзая УстановитьЗначениеПараметраКонвертации() 3) Везде, где надо, обращаешься к нему через Параметры.ТекущаяОрганизация |
|||
19
fisher
17.12.13
✎
17:31
|
Аналогично можно кэшировать любые значения на время всей конвертации. Если не устанавливать тип параметра - можно присваивать любые значения (в т.ч. коллекции)
|
|||
20
fisher
17.12.13
✎
17:32
|
Если надо кэшировать на момент старта конвертации, тогда событие "Перед выгрузкой данных" подойдет (событие самой конвертации)
|
|||
21
fisher
17.12.13
✎
17:34
|
Прогнал. УстановитьЗначениеПараметраКонвертации() только для семерки надо юзать и только в "После загрузки правил обмена", если именно оно нужно.
|
|||
22
acsent
17.12.13
✎
17:44
|
(14) для больших баз как раз удобней по максимуму выносить работу в постобработку.
Ибо файлы получаются по 10 ГБ |
|||
23
Йохохо
17.12.13
✎
17:56
|
(22) это та же байда, что нормализация / денормализация. Тут, при определенных условиях, можно обойтись полями поиска вообще
|
|||
24
fisher
17.12.13
✎
17:58
|
(22) "Не верю". Особой экономии, ИМХО, так не добиться. А в десятки раз замедлить загрузку - как два пальца.
|
|||
25
fisher
17.12.13
✎
18:00
|
При очень больших объемах выгоднее бить на порции.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |