Книга знаний

1С:Предприятие / v8 / Объекты конфигурации / Документы

v8: Оперативное проведение: изменение даты документа и проведение будущей датой

В 8-й платформе при оперативном проведении нельзя менять дату и время документа. Следующий способ решает эту проблему.Автор статьи: snc | Редакторы: vde69
Последняя редакция №5 от 23.06.07 | История
URL: http://kb.mista.ru/article.php?id=553

Ключевые слова: будущая,дата,время,документ,проведение,оперативное


Способ состоит в том, что при оперативном проведении мы меняем дату документа и сохраняем изменения:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    ...
    Если РежимПроведения=РежимПроведенияДокумента.Оперативный Тогда
        Дата=<нужная дата>;
        Записать();
    КонецЕсли;
КонецПроцедуры

где <нужная дата> - это может быть все что угодно: реквизит документа, константа, функция, и т.д.
Условие "только для оперативного проведения" нужно если документ будет проводится повторно (что обычно и предусматривают), ну и логически понятно: зачем менять дату документа при неоперативном проведении, когда для этого никаких преград в платформе нет.

Вот самый простой пример использования: нужно чтобы при оперативном проведении было строго определенное время документа, а не то, которое даст система. Решение - добавляется либо дополнительный реквизит в документ или заводится константа и при проведении это присваивается дате документа.

То же самое делается и при ОПЕРАТИВНОМ проведении будущей датой. Статья про это уже была (Книга знаний: v8: Как разрешить проведение будущей датой в форме документа), но там будущей датой документ проводится неоперативно, а у меня оперативно (почувствуйте разницу!). Кроме константы можно использовать Рабочую дату, но тогда нужно менять дату документа, что не очень удобно.
//способ оперативного проведения будущей датой
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    ...
    Если РежимПроведения=РежимПроведенияДокумента.Оперативный Тогда
        Дата=Константы.ДатаОперативногоПроведения.Получить();
        Записать();
    КонецЕсли;
КонецПроцедуры


То, что платформа дает изменить дату документа при оперативном проведении - это наверное не ошибка, а, например, фича. Может быть так специально сделали, что при вызове метода Записать() в ОбработкеПроведения не проверяется дата документа.

Аналог такого поведения Записать() в ОбработкеПроведения есть в платформе 7.7. Например, у документа есть уникальность номера. Так вот, в ОбработкеПроведения можно хоть всем документам поставить одинаковый номер - система даже не ругнется на то, что не может записать документ с неуникальным номером.

Поэтому, такое поведение метода Записать() очень удобно и его можно использовать для решения вышеперечисленных задач.


примечание от vde69:

"оперативное проведение - это проведение текущим или ближайшим и будущим, всегда последним, временем документа с сохранением уникальности в пределах 1сек по документу данного типа"

по этому данный прием не всегда является "оперативным проведением" с методологической точки зрения, но это не мешает его использовать для проведения без лишних вопросов системы.




Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика