Отбор на стороне приёмника

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. Rabot 90 14.11.13 19:59 Сейчас в теме
Здравствуйте.
Подскажите, пожалуйста..

Вопрос: Как правильно реализовать следующее? Из источника(база А) нужно выгружать все документы, а отбирать необходимо на стороне приёмника(база Б).

Я реализовал так:
В ПКО документа в обработчике "ПослеЗагрузки"(!) идёт проверка:
а) если объект такой есть(т.е. НайденОбъект) и статус документа не "Выполнен", то его обновляем;
б) если объекта такого ещё нет, то в зависимости от реквизита А и реквизита Б этого объекта принимаем решение - загружать или нет.

НО, так делать не логично. Ведь мы ВСЕГДА загружаем объект, но записываем его только по условию. Следовательно лишние действия платформы, время на ненужную загрузку объекта, к тому же ещё всегда показывается количество загруженных объектов, а не сохранённых в итоге, что вводит в заблуждение.

Хотелось бы это проделывать ДО загрузки, в обработчике "ПередЗагрузкой" можно произвести отмену загрузки, но нет доступа к загружаемому объекту и его реквизитам, а в обработчике "ПриЗагрузке" есть доступ к загружаемому объекту и его реквизитам, но нельзя произвести отмену загрузки объекта.


Как вариант: в обработчике "ПередЗагрузкой" есть такой параметр как "НПП" - Уникальный порядковый номер объекта в файле. Наверно можно как-то по этому НПП получить и весь объект, но получается мы итак в цикле обходим объекты и проверяем на условие, так ещё и будем на каждом цикле читать весь файл выгрузки в поиске объекта по НПП...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tarantool 15.11.13 15:28 Сейчас в теме
Смогли ли Вы решить проблему? Тоже интересует данная возможность
5. Rabot 90 20.11.13 18:16 Сейчас в теме
(2) tarantool, решил перед выгрузкой подключаться к базе-приемнику через COM-соединение и получать ссылки имеющихся документов(благо они могут создаваться только в базе-источнике) со статусами, проверять условия и выгружать уже отобранные данные. Но это пока мысли. Сейчас занимаюсь реализацией. Отпишусь как получится.
3. demon_infernal 41 19.11.13 01:25 Сейчас в теме
Доброго времени.
Как показывает практика - такие штуки лучше делать на стороне выгрузки.
Вы пишите
В ПКО документа в обработчике "ПослеЗагрузки"(!) идёт проверка:
а) если объект такой есть(т.е. НайденОбъект) и статус документа не "Выполнен", то его обновляем;
б) если объекта такого ещё нет, то в зависимости от реквизита А и реквизита Б этого объекта принимаем решение - загружать или нет.

Вы серьезно? в ПКО, обработчики которого выполняются для каждого элемента вашей выборки - вы в событии "ПослеЗагрузки" делаете какие то проверки, определяющие, загружать объект и или нет?
НО, так делать не логично. Ведь мы ВСЕГДА загружаем объект, но записываем его только по условию.

Позвольте не согласиться. Во-первых, есть Отказ=Истина, который работает практически в каждом обработчике как ПВД, так и ПКО, так и ПКГС, так и ПКС. Вы сами вольны решать, что попадет в файл обмена, а что - нет.
Далее. В контексте "ПослеЗагрузки" доступна переменная "ОбъектМодифицирован", которая, по умолчанию, считается "Истиной", если вы в обработчике "ПослеЗагрузки" написали хотя бы строчку кода. даже закоменченную. Логика такая - Если в алгоритме "ПослеЗагрузки" есть код - значит, вероятно, объект мог быть модифицирован, и поэтому его нужно записать.
Поэтому по Бояркину-Филатову делается следующим образом. Все действия в "ПослеЗагрузки" оформляются алгоритмами, в которых в случае выполнения некоторых условий "ОбъектМодифицирован" становится Истиной. В противном случае - не становится, вернее, становится Ложью.
Логика такая: раз уж тут ест код - "ОбъектМодифицирован" так и так станет Истиной. Выполняем нужный код, нужные проверки, и если они НЕ ПРОХОДЯТ - делаем ОбъектМодифицирован = Ложь; Все.
Если что-то не понятно - книжки, личка, аська, трубка - все к вашим услугам)
4. Rabot 90 20.11.13 18:12 Сейчас в теме
(3) demon_infernal, я понимаю, что в обработчике при загрузке глупо делать проверки, а также согласен, что лучше все проверки делать на стороне выгрузки, чтобы лишний мусор не переносить. Но пока не нашёл другого выхода. Ведь, в "ПриЗагрузке" нет переменной Отказ, а в "ПередЗагрузкой" нет доступа к загружаемому объекту.
Обнаружил ещё одну проблему моей текущей схемы: даже если мы отменим сохранение данного объекта, то всё-равно он уже успел записать все свои подчинённые объекты в базу. Всё-таки надо делать проверку перед выгрузкой. Есть одна мысль.

Спасибо, не думал, что "ОбъектМодифицирован" такой хитрый - учту такую особенность.
6. demon_infernal 41 20.11.13 18:20 Сейчас в теме
(4) Какая цель? Опишите подробнее, какие атрибуты вы хотите проверять и в зависимости от каких параметров принимать решение "загружать" - "не загружать"?

UPD
Если я правильно понял - ситуация следующая:
Есть База1 и База2. из Базы1 в Базу2 выгружаются некие документы. Которые, затем, в Базе2, изменяются пользователями или еще как то. И вы не хотите, чтобы при следующей загрузке эти измененные документы в Базе2 перетерлись и стали снова как были после загрузки из Базы1.
В таком случае нужно ставить галку "не замещать найденный объект" в ПКО и тонко настраивать поля поиска, чтобы эти "измененные" объекты никогда не находились.

Если же я неправильно понял - прошу прояснить ситуацию.
Спасибо.
9. Rabot 90 21.11.13 11:22 Сейчас в теме
(6) demon_infernal, вы поняли почти всё верно:
1. В базе А создаются документы. У них есть статус и исполнитель.
2. Из базы А в базу Б в конечном итоге необходимо перенести документы по условию:
- Статус документа в "базе А" в &СпискеСтатусов;

Если
в "базе Б" ЕСТЬ такой документ
И Статус документа в "базе Б" в &СпискеСтатусов2
Тогда
обновляем реквизиты документа;

Если в "базе Б" НЕТ такого документа
И Исполнитель в документе в &СпискеИсполнителей
Тогда создаём документ.

&СпискеСтатусов, &СпискеСтатусов2 и &СпискеИсполнителей заранее известны в "базе А". В идеале выгружать только нужное, а не отсекать после загрузке.

На сколько уместно перед выгрузкой подключаться по COM-соединению и получать ссылки документов со статусами в "базе Б"?
7. adva 45 21.11.13 09:16 Сейчас в теме
Реквизиты поиска доступны уже ПередЗагрузкой, поэтому делайте поиск по нужным реквизитам
8. adva 45 21.11.13 09:17 Сейчас в теме
Или может быть они доступны в "Поля поиска" , в любом случае думаю можно это использовать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот