Как в 1с открыть ссылку на документ
В статье будет описано, как в 1с открыть ссылку на документ, справочник и т.д. В данном случае имеется в виду открытие формы объекта, используя ссылку на него. Рассмотрим три способа решения поставленной задачи.
Открыть ссылку используя ПоказатьЗначение
Самый простой способ, использовать метод глобального контекста ПоказатьЗначение. Который показывает в диалоге значение переданное в параметре.
В параметр Значение передадим ссылку, которую необходимо открыть. Данный метод является ассинхронным, т.е. не ожидает закрытие указанного значения. Для целей ожидания и обработки закрытого значения, в процедуре существует первый параметр. Но для нашей задачи он не нужен и указывать его не следует.
Таким образом открытие ссылки будет выглядеть следующим образом:
Если в вашей конфигурации разрешено открытие модальных окон (Свойства конфигурации -> Режим использования модальности, принимает значения Использовать или Использовать с предупреждениями), то можно использовать метод ОткрытьЗначение.
Открытие формы по ссылке
Также в 1с открыть ссылку можно при помощи метода ОткрытьФорму. Этот способ более сложен в реализации, но зато универсален. У него довольно много параметров, но для данной задачи нас интересуют первые два.
ИмяФормы — в параметре следует указать полный путь к форме, которую вы собираетесь открыть.
Пример 1. Можно указать форму, которая является формой объекта по умолчанию:
Пример 2. Либо указать имя конкретной формы, которую вы хотите открыть. Если, например, форм объекта несколько.
Параметры — структура параметров, которая передается в форму. Набор параметров разработчик выбирает сам, исходя их своих целей. Но некоторые параметры являются стандартными и используются для конкретных целей. Например, параметр Ключ, используется для указания платформе, форму какого объекта следует открыть (если Ключ, не указан, то будет открыта форма нового объекта). Таким образом в данный параметр необходимо передать ссылку на открываемый объект.
Пример 3. Открыть форму объекта для документа Поступление товаров.
Получить более подробную информацию по методу ОткрытьФорму можно в статье Как в 1с открыть форму программно
Открытие формы по навигационной ссылке
Если у вас есть навигационная ссылка на документ или справочник, перейти по ней и открыть форму объекта можно, используя метод ПерейтиПоНавигационнойСсылке.
Также навигационную ссылку можно получить из обычной ссылки. Для этого используется метод ПолучитьНавигационнуюСсылку.
В параметр Объект, в том числе, можно передать ссылку на документ или справочник.
Пример 5. Получить навигационную ссылку, используя обычную ссылку и открыть форму объекта.
Работа с объектами типа «Документ»
Документ — одно из основных понятий системы «1С:Предприятие». При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также её просмотр и, если необходимо, корректировка.
Структура каждого конкретного вида документа определяется при его создании в Конфигураторе. У любого вида документа существует два обязательных реквизита, которые создаются автоматически — дата и номер документа. Другие реквизиты документа определяются в Конфигураторе конкретно для каждого создаваемого вида документа.
В документах выделяются две основные структурные части: шапка документа и многострочная табличная часть, поэтому реквизиты документа подразделяются на реквизиты шапки и реквизиты табличной части.

