Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Иллюстрированный самоучитель по языку системы 1С:Предприятие

Предопределенные процедуры Модуля документа

ОбработкаУдаленияПроведения

Предопределенная процедура обработки удаления проведения документа.

Синтаксис:

Англоязычный синоним:

Описание:

Процедура ОбработкаУдаленияПроведения – предопределенная процедура. Она не является встроенной процедурой языка. Для нее определено только название и синтаксис. Тело процедуры должно быть написано разработчиком конфигурации в Модуле документа (см. «Виды программных модулей»). Вызов процедуры ОбработкаУдаленияПроведения производится в системе 1С:Предприятие неявно при отмене проведения документа или при удалении проведенных документов в любом режиме – интерактивно или программно. (см. СделатьНеПроведенным, Удалить).

Замечание
В предопределенных процедурах ОбработкаПроведения и ОбработкаУдаленияПроведения система 1С:Предприятие сама выполняет все действия через транзакцию (см. «Процедуры работы с транзакциями»), поэтому никаких специальных действий по обработке транзакций в этих предопределенных процедурах предпринимать не нужно
.

Если в данной предопределенной процедуре установить статус возврата – 0 (например, если данному пользователю нельзя отменять проведение документа) то отмена проведения документа не будет выполнена и будет отменена системная транзакция.

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

Данная предопределенная процедура может располагаться только в Модулях документов (см. «Виды программных модулей»).

Пример:

См. также: СтатусВозврата, СделатьНеПроведенным, Удалить.

Источник

Профессия — 1С

рубрики: Документы | Дата: 3 февраля, 2018

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

Но чтобы правильно выбрать ту или иную функцию для своего кода, необходимо представлять в какой последовательности выполняются эти функции и где они выполняются — на клиенте или на сервере.

Как всегда я призываю не принимать на веру любую теорию, а опробовать все самостоятельно на практике. Эксперименты будем проводить на платформе 8.3 с использованием управляемой формы документа. Для начала создадим любой документ с возможностью проведения и добавим в него форму. Далее откроем модуль формы и добавим в него все предопределенные процедуры связанные с записью документа. А чтобы в момент записи и проведения документ мог сам нам рассказать в какой последовательности выполняются предопределенные процедуры, в каждую из них вставим вызов сообщения с указанием имени процедуры.

В итоге получим вот такой код:

И такую же процедуру проделаем с модулем объекта:

А теперь посмотрим в какой последовательности отработают все вышеперечисленные события. Для этого откроем документ и нажмем кнопку Провести, т.е. выполним проведение документа из его формы. В итоге в окне сообщений получим следующую последовательность событий:

Для наглядности представим информацию в графическом виде:
Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения
Как видим все процедуры модуля документа за исключением проверки заполнения выполняются в единой транзакции. Также в этой транзакции выполнятся и процедура модуля формы ПриЗаписиНаСервере(). В этой процедуре у нас есть последний шанс отказаться от проведения документа. Стоит также отметить, что после выполнения процедуры модуля документа ПередЗаписью() у нас документ уже записан в базу данных. То есть в процедуре ПриЗаписи() у нас уже есть возможность использовать ссылку на документ.

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

Источник

Проведение документов

Рассмотрим подробно свойства документа на вкладке «Движения»

Процедура ОбработкаПроведения

Формирование новых наборов записей регистров включает в себя операции, состоящие:

Следует учитывать, что при автоматической записи движений они будут записаны с замещением, то есть старые движения документа будут замещены новыми. Фактически, платформа неявно выполнит код:

Действие данного параметра проявляется в случае, если на момент записи нового (или модифицированного) набора записей в регистре присутствуют еще записи, подчиненные данному же регистратору.

Подробнее о формировании движений

С точки зрения платформы отдельного процесса «проведение» не существует. Есть запись документа с проведением, причем в рамках одной транзакции. Таким образом, в момент выполнения обработчика события ОбработкаПроведения документ уже записан.

Свойство «Удаление движений» документа как объекта конфигурации стандартно устанавливается платформой в значение «Удалять автоматически при отмене проведения». Это значит, что при перепроведении документа движения, подчиненные данному документу, перезаписываются, а при отмене проведения движения документа автоматически удаляются.

Если разработчик захочет реализовать нестандартный вариант проведения документа и установит свойство «Удаление движений» в значение «Удалять автоматически», то при записи документа с проведением сначала будут удалены все старые движения документа. То есть на момент выполнения обработчика события ОбработкаПроведения в регистрах не будет наборов записей с движениями данного документа.

При записи с проведением система автоматически запишет выбранные и незаписанные наборы записей, находящиеся в свойстве «Движения». Отсюда следуют два важных вывода:

В случаях, если необходимо программно вызвать саму обработку проведения, инициируется запись документа с проведением. Пример программного вызова проведения документа в оперативном режиме:

Пример перепроведения документов РеализацияТоваров в интервале с ДатаНачала по ДатаОкончания :

Оперативное и неоперативное проведение

Оперативное и неоперативное проведение подразумевает, что работа пользователей может происходить в двух принципиально разных по своей сути режимах. Оперативное проведение документов пользователями выполняется в режиме «реального времени», то есть отображает изменения, факты, свершающиеся в настоящее время. Поэтому при этом способе проведения документов следует осуществлять максимум проверок, способных исключить ошибки при вводе данных пользователями.

Например, при оперативном проведении следует выполнять контроль остатков на складе списываемой номенклатуры с тем, чтобы исключить одновременную продажу одного товара несколькими продавцами. При оперативном проведении документа система, прежде всего, проверит положение даты документа относительно текущей даты сеанса. Если дата проводимого документа совпадает с текущей датой сеанса, то система будет проводить такой документ в оперативном режиме, и в обработке проведения об этом можно узнать, чтобы выстроить определенный алгоритм проведения документа.

Если дата проводимого документа меньше текущей даты сеанса, то такой документ система будет проводить в неоперативном режиме. Неоперативное проведение документов подразумевает отражение в базе данных фактов, которые свершились в прошлом или которые точно будут совершены в будущем. Поэтому задача неоперативного проведения документов — просто отразить в информационной базе данные о совершенных операциях.

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

С оперативным проведением документов связано понятие оперативной отметки времени и понятие момента времени.

Понятие момента времени

Для определения положения документа на оси времени используется реквизит документа «Дата». Дата содержит время с точностью до секунды. Это позволяет контролировать последовательность записи документов. Однако при большом объеме создаваемых документов вероятна ситуация, когда несколько документов будут иметь одинаковое значение даты (т. е. будут созданы в течение одной секунды). Как в этом случае определить последовательность созданных документов?

Для обработки подобных ситуаций было введено понятие момент времени. Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Он позволяет однозначно идентифицировать любой объект ссылочного типа базы данных на оси событий, но имеет смысл в основном только для документов. Кроме того, момент времени позволяет идентифицировать и необъектные данные, например, записи регистров, подчиненных регистратору.

Для нескольких документов, имеющих одинаковую дату и время, последовательность их на оси событий определяется системой исходя из ссылок на эти документы. Она может не совпадать с последовательностью создания документов, и она недоступна для изменения пользователем, то есть нельзя каким-либо образом повлиять на последовательность документов внутри одной секунды или вычислить, что один документ создан раньше, а другой — позже.

Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущей даты сеанса и последней созданной оперативной отметки. Если последняя оперативная отметка меньше текущей даты сеанса, в качестве новой оперативной отметки принимается текущая дата сеанса. Если последняя оперативная отметка равна или больше текущей даты сеанса, в качестве новой оперативной отметки принимается значение на одну секунду большее, чем старая оперативная отметка времени.

Таким образом, если у объекта конфигурации Документ установлено свойство оперативного проведения, последовательность действий системы будет следующей:

Источник

Документы в 1С 8.3

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Реквизиты документа

Документы являются основным объектом метаданных в конфигурациях на 1С. Документ используется для отражения хозяйственных операций предприятия. Например, приход товара на склад, продажа товара, поступление денег в кассу и т.п. Можно сказать, что документ в 1С — это аналог бумажного документа, который используется на предприятии, однако могут быть и специфические виды документов, не имеющие бумажных аналогов.

В конфигурации документы расположены в узле Документы:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

При создании нового документа открывается окно со свойствами документа, которые сгруппированы по закладкам:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Для каждого объекта метаданных Документ в базе данных будет создана своя таблица. В данной таблице будут колонки для хранения даты, номера, пометки удаления, признака проведения и некоторых других служебных реквизитов. Если на закладке Данные добавить реквизиты, то для каждого реквизита в таблице будет создана своя колонка:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Таблица базы данных:

СсылкаДатаНомерПоставщикСклад

В одной строке (записи) таблицы хранятся сведения об одном документе. Если в пользовательском режиме создать несколько документов, то таблица будет выглядеть следующим образом:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

СсылкаДатаНомерПоставщикСклад
8eae102c-86d5-11eb-80a3-e0d55e4e266920.03.2021 20:00:04000000001АлхимовОсновной
8eae102d-86d5-11eb-80a3-e0d55e4e266920.03.2021 20:00:25000000002ИП ИвановОсновной

Табличная часть документа

Один документ может содержать в себе некоторый список однотипных данных. Например, в приходной накладной может быть 10 разных товаров. Для хранения таких данных предназначены табличные части.

Табличная часть описывается на закладке Данные. Указывается имя табличной части и реквизиты табличной части:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Документ может иметь множество табличных частей. Для каждой из них в базе данных будет создана своя таблица с колонками Ссылка, НомерСтроки и по одной колонке для каждого реквизита табличной части. Через поле Ссылка выполняется связь с основной таблицей документа. В таблице для табличной части в поле Ссылка будет храниться такой же идентификатор, как и в поле Ссылка основной таблицы документа.

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

СсылкаНомерСтрокиТоварКоличество
8eae102c-86d5-11eb-80a3-e0d55e4e26691Смартфон2
8eae102c-86d5-11eb-80a3-e0d55e4e26692Клавиатура4

Формы документа

На закладке Формы для документа можно создать свои формы документа, списка или выбора:

Чтобы указать форму как основную ее нужно выбрать в специальных полях в верхней части закладки:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

В этом случае при открытии формы документа будет использоваться созданная в конфигураторе форма. А для формы списка и формы выбора будут использоваться сгенерированные платформой формы.

Проведение документов

Запись документа — это процесс переноса значений реквизитов в таблицы базы данных.

Запись бывает трех видов:

Проведение документа — это запись документа в режиме проведения. Как правило при проведении документа формируются движения по регистрам. Также при проведении будет вызываться обработчик ОбработкаПроведения из модуля объекта. У документа есть реквизит Проведен, который равен Истина, если документ проведен и Ложь, если не проведен.

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

Состав движений документа настраивается на закладке Движения. Там же можно разрешить или запретить проведение документа. Если проведение запрещено, то у документа не будет кнопки «Провести», при записи не будет вызываться обработка проведения в модуле объекта:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Для примера сформируем движения по регистру ОстаткиТоваров. Регистр имеет следующую структуру:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Тип изменения «Товар» — СправочникСсылка.Товары. Тип ресурса «Количество» — число, 15, 3. Аналогичные реквизиты есть у табличной части документа.

В модуле объекта документа нужно добавить процедуру ОбработкаПроведения и заполнить ее следующим образом:

Через коллекцию Движения можно обратиться к регистру. Сначала у него устанавливается признак Записывать = Истина, чтобы после выхода из обработки проведения движения были записаны в регистр. Затем в цикле перебирается табличная часть и для каждой строки добавляется новая запись в регистр ОстаткиТоваров.

В свойствах документа есть свойство Запись движений при проведении. Чтобы открыть свойства нужно в дереве метаданных в контекстном меню документа выбрать пункт «Свойства».

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Если данное свойство равно Записывать выбранные, то после обработки проведения будут записаны только те наборы записей, у которых был установлен признак Записывать = Истина. Если Записывать модифицированные, то признак Записывать = Истина можно не устанавливать вручную. Любые измененные в обработке проведения наборы записей будут записаны. Платформа автоматически установит им признак Записывать = Истина при их изменении.

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

Если в обработке проведения установить параметр Отказ = Истина, то проведение не будет выполнено, движения не будут записаны в регистр и при проведении будет выдано исключение: «Не удалось провести «Приход товара 000000002 от 20.03.2021 20:00:25″!».

Отмена проведения документов

При записи документа в режиме отмены проведения выполняется удаление движений по регистрам. До непосредственного удаления движений вызывается обработчик ОбработкаУдаленияПроведения в модуле объекта документа. В данном обработчике можно прописать свой алгоритм действий при отмене приведения документа.

На закладке Движения можно настроить будут ли автоматически удалять движения при отмене проведения или нет. За это отвечает свойство УдалениеДвижений:

Что необходимо выполнить в процедуре обработкапроведения в модуле документа для отмены проведения

Свойство УдалениеДвижений может принимать три значения:

При создании нового документа в конфигураторе автоматически устанавливается Удалять автоматически при отмене проведения.

Если выбрано значение Не удалять автоматически, то в обработчике ОбработкаУдаленияПроведения нужно очистить движения программно:

Источник

Программная отмена проведения

Отмена проведения проведённого документа
Всем привет! Пытаюсь сделать запрет на проведение уже проведённого ранее документа. Почитала.

Отмена проведения документа при недостатке на складе. с учетом перепроведения
В 1С пару недель. Был диск с 1С 2013 года, там код работал, скачал с сайта новый конфигуратор.

Отмена проведения неактивна
Значит так: Наши программеры сделали чтобы мы пользователи после проведения документа, не могли.

А вообще это уровень первой задачи из сборника задач к специалисту по платформе. Поройте в нете есть решение, с контролем остатков

Я бы порекомендовал прочитать какую нибудь книгу для начинающих, там начало хорошо расписано. Или походить на курсы по азам программирования, т.к насколько я разобрался вы не совсем разобрались даже в концептуальных вопросах.

По задаче. У вас должно быть два документа поступление товаров и Списание товаров, который должны двигать регистр например «Остатки», вот их с помощью запроса можно вытащить из него. Причем сейчас, практикуется вариант контроля, который записывает движения документа а затем смотрит есть ли отрицательные остатки, если есть то пишем Отказ = Истина;

Добавлено через 29 минут

Теория, документы, отмена проведения
Здрасте! Скажите пожалуйста, как поступают в таких случаях. К примеру провели два документа прихода.

1c v8.x Отмена проведения документа
Подскажите такой момент, мне нужно при отмене проведения документа перепровести некоторые другие.

Отмена проведения согласованного документа
Всем добрый день. Конфа «Медицина. Больничная аптека, редакция 1.1 (1.1.7.3)». Есть.

Манипуляция Проведением/Отмена проведения
Ребят, доброго дня! У меня вопрос по поводу Проведения и Отмены проведения. например: если мы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *