×
Показано с 1 по 2 из 2
  1. #1
    Статья
    Гость

    Статья: Изменение документа без перепроведения. Когда это нужно и как это сделать?


    <p align="right">автор статьи:
    <b><a href=mailto:fe@alterplast.ru style=color:#000000;>Фёдор Езеев</a></b>
    опубликовано: <b>февраль 2003</b>
    </p>

    Иногда возникает необходимость внести незначительные изменения в уже проведенный документ.
    "Незначительные" в данном контексте означает такие изменения, которые не влияют на движения
    регистров (и вообще на любые процедуры, выполняемые в процессе проведения документа). Самым простым примером может служить изменение поля "Комментарий".
    <p>
    Однако движку V7 абсолютно безразлично, влияют ли внесённые в документ изменения на состояние регистров,
    или нет. Если документ был изменен&nbsp;– его надо перепровести. Ну а где проведение задним числом, там и восстановление границы последовательности, и прочие маленькие радости администраторов баз данных 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>
    Процедура ПриВводеКомментария()

    &nbsp;&nbsp;&nbsp;ПриЗаписиПерепроводить(0);
    &nbsp;&nbsp;&nbsp;Записать();
    &nbsp;&nbsp;&nbsp;ПриЗаписиПерепроводить(1);

    КонецПроцедуры
    </font></td></tr></table>
    <p>
    Так же нужно не забыть проверить состояние документа перед изменением нашего поля. Если документ уже был изменен&nbsp;– очевидно, записывать его без перепроведения было бы некорректно. Это тоже просто:
    <p>
    <table align=center cellspacing=0 cellpadding=4 border=1 bgcolor=#F0F0F0>
    <tr><td><font class=text color=#003399>
    Процедура ПриВводеКомментария()

    &nbsp;&nbsp;&nbsp;НужноПерепроводить=?(Модифицированность()=0,0,1);

    &nbsp;&nbsp;&nbsp;Если НужноПерепроводить=0 Тогда
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ПриЗаписиПерепроводить(0);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Записать();
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ПриЗаписиПерепроводить(1);
    &nbsp;&nbsp;&nbsp;КонецЕсли;

    КонецПроцедуры
    </font></td></tr></table>
    <p>
    К сожалению, "просто" не всегда означает "правильно". Такая схема не работает, поскольку при изменении любого реквизита движок V7 сразу же ставит флажок модифицированности. То есть в нашей процедуре метод Модифицированность() вернет единицу в любом случае.
    <p>
    Но и этого можно избежать, правда, принеся в жертву наглядность. Поле для редактирования реквизита заменяем на текстовое поле, которое изображает текущее состояние реквизита (в поле "формула" нужно занести идентификатор реквизита, в нашем случае "Комментарий").

    Читать всю статью: http://www.klerk.ru/soft/1c?2049
    Поделиться с друзьями

  2. #2
    Клерк Аватар для osimax
    Регистрация
    23.11.2003
    Адрес
    Москва
    Сообщений
    1
    Для того чтобы не потерять наглядность можно убрать стандартные комманды из кнопок "Записать,Провести,Закрыть", а использовать функции, в которых кроме модифицированность() проверяется еще переменная, например: НадоЗаписать, - которая принимает значение 1 если изменялся Коментарий и 0 по умолчанию.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)