|
Событие "Перед выгрузкой объекта" в конвертации данных | ☑ | ||
---|---|---|---|---|
0
Nikama
12.08.13
✎
10:43
|
Добрый день. Пишу простейшие правила конвертации для самописной конфигурации.
В процедуре "Перед выгрузкой объекта" пишу код. Проблема в том, что этот код действует только на часть объектов. Надо писать в цикле или все-таки данное событие действует на каждый объект? |
|||
1
zak555
12.08.13
✎
10:44
|
> Проблема в том, что этот код действует только на часть объектов.
на какие именно ? и код покажи |
|||
2
Godofsin
12.08.13
✎
10:45
|
обожди, ща мы подключим свои мегавселеннские способности, чтоб увидеть твой код
|
|||
3
Nikama
12.08.13
✎
10:45
|
) как код правильно вставить?
Основной = Ложь; Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда Для Каждого ТЧ Из Объект.Метаданные().ТабличныеЧасти Цикл НайдОсн = Ложь; Если НЕ ТЧ.Реквизиты.Найти("Основной") = Неопределено Тогда НайдОсн = Истина; Иначе Продолжить; КонецЕсли; Если НайдОсн Тогда Для Каждого СтрТЧ Из Объект[ТЧ.Имя] Цикл Если СтрТЧ.Основной Тогда Основной = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Если Основной Тогда Отказ = Истина; КонецЕсли; ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда МетаданныеОбъекта = Объект.Метаданные(); НайдОсн = Ложь; Если МетаданныеОбъекта.Реквизиты.Найти("Основной") = Неопределено Тогда ОбщиеРеквизиты = Метаданные.ОбщиеРеквизиты; Если ОбщиеРеквизиты.Найти("Основной")= Неопределено Тогда НайдОсн = Ложь; Иначе ТекСоставОбщегоРеквизита = ОбщиеРеквизиты["Основной"].Состав; Если ТекСоставОбщегоРеквизита.Найти(МетаданныеОбъекта).Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать Тогда НайдОсн = Истина; Иначе НайдОсн = Ложь; КонецЕсли; КонецЕсли; Иначе НайдОсн = Истина; КонецЕсли; Если НайдОсн Тогда Если Объект.Основной Тогда Отказ = Истина; КонецЕсли; КонецЕсли; КонецЕсли; |
|||
4
Nikama
12.08.13
✎
10:49
|
(1) Такое ощущение, что на первые по номеру этот код не действует.
Меня где не туда унесло? Я с КД первый раз пытаюсь работать. |
|||
5
Godofsin
12.08.13
✎
10:56
|
(4) Сакральный смысл сего кода? Отсеять справочники и документы с реквизитом основной?
|
|||
6
Nikama
12.08.13
✎
10:57
|
(5) с реквизитом Основной в значении "Истина"
|
|||
7
hhhh
12.08.13
✎
11:01
|
(6) но ведь это же будет дико тормозить, если ты в каждом объекте будешь такую огромную дуру выполнять. Нафига это может понадобиться, такая бредовая проверка?
|
|||
8
Nikama
12.08.13
✎
11:02
|
(7)Желание заказчика.
Проверять надо в любом случае |
|||
9
hhhh
12.08.13
✎
11:04
|
(8) так заказчик вас пристрелит. Ну нельзя же так тупо желания выполнять.
|
|||
10
Nikama
12.08.13
✎
11:06
|
(9) Тогда заказчику предварительно придется пристрелить тех, кто писал его конфу до меня.
Вы лучше скажите, где в коде ошибка... |
|||
11
Godofsin
12.08.13
✎
11:15
|
(10) Да хз. Отладчик ничего не говорит?
|
|||
12
Nikama
12.08.13
✎
11:17
|
(11) молчит. При этом вроде отрабатывает сия конструкция на части объектов базы, а на второй части нет
|
|||
13
Aleksey
12.08.13
✎
11:21
|
Универсальность - зло
|
|||
14
Nikama
12.08.13
✎
11:22
|
(13) зло - это комменты в стиле "лишь бы написать, для рейтингу"
|
|||
15
be-may
12.08.13
✎
11:31
|
(14) а если попробовать принудительно перед началом проверки
Отказ = Ложь; ? |
|||
16
Nikama
12.08.13
✎
11:44
|
(15) а что это даст? Отказ вроде стандартно идет ложь или я не права?
|
|||
17
Aleksey
12.08.13
✎
11:55
|
(14) ну почему? Ты для чего эту простыню написал? для универсальности. что тебе мешает в кокретном ПВД или ПКС прописать конкретный код?
|
|||
18
Nikama
12.08.13
✎
11:59
|
(17) здесь должен быть очень смущенный смайл. Я ж пишу, что первый раз с КД работаю.
То, что написала для объектов вообще не отрабатывает. |
|||
19
be-may
12.08.13
✎
12:16
|
(16) подумалось, что может кэшируется..
(18) для первого раза оч. круто Я бы что сделала. Нашла бы справочник или документ, которые не грузится или не грузится весь. Тот код, что выше, положила бы в ПКО Перед выгрузкой (только без универсальности) и отладчиком бы выловила те объекты, которые не выгружаются.И смотрела бы что с ними так/не так. |
|||
20
hhhh
12.08.13
✎
12:19
|
(18) вообще делается просто. Если уж так хочет заказчик, надо во все справочники и документы добавить реквизит "Основной".
Тогда ваша программа примет вид Отказ = Объект.Основной; Всё. Зачем себе лишней работы прибавлять? Её и так полно. |
|||
21
hhhh
12.08.13
✎
12:19
|
и тормозить не будет, и все будут довольны.
|
|||
22
Godofsin
12.08.13
✎
12:20
|
(20) Гениально!
|
|||
23
Nikama
12.08.13
✎
12:22
|
(20) А чем использование общего реквизита плохо?
И зачем нужен "геммор" (простите за мой французский) с добавлением кучи реквизитов? А вдруг у меня в конфе 1000 объектов? |
|||
24
Alex S D
12.08.13
✎
12:28
|
срабатывает не для всех объектов потому что для объектов выгружаемых по ссылке данный обработчик не вызывается
|
|||
25
Nikama
12.08.13
✎
12:30
|
(24) так, а теперь для тех "кто в первый раз" - поподробнее, что значит по ссылке?
|
|||
26
Alex S D
12.08.13
✎
12:31
|
(25) Ну допустим выгружается документ. По ссылке из документа выгружаются контрагенты и номенклатура
|
|||
27
Nikama
12.08.13
✎
12:33
|
(26)ок. А как сделать так, чтобы для всех действовало?
|
|||
28
Alex S D
12.08.13
✎
12:35
|
(27) да сделать то можно , это делается в аналогичном обработчике ПКО, но смысл какой? По ссылке должны быть по идее выгружены все объекты, иначе ссылка пустая будет
|
|||
29
Nikama
12.08.13
✎
12:39
|
(28) хорошо. Тогда поставим вопрос по другому. Мне нужно перенести все данные из объектов справочники/документы, для которых реквизит "Основной" = Ложь.
Это правилами можно сделать или нет? |
|||
30
Абыр
12.08.13
✎
12:41
|
(30) Можно
|
|||
31
Alex S D
12.08.13
✎
12:42
|
(29) Можно, но вот глобального обработчика вроде нет. Придется в каждом объекте прописывать
|
|||
32
Абыр
12.08.13
✎
12:42
|
+(24) Можно использовать глобальное
"Перед конвертацией объекта", только там уже не Объект будет, а Источник |
|||
33
Nikama
12.08.13
✎
12:43
|
(32) Где ж Вы раньше были. Я с объектом бьюсь второй день.
Спасибо! (31) Спасибо! |
|||
34
Alex S D
12.08.13
✎
12:44
|
(32) о , точно
|
|||
35
Nikama
12.08.13
✎
19:33
|
Возник новый вопрос.
При выгрузке документов, переносятся строки. Если в строках есть тип справочник (тот, у которого значение основной = истина), то данное значение не заполняется. В ПКО для справочника добавила "Перед выгрузкой" Отказ = Источник.Основной |
|||
36
Nikama
12.08.13
✎
19:41
|
ну хоть кто-нибудь. Очень-очень надо
|
|||
37
hhhh
12.08.13
✎
20:02
|
наверно ПриВыгрузке
|
|||
38
Nikama
12.08.13
✎
20:07
|
(37) можете чуть поподробнее объяснить - почему при выгрузке будет правильно отрабатывать?
|
|||
39
Абыр
13.08.13
✎
09:20
|
(35) Ну так и должно быть. У вас в ПКС реквизита ТЧ документа указано соответствующее ПКО. Перед обработкой ПКО, если вы завели код в глобальный обработчик "Перед конвертацией объекта", проверяется конвертируемое значение (в данном случае, элемент справочника) по вашим условиям и, так как "основной = истина" у конвертируемого значения, то оно не выгружается, в приемнике реквизит заполнен не будет.
Вы вроде это и хотели, нет?) Определитесь: если у вас не должны выгружаться объекты с "основной = истина" только по ПВД, то проверку помещаете в глобальный обработчик "Перед выгрузкой объекта". В этом случае будут выгружены объекты с "основной = истина" по ссылкам. Если объекты с "основной = истина" не должны выгружаться вообще, то проверку производите в глобальном "Перед конвертацией объекта". |
|||
40
Nikama
13.08.13
✎
15:05
|
(39) хорошо. Этот момент понятен. Теперь вопрос - как отследить изменение выгружаемых объектов, даже если они с признаком основной?
|
|||
41
Nikama
13.08.13
✎
15:50
|
Еще раз сформулирую задачу:
Надо выгрузить все объекты, у которых свойство Основной = Ложь, а также все объекты, которые были изменены. Например, есть справочник "Контрагенты", элемент "Рога и копыта". Основной = Истина. Но поменяли адрес. Значит данный элемент во второй базе надо заменить. |
|||
42
Абыр
13.08.13
✎
16:40
|
(41) По поводу измененный/не измененный используйте планы обмена.
Только и в этом случае, если будете контролировать в глобальном "Перед конвертацией объекта", у вас не будут выгружаться по ссылкам объекты с "основной=истина", по которым не было зарегистрировано изменений. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |