|
Как зарегистрировать изменения вручную? | ☑ | ||
---|---|---|---|---|
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С. Нужно пользоваться стандартными методами.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |