Имя: Пароль:
1C
 
Как записать объект, чтобы он не попал в планы обмена?
0 Гений 1С
 
гуру
16.10.07
12:55
Сабж...
Мне нужно проставить один реквизит дока, но тогда это повлечет за собой изменение всех доков, лучше уж я проставлю его во всех базах.

Как получить желанное?
1 Hitcher
 
16.10.07
13:09
Перед записью очистить получателей. В монопольном режиме прокатит.
2 koreav
 
16.10.07
13:12
(0) Снимаешь галку "авторегистрация", и регистрируешь когда тебе надо.
3 Гений 1С
 
гуру
16.10.07
13:32
(1) а почему только в монопольном...
(2) издеваешься, на филиалах тоже??? Это ж конфу менять!!!
4 Fram
 
16.10.07
13:37
ПланыОбменаМенеджер (ExchangePlansManager)
УдалитьРегистрациюИзменений (DeleteChangeRecords)
Синтаксис:
УдалитьРегистрациюИзменений(<Узлы>, <Данные>)
Параметры:
<Узлы> (обязательный)
Тип: ПланОбменаСсылка.<Имя плана обмена>, Массив. Одиночное значение типа ПланОбменаСсылка.<Имя плана обмена> или массив таких значений, показывающие для каких узлов удаляются записи регистрации изменений.
<Данные> (необязательный)
Тип: Метаданные, Неопределено, УдалениеОбъекта, Число, <Данные>. Значением данного параметра может быть объект метаданных, объект, представляющий данные, хранимые в базе данных, такой как документ, элемент справочника, счет бухгалтерского учета, менеджер записи константы, набор записей регистра и т. п., ссылка на объект базы данных, а также Неопределено.
Если указан объект метаданных, то записи регистрации изменений будут удалены для всех элементов данных, относящихся к указанному объекту метаданных. Объект метаданных должен входить в состав планов обмена всех узлов, указанных в первом параметре.
Если указан УдалениеОбъекта, то удаление записи регистрации изменений выполняется для объекта базы данных, на который "указывает" ссылка, содержащаяся в объекте УдалениеОбъекта.
Если указан объект представляющий данные, хранимые в базе данных, или ссылка, то записи регистрации изменений будут удалены только для указанных данных. Объект метаданных, соответствующий данным должен входить в состав всех планов обмена всех узлов, указанных в первом параметре.
Если указано Неопределено или не указан, то в качестве первого параметра может быть указан только одиночный узел. И в этом случае записи регистрации изменений будут удалены для всех объектов, метаданные которых входят в состав плана обмена, к которому относится узел, указанный в качестве первого параметра.
Если в качестве первого параметра указан одиночный узел, то в параметре может быть указан номер сообщения. В этом случае метод УдалитьРегистрациюИзменений удаляет из всех таблиц регистрации изменений все записи относящиеся к указанному узлу, у которых номер сообщения меньше или равен значению второго параметра.
Значение по умолчанию: Неопределено
Описание:
Удаляет записи регистрации изменений одного или группы элементов данных для одного или нескольких узлов планов обмена.
Пример:
// Пример 1
Спр = Справочники.Валюты.НайтиПоКоду("810");
Узел = ПланыОбмена.ПО1.НайтиПоКоду("Офис");
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Спр);

// Пример 2
// Загрузка из файла
// Производим попытку открытия файла
ЧтениеXML = Новый ЧтениеXML;
Попытка
   ЧтениеXML.ОткрытьФайл(ИмяФайла);
Исключение
   Возврат;
КонецПопытки;
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
Если ЧтениеСообщения.Отправитель <> Ссылка Тогда
   // Сообщение предназначено не для этого узла
   ВызватьИсключение "Неверный узел";
КонецЕсли;
// Удаляем регистрацию изменений для узла отправителя сообщения
ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
5 i-rek
 
16.10.07
13:41
Объект.ОбменДанными.Загрузка=Ложь;
Объект.Записать()

не приведёт к регистрации изменений
6 i-rek
 
16.10.07
13:42
тьху ты
Объект.ОбменДанными.Загрузка=Истина;
7 Гений 1С
 
гуру
16.10.07
13:57
(5) гонишь... вроде...
(4) тогда надо еще проверять, был ли объект зарегистрирован до моей обработки... Не годится, сложно, не надежно, вдруг автообмен начнется...
8 vlsv
 
