<p align="right">автор статьи:
<b><a href=mailto:fe@alterplast.ru style=color:#000000;>Фёдор Езеев</a></b>
опубликовано: <b>февраль 2003</b>
</p>
Иногда возникает необходимость внести незначительные изменения в уже проведенный документ.
"Незначительные" в данном контексте означает такие изменения, которые не влияют на движения
регистров (и вообще на любые процедуры, выполняемые в процессе проведения документа). Самым простым примером может служить изменение поля "Комментарий".
<p>
Однако движку V7 абсолютно безразлично, влияют ли внесённые в документ изменения на состояние регистров,
или нет. Если документ был изменен его надо перепровести. Ну а где проведение задним числом, там и восстановление границы последовательности, и прочие маленькие радости администраторов баз данных V7.
<p>
В статье описан технический прием, позволяющий обойти обозначенную проблему.
<p>
Для решения, очевидно, нужно использовать методы <nobr>ПриЗаписиПерепроводить()</nobr> и <nobr>Записать().</nobr> Пробуем сделать по-простому: на элемент формы "Комментарий" вешаем функцию <nobr>ПриВводеКомментария(),</nobr> в которой написано следующее:
<p>
<table align=center cellspacing=0 cellpadding=4 border=1 bgcolor=#F0F0F0>
<tr><td><font class=text color=#003399>
Процедура ПриВводеКомментария()
ПриЗаписиПерепроводить(0);
Записать();
ПриЗаписиПерепроводить(1);
КонецПроцедуры
</font></td></tr></table>
<p>
Так же нужно не забыть проверить состояние документа перед изменением нашего поля. Если документ уже был изменен очевидно, записывать его без перепроведения было бы некорректно. Это тоже просто:
<p>
<table align=center cellspacing=0 cellpadding=4 border=1 bgcolor=#F0F0F0>
<tr><td><font class=text color=#003399>
Процедура ПриВводеКомментария()
НужноПерепроводить=?(Модифицированность()=0,0,1);
Если НужноПерепроводить=0 Тогда
ПриЗаписиПерепроводить(0);
Записать();
ПриЗаписиПерепроводить(1);
КонецЕсли;
КонецПроцедуры
</font></td></tr></table>
<p>
К сожалению, "просто" не всегда означает "правильно". Такая схема не работает, поскольку при изменении любого реквизита движок V7 сразу же ставит флажок модифицированности. То есть в нашей процедуре метод Модифицированность() вернет единицу в любом случае.
<p>
Но и этого можно избежать, правда, принеся в жертву наглядность. Поле для редактирования реквизита заменяем на текстовое поле, которое изображает текущее состояние реквизита (в поле "формула" нужно занести идентификатор реквизита, в нашем случае "Комментарий").
Читать всю статью: http://www.klerk.ru/soft/1c?2049
