Имя: Пароль:
1C
1С v8
РИБ ПриОтправкеДанныхПодчиненному
0 Галахад
 
гуру
10.12.12
09:42
Простой вопрос.
РИБ УТ --> Розница.

Хочу сделать фильтр для некоторых объектов.
Добавил в модуль нужного плана обмена процедуру "ПриОтправкеДанныхПодчиненному"
Установил точку останова.
Выполняю обмен. В процедуру не попадаю.

Что я сделал не так?
1 Нуф-Нуф
 
10.12.12
09:42
отладка на сервере?
2 Maxus43
 
10.12.12
09:43
Фильтры надо делать на этапе регистрации объектов, а не на этапе выгрузке. Имхо
3 Нуф-Нуф
 
10.12.12
09:44
(2) имхо "это зависит от..."
4 Галахад
 
гуру
10.12.12
09:44
(1) Ай-яай-яай.
5 mikecool
 
10.12.12
09:45
(3) да ни от чего это не зависит, это правильно... в при отправке уже не надо думать
6 Нуф-Нуф
 
10.12.12
09:47
(5) когда у тебя куча народу колбасит кучу документов, и стоит какая-нибудь хитрая подписка, которая регистрирует или нет - можно нарваться на блокировки. а когда в момент обмена один раз откидываются лишние данные - это выгоднее.
так что зависит от конкретной ситуации
7 Serg_1960
 
10.12.12
09:51
(как бы сомнение) "...которая регистрирует или нет - можно нарваться на блокировки" - с чего это вдруг?

Без подписки - регистрация всего, с подпиской - только некоторых. С чего это вдруг увеличивается вероятность нарваться на блокировки?
8 dmpl
 
10.12.12
09:54
(7) Ну дык твоя проверка может выполняться далеко не мгновенно.
9 Maxus43
 
10.12.12
09:58
(8) проверка выполняется в момент записи объекта, это 0-1% времени примерно...
Далее ситуация (0) в таблицах регистрации - куча объектов, в т.ч. и не нужных. Время обмена вырастет сильно, т.к. ПрочитатьИзменения - будет работать долго шо пистец + проверки на выгрузке данных. Как мы знаем - при обмене Блокируются таблицы изменений, т.е. блокировки даже на чтение, в итоге в это время хрен работать с базой получится. Отсюда - при больших объёмах баз/обменов однозначно (2)
10 Галахад
 
гуру
10.12.12
10:00
О, да тут настоящие мастера собрались.

Подскажите как удалить элемент справочника в УТ,
что бы он не удалился в Рознице.
11 Serg_1960
 
10.12.12
10:00
(8) Не согласен. Сеанс обмена (и проверка, соответсвенно) тоже не в сферическом вакуме осуществляется.
12 Maxus43
 
10.12.12
10:02
(10) удаляй, и заодно удали регистрацию в обмене
13 Галахад
 
гуру
10.12.12
10:03
(12) Как?
14 Леха Дум
 
10.12.12
10:03
(10) В правилах обмена прописывать нужно
15 Maxus43
 
10.12.12
10:04
в ручную удалить регистрацию? обработкой "РегистарцияИзмененийДляОбмена"
в коде - ПланыОбменаМенеджер (ExchangePlansManager)
УдалитьРегистрациюИзменений (DeleteChangeRecords)
Синтаксис:

УдалитьРегистрациюИзменений(<Узлы>, <Данные>)
16 Maxus43
 
10.12.12
10:05
и да, планы обмена хз какие там у вас
17 Галахад
 
гуру
10.12.12
10:11
(14) Как?

(15) В данные что писать?
Нарисовал так, но не очень как-то:

Функция ПолучитьУдаленныеСсылки()
   
       Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Ном.Ссылка.ссылка как ссылка,
   |    ВЫБОР
   |        КОГДА ЕСТЬNULL(Ном.Ссылка.ссылка, 0) = 0
   |            ТОГДА 0
   |        ИНАЧЕ 1
   |    КОНЕЦ КАК Усл,
   |    Ном.Узел
   |ПОМЕСТИТЬ тз
   |ИЗ
   |    Справочник.Номенклатура.Изменения КАК Ном
   |ГДЕ
   |    Ном.Узел = &Узел
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    тз.Ссылка,
   |    тз.Узел,
   |    тз.Усл
   |ИЗ
   |    тз КАК тз
   |ГДЕ
   |    тз.Усл = 0";
   
   Запрос.УстановитьПараметр("Узел", );
   Запрос.УстановитьПараметр("Усл", );
   Результат = Запрос.Выполнить();
   Возврат Результат;

КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   Рез = ПолучитьУдаленныеСсылки();
   
   Если Рез.Пустой() Тогда
       Возврат;
   КонецЕсли;
   
   Выборка = Рез.Выбрать();
   Пока Выборка.Следующий() Цикл
       ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Узел, Выборка.Ссылка);
       
   КонецЦикла;
   
КонецПроцедуры
18 mikecool
 
10.12.12
10:12
(6) да нифига это не выгодно, регистрация - доля секунды, а когда у тебя обмен раз пять минут и блокируются на выборке таблицы - еще то овно
19 Serg_1960
 
10.12.12
10:22
(имхо) Проще сделать ручную регистрацию и регистрировать все изменения, кроме пометки удаления и сам факт удаления. Но: автор нарвется в будущем на проблемы из-за рассогласования номенклатуры.
20 dmpl
 
10.12.12
10:25
(9) Дык если, например, обмен в 7:00 (когда еще никого нет), в 12:30 (в обед) и в 19:00 (когда все ушли) - кому это помешает?
21 dmpl
 
10.12.12
10:26
(19) Скорее ему удаленная номенклатура вернется из Розницы, когда ее там поменяют.
22 Maxus43
 
10.12.12
10:30
(20) так да не так, ситуации разные. у нас 15 узлов, обмены в Цетре почти постоянные...
Время на выборочную регистрацию и сопуствующие мифические блокировки в вакууме - минимальны, по сравнению с тем же чтением-выборкой изменений, ненужных по сути. Ну если обмены часто надо
23 Галахад
 
гуру
10.12.12
11:25
Вопщем как-то так:

   МетаданныеПланаОбмена = УзелОбмена.Метаданные();
   
   ТипДанныхУдаления = Тип("УдалениеОбъекта");
   
   // осталось теперь все измененные данные получить и их поместить в дерево
   ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, УзелОбмена.НомерОтправленного + 1, Метаданные.Справочники.Номенклатура);
   Пока ВыборкаИзменений.Следующий() Цикл
       
       // имененный элемент
       Данные = ВыборкаИзменений.Получить();
       
       // данные должны быть
       Если Данные = Неопределено Тогда
           Продолжить;
       КонецЕсли;
       
       ЭтоУдаление = (ТипДанныхУдаления = ТипЗнч(Данные));
       
       Если НЕ ЭтоУдаление Тогда
           Продолжить;
       КонецЕсли;
       
       ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Данные);
       
   КонецЦикла;
24 dmpl
 
10.12.12
11:34
(22) Дык об чем и речь - ситуации разные бывают.
25 Нуф-Нуф
 
10.12.12
11:37
(18) кстати да, может ты и прав
26 Maxus43
 
10.12.12
11:39
(24) Есть ситуация когда устроит такой подход, а подход (2) устроит всегда, лучше не придумали, это по феншую