Как провести документ без проверок 1с

Обновлено: 07.07.2024

Особенности использования поля "Проведен" и процесса проведения

В документах 1С:Предприятия 8 поддерживается механизм проведения. Он представляет собой реализованную на уровне системы методологию отражения в учетных механизмах события хозяйственной жизни, отражаемого документом. Механизм проведения реализован таким образом, чтобы, с одной стороны, минимизировать усилия разработчика при использовании его в типовых случаях, а, с другой стороны, чтобы обеспечить гибкие возможности изменения стандартной методологии.

Для функционирования этого механизма у документа существует признак того, что документ проведен, а также существуют процессы проведения и отмены проведения.

Признаком является системное поле Проведен. Основное назначение данного поля - отличать документы, уже отраженные в учете, от документов, которые введены, но еще не должны влиять ни на какие учетные механизмы. Такие документы является своего рода "черновиками". Например, оператор заполнил не все реквизиты, но вынужден прекратить работу с программой. Он может записать документ без проведения и вернуться к нему позже. Проведенные и не проведенные документы отображаются в списке документов с разными пиктограммами.

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

Использование поля Проведен и процесса проведения является только предлагаемой системой методологией.

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

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

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

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

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

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

(14) еще раз пишу для непонятливых:
Во внешней обработке:
В модуле объекта ДОКУМЕНТА:

(11) при обмене устанавливается автоматом, но никто не мешает вставить установку флага в программу перед записью.

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

(11) и что? По сути это такое же доп. Свойство, но в отличие от от них, на него уже есть реакция в объектах типовых
(16) Получается без вмешательства в конфу не получится. эх а так хотелось
Сдается мне, что там даже при обмене данными формы вылетают
Получится, если типовая и выставить обменданными.загрузка в истину в модуле обработки перед вызовом метода записать() объекта
(21) а что там за форма. ты процедуру покажи. Может форму эту мона обойти
(24) я довольно часто применяю этот способ для обхода типового кода.
+ (29) все этот метод используют постоянно потому что он всем известен и работает

(27) фига се, проверил сейчас, действительно истина.

Откуда у меня взялся стереотип, что программно это свойство не установить?

(33) Фига себе, пятница, почти полночь и ты полез в конфигуратор 1с проверить какую то фигню!
(33) мы не знаем. Объективных предпосылок для того чтобы так думать нет. Более того, например типовая обработка выгрузказагрузкаданныххмл82.епф, которая используется всеми для адресного восстановления объектов и записей регистров из бэкапов, дает выставить это свойство специально, чтобы не выполнялись проверки при записи при загрузке восстанавливаемого объекта
перед
Объект.Записать(РежимЗаписиДокумента.Проведение)
(36) а может вы лукавите и раньше (в другой платформе или релизе) ОбменДанными.Загрузка был доступен только для чтения?
(40) Нет. Более того, мне кажется что это свойство выставлялось всегда исключительно только программнр
(41) не, в при обмене через планы обмена, система его устанавливает в ИСТИНА

(38) в обработчике перед записью, перед открытием вашей формы, должен быть код анализа, как в (16)

(41) нет, в случае обмена с использованием плана обмена оно выставляется движком

(39) тема себя исчерпала, у вас есть все предпосылки чтобы решить проблему.
(47) а если распределенная база, то свойство ОбменДанными тоже доступно не только для чтения?
(47) что может значить эта ошибка:
Действие не может выполняться в режиме загрузки данных
?
(49) у тебя в БД есть план обмена с галкой "распределенная информационная база"?
(51) обработка, случайно, не запускает обмен по этому плану обмена?
(50) те планы обменами, которые для этого документа отмечены без установленного значения Распределенная ИБ.
(52) Короче тут, такая история я не программист 1с, я в поддержке сижу знаю чуть больше других юзеров. и вот наши программисты внесли в конфу некторые изменения, после которых документ перестал создаваться через эту обработку из-за того, что они вызывают модально некоторую форму. я просто хочу 1с-ку изучить вот и решил попытаться обработку изменить, не трогая конфу.
(54) покажи код, которым ты изменяешь документ в обработке