16.10.07
14:13
на ИТС есть обработка, ею снять РегистрациюИзменений
9 Гений 1С
 
гуру
16.10.07
15:01
(8) Не годится, чтиай (7). Откуда я знаю, он зарегистрирован после моих изменений или по другой причине, раньше?
10 wPa
 
16.10.07
16:13
а ты сделай сначала обмен, отключи автообмен, выгоня всех из своей базы, а потом меняй док и УдалитьРегистрациюИзменений :)
11 Гений 1С
 
гуру
17.10.07
11:49
(10) Нюню... а без гамака и скафандра можно?
12 Gamm
 
17.10.07
11:55
Перед записью проверить есть ли регистрация изменений по объекту, если нету после записи удалить её.
13 Dionisious
 
17.10.07
12:12
(7)
> тогда надо еще проверять, был ли объект зарегистрирован до моей обработки... Не годится, сложно, не надежно, вдруг автообмен начнется...

Три строки. Это сложно? Автообмен и отрубить можно. А можно и в транзакции сделать.

Или мы не ищем легких путей?
14 i-rek
 
17.10.07
12:24
и всё же я прав
см. 6
15 i-rek
 
17.10.07
12:25
а так же подумайте о том почему при загрузке сообщения записываемые объекты не регистрируют изменений и сообщение эхом не уходит обратно
16 Feanor
 
17.10.07
12:27
(15) На уровне платформы это не может быть реализовано? "ОбменДанными.Загрузка" тут, может быть, собственно, не при чем
17 Гений 1С
 
гуру
17.10.07
12:37
(12)(13) Это называется удаление гландов через ....
(14) чето не верится...
(16) возможно (14) и прав, но как-то стремно, надо проверить...
18 Gamm
 
17.10.07
12:47
Перед записью объекта
Объект.ОбменДанными.Получатели.Автозаполнение=Ложь;
И будет тебе счастье.
19 Гений 1С
 
гуру
17.10.07
12:51
1. удалил все зарегистрированные изменения.
2. убедился, что удалил.
3. Записал один док, он попал в список изменений.
4. удалил док из списка изменений.
5. Записал док в режиме "ОбменДанными.Загрузка=истина"
6. Проверил наличие дока в списке изменений.

Вывод: Чувак в пункте 6 прав - если ОбменДанными.Загрузка=истина, тогда никаких контролей не производися и в планы обмена не попадает. ХИТРО, хитро.

Любители скафандрического секса в гамаке из пункта (12)и (13) отдыхают.
20 Гений 1С
 
гуру
17.10.07
13:11
СТОП! Я обшибся... Он все равно попадает, даже если стоит флажок...
21 Гений 1С
 
гуру
17.10.07
13:15
Помогло вот это:

Присвоить(Объект.ОбменДанными.Получатели.Автозаполнение, ложь)
22 Гений 1С
 
гуру
17.10.07
13:18
Не заметил (18), догадался сам, но серавно пасибо.
23 vde69
 
17.10.07
13:20
// Процедура предназначена для использования в процедурах ПриЗаписи() обьектов
// она уменьшает размер базы, но увеличивает время записи
// кроме того ее нужно вызывать для обектов без "авто регистрации"
//
Процедура  УРБД_РегистрацияИзмененийДляУзлов(Объект) Экспорт
       
   Выборка = ПланыОбмена.Полный.Выбрать();
   Пока Выборка.Следующий() Цикл
       Узел = Выборка.ПолучитьОбъект();

       Если ПланыОбмена.Полный.ЭтотУзел() <> Узел.Ссылка Тогда
           
           Если УРБД_НуженОбмен(Объект, Узел) Тогда
               Объект.ОбменДанными.Получатели.Добавить(Узел.Ссылка);
           ИначеЕсли Объект.ОбменДанными.Получатели.Содержит(Узел.Ссылка) Тогда
               Объект.ОбменДанными.Получатели.Удалить(Узел.Ссылка);
           КонецЕсли;
           
       КонецЕсли;
           
   КонецЦикла;
   
КонецПроцедуры
24 Гений 1С
 
гуру
17.10.07
16:59
(23) Думаю, объем базы в наше время, а особенно объем плана обмена, не принципиален.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший