Для работы с периодическими реквизитами справочников и периодическими константами в системе «1С:Предприятие» версии 7.7 используется специальный агрегатный тип данных — "
Периодический"
. Объекты данного типа предназначены для возможности записи, редактирования и удаления значений периодических реквизитов справочников и периодических констант непосредственно из программного модуля, без необходимости прибегать к интерактивным операциям.
Контекст работы с объектом
Во всех программных модулях доступ к атрибутам и вызов методов объекта "
Периодический"
может выполняться только при помощи переменной со ссылкой на объект данного типа. Сам объект создаётся при помощи функции СоздатьОбъект()
, а чтобы вызвать метод объекта, имя метода (с указанием необходимых параметров) пишется через точку после идентификатора переменной.
При создании объекта данного типа функции СоздатьОбъект()
в качестве параметра передаётся ключевое слово «Периодический» (англоязычный синоним — «Periodic»):
ВремРеквизиты = СоздатьОбъект("Периодический");
или
TempProp = CreateObject("Periodic");
Атрибуты объекта «Периодический»
Доступ к значению выбранного периодического реквизита справочника или константы предоставляет атрибут Значение
объекта "
Периодический"
. Англоязычный синоним имени атрибута — Value
.
Доступ к дате значения выбранного периодического реквизита справочника или константы предоставляет атрибут ДатаЗнач
объекта "
Периодический"
. Англоязычный синоним имени атрибута — DateVal
.
Пример использования атрибутов:
Вал = СоздатьОбъект("Справочник.Валюты"); // Позиционируем созданный объект Вал по известному коду Вал.НайтиПоКоду(1); Если Вал.Выбран() = 1 Тогда Доллар = Вал.ТекущийЭлемент(); Иначе Предупреждение("Не найдена валюта!"); Возврат; КонецЕсли; ПерВал = СоздатьОбъект("Периодический"); ПерВал.ИспользоватьОбъект("ТекущКурс", Доллар); // Просматриваем историю курса выбранной валюты ПерВал.ОбратныйПорядок(1); ПерВал.ВыбратьЗначения(); Пока ПерВал.ПолучитьЗначение() = 1 Цикл Курс = ПерВал.Значение; ДатаКурса = ПерВал.ДатаЗнач; КонецЦикла;
Как видно из вышеприведённого примера, методика работы с периодическими реквизитами и константами проста:
- С помощью функции
СоздатьОбъект()
создаём объект типа"
Периодический"
. - С помощью метода
ИспользоватьОбъект()
(см. описание метода ниже) связываем созданный объект"
Периодический"
с конкретным периодическим реквизитом или константой. - Используя атрибуты и методы объекта
"
Периодический"
, начинаем работать с выбранным периодическим реквизитом или константой.
Методы объекта «Периодический»
Связать созданный объект типа "
Периодический"
с конкретным реквизитом или константой позволяет метод ИспользоватьОбъект()
. Англоязычный синоним имени метода — UseObject()
.
Синтаксис метода:
ИспользоватьОбъект(<ИмяРеквизита>, <Объект>)
где
- <ИмяРеквизита> — строковое выражение, задающее название (идентификатор) периодического реквизита справочника или название (идентификатор) периодической константы, как они названы в Конфигураторе;
- <Объект> — необязательный параметр. Значение элемента справочника, для которого задаётся применение объекта
"
Периодический"
. Данный параметр требуется задавать только в случае, если <ИмяРеквизита> — периодический реквизит справочника.
Если параметр <ИмяРеквизита> не задан (пустая строка), а параметр <Объект> задаёт элемент справочника, то выборка будет осуществляться по всем периодическим реквизитам для данного элемента справочника.
Задать тип периодическому реквизиту справочника или периодической константе неопределённого типа позволяет метод НазначитьТип()
. Англоязычный синоним имени метода — SetType()
.
Синтаксис метода:
НазначитьТип(<ИмяТипа>, <Длина>, <Точность>)
где
- <ИмяТипа> — строковое выражение — название типа данных, который назначается периодическому реквизиту справочника или периодической константе неопределённого типа, например,
"Строка"
,"Число"
,"Справочник.Товары"
,"Документ.РасходнаяНакладная"
и т.п.; - <Длина> — необязательный параметр. Числовое выражение — длина поля представления данных. Имеет смысл только при задании числового или строкового типа;
- <Точность> — необязательный параметр. Числовое выражение — число знаков числа после десятичной точки. Имеет смысл только при задании числового типа.
Пример использования:
Тов = СоздатьОбъект("Справочник.Номенклатура"); // Позиционируем созданный справочник по известному коду Тов.НайтиПоКоду(51); Если Тов.Выбран() = 1 Тогда ВыбТМЦ = Тов.ТекущийЭлемент(); Иначе Предупреждение("Не найден товар!"); Возврат; КонецЕсли; ПерТМЦ = СоздатьОбъект("Периодический"); ПерТМЦ.ИспользоватьОбъект("ТМЦ", ВыбТМЦ); ПерТМЦ.НазначитьТип("Справочник.Товары");
Получить значение реквизита или константы, актуальное на заданную дату позволяет метод ЗначениеНаДату()
. Англоязычный синоним имени метода — ValueOnDate()
.
Синтаксис метода:
ЗначениеНаДату(<Дата>)
где <Дата> — выражение типа "
Дата"
, задающее дату, на которую необходимо получить значение реквизита или константы.
Примечание: При использовании данного метода текущая позиция выборки, ранее открытая методом ВыбратьЗначение()
, не сдвигается и не сбрасывается.
Пример использования:
К = ПерВал.ЗначениеНаДату(ДатаП);
Найти периодическое значение на заданную дату позволяет метод НайтиЗначение()
(англоязычный синоним — FindValue()
). Метод возвращает 1, если вызов закончился успешно, или 0, если нет. Режим поиска в случае, если на заданную дату не существует значения периодического реквизита, задаётся параметром <Режим>. Само же полученное при этом значение следует считывать из атрибута Значение объекта "
Периодический"
(то есть данный метод выполняет позиционирование, как и методы выборки).
Синтаксис метода:
НайтиЗначение(<Дата>, <Режим>)
где
- <Дата> — выражение, задающее значение даты, на которую требуется найти значение периодического реквизита справочника или периодической константы;
- <Режим> — числовое выражение, значение которого задаёт режим поиска, если на заданную дату не существует значения периодического реквизита. Если −1 (минус единица) — возвращается значение на предыдущую дату, если 0 — возвращается код завершения неуспешной операции, если 1 — возвращается значение на последующую дату.
Пример использования:
Если ПерВал.НайтиЗначение(ДатаП, -1 ) = 1 Тогда К = ПерВал.Значение; Иначе Предупреждение("Значение не найдено!", 3); Возврат; КонецЕсли;
Открыть выборку периодических значений за указанный период позволяет метод ВыбратьЗначения()
(англоязычный синоним — SelectItems()
). Выборка будет происходить при помощи метода ПолучитьЗначение()
среди периодических значений текущего объекта применения, заданного методом ИспользоватьОбъект()
. Возвращаемым значением метода ВыбратьЗначения()
является число: 1 — если вызов метода закончился успешно, 0 — если нет.
Синтаксис метода:
ВыбратьЗначения(<ДатаНачала>, <ДатаКонца>)
где
- <ДатаНачала> — необязательный параметр. Выражение типа
"
Дата"
, задающее дату начала периода выборки периодических значений. Если параметр не задан, то выборка начинается с самой ранней имеющейся даты; - <ДатаКонца> — необязательный параметр. Выражение типа
"
Дата"
, задающее дату конца периода выборки периодических значений. Если параметр не задан, то выборка заканчивается самой последней имеющейся датой.
Пример использования метода:
Вал = СоздатьОбъект("Справочник.Валюты"); // Позиционируем созданный объект Вал по известному коду Вал.НайтиПоКоду(1); Если Вал.Выбран() = 1 Тогда Доллар = Вал.ТекущийЭлемент(); Иначе Предупреждение("Не найдена валюта!"); Возврат; КонецЕсли; ПерВал = СоздатьОбъект("Периодический"); ПерВал.ИспользоватьОбъект("ТекущКурс", Доллар); // Просматриваем историю курса выбранной валюты ПерВал.ОбратныйПорядок(1); ПерВал.ВыбратьЗначения(); Пока ПерВал.ПолучитьЗначение() = 1 Цикл Курс = ПерВал.Значение; ДатаКурса = ПерВал.ДатаЗнач; КонецЦикла;
Установить порядок выборки значений, открытой методом ВыбратьЗначения()
, позволяет метод ОбратныйПорядок()
(англоязычный синоним — BackwardOrder()
), вызов которого должен происходить до вызова метода ВыбратьЗначения()
. Возвращаемым значением метода является число: 1 — если вызов метода закончился успешно, или 0 — если нет. Пример использования метода приведён выше.
Синтаксис:
ОбратныйПорядок(<Режим>)
где <Режим> — числовое выражение, результирующее значение которого задаёт режим выборки периодических значений. Если значение равно 0, устанавливается прямой порядок выборки; если значение отлично от 0 — обратный порядок выборки. Параметр является необязательным. Значение по умолчанию — 1.
Открыть выборку периодических значений, установленных указанным документом, позволяет метод ВыбратьПоДокументу()
(англоязычный синоним — SelectByDoc()
). Выборка будет происходить при помощи метода ПолучитьЗначение()
по всем справочникам и реквизитам. То есть при использовании данного метода игнорируется установка объекта применения, задаваемая методом ИспользоватьОбъект()
. Возвращаемым значением метода ВыбратьПоДокументу()
является число: 1 — если вызов метода закончился успешно, 0 — если нет.
Синтаксис метода:
ВыбратьПоДокументу(<Документ>)
где <Документ> — выражение со значением типа "
Документ"
, указывающее, по какому документу будет производиться выборка.
Пример использования метода:
Процедура ПечатьУстановокДокумента(Док) Если Док.Выбран() = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПечатьИстории"); Таб.ВывестиСекцию("Отчет"); Ист = СоздатьОбъект ("Периодический"); Ист.ВыбратьПоДокументу(Док); Пока Ист.ПолучитьЗначение() = 1 Цикл Таб.ВывестиСекцию("Строка"); КонецЦикла; Таб.Опции(0, 0, 0, 0); Таб.ТолькоПросмотр(1); Таб.Показать("Отчет"); КонецПроцедуры
Выбрать очередное значение из выборки, предварительно открытой методом ВыбратьЗначения()
или ВыбратьПоДокументу()
, позволяет метод ПолучитьЗначение()
(англоязычный синоним — GetValue()
). Само полученное значение следует считывать из атрибута Значение
, а дату этого значения — из атрибута ДатаЗнач
.
У метода ПолучитьЗначение()
нет параметров, а возвращаемым значением является число: 1 — если элемент выбран успешно, 0 — если элемент не выбран (достигнут конец выборки).
Пример использования метода:
Процедура КурсыВалюты(КодВалюты) Вал = СоздатьОбъект("Справочник.Валюты"); // Позиционируем созданный объект Вал по известному коду Вал.НайтиПоКоду(КодВалюты); Если Вал.Выбран() = 1 Тогда Доллар = Вал.ТекущийЭлемент(); Иначе Предупреждение("Не найдена валюта!"); Возврат; КонецЕсли; ПерВал = СоздатьОбъект("Периодический"); ПерВал.ИспользоватьОбъект("Текущ_курс", Доллар); ПерВал.ОбратныйПорядок(1); ПерВал.ВыбратьЗначения(); Пока ПерВал.ПолучитьЗначение() = 1 Цикл Сообщить("Курс на " + Строка(ПерВал.ДатаЗнач) + " = " + ПерВал.Значение); КонецЦикла; КонецПроцедуры
Получить документ, который установил значение периодического реквизита справочника позволяет метод ТекущийДокумент()
(англоязычный синоним — CurrentDocument()
). Данный метод не имеет параметров и используется после получения очередного значения из выборки с помощью метода ПолучитьЗначение()
.
Пример использования:
Процедура ПечатьИстории(Элем) Если Элем.Выбран() = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПечатьИстории"); Таб.ВывестиСекцию("Отчет"); Ист = СоздатьОбъект("Периодический"); // Просмотрим все периодические реквизиты справочника Ист.ИспользоватьОбъект("", Элем); Ист.ВыбратьЗначения(); Пока Ист.ПолучитьЗначение() = 1 Цикл ДокИст = Ист.ТекущийДокумент(); Если ДокИст.Выбран() = 1 Тогда // если значение задано документом Таб.ВывестиСекцию("ПоДокументу"); Иначе // если значение задано интерактивно Таб.ВывестиСекцию("Строка"); КонецЕсли; КонецЦикла; Таб.Опции(0, 0, 0, 0); Таб.ТолькоПросмотр(1); Таб.Показать("Отчет"); КонецПроцедуры
Получить значение текущего элемента справочника позволяет метод ТекущийОбъект()
(англоязычный синоним — CurrentObj()
). Данный метод не имеет параметров и используется после получения очередного значения из выборки с помощью метода ПолучитьЗначение()
. Особенно он полезен при выборке по документу (см. описание метода ВыбратьПоДокументу()
).
Пример использования метода:
Процедура ПечатьУстановокДокумента(Док) // выведем все установки, которые произвел документ Если Док.Выбран() = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПечатьИстории"); Таб.ВывестиСекцию("Отчет"); Ист = СоздатьОбъект("Периодический"); Ист.ВыбратьПоДокумекту(Док); Пока Ист.ПолучитьЗначение() = 1 Цикл ИстОбъект = Ист.ТекущийОбъект(); Если ИстОбъект.Вид() = "Товары" Тогда // если документом заданы изменения в справочнике Товары Таб.ВывестиСекцию("ПоТовару"); ИначеЕсли ИстОбъект.Вид() = "Клиенты" Тогда // если документом заданы изменения в справочнике Клиенты Таб.ВывестиСекцию("ПоКлиенту"); КонецЕсли; КонецЦикла; Таб.Опции(0, 0, 0, 0); Таб.ТолькоПросмотр(1); Таб.Показать("Отчет"); КонецПроцедуры
Получить наименование текущего реквизита справочника позволяет метод ТекущийРеквизит()
(англоязычный синоним — CurrentAttribute()
). Метод не имеет параметров и возвращает строковое значение — наименование текущего реквизита справочника.
Данный метод используется после получения очередного значения из выборки и особенно полезен при выборке по документу или по всем реквизитам. Если выборка производится по документу, то в возвращаемом значении сначала записано наименование справочника, а затем через точку наименования реквизита.
Пример использования метода:
Процедура ПечатьУстановокДокумента(Док) // выведем все установки, которые произвел документ Если Док.Выбран() = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПечатьИстории"); Таб.ВывестиСекцию("Отчет"); Ист = СоздатьОбъект("Периодический"); Ист.ВыбратьПоДокументу(Док); Пока Ист.ПолучитьЗначение() = 1 Цикл Если Ист.ТекущийРеквизит() = "Товары.Цена" Тогда // если документом заданы изменения Цены Товара Таб.ВывестиСекцию("ПоЦенеТовара"); ИначеЕсли Ист.ТекущийРеквизит() = "Клиенты.Статус" Тогда // если документом заданы изменения Статуса Клиента Таб.ВывестиСекцию("ПоСтатусуКлиента"); КонецЕсли; КонецЦикла; Таб.Опции(0, 0, 0, 0); Таб.ТолькоПросмотр(1); Таб.Показать("Отчет"); КонецПроцедуры
Получить номер строки документа, изменившей периодическое значение реквизита справочника, позволяет метод НомерСтроки()
(англоязычный синоним — LineNum()
). Он не имеет параметров и используется после получения очередного значения из выборки. Особенно полезен при выборке по документу или по всем реквизитам.
Пример использования метода:
Процедура ПечатьИстории(Элем) Если Элем.Выбран() = 0 Тогда Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПечатьИстории"); Таб.ВывестиСекцию("Отчет"); Ист = СоздатьОбъект("Периодический"); // Просмотрим все периодические реквизиты справочника Ист.ИспользоватьОбъект("", Элем); Ист.ВыбратьЗначения(); Пока Ист.ПолучитьЗначение() = 1 Цикл ДокИст = Ист.ТекущийДокумент(); Если ДокИст.Выбран() = 1 Тогда // если значение задано документом НомСтрДок = Ист.НомерСтроки(); Таб.ВывестиСекцию("ПоДокументу"); Иначе // если значение задано интерактивно Таб.ВывестиСекцию("Строка"); КонецЕсли; КонецЦикла; Таб.Опции(0, 0, 0, 0); Таб.ТолькоПросмотр(1); Таб.Показать("Отчет"); КонецПроцедуры
Выполнить запись периодического значения на заданную дату позволяет метод Записать()
(англоязычный синоним — Write()
). Если на заданную дату уже существует запись, то она модифицируется. Возвращаемым значением метода будет число: 1 — если вызов метода закончился успешно, 0 — если нет.
До вызова данного метода следует само значение записать в атрибут Значение
, а дату этого значения записать в атрибут ДатаЗнач
.
Пример использования метода:
Процедура ЗаписьКурсаДоллара(Курс) Вал = СоздатьОбъект("Справочник.Валюты"); // Позиционируем созданный объект Вал по известному коду Вал.НайтиПоКоду(1); Если Вал.Выбран() = 1 Тогда Доллар = Вал.ТекущийЭлемент(); Иначе Предупреждение("Не найдена валюта!"); Возврат; КонецЕсли; ПерВал = СоздатьОбъект("Периодический"); ПерВал.ИспользоватьОбъект("Текущ_курс", Доллар); ПерВал.Значение = Курс; ПерВал.ДатаЗнач = РабочаяДата(); ПерВал.Записать(); КонецПроцедуры
Удалить периодическое значение на заданную дату позволяет метод Удалить()
(англоязычный синоним — Delete()
). Возвращаемым значением метода будет число: 1 — если вызов метода закончился успешно, 0 — если нет. До вызова данного метода атрибут ДатаЗнач
должен содержать дату удаляемого периодического значения.
Пример использования метода:
Процедура ЧисткаКурсов() Вал = СоздатьОбъект("Справочник.Валюты"); // Позиционируем созданный объект Вал по известному коду Вал.НайтиПоКоду(1); Если Вал.Выбран() = 1 Тогда Доллар = Вал.ТекущийЭлемент(); Иначе Предупреждение("Не найдена валюта!"); Возврат; КонецЕсли; ПерВал = СоздатьОбъект("Периодический"); ПерВал.ИспользоватьОбъект("Текущ_курс", Доллар); ПерВал.ВыбратьЗначения(); Пока ПерВал.ПолучитьЗначение() = 1 Цикл Курс = ПерВал.Значение; ДатаКурса = ПерВал.ДатаЗнач; Если Курс < 1000 Тогда ПерВал.Удалить(); КонецЕсли; КонецЦикла; КонецПроцедуры
Другие статьи по схожей тематике