В шапке содержатся реквизиты, которые являются общими для всего документа, и принадлежат всему документу в целом. Они принимают только одно значение.
Многострочная (табличная) часть документа представляет собой список однотипных строк, и реквизиты табличной части принадлежат строкам документа. Поэтому каждая строка содержит свои собственные значения этих реквизитов.
Рассмотрим основные моменты работы с объектами типа » Документ » :
Контекст работы с документами
В синтаксисе языка доступ к атрибутам и вызов методов документов зависит от контекста выполнения программного модуля. Если конкретный документ входит (согласно локального контекста) в набор непосредственно доступных модулю значений агрегатных типов данных, то доступ к атрибуту, вызов метода для этого документа – просто имя этого атрибута, метода с указанием необходимых параметров.
Например, в форме редактирования документа «Накладная» мы имеем непосредственный доступ к текущему документу, а значит, чтобы изменить некоторые его реквизиты, можем записать следующие операторы присваивания:
Если значение документа получено и из других источников, например, как значение реквизита текущего документа, обращение к атрибутам и методам связанного документа представляет собой сложное выражение, где имена реквизитов перечисляются через точку. Например, если у текущего документа «СчетФактура» есть реквизит ДокументОснование , получить номер накладной, на основании которой был создан счет-фактура, можно следующим образом:
Во всех других случаях доступ к атрибутам и вызов методов конкретного документа происходит при помощи переменной со ссылкой на объект типа » Документ » . Объект создаётся функцией СоздатьОбъект() , а ссылка на него присваивается переменной. Чтобы вызвать атрибут или метод объекта, имя этого атрибута или метода (с указанием необходимых параметров) пишется через точку после имени этой переменной.
При создании переменной со ссылкой на объект типа » Документ » в качестве параметра функции СоздатьОбъект() передаётся полное имя вида документа, состоящее из идентификатора вида документа, записанного через точку после ключевого слова «Документ» (англоязычный синоним — «Document»).
Использование в качестве параметра ключевого слова «Документ» без указания вида документа применяется для организации доступа ко всему перечню документов, описанных в конфигурации, независимо от их вида (см. пример ниже). В этом случае методы ВыбратьДокументы() и ПолучитьДокумент() будут обрабатывать документы всех видов. Однако для переменных, созданных таким вызовом функции СоздатьОбъект() , будут недоступны процедуры поиска, выбора документа из диалога, ввода нового документа, которые подразумевают конкретный вид документа.
Примечание: Следует обратить особое внимание, что переменная типа » Документ » , созданная функцией СоздатьОбъект() — это ссылка на список документов в отличие от переменных содержащих само значение объекта. Использование ссылки на список документов существенно отличается от работы со значением типа » Документ » . Только при работе со ссылкой на список документов разрешено изменять позицию текущего элемента в списке (то есть осуществлять позиционирование по списку документов), создавать новые, изменять и удалять существующие документы. С другой стороны, ссылка на список документов не содержит собственно значения конкретного документа, которое можно присвоить чему-либо. Однако, его всегда можно получить, используя метод ТекущийДокумент() .
Объект, созданный при помощи функции СоздатьОбъект() , изначально не определён, то есть не содержит никакого значения. Чтобы начать с ним работать, его предварительно надо спозиционировать (установить на конкретный документ) при помощи методов НайтиДокумент() , НайтиПоНомеру() , ПолучитьДокумент() и т.п.
Позиция документа
Все документы в системе «1С:Предприятие» располагаются на временной оси. Основными характеристиками расположения документа на временной оси являются дата и время документа. Дата документа доступна через атрибут ДатаДок , а работа со временем документа может осуществляться при помощи методов УстановитьВремя() , ПолучитьВремя() , а также предопределённой процедуры ПриИзмененииВремениДокумента() .
Но помимо даты и времени в системе «1С:Предприятие» существует также понятие позиции документа. Позиция документа — это строковое значение специального формата длиной 32 символа, которое однозначно характеризует расположение документа на оси времени относительно других документов. Позиция документа заключает в себе и дату, и время (с точностью до секунды), плюс некоторые дополнительные данные, определяющие взаимное расположение документов в пределах одной секунды.
Позиции документов можно сравнивать, сортировать по возрастанию или по убыванию. Многие методы могут воспринимать позицию документа в качестве параметра. Для получения позиции документа служит метод ПолучитьПозицию() .
Системные функции для работы с позицией документа
Кроме методов объекта » Документ » , о которых речь пойдёт позже, для работы с позицией документа в системе «1С:Предприятие» предусмотрены две системных функции: РазобратьПозициюДокумента() и СформироватьПозициюДокумента() .
Разложить позицию документа на составляющие и получить её строковое представление позволяет системная функция РазобратьПозициюДокумента() (англоязычный синоним — SplitDocPosition ). Возвращаемым значением функции будет строка вида » 12.07.98 12:57:14 ПрихНакл 24 » .
- < Позиция > — значение позиции документа, которое необходимо разложить;
- < Дата > — необязательный параметр. Имя переменной, куда система вернёт значение даты позиции документа;
- < Ч > — необязательный параметр. Имя переменной, куда система вернёт числовое значение часа позиции документа;
- < М > — необязательный параметр. Имя переменной, куда система вернёт числовое значение минуты позиции документа;
- < С > — необязательный параметр. Имя переменной, куда система вернёт числовое значение секунды позиции документа;
- < Док > — необязательный параметр. Имя переменной, куда система вернёт значение документа, находящегося в данной позиции.
Пример использования функции:
Сформировать позицию документа согласно переданным параметрам позволяет системная функция СформироватьПозициюДокумента() (англоязычный синоним — MakeDocPosition ). Возвращаемым значением функции является строковое значение — сформированная позиция документа.
У функции предусмотрено два синтаксиса:
- < Докум > — значение документа, позиция которого определяется, или сама позиция;
- < ФлагСмещения > — необязательный параметр. Число: −1 (минус единица) — предыдущая позиция; 1 —следующая позиция; 0 — текущая позиция (значение по умолчанию). Использование данного параметра позволяет получить предыдущую или последующую позицию от уже имеющейся позиции;
- < Дата > — значение типа » Дата » , на которую формируется позиция документа;
- < Час > – значение типа » Число » , которое определяет час, на который формируется позиция документа;
- < Мин > — значение типа » Число » , которое определяет минуту, на которую формируется позиция документа;
- < Сек > — значение типа » Число » , которое определяет секунду, на которую формируется позиция документа;
- < КонецСекунды > — необязательный параметр. Число: 1 — позиция будет браться от следующей секунды; 0 — позиция от указанной секунды (значение по умолчанию).
Пример использования функции:
Атрибуты документов
Получить или задать значение номера выбранного документа позволяет атрибут НомерДок (англоязычный синоним — DocNum ).
Получить или задать значение даты выбранного документа позволяет атрибут ДатаДок (англоязычный синоним — DocDate ).
Задать или получить значение реквизита текущего документа позволяет атрибут <ИмяРеквизита> . В тексте программного модуля в качестве имени реквизита используется идентификатор конкретного реквизита.
Кстати, реквизиты многострочной части документа в программном коде имеют смысл только при выбранной строке многострочной части документа.
Пример использования атрибутов:
Получить или задать числовое значение номера текущей строки многострочной части выбранного документа позволяет атрибут НомерСтроки (англоязычный синоним — LineNum ). Данный атрибут имеет смысл только при выбранной строке. Присвоение строке нового номера передвигает строку в многострочной части документа.
Обращаться к атрибутам и методам операции документа позволяет атрибут Операция (англоязычный синоним — Operation ). Данный атрибут может использоваться только в том случае, если установлена компонента «Бухгалтерский учет» и только для тех видов документов, для которых в конфигурации установлен признак «Бухгалтерский учет».
Методы документов
Общие методы
Получить название (идентификатор) вида документа позволяет метод Вид() (англоязычный синоним — Kind() ). Параметры у метода отсутствуют. Возвращаемым значением будет строка — идентификатор вида документа.
Получить представление вида документа , как оно задано в Конфигураторе, позволяет метод ПредставлениеВида() (англоязычный синоним — KindPresent() ). Параметры у метода отсутствуют. Возвращаемым значением метода является строковое значение, содержащее пользовательское представление вида документа (синоним документа или, если он не указан, то идентификатор).
Методы для создания, проведения и удаления документов
Инициализировать создание нового документа позволяет метод Новый() (англоязычный синоним — New() ). Собственно запись нового документа в информационную базу происходит только при вызове метода Записать() . После инициализации создания нового документа, как правило, производится заполнение его реквизитов и только после этого вызывается метод Записать() . Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных с помощью функции СоздатьОбъект() .
Выполнить запись в базу данных текущего нового или изменённого документа позволяет метод Записать() (англоязычный синоним — Write() ). Параметры у метода отсутствуют.
Примечание: Если метод Записать() применяется в Модуле формы документа непосредственно к документу локального контекста, то отрабатываются те же действия, как и при интерактивном нажатии пользователем кнопки с формулой » #Записать » .
Пример использования метода:
Удалить или пометить на удаление текущий документ позволяет метод Удалить() (англоязычный синоним — Delete() ). Метод может использоваться только для объектов, созданных с помощью функции СоздатьОбъект() . Его разрешено применять только для тех документов, которые либо не проведены, либо лежат за точкой ТА, то есть предполагается, что ТА предварительно интерактивно сдвинули назад.
Примечание: Непосредственное удаление объекта следует применять очень аккуратно, так как это действие может нарушить ссылочную целостность информации. Данный режим не рекомендуется использовать, если на данный объект могут быть ссылки в других объектах, например, в реквизитах существующих документов.
где < Режим > — числовое выражение. Возможные значения: 1 — непосредственное удаление; 0 — пометка на удаление. Параметр является необязательным. Значение по умолчанию — 1.
Снять пометку удаления c текущего документа позволяет метод СнятьПометкуУдаления() (англоязычный синоним — ClearDeleteMark() ). Метод может использоваться только для объектов, созданных с помощью функции СоздатьОбъект() . Параметры у метода отсутствуют.
Запустить процедуру проведения документа позволяет метод Провести() (англоязычный синоним — MakeActions() ). Возвращаемым значением метода является число 1, если проведение документа завершено успешно, или 0, если проведение документа не выполнено. Возвращаемое значение метода можно использовать, например, в качестве условия принятия решения при завершении обработки транзакции.
- < Режим > — числовое выражение. Возможные значения: 0 — проводить документ без сдвига ТА; 1 — проводить непроведённый документ реальным временем (со сдвигом ТА); 2 — перепроводить проведённый документ реальным временем (со сдвигом ТА); 3 — проводить любой (непроведённый, проведённый) документ реальным временем (со сдвигом ТА). Параметр является необязательным. Значение по умолчанию — 0;
- < 3нач > — выражение произвольного типа. Значение данного параметра будет передано системой в качестве параметра при запуске предопределённой процедуры ОбработкаПроведения() . Использовать данное значение можно, например, для того, чтобы в процедуре ОбработкаПроведения() правильно отработать режим проведения, так как это программный, а не интерактивный и не групповой способ проведения. Параметр является необязательным. По умолчанию передаётся пустое значение.
Примечание: Параметр < Режим > устанавливает режим проведения документа после ТА. Этот параметр относится к случаю проведения документа в пределах даты, в которой находится ТА. Дело в том, что при записи документа, документ кроме даты получает ещё и время документа. В многопользовательском режиме часто возникает ситуация, когда в момент проведения документа, он уже оказывается не последним в потоке проводимых документов (провели документ с другого рабочего места), в этом случае система «1С:Предприятие» даёт на выбор два варианта проведения:
- провести документ тем временем, каким он был записан, то есть фактически задним временем (до ТА);
- изменить время документа в рамках текущей даты, чтобы документ стал самым последним и проводился в потоке, то есть в ТА.
Примечание: Метод Провести() нельзя использовать в теле предопределённой процедуры модуля документа ОбработкаПроведения() !
Если метод применяется в Модуле формы документа непосредственно к документу локального контекста, то он отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой » #Провести » . В этом случае, если параметр < Режим > опущен, то документ проводится в режиме, соответствующем установкам системы (меню « Сервис -> Параметры »).
Отменить проведение документа позволяет метод СделатьНеПроведенным() (англоязычный синоним — UnPost() ). Метод может использоваться только для объектов, созданных при помощи функции СоздатьОбъект() . Его использование в теле предопределённой процедуры ОбработкаПроведения() является недопустимым. Параметры у метода отсутствуют.
Методы для поиска и выбора конкретного документа
Выполнить поиск документа по значению, заданному в параметре , позволяет метод НайтиДокумент() (англоязычный синоним — FindDocument() ). Данный метод используется для позиционирования объекта, созданного при помощи функции СоздатьОбъект() , на конкретный документ. Возвращаемым значением метода является число 1, если действие выполнено (документ найден), или 0, если действие не выполнено.
где < Документ > — выражение, содержащее значение типа » Документ » .
Выполнить поиск документа по номеру, указанному в параметре , позволяет метод НайтиПоНомеру() (англоязычный синоним — FindByNum() ). Данный метод используется для позиционирования объекта, созданного при помощи функции СоздатьОбъект() , на конкретный документ. Возвращаемым значением метода является число 1, если действие выполнено (документ найден), или 0, если действие не выполнено.
- < Номер > — строковое выражение, содержащее значение номера искомого документа;
- < Дата > — выражение типа » Дата » , определяющее диапазона, в котором нужно искать документ с данным номером. Поиск зависит от выбранного в Конфигураторе способа уникальности номеров (по месяцу, году и др.);
- < ИдентВида > — строковое выражение, содержащее идентификатор вида документа или идентификатор нумератора. Параметр является необязательным и используется только для объекта » Документ » общего вида.
Вызвать диалоговое окно для выбора конкретного документа позволяет метод Выбрать() (англоязычный синоним — Choose() ). Возвращаемым значением метода является число 1, если документ выбран, или 0, если документ не выбран. Использоваться данный метод может только для объектов, созданных с помощью функции СоздатьОбъект() .
- < Подсказка > — текст заголовка окна диалога ввода. Может использоваться в качестве подсказки конечному пользователю;
- < ФормаЖурнала > — строковое выражение, содержащее идентификатор той формы журнала документов, которая должна использоваться для выбора. Если это значение пустое, то используется форма журнала по умолчанию. Указывать имя журнала можно в следующем виде:
- » Журнал.ХХХХ » , где ХХХХ — имя вида соответствующего объекта;
- » Журнал.Подчиненные » ;
- » ЖурналОпераций » ;
- » ЖурналОпераций.YYYY » , где YYYY — имя формы журнала операций, как оно задано в Конфигураторе;
Пример использования метода:
Вид вызываемого диалогового окна:

