Опубликовано: 28.01.2021

Работа с журналами документов

Журнал документов — средство для работы со списком документов. В терминах языка журнал не является специальным типом данных (он не имеет значения, его нельзя создать при помощи функции СоздатьОбъект()).

С журналом в системе связана форма отображения списка документов и программный модуль формы журнала документов. В локальном контексте этого программного модуля непосредственно доступны реквизиты формы журнала. Кроме того, здесь непосредственно доступен (только для чтения) атрибут ТекущийДокумент, содержащий значение выбранного в журнале документа.

Модуль Формы журнала документов размещается в разделе конфигурации: Метаданные – Журнал – Форма. Запускается он при открытии формы журнала документов из программы. Открыть модуль для редактирования можно щёлкнув правой кнопкой мыши по значку соответствующего журнала и в открывшемся контекстном меню выбрав пункт «Редактировать форму», а затем имя соответствующей формы журнала.

Открытие формы журнала документов

Атрибуты контекста Модуля формы журнала документов

Доступный только для чтения атрибут ТекущийДокумент (англоязычный синоним — CurrentDocument) содержит значение выбранного в журнале документа. Этот атрибут позволяет использовать в программе полученное значение документа. Поскольку данный атрибут фактически является ссылкой на позиционируемый объект типа "Документ", то для передачи или запоминания самого значения текущего документа журнала рекомендуется использовать следующую конструкцию:

ТекущийДокумент.ТекущийДокумент();

Атрибут ТекущийДокумент может использоваться только в локальном контексте программного модуля формы журнала документов.

Пример использования:

Процедура ПровестиДок()
   Если ТекущийДокумент.Выбран()=1 Тогда 
      Док = СоздатьОбъект("Документ");
      Док.НайтиДокумент(ТекущийДокумент.ТекущийДокумент());
      Если Док.Провести()=1 Тогда
         Предупреждение("Документ " + Док + " проведен.");
      Иначе
         Предупреждение("Документ " + Док + " НЕ ПРОВЕДЕН!!!!!!!!!");
      КонецЕсли; 
   КонецЕсли; 
КонецПроцедуры   // ПровестиДок()

Методы контекста Модуля формы журнала документов

Работа с интервалом видимости записей в журнале

Установить интервал видимости записей в журнале документов обычно может любой пользователь системы «1С:Предприятие». Сделать это можно через главное меню программы (пункты «Действия −> Интервал»), либо с помощью кнопки «Интервал» () на панели инструментов журнала.

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

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

Синтаксис метода:

УстановитьИнтервал(<ДатаНач>, <ДатаКон>, <ФлагИзменения>)

где

  • <ДатаНач> — выражение типа "Дата" — начальная дата интервала журнала документов;
  • <ДатаКон> — выражение типа "Дата" — конечная дата интервала журнала документов;
  • <ФлагИзменения> — флаг, регулирующий возможность интерактивного изменения интервала журнала. Если установлено значение 1, то пользователь может изменить интервал журнала интерактивно, а если 0 — пользователь не может интерактивно изменить интервал журнала. Параметр является необязательным. Значением по умолчанию является 1.

Таким образом, путём установки параметра <ФлагИзменения> в 0, можно сделать недоступными для отдельных категорий пользователей кнопку и пункты меню, отвечающие за установку интервала видимости записей.

Пример:

Если НазваниеНабораПрав() = "Продавец" Тогда
   УстановитьИнтервал(РабочаяДата(), РабочаяДата(), 0);
КонецЕсли;

Получить начальную дату интервала журнала документов позволяет метод НачалоИнтервала() (англоязычный синоним — BegOfRange()). Параметров у метода нет. Возвращаемым значением метода является значение типа "Дата".

Пример использования:

НачИнт = НачалоИнтервала();

Получить конечную дату интервала журнала документов позволяет метод КонецИнтервала() (англоязычный синоним — EndOfRange()). Параметров у метода нет. Возвращаемым значением метода является значение типа "Дата".

Пример использования:

КонИнт = КонецИнтервала();

Организация отбора

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

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

Настройка графы отбора

После того, как механизм отбора будет настроен в Конфигураторе, для установки отбора по конкретной графе или реквизиту документа пользователю надо будет только последовательно выбрать в главном меню пункты «Действия −> Отбор по значению −> Отобрать…», либо щёлкнуть по кнопке «Отбор по значению» () на панели инструментов журнала. При этом на экран будет выведено диалоговое окно «Отбор».

Окно 'Отбор'

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

Установить доступные виды отборов журнала для вызова их в интерактивном режиме позволяет метод ВидыОтбора() (англоязычный синоним — KindsOfSelection()). Использование данного метода влияет на полноту списка видов отбора, который выдается пользователю в диалоге «Отбор» (см. рис. выше) при работе с системой «1С:Предприятие». Он также позволяет совсем запретить выполнение отбора в журнале документов.

Синтаксис метода:

ВидыОтбора(<СписокОтборов>)

где <СписокОтборов> — строковое выражение, которое может принимать следующие значения:

  • * (символ «звёздочка») — для журнала используются все назначенные в Конфигураторе виды отборов;
  • "" (пустая строка) — запрещаются все виды отборов;
  • список имён отборов через запятую — в журнале будут доступны только указанные виды отборов.

Пример использования метода:

ВидыОтбора("Склад, Клиент, Автор");

Примечание: Ограничение списка отборов, выполненное при помощи метода ВидыОтбора(), не исключает использование «запрещённого» отбора средствами встроенного языка.

Установить в форме журнала документов закладки для интерактивного осуществления отбора позволяет метод ЗакладкиОтбора() (англоязычный синоним — TabCtrlSelection()). При включении закладок в верхней части журнала операций появляются ярлыки, соответствующие значениям отбора. Щелчком мыши по ярлыку можно открыть «страницу» журнала документов: такая «страница» будет содержать документы, отобранные по указанному значению.

Синтаксис метода:

ЗакладкиОтбора(<ИмяОтбора>, <ВИнтервалеЖурнала>, <УстановитьНаЗначение>, <ЗначениеОтбора>)

где

  • <ИмяОтбора> — строковое выражение, содержащее имя отбора. Если параметру присвоить значение "" (пустая строка), закладки, установленные ранее методом ЗакладкиОтбора(), будут удалены;
  • <ВИнтервалеЖурнала> — числовое выражение — признак отбора только в интервале журнала. Может принимать значения: 1 — текущие значения отбора для закладок выбираются только по документам в установленном интервале журнала; 0 — текущие значения отбора для закладок выбираются по всем документам журнала. Параметр является необязательным. Значение по умолчанию — 0;
  • <УстановитьНаЗначение> — числовое выражение — признак выбора значения отбора для показа. Параметр может принимать значения: 1 — для показа выбирается отбор по значению, указанному в параметре <ЗначениеОтбора>; 0 — текущее значение отображаемой закладки отбора устанавливается на первое существующее значение. Параметр является необязательным. Значение по умолчанию — 0;
  • <ЗначениеОтбора> — значение отбора. Параметр является необязательным.

Пример использования:

ЗакладкиОтбора("Склады", 1, 1, Константа.ОсновнойСклад);

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

Синтаксис метода:

УстановитьОтбор(<ИмяОтбора>, <ЗначениеОтбора>)

где

  • <ИмяОтбора> — строковое выражение, содержащее имя отбора. Если же параметру присвоить значение "" (пустая строка), отбор отключается;
  • <ЗначениеОтбора> — значение отбора. Параметр является необязательным, если в первом параметре используется пустая строка.

Пример использования:

УстановитьОтбор("Склады", Склад1);

Примечание: Во всех журналах, кроме журнала подчинённых документов, работает также отбор по виду документа. В этом случае синтаксис вызова метода следующий:

УстановитьОтбор(<ВидДокумента>)

где <ВидДокумента> — строковое выражение — вид документа отбора.

Определить, включен отбор в журнале документов или нет, позволяет метод ПолучитьОтбор() (англоязычный синоним — GetSelection()). Возвращаемым значением метода будет число 1, если отбор включен, или 0, если отключен. Имя отбора и текущее значение отбора записываются в переменные, передаваемые методу ПолучитьОтбор() в качестве параметров.

Синтаксис метода:

ПолучитьОтбор(<ИмяОтбора>, <ЗначениеОтбора>)

где

  • <ИмяОтбора> — имя переменной, куда будет записано строковое значение имени отбора. Параметр является необязательным;
  • <ЗначениеОтбора> — имя переменной, куда будет записано значение отбора. Параметр является необязательным.

Пример использования:

Изм = ПолучитьОтбор();

Примечание: Выбирать все существующие значения отбора позволяет глобальная функция ПолучитьЗначенияОтбора() (англоязычный синоним — GetSelectionValues()). Данная функция выбирает все возможные существующие значения указанного отбора, заполняет выбранными значениями объект типа "СписокЗначений" и передает ссылку на этот объект в указанную переменную.

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

Синтаксис функции:

ПолучитьЗначенияОтбора(<ИмяОтбора>, <СписокЗначений>, <ДатаНач>, <ДатаКон>)

где

  • <ИмяОтбора> — строковое выражение с полным названием общего реквизита документа или графы отбора, как они названы в конфигурации;
  • <СписокЗначений> — идентификатор переменной. Если при вызове метода данная переменная содержит объект типа "СписокЗначений", то система заполнит его всеми возможными существующими значениями отбора. Если при вызове метода данная переменная содержит любое другое значение кроме объекта типа "СписокЗначений", то система сама создаст объект типа "СписокЗначений", заполнит его существующими значениями отбора и присвоит переменной ссылку на этот объект;
  • <ДатаНач> — дата начала интервала, в котором будет производиться отбор. Параметр является необязательным. Если параметр не задан, то отбор будет производиться по всем данным;
  • <ДатаКон> — дата конца интервала, в котором будет производиться отбор. Параметр является необязательным. Если параметр не задан, то отбор будет производиться до ТА.

Пример использования:

// Выбрать существующие значения Авторов документов
ПолучитьЗначенияОтбора("Автор", Спис,,);

Предопределенные процедуры Модуля формы журнала документов

Вызов предопределённой процедуры ПриУстановкеИнтервала() (англоязычный синоним — OnSetSelectInJournal()) производится системой «1С:Предприятие» неявно при интерактивной попытке установить интервал в журнале документов. Если в данной предопределённой процедуре установить статус возврата 0 (например, если данному пользователю нельзя изменять интервал журнала), установка не будет выполнена.

Синтаксис процедуры:

Процедура ПриУстановкеИнтервала(<ДатаНач>, <ДатаКон>)
   . . .
КонецПроцедуры

где

  • <ДатаНач> — дата начала интервала журнала;
  • <ДатаКон> — дата конца интервала журнала.

Пример использования:

Процедура ПриУстановкеИнтервала(ДатаНач, ДатаКон)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("У вас нет права изменять интервал журнала!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

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

Описанные в данной статье системные процедуры должны располагаться только в модулях форм журнала документов. Данные процедуры в основном предназначены для расширения возможности программного управления правами доступа к системе.

Вызов предопределённой процедуры ПриУстановкеОтбора() (англоязычный синоним — OnSetSelectInJournal()) производится системой «1С:Предприятие» неявно при интерактивной попытке установить отбор в журнале документов. Если в данной предопределённой процедуре установлен статус возврата 0 (например, если данному пользователю нельзя устанавливать данное значение отбора операций), установка отбора не будет выполнена.

Данная предопределённая процедура может располагаться в глобальном программном модуле и модуле формы журнала. Если данная процедура присутствует в модуле формы соответствующего журнала, то будет вызвана она, если нет, то будет вызвана процедура из глобального модуля.

Синтаксис:

Процедура ПриУстановкеОтбора(<ИмяОтбора>, <3начение>)
   . . .
КонецПроцедуры

где

  • <ИмяОтбора> — строковое значение, представляющее собой имя отбора, то есть название общего реквизита документа (как оно задано в Кон­фи­гу­ра­то­ре), по которому производится отбор;
  • <3начение> — значение отбора.

Пример использования:

Процедура ПриУстановкеОтбора(ИмяОтбора, ЗначОтбора)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если (ИмяОтбора = "Автор") И (ЗначОтбора <> ТекущПользователь) Тогда
         Предупреждение("У вас нет права просматривать чужие документы!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Другие статьи по схожей тематике