Имя: Пароль:
1C
1С v8
Обмен РИБ
,
0 filterhouse
 
23.09.13
14:04
Всем доброго времени суток.
Необходимо доработать обмен РИБ таким образом что бы документы с датой меньше заданной не передавались из главного в подчиненный узел.
Пробую реализовать через ПриОтправкеДанныхПодчиненному(), если документы  я могу не отправлять, но получается что потом отдельно регистры отправляются. И что то нет идей. Может кто подскажет как справится с проблемой?
1 Живой Ископаемый
 
23.09.13
14:05
почему просто не регистрировать их как измененные? важно чтобы они копились в таблице изменений?
2 Vovan1975
 
23.09.13
14:07
константа и регламентное задание, которое раз в час будет снимать регистрацию с тех объектов, дата которых меньше константы
3 filterhouse
 
23.09.13
14:08
(1) Получается если я для документа отменю авторегистрацию, то и движения не будут регистрироваться?
4 Maxus43
 
23.09.13
14:08
(3) нет
5 filterhouse
 
23.09.13
14:10
(2) Хороший вроде вариант, только не совсем понятно как реализовать. Можно разжевать немного?
6 Живой Ископаемый
 
23.09.13
14:12
2(3) при чем тут авторегистрация?
7 Кай066
 
23.09.13
14:12
(0) А смысл? Глобально какая задача стоит?
8 filterhouse
 
23.09.13
14:15
(7) Свернуть подчиненку, и выгружать документы из центральной только с определенной даты.
9 filterhouse
 
23.09.13
14:18
(6) Если я правильно понимаю, то авторегистрация будет автоматически регистрировать изменения для узла.
10 Vovan1975
 
23.09.13
14:20
(5) ну константа будет хранить рубежную дату.
Для регламентного задания запиливается свой модуль(чтобы обновления не корежились), сам процесс разрегистрации - это банальный запрос по таблицам изменеий с отбором по нужному узлу и дате(которая из константы берется), а дальше через планыобменаменеджер отменяется регистрация дока, получаются его движения и отменяется регистрации и их.
Какие виды документов участсвуют в нужном плане обмена можно узнать через свойство Состав(если не путаю ничего).
Вот собственно и все.
11 Живой Ископаемый
 
23.09.13
14:23
2(9) да, и что? а ты удаляй программно. нужно удалить и движения - удаляй и движения.
12 filterhouse
 
23.09.13
14:30
(10) Все понятно, остался один момент. Таблицы изменений это регистр какой то? Как ним обратиться?
13 filterhouse
 
23.09.13
14:31
(11) А где это удаление нужно делать, что бы правильно было.
14 Vovan1975
 
23.09.13
14:32
(12) таблицы изменений это банальные таблицы, открой конструктор запросов и в левой верхней части есть хитрый значек, что-то типа "Показывать таблицы изменений" Включаешь его и получаешь возможность конструктором лабать запросы по изменениям.
15 Живой Ископаемый
 
23.09.13
14:33
2(13) где угодно, где в итоге не будет записано. Может и в подписке какой-то.
16 Vovan1975
 
23.09.13
14:35
(13) главное это все манипуляции запихивать в оплетку вида:
попытка
начатьтранзакцию()
зафиксироватьтранзакцию()
исключение
отмменитьтранзакицю()
конецпопоытки
17 filterhouse
 
23.09.13
14:36
(14) Спасибо, теперь понял.
18 Maxus43
 
23.09.13
14:42
ИМХО: легче тупо скомуниздить механизм запрета изменения данных, только воткнуть его в подписки на регистрацию изменений в обменах, и тупо не заполнять получателей, если дата меньше. Механизм по дате запрета, в т.ч. и регистров уже написан
19 filterhouse
 
23.09.13
14:44
(15) А как получить все движения документа?
20 Maxus43
 
23.09.13
14:45
(16) что это? транзакция в попытке в вакууме?)
не надо автору такого
21 Живой Ископаемый
 
23.09.13
14:45
2(19) ЭтотОбъект.Движения - это коллекция
22 filterhouse
 
23.09.13
14:46
(21) Спасибо еще раз.
23 Vovan1975
 
23.09.13
14:46
(20) ну дык я надеюсь автор знает куда впихивать свой код между НачатьТранзакцию() и ЗафиксироватьТранзакцию() а?
24 filterhouse
 
23.09.13
15:41
Узел = ПланыОбмена.Полный.НайтиПоКоду("002");
    Если Источник.Дата < Константы.ДатаЗапрета.Получить() Тогда
        ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Источник);
        ВсеДвижения = Источник.Движения;
        Для Каждого Стр Из ВсеДвижения Цикл
            ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Стр);    
        КонецЦикла;
    КонецЕсли;

В обработчике заходит в ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Источник), а при обмене, все равно доки прилетают в подчиненку. В чем дело?
25 Maxus43
 
23.09.13
15:55
(24) Где ты это написал?
26 Maxus43
 
23.09.13
15:56
Что за обмен, какая конфа? Подписки на события для обменов етсь уже? Легче там изменить
27 filterhouse
 
23.09.13
16:00
(26) БП, типовая. Создал подписку на проведение.
28 Maxus43
 
23.09.13
16:01
регистрация происходит после окончания транзакции.
УдалитьРегистрациюИзменений - не надо бзать вобще, очищай список получателей
29 Maxus43
 
23.09.13
16:02
короче - я бы сначала прочитал пару страниц из толстой книги по обменам
30 Maxus43
 
23.09.13
16:04
ичспользовать надо по хорошему 2 подписки: ПриЗаписи и ПередЗаписью, так, как это делается в типовых
31 filterhouse
 
23.09.13
16:05
(28) Ну почитать и вправду стоит.
А как отчистить список получателей?
32 filterhouse
 
23.09.13
16:06
(30) Я хотел ПриЗаписи и ОбработкаПроведения использовать.
33 Maxus43
 
23.09.13
16:07
Источник.Обменданными.Получатели.Автозаполнение = Ложь;
Источник.Обменданными.Получатели.Очистить();
34 Maxus43
 
23.09.13
16:08
(32) транзакция одна, не надо на проведение вешать, делай на (30). Только 2 подписки там для разного, одна для регистрации Объекта, другая для регистрации Ссылки. Если нет разбивки по орагнизациям и других фильтров - то только ПриЗаписи используй
35 filterhouse
 
23.09.13
16:10
(34) Ок, Спасибо, сейчас попробую.
36 Maxus43
 
23.09.13
16:11
хотя вру, надо Обе подписки, чтоб избежать косяков.
Пример: док 2013 года, мы меняем дату на 2012, значит в узел надо послать Удаление этого объекта
2 + 2 = 3.9999999999999999999999999999999...