Проверить факт выбора (позиционирования) объекта типа » Документ » позволяет метод Выбран() (англоязычный синоним — Selected() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если документ выбран, или 0, если документ не выбран.
Методы для циклической обработки документов
Открыть выборку документов в указанном интервале позволяет метод ВыбратьДокументы() (англоязычный синоним — SelectDocuments() ). Метод может использоваться только для объектов, созданных с помощью функции СоздатьОбъект() . Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы один документ, или 0, если действие не выполнено или в выборке нет ни одного документа. Непосредственно сама выборка осуществляется при помощи метода ПолучитьДокумент() в порядке возрастания даты и времени записи документов (если не задан обратный порядок методом ОбратныйПорядок() ).
- < НачалоВыборки > — выражение типа » Дата » , документ или позиция документа, с которого устанавливается начало выборки документов. Параметр является необязательным. Если параметр опущен, то выборка начинается с самого первого существующего в системе документа;
- < КонецВыборки > — выражение типа » Дата » , документ или позиция документа, на котором устанавливается конец выборки документов. Параметр является необязательным. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.
Открыть выборку всех документов, подчинённых заданному документу , в указанном интервале позволяет метод ВыбратьПодчиненныеДокументы() (англоязычный синоним — SelectChildDocs() ). Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы один документ, или 0, если действие не выполнено или в выборке нет ни одного документа. Непосредственно сама выборка осуществляется при помощи метода ПолучитьДокумент() в порядке возрастания даты и времени записи документов (если не используется метод ОбратныйПорядок() ).
- < НачалоВыборки > — выражение типа » Дата » , документ или позиция документа, с которого устанавливается начало выборки документов. Параметр является необязательным. Если параметр опущен, то выборка начинается с самого первого существующего в системе документа;
- < КонецВыборки > — выражение типа » Дата » , документ или позиция документа, на котором устанавливается конец выборки документов. Параметр является необязательным. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом;
- < ДокВлад > — выражение типа » Документ » , содержащее значение документа-владельца, подчинённые которому будут включаться в выборку.
Открыть выборку документов в указанном интервале, для которых реквизит отбора имеет конкретное заданное значение , позволяет метод ВыбратьПоЗначению() (англоязычный синоним — SelectByValue() ). Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы один документ, или 0, если действие не выполнено или в выборке нет ни одного документа. Непосредственно сама выборка осуществляется при помощи метода ПолучитьДокумент() в порядке возрастания даты и времени записи документов, если только не используется метод ОбратныйПорядок() .
- < НачалоВыборки > — выражение типа » Дата » , документ или позиция документа, с которого устанавливается начало выборки документов. Параметр является необязательным. Если параметр опущен, то выборка начинается с самого первого существующего в системе документа;
- < КонецВыборки > — выражение типа » Дата » , документ или позиция документа, на котором устанавливается конец выборки документов. Параметр является необязательным. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом;
- < ИмяОтбора > — строковое выражение, которое содержит либо название общего реквизита документов, либо название графы отбора журналов, как они заданы в Конфигураторе;
- < 3нач > — значение отбора, по которому строится выборка документов.
Открыть выборку всех документов с данным номером одного вида или одного нумератора позволяет метод ВыбратьПоНомеру() (англоязычный синоним — SelectByNum() ). Метод может использоваться только для объектов, созданных при помощи функции СоздатьОбъект() . Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы один документ, или 0, если действие не выполнено или в выборке нет ни одного документа. Непосредственно сама выборка осуществляется при помощи метода ПолучитьДокумент() в порядке возрастания даты и времени записи документов (если не задан обратный порядок методом ОбратныйПорядок() ).
- < Номер > — строковое выражение, содержащее значение номера искомых документов;
- < Дата > — выражение типа » Дата » , определяющее диапазона, в котором нужно искать документ с данным номером. Поиск зависит от выбранного в Конфигураторе способа уникальности номеров (по месяцу, году и др.);
- < ИдентВида > — строковое выражение, содержащее идентификатор вида документа или идентификатор нумератора. Параметр является необязательным и используется только для объектов » Документ » общего вида.
Открыть выборку документов по заданной последовательности позволяет метод ВыбратьПоПоследовательности() (англоязычный синоним — SelectBySequence() ). Метод может использоваться только для объектов, созданных при помощи функции СоздатьОбъект() . Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы один документ, или 0, если действие не выполнено или в выборке нет ни одного документа. Непосредственно сама выборка осуществляется при помощи метода ПолучитьДокумент() в порядке возрастания даты и времени записи документов (если не задан обратный порядок методом ОбратныйПорядок() ).
- < НачПериода > — выражение типа » Дата » , документ или позиция документа, с которого устанавливается начало выборки документов. Параметр является необязательным. Если данный параметр опущен, то выборка начинается с самого первого существующего в системе документа;
- < КонПериода > — выражение типа » Дата » , документ или позиция документа, на котором устанавливается конец выборки документов. Параметр является необязательным. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом;
- < Послед > — строковое выражение, содержащее идентификатор используемой последовательности.
Выбрать следующий документ в последовательности выборки , открытой при помощи метода ВыбратьДокументы() или ему подобных, позволяет метод ПолучитьДокумент() (англоязычный синоним — GetDocument() ). Возвращаемым значением метода является числовое значение: 1 — если следующий документ выбран успешно; 0 — если документ не найден (достигнут конец выборки). Параметры у метода отсутствуют.
Получить значение позиционированного текущего документа (в целом, как объекта) позволяет метод ТекущийДокумент() (англоязычный синоним — CurrentDocument() ). Данный метод применяется, например, если нужно документ передать как параметр в вызове какого-либо метода или присвоить какому-либо реквизиту. Параметры у метода отсутствуют.
Методы управления выбором документов
Установить выбираемые виды для объекта-документа неопределённого вида позволяет метод ВидыДляВыбора() (англоязычный синоним — KindsForChoice() ). Данный метод обычно используется до начала позиционирования документа, например, при помощи метода Выбрать() . Возвращаемым значением метода является строковое значение, содержащее текущий (на момент до исполнения метода) список видов выбираемых документов, разделённых запятыми.
Данный метод может использоваться только для объектов типа » Документ » неопределённого вида — либо созданных функцией СоздатьОбъект() , либо определённых в Конфигураторе как реквизиты диалога или другого объекта. Если метод ВидыДляВыбора() применён к реквизиту диалога типа » Документ » неопределённого вида, то интерактивный выбор будет производиться только среди установленных видов документов.
где < СписокВидов > — строковое выражение содержащее список видов выбираемых документов, разделённых запятыми. Параметр является необязательным.
Установить порядок выборки документов позволяет метод ОбратныйПорядок() (англоязычный синоним — BackwardOrder() ). Метод может использоваться только для объектов, созданных при помощи функции СоздатьОбъект() . Возвращаемым значением метода является текущее значение порядка выборки документов (на момент до его исполнения): 1 — обратный порядок выборки; 0 — выборка документов в порядке возрастания даты и времени записи документов.
Обычно данный метод используется до вызова метода ВыбратьДокументы() и других подобных, открывающих выборку. Поскольку по умолчанию выборка документов выполняется в порядке возрастания даты и времени, смысл использования метода ОбратныйПорядок() есть только в том случае, если действительно надо получить обратный порядок выборки. Использовать метод можно и как процедуру, и как функцию.
где < Режим > — числовое выражение. Возможные значения: 1 — выбирать документы в обратном порядке даты и времени; 0 — выбирать документы в порядке возрастания даты и времени. Параметр является необязательным. Значение по умолчанию — 1.
Установить фильтр выборки документов позволяет метод УстановитьФильтр() (англоязычный синоним — SetFilter() ). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект() , и обычно вызывается до вызова метода ВыбратьДокументы() и ему подобных.
- < Проведенные > — числовое выражение. Возможные значения: 0 — не включать в выборку проведённые документы; 1 — включать;
- < НеПроведенные > — числовое выражение. Возможные значения: 0 — не включать в выборку непроведённые документы; 1 — включать;
- < НеИмеющиеПризнаковУчета > — числовое выражение. Возможные значения: 0 — не включать в выборку документы, не имеющие признаков учёта; 1 — включать;
- < Опер > — числовое выражение. Возможные значения: 0 — не включать в выборку оперативные документы; 1 — данный флаг не влияет на выборку; 2 — включать;
- < Расч > — числовое выражение. Возможные значения: 0 – не включать в выборку расчётные документы; 1 — данный флаг не влияет на выборку; 2 — включать;
- < Бухг > — числовое выражение. Возможные значения: 0 — не включать в выборку бухгалтерские документы; 1 — данный флаг не влияет на выборку; 2 — включать.
Производить выбор документов, принадлежащих конкретному журналу, либо обеспечить доступ к значениям граф журнала позволяет метод ИспользоватьЖурнал() (англоязычный синоним — UseJournal() ).
- < Журнал > — идентификатор журнала, который предполагается использовать для отбора документов и доступа к графам;
- < ФлагОгрПросм > — необязательный параметр. Число: 1 — если выборка ограничивается документами, входящими в указанный журнал; 0 — если метод используется только для использования граф методом Графа() . Значение по умолчанию — 1.
Методы для получения информации о документе
Проверить факт проведения документа позволяет метод Проведен() (англоязычный синоним — IsTransacted() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если документ проведён, или 0, если документ не проведён.
Получить или установить признак существования операции у документа позволяет метод СуществуетОперация() (англоязычный синоним — OperExist() ). Возвращаемым значением метода является число 1, если у документа существует операция, или 0, если у документа не существует операции.
Примечание: Если вы помните, в метаданных для конкретного вида документа, имеющего признак «Бухгалтерский учет», устанавливается режим записи операции. Операция может записываться для документов данного вида в режимах: «Всегда», «Выборочно» и «Только при проведении». Описываемый метод СуществуетОперация() применяется в случае использования режима «Выборочно». Он устанавливает признак наличия операции у конкретного документа. Данная возможность позволяет записывать операцию для документов конкретного вида в зависимости от некоторых условий. Для режимов записи операции «Всегда» и «Только при проведении» данный метод смысла не имеет.
где < Признак > — числовое выражение. Возможные значения: 1 — установить признак существования операции, 0 — не устанавливать признак существования операции.
Проверить наличие пометки удаления у документа позволяет метод ПометкаУдаления() (англоязычный синоним — DeleteMark() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если на документе стоит пометка удаления, или 0, если пометка удаления отсутствует.
Получить значение указанной графы журнала для текущего документа позволяет метод Графа() (англоязычный синоним — Column() ). Данный метод работает только в том случае, если ранее был применён метод ИспользоватьЖурнал() .
где < Графа > — идентификатор графы журнала, заданного методом ИспользоватьЖурнал() .
Получить признак установленного режима блокировки или установить/снять данный режим позволяет метод Блокировка() (англоязычный синоним — Locking() ). Возвращаемым значением метода при отсутствующем параметре является текущее значение блокировки — число 1, если документ заблокирован, или 0, если документ свободен (на момент до выполнения метода). Возвращаемым значением метода при указанном параметре является результат выполнения метода блокировки — число 1, если документ успешно заблокирован, или 0, если заблокировать документ не получилось.
где < ВклВыкл > — необязательный параметр. Число: 1 — включить блокировку; 0 — выключить блокировку.
Пример записи данного метода:
Определить, принадлежит ли документ указанной последовательности , позволяет метод ПринадлежитПоследовательности() (англоязычный синоним — BelongToSequence() ). Возвращаемым значением метода является число 1, если документ принадлежит указанной последовательности, или 0, если документ не принадлежит данной последовательности.
- < Послед > — строковое выражение, определяющее последовательность;
- < НовоеЗначение > — необязательный параметр. Число: 1 — документ принудительно устанавливается как принадлежащий указанной последовательности; 0 — документ принудительно устанавливается как не принадлежащий данной последовательности. Использование этого параметра разрешено только при проведении документа (в Модуле документа).
Методы для работы с позицией и временем документа
Получить позицию документа , представляющую собой 32-х символьное строковое значение, позволяет метод ПолучитьПозицию() (англоязычный синоним — GetPosition() ) возвращает. Параметры у метода отсутствуют.
Примечание: Позиция может существовать только у записанного документа.
Пример записи метода:
Сверить дату и время документа с датой и временем точки актуальности (ТА) итогов позволяет метод СравнитьТА() (англоязычный синоним — CompareWithAP() ). Другими словами, данный метод позволяет определить положение на оси времени момента записи документа по отношению к текущему положению ТА. Параметры у метода отсутствуют. Возвращаемым значением метода является числовое значение:
- 1 — если дата и время документа больше даты и времени точки актуальности итогов;
- 0 — если дата и время документа равно дате и времени точки актуальности итогов;
- −1 (минус единица) — если дата и время документа меньше даты и времени точки актуальности итогов;
- −2 (минус два) — в случае, если новый документ, который сравнивается с ТА, ещё не записан, то есть он ещё не имеет никакой позиции на оси времени.
Пример использования метода:
Получить время документа позволяет метод ПолучитьВремя() (англоязычный синоним — GetTime() ). Метод может использоваться только для объектов, созданных при помощи функции СоздатьОбъект() . Возвращаемым значением метода является значение времени записи документа в формате » ЧЧ.ММ.СС » . Кроме того, через параметры метода можно получить раздельно строковые значения часа, минут и секунд времени записи документа.
- < Час > — идентификатор переменной, в которую метод возвращает строковое значение часа записи документа;
- < Минуты > — идентификатор переменной, в которую метод возвращает строковое значение минут записи документа;
- < Секунды > — идентификатор переменной, в которую метод возвращает строковое значение секунд записи документа.
Установить время записи документа в соответствии с заданными параметрами позволяет метод УстановитьВремя() (англоязычный синоним — SetTime() ).
где < Час >, < Минуты >, < Секунды > — числовые выражения, определяющие время записи документа.
Пример использования метода:
Примечание: Если в модуле формы документа используются методы установки признака автоформирования времени или собственно установки времени, то при записи документа диалог запроса времени не вызывается и игнорируются пользовательские установки в параметрах системы.
Установить режим, при котором новому документу автоматически записывается время на начало дня , позволяет метод АвтоВремяНачалоДня() (англоязычный синоним — AutoTimeBegOfDay() ). Параметры у метода отсутствуют.
Примечание: Если в модуле формы документа используются методы установки признака автоформирования времени или собственно установки времени, то при записи документа диалог запроса времени не вызывается и игнорируются пользовательские установки в параметрах системы.
Установить режим, при котором новому документу автоматически записывается время на конец дня , позволяет метод АвтоВремяКонецДня() (англоязычный синоним — AutoTimeEndOfDay() ). Параметры у метода отсутствуют.
Примечание: Если в модуле формы документа используются методы установки признака автоформирования времени или собственно установки времени, то при записи документа диалог запроса времени не вызывается и игнорируются пользовательские установки в параметрах системы.
Установить режим, при котором новому документу автоматически записывается текущее время , позволяет метод АвтоВремяТекущее() (англоязычный синоним — AutoTimeCurrent() ). Параметры у метода отсутствуют.
Примечание: Если в модуле формы документа используются методы установки признака автоформирования времени или собственно установки времени, то при записи документа диалог запроса времени не вызывается и игнорируются пользовательские установки в параметрах системы.
Установить режим, при котором в случае совпадения даты документа с датой ТА новому документу записывается время после ТА , позволяет метод АвтоВремяПослеТА() (англоязычный синоним — AutoTimeAfterAP() ). Метод работает только при установленной компоненте «Оперативный учет». Параметры у метода отсутствуют.
Примечание: Если в модуле формы документа используются методы установки признака автоформирования времени или собственно установки времени, то при записи документа диалог запроса времени не вызывается и игнорируются пользовательские установки в параметрах системы.
Отключить режим автоматической установки времени нового документа позволяет метод АвтоВремяОтключить() (англоязычный синоним — AutoTimeOff() ). Параметры у метода отсутствуют. После отключения режима автоматической установки времени новые документы будут записываться временем, устанавливаемым методом УстановитьВремя() .
Примечание: Если в модуле формы документа используются методы установки признака автоформирования времени или собственно установки времени, то при записи документа диалог запроса времени не вызывается и игнорируются пользовательские установки в параметрах системы.
Методы для работы с реквизитами документов
Установить новый префикс для автоматического создания номера документа позволяет метод ПрефиксНомера() (англоязычный синоним — NumPrefix() ). Данный метод может использоваться только для объектов, созданных при помощи функции СоздатьОбъект() , и в основном используется при создании новых документов с помощью метода Новый() . Возвращаемым значением метода является строковое значение текущего префикса документа (на момент до исполнения метода).
где < Префикс > — строковое выражение — новый префикс номера для документа. Параметр является необязательным.
Пример записи метода:
Установить для документа новый номер с заданным префиксом позволяет метод УстановитьНовыйНомер() (англоязычный синоним — SetNewNum() ). Данный метод производит корректное переприсвоение номера документа (с автоинкрементацией и резервированием номера на время ввода).
где < Префикс > — строковое выражение — префикс номера документа.
Пример записи метода:
Назначить конкретный тип реквизиту, которому в Конфигураторе был установлен тип «Неопределенный» позволяет метод НазначитьТип() (англоязычный синоним — SetType() ).
- < ИмяРеквизита > — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
- < ИмяТипа > — строковое выражение — название типа данных (или вида субконто), который назначается реквизиту документа, например, » Строка » , » Число » , » Дата » , » Справочник.Товары » , » Документ.РасходнаяНакладная » и т.п.;
- < Длина > — числовое выражение — длина поля представления данных. Параметр является необязательным. Имеет смысл только при задании числового или строкового типа;
- < Точность > — числовое выражение — число знаков числа после десятичной точки. Параметр является необязательным. Имеет смысл только при задании числового типа.
Пример записи метода:
Получить значение реквизита по его идентификатору позволяет метод ПолучитьАтрибут() (англоязычный синоним — GetAttrib() ).
где < ИмяРеквизита > — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе.
Установить значение реквизита по его идентификатору позволяет метод УстановитьАтрибут() (англоязычный синоним — SetAttrib() ).
- < ИмяРеквизита > — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
- < 3начение > — выражение, содержащее устанавливаемое значение реквизита.
Пример записи метода:
Методы для работы с многострочной частью документа
Добавить новую строку с очередным порядковым номером в многострочную часть документа позволяет метод НоваяСтрока() (англоязычный синоним — NewLine() ). Параметры у метода отсутствуют.
Удалить текущую строку из многострочной части документа позволяет метод УдалитьСтроку() (англоязычный синоним — DeleteLine() ). Параметры у метода отсутствуют.
Удалить все строки из многострочной части документа позволяет метод УдалитьСтроки() (англоязычный синоним — DeleteLines() ). Параметры у метода отсутствуют.
Пример записи метода:
Отсортировать многострочную часть документа по реквизитам позволяет метод СортироватьСтроки() (англоязычный синоним — SortLines() ).
где < Колонки > — перечисленные через запятую реквизиты многострочной части документа, по которым следует сортировать. Знаки «+», «-», предшествующие названию реквизита указывают направление сортировки по реквизиту. Знак «*» указывает, что сортировать следует по внутреннему значению реквизита.
Узнать количество строк в многострочной части документа позволяет метод КоличествоСтрок() (англоязычный синоним — LinesCnt() ). Параметры у метода отсутствуют. Возвращаемым значением метода является числовое значение.
Получить строку по номеру и сделать её текущей позволяет метод ПолучитьСтрокуПоНомеру() (англоязычный синоним — GetLineByNum() ). Возвращаемым значением метода является число 1, если действие выполнено, или 0, если действие не выполнено.
где < Номер > — выражение, содержащее номер искомой строки (это тот номер, который содержится в атрибуте НомерСтроки . Надо заметить, что значение данного атрибута может отличаться от порядкового номера строки в табличной части — могут иметь место пропуски, например, при принудительном назначении номера строке через атрибут НомерСтроки ).
Открыть выборку строк многострочной части документа позволяет метод ВыбратьСтроки() (англоязычный синоним — SelectLines() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если действие выполнено и в выборке есть хотя бы одна строка, или 0, если действие не выполнено или в выборке нет ни одной строки. Непосредственно сама выборка осуществляется при помощи метода ПолучитьСтроку() в порядке возрастания номеров строк.
Выбрать следующую строку документа в последовательности выборки , открытой перед этим при помощи метода ВыбратьСтроки() , позволяет метод ПолучитьСтроку() (англоязычный синоним — GetLine() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если следующая строка табличной части документа выбрана успешно, или 0, если следующая строка документа не найдена (достигнут конец выборки).
Пример использования метода приведён выше.
Получить сумму значений по всем строкам табличной части документа для указанного реквизита позволяет метод Итог() (англоязычный синоним — Total() ). Возвращаемым значением метода является числовое значение — итог по колонке.
где < ИмяРеквизита > — строковое выражение, содержащее имя реквизита табличной части документа.
Примечание: Для указанного реквизита в Конфигураторе должно быть установлено свойство «Итог по колонке» (закладка «Дополнительные» свойств реквизита).
Пример использования метода:
Выгрузить многострочную часть документа в таблицу или список значений позволяет метод ВыгрузитьТабличнуюЧасть() (англоязычный синоним — UnloadTable() ). Если в качестве значения для выгрузки задан список значений, то система выгружает данные из многострочной части документа последовательно по реквизитам.
- < 3нач > — идентификатор переменной, содержащей ссылку на объект типа » ТаблицаЗначений » или » СписокЗначений » , куда нужно выгрузить данные из многострочной части документа. Если переданное значение пустое, то система сама создаст объект типа » ТаблицаЗначений » . Колонки совмещаются по идентификаторам. Для номера строки документа в таблице значений создаётся отдельная колонка с идентификатором «НомерСтрокиДокумента»;
- < Реквизиты > — список реквизитов многострочной части документа (через запятую), значения которых следует выгружать. Для выгрузки номера строки надо указать реквизит НомерСтроки . Параметр является необязательным. По умолчанию выгружаются все имеющиеся колонки.
Загрузить многострочную часть документа из таблицы значений позволяет метод ЗагрузитьТабличнуюЧасть() (англоязычный синоним — LoadTable() ).
где < ТаблЗнач > — таблица значений, откуда загружается многострочная часть документа. Колонки совмещаются по идентификаторам.
Методы контекста Модуля формы документа
Внимание! Описанные в данном разделе методы доступны только в контексте Модуля формы документа.
Установить режим обязательного перепроведения при записи ранее проведённого документа позволяет метод ПриЗаписиПерепроводить() (англоязычный синоним — ReMakeActionsWhenWrite() ). Интерактивный отказ от проведения документа или ошибка модуля при этом приведёт к отмене записи отредактированного документа.
где < Режим > — числовое выражение. Значение 1 устанавливает флаг обязательного перепроведения при записи уже проведённого документа, а 0 снимает флаг обязательного перепроведения при записи уже проведённого документа.
Установить режим проведения документа после ТА позволяет метод ПроводитьПослеТА() (англоязычный синоним — PostingAfterTA() ). Возвращаемым значением метода является текущее значение режим перепроведения документа в зависимости от проведённости.
Этот метод относится к случаю проведения документа в пределах даты, в которой находится ТА. Дело в том, что при записи документа, документ кроме даты получает еще и время документа. В многопользовательском режиме часто возникает ситуация, когда в момент проведения документа, он уже оказывается не последним в потоке проводимых документов (провели документ с другого рабочего места), в этом случае система «1С:Предприятие» даёт на выбор три варианта проведения:
- провести документ тем временем, каким он был записан, то есть фактически задним временем (до ТА);
- изменить время документа (в рамках текущей даты), чтобы документ стал самым последним и проводился в потоке, то есть после ТА;
- запросить у пользователя, в каком режиме провести документ.
- < ФлагДляНеПровДокумента > — флаг режима проведения документа после ТА. Числовое выражение: −1 (минус единица) — проводить документ всегда задним числом; 0 — при проведении запрашивать режим проведения документа; 1 — проводить документ в реальном потоке времени, то есть при проведении время документа автоматически устанавливается на время после ТА;
- < ФлагДляПровДокумента > — флаг режима перепроведения документа после ТА. Числовое выражение: −1 (минус единица) — проводить документ всегда задним числом; 1 — проводить документ в потоке.
Выполнить визуальную активизацию строки документа в форме позволяет метод АктивизироватьСтроку() (англоязычный синоним — ActivateLine() ). Данный метод в основном предназначен для активизации строки после завершения работы предопределённой процедуры ОбработкаПодбора() .
где < НомСтроки > — номер строки, которую следует активизировать. Параметр является необязательным. Если параметр опущен, то активизируется текущая строка многострочной части документа.
Запретить или разрешить изменение порядка строк в форме позволяет метод ИзменениеПорядкаСтрок() (англоязычный синоним — ChangeLinesOrder() ). Возвращаемым значением метода является числовое значение режима изменения порядка строк до исполнения метода.
где < Режим > — число: 1 — разрешить изменение порядка строк в документе; 0 — запретить. Параметр является необязательным. Если параметр не задан, то режим не меняется.
Пример записи метода:
Получить признак изменения реквизитов формы позволяет метод Модифицированность() (англоязычный синоним — Modify() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если реквизиты текущей формы документа были изменены, или 0, если реквизиты текущей формы документа не изменялись.
Примечание: В режиме исполнения этот признак отображается символом «*» («звёздочка») в заголовке окна формы.
Методы контекста Модуля документа
Внимание! Описанные в данном разделе методы доступны только в контексте Модуля документа.
Определить, выполняется ли проведение документа в реальном времени или задним числом (когда нельзя обращаться к текущим остаткам регистров) , позволяет метод ИтогиАктуальны() (англоязычный синоним — AreTotalsActual() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если итоги актуальны, или 0, если нет. Метод доступен только в контексте Модуля документа в предопределённой процедуре ОбработкаПроведения() .
Определить, выполняется ли проведение документа группой (при помощи режима «Управление итогами») или по одному (интерактивно) , позволяет метод ГрупповаяОбработка() (англоязычный синоним — IsGroupPrосеssing() ). Параметры у метода отсутствуют. Возвращаемым значением метода является число 1, если это групповая обработка, или 0, если это проведение документа по одному. Метод доступен только в контексте Модуля документа в предопределённой процедуре ОбработкаПроведения() .
Отменить весь процесс (транзакцию) проведения документа позволяет метод НеПроводитьДокумент() (англоязычный синоним — DoNotTransactDoc() ). Параметры у метода отсутствуют. Метод доступен только в контексте Модуля документа в предопределённой процедуре ОбработкаПроведения() .
Вызов метода НеПроводитьДокумент() приводит к тому, что все движения регистров, вызванные в предопределённой процедуре ОбработкаПроведения() , будут проигнорированы и документ не будет проведён. Однако метод не завершает процедуру ОбработкаПроведения() — для завершения процедуры нужно отдельно вызвать оператор безусловного перехода Возврат . По своему действию метод НеПроводитьДокумент() полностью аналогичен вызову системной функции СтатусВозврата() с параметром 0.
Записать новое значение периодического реквизита справочника с привязкой к документу позволяет метод УстановитьРеквизитСправочника() (англоязычный синоним — SetRefField() ). Данный метод доступен только в контексте Модуля документа в предопределённой процедуре ОбработкаПроведения() .
Примечание: При удалении, редактировании или отказе от проведения документа значение периодического реквизита справочника с привязкой к документу будет корректно отменено или заменено.
- < Элемент > — выражение, задающее элемент справочника, в котором требуется записать новое значение периодического реквизита;
- < Реквизит > — строковое выражение, содержащее идентификатор периодического реквизита справочника;
- < 3начение > — новое значение периодического реквизита;
- < Дата > — выражение типа » Дата » , содержащее дату, на которую требуется установить новое значение периодического реквизита. Параметр имеет смысл только для не оперативных документов и позволяет установить значение на дату отличную от даты документа, но с пустым временем;
- < Тип > — строковое выражение — название типа данных или вид субконто. Параметр является необязательным и используется только при установке значения периодического реквизита, имеющего неопределённый тип;
- < Длина > — длина числового или строкового значения. Параметр является необязательным и используется только при установке значения периодического реквизита, имеющего неопределённый тип;
- < Точность > — число знаков после десятичной точки для числового значения. Параметр является необязательным и используется только при установке значения периодического реквизита, имеющего неопределённый тип.
Удалить существующие движения документа позволяет метод ОчиститьДвижения() (англоязычный синоним — ClearActions() ). Метод доступен только в контексте Модуле формы документа при отключенном в конфигурации флаге «Автоматическое удаление движений». Действие данного метода относится только к текущему документу, который доступен в локальном контексте Модуля формы документа.
Примечание: Если метод не вызывается при проведении документа, то существующие движения документа не стираются вообще. Если метод не вызывается при отмене проведения документа, то существующие движения после отмены проведения стираются.
Использование данного метода позволяет:
- допроводить документ, то есть доделывать движения в добавок к уже существующим;
- делать движения, анализируя ранее сделанные и уже существующие;
- выполнять отмену проведения документа, анализируя существующие движения;
- не очищать существующие движения при перепроведении, если это не нужно.
где < ВидыДвижений > — строковое выражение, в котором через точку с запятой («;») перечислены виды движений. Параметр является необязательным. Если данный параметр не задан, то производится полная очистка всех движений. При задании же списка движений в качестве видов движений можно задавать следующие строковые значения:
- » Регистр.ХХХХ » — движение конкретного регистра, где ХХХХ — конкретный вид регистра;
- » Операция » — бухгалтерская операция;
- » Справочник » — все изменения периодических реквизитов справочников;
- » ЖурналРасчетов » — все изменения в журналах расчётов.
Увязать движения регистров, записи значений периодических реквизитов справочников и записи бухгалтерских проводок с номерами конкретных строк документа позволяет метод ПривязыватьСтроку() (англоязычный синоним — LinkLine() ). Метод доступен только в контексте Модуля документа в предопределённой процедуре ОбработкаПроведения() .
Метод может быть использован как системная процедура: тогда он будет устанавливать номер строки для всех регистров по которым выполняются движения, или как метод конкретного регистра: тогда он будет устанавливать номер строки только для данного регистра.
где < НомерСтроки > — выражение, содержащее номер строки документа.
Предопределённые процедуры Модуля формы документа
Предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.
Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях формы документов. В основном данные процедуры предназначены для расширения возможности программного управления правами доступа к системе.
При интерактивном создании нового документа пользователем системой «1С:Предприятие» производится вызов процедуры ВводНового() (англоязычный синоним — InputNew() ). Процедура может использоваться, например, для установки начальных значений реквизитов нового документа. Если же в данной предопределённой процедуре установить статус возврата в 0, ввода нового документа и открытие его формы не будет выполнено.
- < ПризнКопирования > — идентификатор переменной, куда будет помещено число 1, если объект введён копированием, или 0, если это просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта. Параметр является необязательным;
- < ОбъектКопирования > — идентификатор переменной, куда будет помещена ссылка на объект, который был скопирован. Параметр является необязательным.
Примечание: Начальное значение статуса возврата любой предопределённой процедуры равно 1. Оно устанавливается системой при вызове процедуры.
При интерактивном создании нового документа с помощью команды «Ввести на основании» , системой «1С:Предприятие» производится вызов предопределённой процедуры ВводНаОсновании() (англоязычный синоним – InputCausedBy() ). Процедура может использоваться, например, для установки начальных значений реквизитов нового документа. Если же в данной предопределённой процедуре установить статус возврата в 0, ввода нового документа и открытие его формы не будет выполнено.
где < ДокументОснование > — идентификатор переменной, куда будет помещено значение документа, на основании которого вводится новый документ.
При интерактивной записи документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриЗаписи() (англоязычный синоним — OnWrite() ). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять реквизиты документа), запись документа не будет выполнена.
В момент начала интерактивного редактирования существующей строки многострочной части документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриНачалеРедактированияСтроки() (англоязычный синоним — OnStartEditLine() ). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять документ), то запись не будет изменена.
При интерактивном вводе новой строки многострочной части документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриВводеСтроки() (англоязычный синоним — OnNewLine() ). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять документ), то новая строка не будет инициирована.
В момент начала интерактивного редактирования новой строки многострочной части документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриРедактированииНовойСтроки() (англоязычный синоним — OnEditNewLine() ). Параметры у процедуры отсутствуют. Данная процедура может использоваться, например, для установки начальных значений реквизитов строки табличной части документа. Установка же статуса возврата в данной процедуре не имеет смысла, так как отказаться от ввода новой строки в этот момент уже невозможно.
В момент окончания интерактивного редактирования строки многострочной части документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриОкончанииРедактированияСтроки() (англоязычный синоним — OnFinishLineEdit() ). Данная процедура может располагаться в Модулях формы документов и использоваться, например, для проверки значений реквизитов строки табличной части.
Примечание: Данная процедура не вызывается при отказе от ввода новой строки по клавише Esc . Однако, она вызывается при нажатии клавиши Esc во время редактирования существующей строки, но при этом последнее значение текущего редактируемого с клавиатуры поля не доступно, так как от его значения в данном случае отказываются, то есть строка доступна в том виде, в котором она собственно и остаётся в документе.
где < НовСтр > — имя переменной, куда будет передан флаг ввода новой строки. Возможные значения: 1 — произошло окончание ввода новой строки; 0 — произошло окончание редактирования существующей строки. Параметр является необязательным.
При интерактивном удалении строки многострочной части документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриУдаленииСтроки() (англоязычный синоним — OnDeleteLine() ). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять документ), удаление строки документа не будет выполнено.
При интерактивном изменении порядка строк многострочной части документа (при перемещении строк вверх-вниз, перенумерации, сортировке) системой «1С:Предприятие» производится вызов предопределённой процедуры ПриИзмененииПорядкаСтрок() (англоязычный синоним — OnChangeLinesOrder() ). Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять документ), изменении порядка строк документа не будет выполнено.
где < Действие > — имя переменной, куда будет передан признак действия. Возможные значения: −1 (минус один) — перемещение строки вверх; 1 — перемещение строки вниз; 0 — перенумерация строк. Параметр является необязательным.
Предопределённые процедуры Модуля документа
Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях документов. Процедуры вызываются на исполнение как при интерактивном, так и при программном возникновении события.
При выполнении проведения документа в любом режиме системой «1С:Предприятие» производится вызов предопределённой процедуры ОбработкаПроведения() (англоязычный синоним — Posting() ), в которой собственно и заключается весь алгоритм проведения документа. Если в процедуре установить статус возврата в 0 (например, если данному пользователю нельзя проводить документ), то проведение документа не будет выполнено и будет отменена системная транзакция.
Примечание: В предопределённой процедуре ОбработкаПроведения() система «1С:Предприятие» сама выполняет все действия через транзакцию, поэтому никаких специальных действий по обработке транзакций в этой процедуре предпринимать не нужно.
В данной процедуре нельзя использовать элементы интерактивного управления (например, операторы Предупреждение() , Вопрос() , ВвестиЧисло() и т.п.), так как в этом случае при открытой транзакции система ожидает отклика пользователя, а все остальные пользователи ждут завершения транзакции (в результате документы у всех остальных пользователей в этот момент не могут проводиться). Если в конфигурации необходимо при проведении документа выдавать пользователю некоторые cooбщения, то следует использовать операторы Сообщить() или Состояние() .
где < 3нач > — имя переменной, в которую системой будет передано значение параметра метода Провести() , если проведение документа запущено программно. Использовать данное значение можно, например, для того, чтобы в процедуре ОбработкаПроведения() правильно отработать режим проведения.
При отмене проведения документа или при удалении проведённых документов в любом режиме системой «1С:Предприятие» производится вызов предопределённой процедуры ОбработкаУдаленияПроведения() (англоязычный синоним — UnPostingProcess() ). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя отменять проведение документа) то отмена проведения документа не будет выполнена и будет отменена системная транзакция.
Примечание: В предопределённой процедуре ОбработкаУдаленияПроведения() система «1С:Предприятие» сама выполняет все действия через транзакцию, поэтому никаких специальных действий по обработке транзакций в этой процедуре предпринимать не нужно.
В данной процедуре нельзя использовать элементы интерактивного управления (например, операторы Предупреждение() , Вопрос() и т.п.), так как в этом случае при открытой транзакции система ожидает отклика пользователя, а все остальные пользователи ждут завершения транзакции (в результате документы у всех остальных пользователей в этот момент не могут проводиться). Если необходимо при отмене проведения документа выдавать пользователю некоторые сообщения, то следует использовать операторы Сообщить() или Состояние() .
В процессе смены расчётного периода журнала расчётов «вперёд» , если в журнале расчётов содержатся записи, порожденные документом, системой «1С:Предприятие» производится вызов предопределённой процедуры АрхивироватьДокумент() (англоязычный синоним — ArchiveDocument() ). Параметры у процедуры отсутствуют.
Предопределенные процедуры глобального модуля
При интерактивном удалении документа и в случае отмены пометки на удаление системой «1С:Предприятие» производится вызов предопределённой процедуры ПриУдаленииДокумента() (англоязычный синоним — OnDeleteDoc() ). Условия вызова процедцры можно узнать с помощью метода ПометкаУдаления() объекта » Документ » . Если в данной предопределённой процедуре установить статус возврата в 0 (например, если не истёк срок хранения документа), то удаление документа не будет выполнено.
- < УдалДокум > — ссылка на удаляемый документ;
- < Режим > — выражение, значение которого соответствует флагу режима удаления (1 — непосредственное удаление, 0 — пометка на удаление).
При интерактивной попытке изменить время документа системой «1С:Предприятие» производится вызов предопределённой процедуры ПриИзмененииВремениДокумента() (англоязычный синоним — OnChangeTimeDoc() ). Если в данной предопределённой процедуре установить статус возврата в 0 (например, если время данного документа нельзя менять), изменение времени документа не будет выполнено.
где < Док > — ссылка на обрабатываемый документ.
При интерактивной попытке выполнить операцию «Сделать непроведённым» системой «1С:Предприятие» производится вызов предопределённой процедуры ПриОтменеПроведенияДокумента() (англоязычный синоним — OnUnPosting() ). Если в данной предопределённой процедуре установить статус возврата в 0 (например, если дата документа меньше некоторой константы), то отмена проведения документа не будет выполнена.
Документы в 1С 8. Примеры работы средствами встроенного языка
В статье приводятся практические примеры работы с документами в языке 1С. Рассматриваются приемы работы с объектной моделью – создание, редактирование, удаление документов, а также типовые запросы для выборки документов по различным условиям. Для удобства пользуйтесь оглавлением.
Содержание
Немного о документах
Документы – краеугольный камень в построении большинства учетных систем средствами платформы 1С Предприятие. Они предназначены преимущественно для отражения совершенных хозяйственных операций, а также для последующего просмотра и редактирования.
Виды документов, которые создаются в конфигураторе на этапе проектирования прикладного решения, в основном соответствуют своим бумажным аналогам – приходным накладным, документам продажи или актам об оказании услуг, и др. Для каждой отрасли и вида учета набор таких документов и их реквизитный состав может отличаться.
Помимо записи о произошедшей хозяйственной операции, документы используются для фиксации изменений в учетных регистрах (т.н. проведение), а также позволяют сформировать печатные формы. Вообще, спектр применения документов в платформе 1С очень обширный, и позволяет реализовывать самые различные механизмы – биллинг, учет коммунальных платежей, сложные расчеты, учет ценных бумаг и активов, и многое другое.
Документы описываются в системе 1С двумя стандартными реквизитами – Номер и Дата. Использование номера не является обязательным – можно указать длину номера 0, и в этом случае платформа отключит механизм нумерации документов. В этом случае разработчик может сам предусмотреть реквизиты для формирования представления документа и для проверки уникальности. Но на практике чаще всего номер не отключается.
Как из обработки обратится к открытому документу?
(0) Самое простое. В модуле обработки объявить экспортную переменную и после получения формы присвоить это пременной значение ЭтотОбъект. Это и будет «ссылка на интересующий открытый документ».
Передачу управления и данных между различными формами можно посмотреть здесь http://infostart.ru/public/69707/
- Скопировать ссылку
- Перейти
Передайте в процедуру прописанную в форме обработки Ваш документ в качестве параметра. Пример некой функции в документе из которого обращаетесь:
ФормаОбработки = Обработки.ВАШАОБРАБОТКА.ПолучитьФорму(, Форма);
Если ФормаОбработки.Открыта() Тогда
ФормаОбработки.Активизировать();
Иначе
ФормаОбработки.ТАСАМАЯФУНКЦИЯ(ЭТОТОБЪЕКТ);
ФормаОбработки.Открыть();
КонецЕсли;- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
(0) Самое простое. В модуле обработки объявить экспортную переменную и после получения формы присвоить это пременной значение ЭтотОбъект. Это и будет «ссылка на интересующий открытый документ».
Передачу управления и данных между различными формами можно посмотреть здесь http://infostart.ru/public/69707/ [/QUOT]
Пробовал, не получается. Подскажите код пожалуйста, что-то я не так делаю.
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
Уважаемый, мне кажется, пока документ открыт, вы не сможете его редактировать.
Придется его сначала закрыть (форму) можно и программно, отредактировать и снова открыть (опять же программно)
Завтра попробую реализовать.- Скопировать ссылку
- Перейти
// В базе, из которой выбираем документ
Найден = Истина;
ДокументСсылка = СтрТЗДокументы.Ссылка;
ДокументСсылка.ПолучитьФорму().Открыть();
ИмяФайлаЗаданий = «C:\1CTasksTo2\events.txt»;
ТекстовыйДок = Новый ТекстовыйДокумент;
Стр = «###»+УИ+»###»+Тип+»###»+Номер+»###»+Дата+»###»;
ТекстовыйДок.ДобавитьСтроку(Стр);
ТекстовыйДок.Записать(ИмяФайлаЗаданий);// В базе, где отлавливаем события и открываем документ
Процедура ОбработкаВнешнихЗаданий() Экспорт
ТЗОбъекты = Новый («ТаблицаЗначений»);
ТЗОбъекты.Колонки.Добавить(«УИ»);
ТЗОбъекты.Колонки.Добавить(«Тип»);
ТЗОбъекты.Колонки.Добавить(«Номер»);
ТЗОбъекты.Колонки.Добавить(«Дата»);ИмяФайлаЗаданий = «C:\1CTasksTo2\events.txt»;
ПроверитьСуществованиеКаталога(«C:\1CTasksTo2»);
Если ПроверитьСуществованиеФайла(ИмяФайлаЗаданий) Тогда
Если ОпределитьРазмерФайла(ИмяФайлаЗаданий) > 0 Тогда
ТекстЗаданий = Новый ТекстовыйДокумент;
ТекстЗаданий.Прочитать(ИмяФайлаЗаданий);
Для НомерСтроки = 1 По ТекстЗаданий.КоличествоСтрок() Цикл
Строка = ТекстЗаданий.ПолучитьСтроку(НомерСтроки);Если НЕ Отделить(Строка,»####START####») = Неопределено Тогда
ИначеЕсли НЕ Отделить(Строка,»####FINISH####») = Неопределено Тогда
Иначе
Т = Отделить(Строка,»###»);
УИ = Отделить(Строка,»###»);
Тип = Отделить(Строка,»###»);
Номер = Отделить(Строка,»###»);
Дата = Отделить(Строка,»###»);СтрТЗОбъекты = ТЗОбъекты.Добавить();
СтрТЗОбъекты.УИ = УИ;
СтрТЗОбъекты.Тип = Тип;
СтрТЗОбъекты.Номер = Номер;
СтрТЗОбъекты.Дата = Дата;СоответствиеДокументов = Новый СписокЗначений;
СоответствиеДокументов.Добавить(«-«,»-«); //Тут добавить соответствияТип = СоответствиеДокументов.НайтиПоЗначению(Тип);
Если Тип = Неопределено Тогда
Иначе
Тип = СокрЛП(Тип);
КонецЕсли;
Состояние(«Проверяем документ «+Тип+» № «+Номер+» от «+Дата);
//ПОПЫТАЕМСЯ НАЙТИ ДОКУМЕНТ И ОТКРЫТЬ ЕГО.
Запрос = Новый Запрос;
Запрос.Текст +Тип+» КАК Документ
|ГДЕ
| Документ.Номер = &ВыбНомер
| И Документ.Дата <= &ДатаКонДня
| И Документ.Дата >= &ДатаНачДня»;
Запрос.УстановитьПараметр(«ВыбНомер»,Номер);
Запрос.УстановитьПараметр(«ДатаКонДня»,КонецДня(Дата));
Запрос.УстановитьПараметр(«ДатаНачДня»,НачалоДня(Дата));
ТЗДокументы = Запрос.Выполнить().Выгрузить();
Нашли = Ложь;
Для Каждого СтрТЗДокументы Из ТЗДокументы Цикл
Нашли = Истина;
ДокументСсылка = СтрТЗДокументы.Ссылка;
ДокументСсылка.ПолучитьФорму().Открыть();
КонецЦикла;Если НЕ Нашли Тогда
Сообщить(«Документ «+Тип16+» № «+Номер+» от «+Дата+» НЕ НАЙДЕН!»);
КонецЕсли;
ТекстЗаданий = Новый ТекстовыйДокумент;
ТекстЗаданий.Записать(ИмяФайлаЗаданий);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедурыФункция ПроверитьСуществованиеКаталога(ИмяКаталога)
КаталогНаДиске = Новый Файл(ИмяКаталога);
Если КаталогНаДиске.Существует() Тогда
Возврат Истина;
Иначе
Ответ = Вопрос(«Каталог не существует. Создать?», РежимДиалогаВопрос.ОКОтмена);
Если Ответ = КодВозвратаДиалога.ОК Тогда
СоздатьКаталог(ИмяКаталога);
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецФункции