1с провести документ программно
Запись и проведение документа в форме
Для понимания особенностей записи и проведения документа в форме следует, прежде всего, разделять особенности записи самого объекта ( ДокументОбъект ) и особенности работы расширения формы. Расширение формы документа действует, если основной реквизит формы имеет тип ДокументОбъект . Оно обеспечивает специфическую функциональность формы при редактировании и записи документа. Задача расширения заключается в реализации удобного для пользователя поведения формы. Но собственно запись и проведение документа выполняет, разумеется, объект, являющийся реквизитом формы. Расширение документа обрабатывает различные команды пользователя, выполняет предварительные проверки и другие сервисные действия, а затем вызывает запись объекта. Запись объекта выполняется так же, как и если бы она вызывалась средствами встроенного языка. То есть с точки зрения объекта запись в форме и запись средствами языка ничем не различаются. Таким образом, расширение обеспечивает некоторую сервисную функциональность, обращаясь в конечном итоге к функциональности объекта. Следует учитывать, что расширение формы действует, только если используются механизмы формы и не действует, если выполняется обращение непосредственно к объекту. Например, если вызвать метод Записать() у объекта ДокументОбъект , то никакие действия расширения формы не будут выполняться. Чтобы они выполнялись нужно вызывать метод ЗаписатьВФорме() .
Далее мы рассмотрим те сервисные действия, которые обеспечивает расширение формы документа. В данном разделе, мы опишем только те действия, которые специфичны именно для расширения формы документа и не будем касаться общих действий, которые поддерживаются расширениями всех объектов.
Установка даты документа
При открытии формы нового документа, если дата документа не установлена (равна значению типа Дата по умолчанию), то документу устанавливается рабочая дата. Следует заметить, что используется именно рабочая дата, а не текущая (если не установлено использование текущей даты в качестве рабочей). Это дает возможность пользователю настроить рабочую дату так, чтобы новые документы вводились определенной датой. При этом в качестве даты устанавливается начало дня (дата без времени), даже если в качестве рабочей даты выступает текущая дата. Но если свойство АвтоВремя имеет значение НеИспользовать , и рабочая дата равна текущей, то устанавливается текущая дата, вместе со временем. Таким образом, для варианта АвтоВремя = НеИспользовать при открытии берется рабочая дата (если она отличается от текущей) или текущая дата вместе со временем, а для остальных вариантов установка времени откладывается на момент записи документа.
При записи нового документа в форме если свойство АвтоВремя имеет значение отличное от НеИспользовать , и не используется оперативное проведение, и время документа пустое (0:00:00), то выполняется автоматическая установка времени на основании значения свойства АвтоВремя . Действие расширения формы в этом случае аналогично вызову метода УстановитьВремя() с вариантом выбранном в свойстве АвтоВремя и с использованием журналов документа.
Расширение формы так же предоставляет команды для установки времени документа в начало дня, конец дня, перед предыдущим и за последующим документом.
Установка режима записи
При нажатии кнопки " ОК ", если для документа в метаданных разрешено проведение, документ записывается в режиме проведения.
Кроме того, расширение формы предоставляет две отдельные команды для записи с проведением и записи с отменой проведения.
При любой записи документа в форме, если установлено свойство расширения формы ПриЗаписиПерепроводить и документ проведен, то выполняется запись в режиме проведения. Это позволяет исключить ситуацию, когда пользователь изменит документ, а движения документа не будут обновлены.
Установка режима оперативного проведения
При записи документа в форме, расширение формы выполняет установку режима проведения (оперативное или неоперативное проведение). Установка выполняется по следующему алгоритму.
Вначале если свойство ИспользоватьРежимПроведения имеет значение Авто выполняется первичный подбор режима проведения из вариантов Оперативный , Неоперативный и Запрашивать .
Если у пользователя нет права на неоперативное проведение – используется оперативное проведение.
Если документ не проведен – используется оперативное проведение.
Если дата документа равна текущей, а время меньше или равно текущему, то используется режим Запрашивать . Здесь и далее в этой статье сравнение даты имеется в виду без учета времени, а сравнение времени описывается отдельно.
Если дата документа меньше текущей, то используется неоперативное проведение.
Если дата документа равна текущей и время больше текущего – используется оперативное проведение.
Дальнейшие действия системы определяются уже исходя из трех вариантов ( Оперативный , Неоперативный и Запрашивать ) установленных непосредственно в свойстве ИспользоватьРежимПроведения или на основании описанного алгоритма для варианта Авто .
Если дата документа меньше текущей, используется оперативный режим и у пользователя есть права на неоперативное проведение, то пользователю предлагается использовать неоперативный режим. Если пользователь отказывается, то запись документа отменяется.
Если дата документа меньше текущей, используется оперативный режим и у пользователя нет права на неоперативное проведение, то запись документа отменяется.
Если дата документа меньше текущей и используется режим Запрашивать , то в зависимости от наличия прав на неоперативное проведение или выбирается неоперативный режим (без запроса пользователя), или запись документа отменяется.
Если дата документа больше текущей и используется оперативный режим, то запись документа отменяется. Штатное поведение расширения формы не разрешает проведение документа завтрашней датой, даже если у пользователя есть права на неоперативное проведение. Это объясняется тем, что после появления документов проведенных завтрашней датой текущие остатки регистров используемых проводимыми оперативно документами перестают соответствовать реальным остаткам и механизм оперативного проведения для всех пользователей перестает работать адекватно.
Далее если используется режим Запрашивать , то пользователю выдается диалог с выбором режима проведения.
Полученный таким образом режим проведения ( Оперативный или Неоперативный ) используется при выполнении записи документа.
Проверка прав
При открытии формы документа, если документ проведен, а у пользователя нет права "Интерактивное изменение проведенных", то расширение переводит форму в режим ТолькоПросмотр .
При записи документа в форме выполняется проверка прав на интерактивное проведение и интерактивную отмену проведения в соответствии с текущим режимом записи.
Считывание движений
При открытии формы документа, если есть табличные поля, связанные с движениями (наборами записей) объекта редактируемого в форме, то эти движения считываются из базы данных и соответственно отображаются в табличных полях.
Вообще то должно все проводится нормально. И движения должны делаться.
Если все правильно с формирование движений.
(2) x2z7yy,"Если все правильно с формирование движений" - конфигурация типовая УТ и все движения документа прописаны в модуле док. Есть ли необходимость прописывать движения еще раз в том месте где документ создается програмно? (3) alw-1,
При записи документа в режиме проведения, из модуля документа автоматически вызываются необходимые процедуры. Например "ОбработкаПроведения()". (5) Stalnoff,
Спасибо, вы точно объяснили то в чем я сомневался. (4) Абсолютно прав на счет контекстного меню.
попробуйте поставить точку остановки в обработке проведения документа и посмотреть отрабатывает ли вообще код этой процедуры. Возможно какой то из реквизитов не заполнен?
От этого тоже зависит, какие движения будут сделаны, а какие - нет.
(8) Psylocibine,
У меня УТ , если что-то не заполнено то сразу выскакивает ошибка, но ее нет.Просто не двигает регистр и все.(9) PetrPervuy,
Ну я и переписывал. Только ничего на тему запрета проведения.
Кстати, док того же типа созданный вручную регистр двигает. Созданные програмно нет(как через комнду Записать(. ), так и при ручном проведении. У меня УТ 10 ,понятно ,что ошибка в какой-то проверке но ответа не нахожу,запускал отладчик но в типовой что то найти не просто. если кто-то сталкиваля с чем-то конкретным, то подскажите.
(10) alw-1,
Как правило ошибка о незаполненности реквизита только в форме.
При программном создании документа никакие проверки описанные в форме не вызываются.
Отсутствие движений в документе созданном программно похоже на отсутствие информации для этих движений.
При ручном создании, скорее всего, в форме заполняются некоторые реквизиты "по умолчанию", при открытии формы. Когда Вы создаете документ программно, возможно не заполняете какой-то реквизит.
попробуйте такой алгоритм:
Этот код равнозначен ручному созданию/проведению.
Либо напишет ошибку какой реквизит не заполнен - тогда исправите первоначальный код,
Либо проведется и создаст проводки - тогда посмотрите под отладчиком - какой реквизит форма заполняет "по умолчанию".
Особенности использования поля "Проведен" и процесса проведения
В документах 1С:Предприятия 8 поддерживается механизм проведения. Он представляет собой реализованную на уровне системы методологию отражения в учетных механизмах события хозяйственной жизни, отражаемого документом. Механизм проведения реализован таким образом, чтобы, с одной стороны, минимизировать усилия разработчика при использовании его в типовых случаях, а, с другой стороны, чтобы обеспечить гибкие возможности изменения стандартной методологии.
Для функционирования этого механизма у документа существует признак того, что документ проведен, а также существуют процессы проведения и отмены проведения.
Признаком является системное поле Проведен. Основное назначение данного поля - отличать документы, уже отраженные в учете, от документов, которые введены, но еще не должны влиять ни на какие учетные механизмы. Такие документы является своего рода "черновиками". Например, оператор заполнил не все реквизиты, но вынужден прекратить работу с программой. Он может записать документ без проведения и вернуться к нему позже. Проведенные и не проведенные документы отображаются в списке документов с разными пиктограммами.
Процесс проведения и отмена проведения в 1С:Предприятии 8 являются частными случаями записи документа. Признак того, что запись выполняется с проведением или с отменой проведения задается в параметре вызова метода Записать. То есть запись документа может быть обычной или с проведением или с отменой проведения. При записи с проведением, кроме обычных действий, выполняемых при записи, выполняется установка значения Истина в поле Проведен и вызов обработчика ОбработкаПроведения() . При записи с отменой проведения, соответственно, вызывается обработчик ОбработкаУдаленияПроведения() и полю Проведен устанавливается значение Ложь.
Использование поля Проведен и процесса проведения является только предлагаемой системой методологией.
Изменение значения поля Проведен может выполняться и без проведения или отмены проведения. Для этого достаточно просто изменить значение поля и выполнить запись документа. При этом может получиться непроведенный документ, имеющий движения. Следует заметить, что при таком способе изменения поля Проведен не будут вызываться обработчики ОбработкаПроведения() и ОбработкаУдаленияПроведения() . Эти обработчики сопровождают явным образом инициированные процессы проведения или отмены проведения, а не сам факт изменения поля Проведен.
Формирование движений по документу так же может быть выполнено без проведения и даже без участия документа. Для этого достаточно записать набор записей регистра с отбором по данному документу.
Предлагаемая системой методология обеспечивает наиболее простой способ управления документом и его движениями для случая, когда документ содержит информацию о некотором событии, произошедшим на предприятии, а движения отражают эти события в различных учетных механизмах. Если у документа в метаданных свойство УдалениеДвижений имеет значение УдалятьАвтоматически, то перед проведением и при отмене проведения автоматически выполняется удаление существующих движений. Таким образом, при использовании стандартной методологии разработчику необходимо реализовать только формирование новых движений в обработчике ОбработкаПроведения() .
С другой стороны, отсутствие жестких ограничений на использование поля Проведен и процесса проведения позволяет реализовывать более сложные варианты поведения документа, в тех случаях, когда это необходимо. Например, может быть реализован документ, в котором часть движений формируется в процессе проведения, а часть вводится пользователем вручную.
Поле Проведен и процесс проведения имеют смысл для видов документов, которые вообще могут проводиться (у которых в метаданных свойство Проведение имеет значение Разрешить). Некоторые виды документов вообще не должны проводиться. У них в метаданных свойство Проведение имеет значение Запретить. Например, это могут быть документы, которые никак не влияют на учетные механизмы. Кроме того, не должны проводиться документы, которые предназначены для ручного ввода движений. Эти документы будут иметь движения, но для них не имеет смысла деление на проведенные и непроведенные, так как нет деления на исходную информацию и получаемую в процессе проведения, а вся информация (реквизиты и движения) заполняется в процессе ввода документа.
Заметим, что у документов, которые не должны проводиться, пиктограмма в списке документов больше похожа на пиктограмму проведенного документа. Это сделано потому, что пользователь в списке документов должен, прежде всего, отличать документы которые нужно проводить, а они еще не проведены. А документы, которые не нужно проводить и которые уже проведены, отличать не столь важно.
Есть документ, в нем ТабличнаяЧасть "Сотрудники" с реквизитами
Нужно при изменении реквизита, автоматически провести документ.
То в шапке документа появляется символ "*", значащий, что документ изменен, но не проведен, при чем при попытке в ручную его провести ругается на "Данные были изменены или удалены другим пользователем"
То в шапке документа так же появляется символ "*" и документ по прежнему не проведен, но
1) кривость - восстанавливается первоначальное значение реквизита
2) хотя бы - документ уже в ручную проводится
Так как же провести то этот документ?
__________________Помощь в написании контрольных, курсовых и дипломных работ здесь
Проведение документа программно при изменении реквизита ТЧ 1С 8.2
Здравствуйте Как сделать, чтобы при изменении реквизита (тип булево) в ТЧ документа, документ.
Получить значение реквизита документа при изменении. УФ.
Есть документ "Развозка", который имеет реквизиты: Номер Дата.
При изменении реквизита Группа ТЧ документа заполнить из ТЧ Справочника
Здравствуйте. Никак не могу разобраться с запросами 1С. У меня имеется справочник Группы с ТЧ.
При изменении строкового реквизита сформировать числовой реквизит
Есть справочник НДС. В нем 2 реквизита: наименование(строковое) и ставка(число). Нужно сделать так.
Расширение управляемой формы для документа (Managed form extension for documents)
Записать (Write)
Синтаксис:
Тип: Структура.
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный. Содержит предопределенные параметры записи РежимЗаписи и РежимПроведения. Предопределенные параметры передаются в метод объекта Записать.
Параметры записи можно обработать в событиях формы ПередЗаписью, ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи.
Возвращаемое значение:
Тип: Булево.
Истина - успешно записан; Ложь - в противном случае.
Описание:
Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Читайте также: