1с провести документ программно
Может кто знает как провести документ, что бы не инициализировать событие перед записью? Дело в том что в этом событии происходит вызов формы, а мне нужно провести документ внешней обработкой без получения каких либо форм на экране.
З.Ы. идеи типа изменить событие удалить форму не надо предлагать, т.к. вмешательства в конфу осуществить нельзя!
В модуле объекта:
(10) не понял, каким образом у тебя отрабатывает событие в модуле формы, если ты из внешней обработки записываешь документ?
(3) прошу прощения, запутался в окнах в 1сине, да событие в модуле документа, получается обойти никак не получится?
(14) еще раз пишу для непонятливых:
Во внешней обработке:
В модуле объекта ДОКУМЕНТА:
(11) при обмене устанавливается автоматом, но никто не мешает вставить установку флага в программу перед записью.
если писали не криворучки, то в подписке первым делом должно стоять отключение по этому флагу всех действий.
(11) и что? По сути это такое же доп. Свойство, но в отличие от от них, на него уже есть реакция в объектах типовых
Получится, если типовая и выставить обменданными.загрузка в истину в модуле обработки перед вызовом метода записать() объекта
(27) фига се, проверил сейчас, действительно истина.
Откуда у меня взялся стереотип, что программно это свойство не установить?
(33) мы не знаем. Объективных предпосылок для того чтобы так думать нет. Более того, например типовая обработка выгрузказагрузкаданныххмл82.епф, которая используется всеми для адресного восстановления объектов и записей регистров из бэкапов, дает выставить это свойство специально, чтобы не выполнялись проверки при записи при загрузке восстанавливаемого объекта
(36) а может вы лукавите и раньше (в другой платформе или релизе) ОбменДанными.Загрузка был доступен только для чтения?
(40) Нет. Более того, мне кажется что это свойство выставлялось всегда исключительно только программнр
(38) в обработчике перед записью, перед открытием вашей формы, должен быть код анализа, как в (16)
(41) нет, в случае обмена с использованием плана обмена оно выставляется движком
(50) те планы обменами, которые для этого документа отмечены без установленного значения Распределенная ИБ.
(52) Короче тут, такая история я не программист 1с, я в поддержке сижу знаю чуть больше других юзеров. и вот наши программисты внесли в конфу некторые изменения, после которых документ перестал создаваться через эту обработку из-за того, что они вызывают модально некоторую форму. я просто хочу 1с-ку изучить вот и решил попытаться обработку изменить, не трогая конфу.
(49) > Действие не может выполняться в режиме загрузки данных
Говорит о том, что что-то написано такое, что не поддерживается Когда свойство ОбменДанными.Загрузка установлено в значение Истина
+(57) Скорее всего это в конфигурации написано.
А проги, у которых ты учишься, натуральные копрокодеры. Ни один уважающий себя прог не станет модально открывать форму из процедуры ПриЗаписи() модуля объекта.
Таких увольнять сразу надо, если они с серьезными вещами работают.
(56) процедуру ПередЗаписью не смогу показать она очень огромная и тем более конфа далека от типовой.
документ я создаю следующим образом:
Если есть, то оно до открытия формы расположено?
(59) если при выполнении этого кода появляется модальное окно - то гнать этих недоделанных прогов студентов до самого заднего задищенво.
короче пишешь докладную и ссылку на эту ветку.
(59) зачем ты приводишь код в котором нет ошибки? Тебя ведь просили привести код при или перед записи, потому что именно там написано то .авно, которое портит тебе жизнь
(64) думаю, что у него следующее:
при установленном свойстве ОбменДанными=Истина не может открыться модальное окно той копрокодерской формы и вываливается ошибка "Действие не может выполняться в режиме загрузки данных "
(48) что?
А ты можешь привести пример хоть одного свойства которое вдруг перестает быть доступным для чтения в зависимости от такой эфемерной сущности как план обмена, его наличия и наличия хотя бы одного узла в таких планах обмена, и хотя бы приблизительную причину почему такое могли сделать разработчики?
(68) мне все покоя мысль не дает, откуда я взял, что это свойство только для чтения :)
(66) ты так говоришь, как будто это мы вынудили тебя создать топик на форуме в котором ты у нас спрашиваешь как решить твою проблему.
Нет, это не мы. По прежнему у тебя уже есть все предпосылки чтобы ее решить, ничего нового написано не будет, только перелив из пустого в не более полное
(66) ты на вопрос ответь, что я тебе задавал.
В той процедуре, где форма открывается, есть строка
Или что-то наподобие до открытия модальной формы?
отладчик проходит мимо той строки где та самая форма вызывалась, но дальше отладчик выловить сложно, т.к. он не хочет показывать верные строки (переходит к строке где код закомменчен). закончу читать гугль и почищу кеш
(69) но я то здоров, зачем ты мне пытаешься тогда навязать свою. Э. Anxiety?
Меня как раз это не беспокоит.
Как программно нажать Провести и Закрыть?
Получаю объект, вызываю операцию ОбработкаПроведения, но оно не получает поле ДополнительныеСвойства.ЭтоНовый - и не проводит.
Хотя, если зайти в документ и провести, то конечно проводит.
Стандартное перепроведение не подходит, и массово Отменить проведение/Провести тоже.
Платформа 8.3
Конфигурация УправлениеТорговлей 11.1
Поясните подробнее, можно с примером. Не очень понятно, что у вас не получается. Вы хотите вызвать экспортный метод ОбработкаПроведения() и НЕ хотите вызвать типовой метод Объект.Записать(РежимЗаписиДокумента.Проведение)?
В доп. свойства признак нового документа в типовых документах добавляется в обработчике ПередЗаписью(). Если использовать Объект.Записать(РежимЗаписиДокумента.Проведение), то все должно быть ОК.
(2) sommid, Это то, что есть. Программа перепроводит. Но мне нужно то ли оперативное проведение, не знаю, - если зайти в документ и нажать кнопку Провести и закрыть, тогда движения правильно формируются. А так - нет. Но, если я ставлю Ном.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный); - ругается на 2-й параметр
(3) ну не знаю.. может у вас в форме в обработчике ПередЗаписьюНаСервере() что-то подкидывается в ТекущийОбъект, что и влияет на последующее проведение. В остальном вроде не должно быть отличий. Смотрите отладчиком какие данные и почему в одном случае и почему другие в другом случае.
(3) melyssa, как мне видится, Вам не поможет оперативное проведение. Похоже, что в процедуре формы ПередЗаписью() что-то вычисляется и передается как параметр дальше. А эта процедура есть только на форме. Она не вызывается при Вашем программном проведение.
Наверное Вы имеете ввиду что-то типа такого ?
Форма = ДокументОбъект.ПолучитьФорму();
Форма.Открыть();
Форма.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение);
Форма.Закрыть();
(4) dubrovin,
: Ошибка при вызове метода контекста (ПолучитьФорму)
Форма = Объект.Документ.ПолучитьФорму();
по причине:
Интерактивные операции недоступны
А почему ж метод Записать не дает записать оперативно? Ругается на 2-й параметр.
Реквизит Документ - это ДокументСсылка.ВводОстатков
(8) melyssa, или дата документа больше текущей, или для документа стоит запрет оперативного проведения.
(10) spacecraft, понимаете, что меня смущает: если не заходить в документ и нажать Все функции - Отменить проведение, а потом Все функции - Провести, то оно проводит не так как надо. А если отменить проведение, зайти в документ и нажать Провести и закрыть - то правильно. Документы на самом деле старые, они не от сегодня. Но как мне сделать так, чтоб программно они перепровелись правильно, потому что их 3 тыс. шт. и перепроведение не помогает(
(12) melyssa, как-то так:
Asenka; Aleksandr55555; dance000; InJey; bananoed; mailrum2004; user777757; kn8603; alkar; dj_serega; melyssa; + 11 – Ответить
Создаю документ програмно, далее проожу:
Док.Записать(РежимЗаписиДокумента.Проведение);
Но такой способ только записывает документ с установкой флага проведено в истину.
А мне нужны движения в рег. накопления. Конечно можно прописать движения по рег. в процедуре программного создания, а нельзя ли как-то проще?
Вообще то должно все проводится нормально. И движения должны делаться.
Если все правильно с формирование движений.
(2) x2z7yy,
"Если все правильно с формирование движений" - конфигурация типовая УТ и все движения документа прописаны в модуле док. Есть ли необходимость прописывать движения еще раз в том месте где документ создается програмно?
(3) alw-1,
При записи документа в режиме проведения, из модуля документа автоматически вызываются необходимые процедуры. Например "ОбработкаПроведения()".
(4) Абсолютно прав на счет контекстного меню.
попробуйте поставить точку остановки в обработке проведения документа и посмотреть отрабатывает ли вообще код этой процедуры.
Возможно какой то из реквизитов не заполнен?
От этого тоже зависит, какие движения будут сделаны, а какие - нет.
(8) Psylocibine,
У меня УТ , если что-то не заполнено то сразу выскакивает ошибка, но ее нет.Просто не двигает регистр и все.(9) PetrPervuy,
Ну я и переписывал. Только ничего на тему запрета проведения.
Кстати, док того же типа созданный вручную регистр двигает. Созданные програмно нет(как через комнду Записать(. ), так и при ручном проведении. У меня УТ 10 ,понятно ,что ошибка в какой-то проверке но ответа не нахожу,запускал отладчик но в типовой что то найти не просто. если кто-то сталкиваля с чем-то конкретным, то подскажите.
(10) alw-1,
Как правило ошибка о незаполненности реквизита только в форме.
При программном создании документа никакие проверки описанные в форме не вызываются.
Отсутствие движений в документе созданном программно похоже на отсутствие информации для этих движений.
При ручном создании, скорее всего, в форме заполняются некоторые реквизиты "по умолчанию", при открытии формы. Когда Вы создаете документ программно, возможно не заполняете какой-то реквизит.
попробуйте такой алгоритм:
Этот код равнозначен ручному созданию/проведению.
Либо напишет ошибку какой реквизит не заполнен - тогда исправите первоначальный код,
Либо проведется и создаст проводки - тогда посмотрите под отладчиком - какой реквизит форма заполняет "по умолчанию".
Запись и проведение документа в форме
Для понимания особенностей записи и проведения документа в форме следует, прежде всего, разделять особенности записи самого объекта ( ДокументОбъект ) и особенности работы расширения формы. Расширение формы документа действует, если основной реквизит формы имеет тип ДокументОбъект . Оно обеспечивает специфическую функциональность формы при редактировании и записи документа. Задача расширения заключается в реализации удобного для пользователя поведения формы. Но собственно запись и проведение документа выполняет, разумеется, объект, являющийся реквизитом формы. Расширение документа обрабатывает различные команды пользователя, выполняет предварительные проверки и другие сервисные действия, а затем вызывает запись объекта. Запись объекта выполняется так же, как и если бы она вызывалась средствами встроенного языка. То есть с точки зрения объекта запись в форме и запись средствами языка ничем не различаются. Таким образом, расширение обеспечивает некоторую сервисную функциональность, обращаясь в конечном итоге к функциональности объекта. Следует учитывать, что расширение формы действует, только если используются механизмы формы и не действует, если выполняется обращение непосредственно к объекту. Например, если вызвать метод Записать() у объекта ДокументОбъект , то никакие действия расширения формы не будут выполняться. Чтобы они выполнялись нужно вызывать метод ЗаписатьВФорме() .
Далее мы рассмотрим те сервисные действия, которые обеспечивает расширение формы документа. В данном разделе, мы опишем только те действия, которые специфичны именно для расширения формы документа и не будем касаться общих действий, которые поддерживаются расширениями всех объектов.
Установка даты документа
При открытии формы нового документа, если дата документа не установлена (равна значению типа Дата по умолчанию), то документу устанавливается рабочая дата. Следует заметить, что используется именно рабочая дата, а не текущая (если не установлено использование текущей даты в качестве рабочей). Это дает возможность пользователю настроить рабочую дату так, чтобы новые документы вводились определенной датой. При этом в качестве даты устанавливается начало дня (дата без времени), даже если в качестве рабочей даты выступает текущая дата. Но если свойство АвтоВремя имеет значение НеИспользовать , и рабочая дата равна текущей, то устанавливается текущая дата, вместе со временем. Таким образом, для варианта АвтоВремя = НеИспользовать при открытии берется рабочая дата (если она отличается от текущей) или текущая дата вместе со временем, а для остальных вариантов установка времени откладывается на момент записи документа.
При записи нового документа в форме если свойство АвтоВремя имеет значение отличное от НеИспользовать , и не используется оперативное проведение, и время документа пустое (0:00:00), то выполняется автоматическая установка времени на основании значения свойства АвтоВремя . Действие расширения формы в этом случае аналогично вызову метода УстановитьВремя() с вариантом выбранном в свойстве АвтоВремя и с использованием журналов документа.
Расширение формы так же предоставляет команды для установки времени документа в начало дня, конец дня, перед предыдущим и за последующим документом.
Установка режима записи
При нажатии кнопки " ОК ", если для документа в метаданных разрешено проведение, документ записывается в режиме проведения.
Кроме того, расширение формы предоставляет две отдельные команды для записи с проведением и записи с отменой проведения.
При любой записи документа в форме, если установлено свойство расширения формы ПриЗаписиПерепроводить и документ проведен, то выполняется запись в режиме проведения. Это позволяет исключить ситуацию, когда пользователь изменит документ, а движения документа не будут обновлены.
Установка режима оперативного проведения
При записи документа в форме, расширение формы выполняет установку режима проведения (оперативное или неоперативное проведение). Установка выполняется по следующему алгоритму.
Вначале если свойство ИспользоватьРежимПроведения имеет значение Авто выполняется первичный подбор режима проведения из вариантов Оперативный , Неоперативный и Запрашивать .
Если у пользователя нет права на неоперативное проведение – используется оперативное проведение.
Если документ не проведен – используется оперативное проведение.
Если дата документа равна текущей, а время меньше или равно текущему, то используется режим Запрашивать . Здесь и далее в этой статье сравнение даты имеется в виду без учета времени, а сравнение времени описывается отдельно.
Если дата документа меньше текущей, то используется неоперативное проведение.
Если дата документа равна текущей и время больше текущего – используется оперативное проведение.
Дальнейшие действия системы определяются уже исходя из трех вариантов ( Оперативный , Неоперативный и Запрашивать ) установленных непосредственно в свойстве ИспользоватьРежимПроведения или на основании описанного алгоритма для варианта Авто .
Если дата документа меньше текущей, используется оперативный режим и у пользователя есть права на неоперативное проведение, то пользователю предлагается использовать неоперативный режим. Если пользователь отказывается, то запись документа отменяется.
Если дата документа меньше текущей, используется оперативный режим и у пользователя нет права на неоперативное проведение, то запись документа отменяется.
Если дата документа меньше текущей и используется режим Запрашивать , то в зависимости от наличия прав на неоперативное проведение или выбирается неоперативный режим (без запроса пользователя), или запись документа отменяется.
Если дата документа больше текущей и используется оперативный режим, то запись документа отменяется. Штатное поведение расширения формы не разрешает проведение документа завтрашней датой, даже если у пользователя есть права на неоперативное проведение. Это объясняется тем, что после появления документов проведенных завтрашней датой текущие остатки регистров используемых проводимыми оперативно документами перестают соответствовать реальным остаткам и механизм оперативного проведения для всех пользователей перестает работать адекватно.
Далее если используется режим Запрашивать , то пользователю выдается диалог с выбором режима проведения.
Полученный таким образом режим проведения ( Оперативный или Неоперативный ) используется при выполнении записи документа.
Проверка прав
При открытии формы документа, если документ проведен, а у пользователя нет права "Интерактивное изменение проведенных", то расширение переводит форму в режим ТолькоПросмотр .
При записи документа в форме выполняется проверка прав на интерактивное проведение и интерактивную отмену проведения в соответствии с текущим режимом записи.
Считывание движений
При открытии формы документа, если есть табличные поля, связанные с движениями (наборами записей) объекта редактируемого в форме, то эти движения считываются из базы данных и соответственно отображаются в табличных полях.
Заливкой выделены события, выполняющиеся в транзакции записи.
Последовательность событий при проведении документа из формы документа (провести и закрыть)
Заливкой выделены события, выполняющиеся в транзакции записи.
Последовательность событий при отмене проведения документа из формы документа
Заливкой выделены события, выполняющиеся в транзакции записи.
Обработчики событий
Расширение управляемой формы для документа. Возникает на клиенте перед выполнением записи объекта из формы. Процедура-обработчик данного события вызывается перед вызовом процедуры-обработчика события ПередЗаписью .
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения». Параметр РежимПроведения может отсутствовать, если режим проведения в документе не определен.
Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере .
Расширение управляемой формы для документа. Вызывается перед записью объекта на сервере. Можно отменить запись. Выполняется вне транзакции.
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
- ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый объект.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа.
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
- РежимЗаписи , тип РежимЗаписиДокумента . В параметр передается текущий режим записи документа. Позволяет определить в теле процедуры режим записи. Изменение значения параметра позволяет изменить режим записи.
- РежимПроведения , тип РежимПроведенияДокумента . В данный параметр передается текущий режим проведения. Изменение значения параметра позволяет изменить режим проведения.
Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.
- Отказ , тип Булево . Признак отказа от записи документа. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись документа выполнена не будет. Значение по умолчанию: Ложь .
Расширение управляемой формы для документа. Возникает на сервере при записи объекта из формы. Процедура-обработчик вызывается после записи объекта (после события ПриЗаписи объекта) в базу данных, но до окончания транзакции записи.
- Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись произведена не будет. Значение по умолчанию: Ложь .
- ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый документ.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Расширение управляемой формы для документа. Вызывается после записи объекта на сервере и после завершения транзакции.
- ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый объект.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Расширение управляемой формы для документа. Возникает на сервере после записи объекта и после окончания транзакции записи, то есть к моменту вызова этой процедуры запись объекта полностью завершена.
- ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».
Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере .
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Читайте также: