Не записывается документ 1с

Обновлено: 05.07.2024

Запись и проведение документа в форме

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

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

Установка даты документа

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

При записи нового документа в форме если свойство АвтоВремя имеет значение отличное от НеИспользовать , и не используется оперативное проведение, и время документа пустое (0:00:00), то выполняется автоматическая установка времени на основании значения свойства АвтоВремя . Действие расширения формы в этом случае аналогично вызову метода УстановитьВремя() с вариантом выбранном в свойстве АвтоВремя и с использованием журналов документа.

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

Установка режима записи

При нажатии кнопки " ОК ", если для документа в метаданных разрешено проведение, документ записывается в режиме проведения.

Кроме того, расширение формы предоставляет две отдельные команды для записи с проведением и записи с отменой проведения.

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

Установка режима оперативного проведения

При записи документа в форме, расширение формы выполняет установку режима проведения (оперативное или неоперативное проведение). Установка выполняется по следующему алгоритму.

Вначале если свойство ИспользоватьРежимПроведения имеет значение Авто выполняется первичный подбор режима проведения из вариантов Оперативный , Неоперативный и Запрашивать .

Если у пользователя нет права на неоперативное проведение – используется оперативное проведение.

Если документ не проведен – используется оперативное проведение.

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

Если дата документа меньше текущей, то используется неоперативное проведение.

Если дата документа равна текущей и время больше текущего – используется оперативное проведение.

Дальнейшие действия системы определяются уже исходя из трех вариантов ( Оперативный , Неоперативный и Запрашивать ) установленных непосредственно в свойстве ИспользоватьРежимПроведения или на основании описанного алгоритма для варианта Авто .

Если дата документа меньше текущей, используется оперативный режим и у пользователя есть права на неоперативное проведение, то пользователю предлагается использовать неоперативный режим. Если пользователь отказывается, то запись документа отменяется.

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

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

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

Далее если используется режим Запрашивать , то пользователю выдается диалог с выбором режима проведения.

Полученный таким образом режим проведения ( Оперативный или Неоперативный ) используется при выполнении записи документа.

Проверка прав

При открытии формы документа, если документ проведен, а у пользователя нет права "Интерактивное изменение проведенных", то расширение переводит форму в режим ТолькоПросмотр .

При записи документа в форме выполняется проверка прав на интерактивное проведение и интерактивную отмену проведения в соответствии с текущим режимом записи.

Считывание движений

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

При работе в онлайн-режиме иногда возникает ситуация, что документ Mobile SMARTS невозможно сохранить и (или) провести в информационной базе 1C.

Возможны два варианта данной проблемы:

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

Подробнее рассмотрим решение проблемы для второго случая, т.к. для первого при попытке проведения документа в ручном режиме 1С обычно явно указывает причину невозможности действия (это определяется настройками учета в конкретной информационной базе 1С).

Общие сведения

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

Все взаимодействие с базой 1С происходит через обращение к свойствам, методам объектов информационной базы, без какого-либо прямого доступа к базе данных.

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

Однако, возможны непрямые вызовы. Например, в 1С используется технология «подписки на события» — выполнение связанных процедур и функций 1С при наступлении некоторого события (например, записи документа). При этом возможно использование процедур и функций из общих модулей, которые недоступны во внешнем соединении, либо некоторые функции ведут себя по-разному при работе в режиме приложения и режиме внешнего соединения.

Таким образом, возникает исключительная ситуация: нормальный алгоритм работы нарушается, и документ не записывается/ не проводится.

В поддерживаемых типовых и прочих конфигурациях 1С бизнес-процессы Mobile SMARTS проверяются на такие ситуации, и, как правило, все действия, производимые при записи/ проведении документа, доступны во внешнем соединении. Бывают исключения, но обычно они устраняются в следующих релизах.

Однако, если в ИБ 1С имеются изменения, используются расширения, то измененные или добавленные объекты могут быть недоступны во внешнем соединении. И это приводит к ситуации, когда документ в интерактивном режиме (через обработку обмена) успешно записывается и (или) проводится, а при работе в онлайн-режиме происходит ошибка, и документ в базу 1С не попадает (при этом он остается на сервере Mobile SMARTS).

При этом, так как возникает цепочка исключений, к пользователю на ТСД поступает только информация о том, что документ не записан/не проведен в базу 1С, без уточнения подробностей.

Некоторые рекомендации по поиску и устранению проблемы

Из описания видно, что универсального решения проблемы со стороны Mobile SMARTS быть не может, т.к. она вызвана особенностями конфигурации 1С: Mobile SMARTS вызывает метод документа «Записать», а в ответ получает исключительную ситуацию.

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

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

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

Внимание! Изменение объектов основной конфигурации требует некоторых минимальных знаний и навыков!

Общая схема решения проблемы

  • найти объекты конфигурации 1С, которые недоступны во внешнем соединении, и сделать их доступными.
  • найти процедуры/ функции конфигурации 1С, которые по-разному работают в режиме приложения и внешнего соединения, и изменить их — напрямую, либо через расширение.

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

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


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

Поиск проблемных объектов

В первую очередь необходимо посмотреть записи журнала регистрации для события «КлеверенсТСД». В типовых конфигурациях реализуется через меню «Сервис», либо «Все функции»

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

Если конфигурация доработанная или есть расширения — все новые общие модули, у которых стоит флаг «Сервер», но не стоит «Внешнее соединение» могут быть источником ошибки.

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

В конфигураторе 1С нужно открыть обработку, указанную в настройках внешнего соединения в панели управления Mobile SMARTS:


Подключится к COM-процессу, запущенному Mobile SMARTS:


В момент завершения документа на ТСД вызывается функция модуля объекта обработки:

Непосредственно запись готового документа в базу 1С происходит в функции

Завершенный на ТСД документ в случае невозможности записи в 1С остается на сервере Mobile SMARTS, поэтому для повторной записи не нужно заново заполнять данные на ТСД, достаточно открыть и снова завершить документ Mobile SMARTS.

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

Методика отладки стандартная.

Если нужно, поставьте точку останова в начало функции

Но можно сразу в функции , на строках вида:

и на строках в блоках исключение, после строки

Так вы остановитесь в процессе отладки перед началом записи и в случае исключения.

Сначала выполняете строку записи документа через F10, и если при записи будет вызвано исключение, вы перейдете в блок «Исключение».

Получаете значение «ОписаниеОшибки», анализируете.

Если информации недостаточно, производим последовательный проход по всех вызовам.

Начиная со строки «Записать ()», последовательно «проваливаетесь» через F11 во все вызовы общих объектов и находите проблемный.

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

Частные рекомендации по известным ошибкам для конфигураций 1С

«Управление торговлей 11.4», «ERP: Управление предприятием», «Комплексная автоматизация»

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

В версии 13.51 данных конфигураций в свойствах общего модуля «РазборКодаМаркировкиИССлужебныйВызовСервера» необходимо проставить флаг «внешнее соединение» вручную.

Синхронизация с Битрикс24, Б24

Добавляется множество объектов с префиксом «СинхронизацияСБитрикс24_», «Б24_», у которых по умолчанию не установлен флаг «Внешнее соединение». Рекомендуется для всех объектов с флагом «Сервер» добавить также «Внешнее соединение».

Подсистема CRM

Аналогично предыдущему, множество общих модулей, префикс «CRM_», без флага «Внешнее соединение». Решение аналогично предыдущему.

Иногда внешне правильный код выполняется неверно, например сбрасывается ПривилегированныйРежим.

Пример: «Комплексная автоматизация», Модуль набора записей регистра сведений «РеестрДокументов»:

Эта процедура вызывается для любого документа, но при работе с внешним соединением привилегированный режим по каким-то причинам сбрасывается, и условие внутри процедуры выполняет отказ.

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

Управление небольшой фирмой 1.6

В типовой конфигурации 1С УНФ 1.6 нужно установить флаг «внешнее соединение» (если не установлен) для следующих общих модулей:

  • УправлениеНебольшойФирмойСобытия
  • УправлениеНебольшойФирмойСобытияПереопределяемый
  • РаботаСНоменклатуройКлиентСервер
  • РаботаСФормойДокумента
  • ОбменМобильноеПриложениеОбщее


При проведении одного документа изменить реквизит в другом документе и записать его
Прошу помощи с одной проблемой в 1С 8.2 Управляемое приложение Есть у меня документ.


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

Смена должности при проведении документа
Всем привет. Есть справочник Сотрудники с реквизитами (фио, должность, подразделение, график.

Перенести данные из Документа в Справочник при проведении
В документе Путевой лист из регистра накопления Спидометр выводятся данные о Конечном пробеге.

1. Процедура выбрана, где надо? (см. скрин), вообще для проведения используется процедура ОбработкаПроведения.

2. Внимательно читаем СП:

ЭтотОбъект (ThisObject)
Использование:
Только чтение.

Описание:
Тип: ДокументОбъект.
Содержит сам объект базы данных. Предназначено, в основном, для получения данного объекта встроенного языка в модуле объекта или модуле формы.

В модуле объекта обращайся к реквизитам не через ЭтотОбъект, а напрямую.

Еще конструктор движений есть. 2 клик по документу - движения, там кнопка. Посмотри, как он строит процедуру, делай так же.

s41_blizzard, на форме можно ПриЗаписи, ПередЗаписьюНаСервере и и т.д.
ОбработкаПроведения срабатывает после того, как в БД записан документ. Т.е. Данные физически уже в БД.

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

Добавлено через 2 минуты
я пытался этот код поместить не в модуль документа, а именно в модуль формы списка документа, там тоже не заработало

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