Имя: Пароль:
1C
 
Как зарегистрировать изменения вручную?
0 Evlanov
 
26.03.10
16:16
В плане обмена для документа "РегистрацияТоваровУслуг" Авторегистрация запрещена.
Распределенная информационная база - флажок не стоит.

В модуле объекта в процедуре ПередЗаписью добавляю код:

Узел = ПланыОбмена.Филиалы.НайтиПоКоду("Ф1");
ПланыОбмена.ЗарегистрироватьИзменения(Узел, ЭтотОбъект.Ссылка);

При сохранении нового документа РегистрацияТоваровУслуг возникает ошибка:
Недопустимое значение параметра (параметр номер '2')

Что я делаю неправильно?

Я прочел в книге Радченко что вручную делать регистрацию нужно в событии ПередЗаписью.

А почему не в ПослеЗаписи, ведь документ же может быть не записан?
1 Злобный Йожег
 
26.03.10
16:18
СП не пробовал почитать?
2 Лефмихалыч
 
26.03.10
16:19
(0) если почитаешь Радченко чуть дальше, там будет написано еще и - как зарегистрировать изменения вручную в проуедуре ПередЗаписью.
Кроме того, это можно почитать в большой книжке "Профессиональная разработка"
А еще, если нажать Ctrl+F1, на голову снизойдет благодать в особо крупных масштабах
3 Evlanov
 
26.03.10
16:35
Так я это все читал.

Делаю как написано в Радченко.
4 Serg_1960
 
26.03.10
16:40
Читал говоришь? Сейчас проверим :) Как правильно:

1) ПланыОбмена.ЗарегистрироватьИзменения(Узел.Ссылка,Объект.Ссылка);
2) ПланыОбмена.ЗарегистрироватьИзменения(Узел,Объект);
3) ПланыОбмена.ЗарегистрироватьИзменения(Узел,Объект.Ссылка);
4) ПланыОбмена.ЗарегистрироватьИзменения(Узел.Ссылка,Объект);
5 acsent
 
26.03.10
16:41
(4) Все 4 варианта правильные
6 Evlanov
 
26.03.10
16:46
Вот пример из "Простые примеры разработки":

СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ДокСсылка = Документы.РеализацияТоваров.НайтиПоНомеру(НомерДок, ДатаПериода);
Если Не ДокСсылка.Пустая() Тогда
 ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, ДокСсылка);
КонецЕсли;
7 hhhh
 
26.03.10
17:00
(6) ЭтотОбъект.Ссылка у тебя не существует ПередЗаписью.
8 Serg_1960
 
26.03.10
17:03
Вот мой простой пример :)

Узел = ПланыОбмена.Филиалы.НайтиПоКоду("Ф1");
Если Узел = ПланыОбмена.Филиалы.ЭтотУзел() Тогда
  Предупреждение("Нельзя зарегистрировать изменения для узла текущей информационной базы");
Иначе
  Если ЭтоНовый() Тогда
     Предупреждение("Нельзя использовать ссылку на объект, не записанный в базу данных");
     ПланыОбмена.ЗарегистрироватьИзменения(Узел, ЭтотОбъект);
  Иначе
     ПланыОбмена.ЗарегистрироватьИзменения(Узел, Ссылка);
  КонецЕсли;
КонецЕсли;
9 Evlanov
 
26.03.10
17:09
1. Прочел в книге Радченко что вручную делать регистрацию нужно в событии ПередЗаписью. А почему не в ПослеЗаписи, ведь ПередЗаписью неизвесно будет ли документ?

2. Например, документ РеализацияТоваровУслуг делает движение по регистру ВзаиморасчетыСКонтрагентами.
Если я не буду регистрировать изменения для документа РеализацияТоваровУслуг,
а для регистра ВзаиморасчетыСКонтрагентами устновлено Авторегистрация Разрешить
движения по регистру перенесутся без документа сделавшего это движения?
10 Serg_1960
 
26.03.10
17:12
(9) А что такое есть таблица регистрации изменений объекта?
11 acsent
 
26.03.10
17:14
(10) Какое слово тебе не понятно?
12 Serg_1960
 
26.03.10
17:21
(11) А тебе какое слово мешает суть вопроса понять?
13 hhhh
 
26.03.10
17:26
(9) потому что события ПослеЗаписи не существует в природе.
14 Evlanov
 
26.03.10
17:27
(8) Цитата Радченко

Кроме этого существует возможность отключить авторегистрацию изменений, и тогда параметры обмена данными нужно будет формировать полностью средствами встроенного языка. Гипотетически это можно делать в любом фрагменте кода, но для того, чтобы конфигурация была легко читаема, рекомендуется использовать все те же обработчики событий ПередЗаписью и ПередУдалением. В этом случае код формирования параметров обмена данными будет сосредоточен в логически понятных точках, а не разбросан по всей конфигурации.

Ясно написано: ПередЗаписью. Ничего про новый объект не сказано.
15 Evlanov
 
26.03.10
17:29
Зарегистрировано изменение, а если документ не записан?
16 hhhh
 
26.03.10
17:32
(15) регистрацию ты пишешь в сам документ. Если нет документа, то нет и регистрации изменения.
17 hhhh
 
26.03.10
17:33
(16)+ то есть реально ты ставишь пометку, что надо регистрировать.
18 acsent
 
26.03.10
17:34
(16) Уверен? А как же регистрация удаления?
19 Serg_1960
 
26.03.10
17:35
(14) Это же, так сказать, общее описание... инструкция к действию. Это же не описание к языку. В этой читате нет прямого указания на контекст. ПослеЗаписи - есть, но на форме. А модуле документа - ПередЗаписью, ПриЗаписи...
20 Evlanov
 
26.03.10
17:40
(15) Как записать в сам документ?
21 Serg_1960
 
26.03.10
17:44
(20) Ты ещё не понял, что "в сам документ" пишешь изменения? :)
22 Serg_1960
 
26.03.10
17:49
(так, просто для прикола)

Запрос = Новый Запрос("
|ВЫБРАТЬ
|    Регистрация.Ссылка КАК Ссылка,
|    Регистрация.НомерСообщения КАК Номер,
|    Регистрация.Узел КАК Узел
|ИЗ
|    Документ.РеализацияТоваровУслуг.Изменения КАК Регистрация");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
  Сообщить("Узел: "+Выборка.Узел+" , объект: "+Выборка.Ссылка);
КонецЦикла;
23 Evlanov
 
26.03.10
18:42
У документа нет свойства Изменения.
24 Serg_1960
 
26.03.10
18:58
Это не свойство - это ТЧ. Внутреняя таблица регистрации изменений. Если документ входит хоть в один план обмена - она есть и заполняется.

А у Вас точно платформа 8.1? В структуре хранения данных эти таблицы доступны под наименованием _DocumentChangeRec<N>, где <N> - номер таблицы документа (_Document<N>).
25 Serg_1960
 
26.03.10
19:05
Вот, ссылку подробную нашел: http://www.linuxshop.ru/index.php?autocom=ibwiki&cmd=article&id=10
26 Evlanov
 
26.03.10
23:23
У меня 1С версия 8.1.13.41.
Спасибо за статью.
27 Serg_1960
 
26.03.10
23:24
Ок.
28 Evlanov
 
28.03.10
13:02
(24) Это внутреннее устройство 1С. Нужно пользоваться стандартными методами.
AdBlock убивает бесплатный контент. 1Сергей