(49) > Действие не может выполняться в режиме загрузки данных

Говорит о том, что что-то написано такое, что не поддерживается Когда свойство ОбменДанными.Загрузка установлено в значение Истина

+(57) Скорее всего это в конфигурации написано.

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

Таких увольнять сразу надо, если они с серьезными вещами работают.

(56) процедуру ПередЗаписью не смогу показать она очень огромная и тем более конфа далека от типовой.
документ я создаю следующим образом:
(58) ну, ни мне судить как и что. мне бы научиться, что бы жену и дочь что бы прокормить

Если есть, то оно до открытия формы расположено?

(59) если при выполнении этого кода появляется модальное окно - то гнать этих недоделанных прогов студентов до самого заднего задищенво.

короче пишешь докладную и ссылку на эту ветку.

(59) зачем ты приводишь код в котором нет ошибки? Тебя ведь просили привести код при или перед записи, потому что именно там написано то .авно, которое портит тебе жизнь
(64) прошу прощения, но я не могу этот код скопипастить сюда.
(64) думаю, что у него следующее:
при установленном свойстве ОбменДанными=Истина не может открыться модальное окно той копрокодерской формы и вываливается ошибка "Действие не может выполняться в режиме загрузки данных "
(48) что?
А ты можешь привести пример хоть одного свойства которое вдруг перестает быть доступным для чтения в зависимости от такой эфемерной сущности как план обмена, его наличия и наличия хотя бы одного узла в таких планах обмена, и хотя бы приблизительную причину почему такое могли сделать разработчики?

(68) мне все покоя мысль не дает, откуда я взял, что это свойство только для чтения :)

(66) ты так говоришь, как будто это мы вынудили тебя создать топик на форуме в котором ты у нас спрашиваешь как решить твою проблему.

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

(66) ты на вопрос ответь, что я тебе задавал.
В той процедуре, где форма открывается, есть строка

Использование признака ОбменДанными.Загрузка в обработчиках событий объекта

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. Все действия в процедурах-обработчиков событий ПередЗаписью, ПриЗаписи, ПередУдалением должны выполняться после проверки на ОбменДанными.Загрузка :

Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

// код обработчика
// .
КонецПроцедуры

Это необходимо для того, чтобы никакая бизнес-логика объекта не выполнялась при записи объекта через механизм обмена данными, поскольку она уже была выполнена для объекта в том узле, где он был создан. В этом случае все данные загружаются в ИБ «как есть», без искажений (изменений), проверок или каких-либо других дополнительных действий, препятствующих загрузке данных.

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

Например, требуется загрузить всю базу из XML «как есть». Для этого должно быть достаточно установить записываемым объектам ОбменДанными.Загрузка = Истина и все данные должны загрузиться без искажений, проверок и дополнительных действий, т. е. так же как и при пустом обработчике.

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

В тех случаях, когда в конфигурации используется подсистема «Обмен данными» БСП, и возникла необходимость отключить ее, следует устанавливать дополнительное свойство ОтключитьМеханизмРегистрацииОбъектов :

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

3. Требования выше также распространяются на обработчики подписок на эти события.

4. При этом вызывающая сторона, выставляя записываемому объекту признак ОбменДанными.Загрузка в Истина , берет на себя ответственность за целостность данных этого объекта.

Например, при записи объекта через механизм обмена данными в РИБ это обеспечивается корректным состоянием объекта в том узле, где он был создан (или изменен).

В других случаях вызывающая сторона должна принять меры по корректному заполнению записываемого объекта. Например, при загрузке данных через механизм обмена данными по правилам конвертации или с помощью формата EnterpriseData, следует выполнять все необходимые действия по (до)заполнению объекта. Эти действия рекомендуется размещать в экспортных процедурах самого объекта, которые используются вызывающей стороной при записи объекта в режиме обмена данными.

Как сравнить "этот" документ и документ Док
В модуле формы документа делаем вот такой код Док=СоздатьОбъект("Документ.РасчетНалоговПолн");.


Как сделать, что бы документ не мог быть проведен дважды?
Народ, что не правильно, нужно сделать, чтобы документ не проводился дважды. То есть, если он.

Проверить документ на тип
Добрый день, такой вопрос, вот в зависимости от типа документа из запроса, выполняется условие, но.

Проверить открыт ли документ другим пользователем
Доброго времени суток всем. Вопрос: Можно ли как то узнать что на текущий момент у кого то.

1. См. метод Проведен()
2. Нужно, если не находишься в форме документа

9AAAA, зачем ты собираешь у людей аску, вместо того чтобы учить мат.часть?
ЖКК имеешь? если нет - есть в топах тема для начинающих

P/S твоя проверка элементарена

главное чтобы переменная Реализация уже несла в себе ссылку на документ, собственно то о чем говорил vbs

Добавлено: И надо ли после того как создал, но еще не проверил проведен ли документ искать нужный документ. Если да, то как?

Добавлено: И надо ли после того как создал, но еще не проверил проведен ли документ искать нужный документ. Если да, то как?

ЖКК - Желто-красные книги, т.е. документация!
Создал кого? Если документ создал только - то он естественно будет не проведен И надо ли после того как создал, но еще не проверил проведен ли документ искать нужный документ. Если да, то как?

Док = СоздатьОбъект("Документ.Реализация"); // если под "создал" имелось в виду это, то
Док.НайтиДокумент(НужныйДокумент); // да, надо спозиционироваться на нужный документ

//в данном случае НужныйДокумент - это реквизит или переменная со значением типа Документ,
//но можно искать по номеру, например:

или ещё как-то. Ну а затем проверить, например,

Если Док.Проведен()=1 Тогда
Сообщить("Однако, документ проведен");
КонецЕсли;

P.S. И присоединяюсь к уже высказанному пожеланию читать ЖКК, а также тексты программ типовых конфигураций.

ЖКК для семерки нет, есть для восьмерки, пробовал читать, не помогает, слишком много слов, совершенно нет кода. Мисту уже облазил, хороший сайт.
А в синтаксис помощнике не судьба посмотреть.
alxrie Спасибо за помощь ЖКК для семерки нет, есть для восьмерки, пробовал читать, не помогает, слишком много слов

За неимением простой пытаемся писать на гербовой ?

ЖКК для семерки нет, есть для восьмерки, пробовал читать, не помогает

"ЖКК для 7-ки" - где-то в Сети пробегал. Так что найти при желании можно.

У меня есть документы типа реализация, некоторые проведены, некоторые нет. Нужно ли использовать метод НайтиДокумент или НайтиПоНомеру или достаточно просто создать объект путем ДокРеал=СоздатьОбъект (Документ.Реализация) Если ДокРеал.Проведен=1 тогда далее мой текст кода

Что такое "есть документы"? Откуда они "есть"? Постарайся описать задачу по-человечески - тогда и получишь ответ.

Возможно, ты перебираешь документы за период. Тогда так:

Док = СоздатьОбъект("Документ.Реализация");
Док.ВыбратьДокументы(НачДата,КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл
Если Док.Проведен()=1 Тогда
Сообщить("Реализация № "+Док.НомерДок+" от "+Док.ДатаДок+" проведена");
Иначе
Сообщить("А вот реализацию № "+Док.НомерДок+" от "+Док.ДатаДок+" - провести забыли (забили?)");
КонецЕсли;
КонецЦикла;

Возможно, у тебя совсем другая задача.

Что такое "есть документы"? Откуда они "есть"? Постарайся описать задачу по-человечески - тогда и получишь ответ.

Возможно, ты перебираешь документы за период. Тогда так:

Док = СоздатьОбъект("Документ.Реализация");
Док.ВыбратьДокументы(НачДата,КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл
Если Док.Проведен()=1 Тогда
Сообщить("Реализация № "+Док.НомерДок+" от "+Док.ДатаДок+" проведена");
Иначе
Сообщить("А вот реализацию № "+Док.НомерДок+" от "+Док.ДатаДок+" - провести забыли (забили?)");
КонецЕсли;
КонецЦикла;

Возможно, у тебя совсем другая задача.

Читайте также: