Приведенный выше пример подойдет, но нужно будет учесть моменты: если элемент -группа, или если значение установлено документом? Удаление нужно поместить в блок «Попытка Исключение КонецПопытки;»
Для свертки баз широко используется такая процедура:
Процедура УдалениеЗначенийПериодическихРеквизитов(ДатаСвертки)
Сообщить(Строка(ТекущееВремя())+» Удаляем значения периодических реквизитов в справочниках до даты свертки»);
Периодический = СоздатьОбъект(«Периодический»);
Для т = 1 По Метаданные.Справочник() Цикл
Состояние(«Удаление значений периодических реквизитов справочника «+Метаданные.Справочник(т).Идентификатор);
// Список периодических реквизитов
ПериодическиеРеквизиты = СоздатьОбъект(«СписокЗначений»);
Для п = 1 По Метаданные.Справочник(т).Реквизит() Цикл
Если Метаданные.Справочник(т).Реквизит(п).Периодический = 1 Тогда
// Есть периодический реквизит
ПериодическиеРеквизиты.ДобавитьЗначение(Метаданные.Справочник(т).Реквизит(п).Идентификатор);
КонецЕсли;
КонецЦикла;
Если ПериодическиеРеквизиты.РазмерСписка() > 0 Тогда
Сообщить(«Удаление значений периодических реквизитов справочника «+Метаданные.Справочник(т).Идентификатор);
Справ = СоздатьОбъект(«Справочник.»+Метаданные.Справочник(т).Идентификатор);
Если Метаданные.Справочник(т).Владелец.Выбран() = 1 Тогда
// подчиненный справочник (необходимо сначала выбрать владельца)
Владельцы = СоздатьОбъект(«Справочник.» + Метаданные.Справочник(т).Владелец.Идентификатор);
Владельцы.ВыбратьЭлементы();
Пока Владельцы.ПолучитьЭлемент() = 1 Цикл
Справ.ИспользоватьВладельца(Владельцы.ТекущийЭлемент());
Справ.ВыбратьЭлементы();
Пока Справ.ПолучитьЭлемент() = 1 Цикл
Для СчетчикЦикла = 1 По ПериодическиеРеквизиты.РазмерСписка() Цикл
СтрокаСостояния();
ИдРекв = ПериодическиеРеквизиты.ПолучитьЗначение(СчетчикЦикла);
//Сообщить(«Текщий период. реквизит = «+ИдРекв);
Периодический.ИспользоватьОбъект(Строка(ИдРекв), Справ.ТекущийЭлемент());
// оставляем только одно значение периодического реквизита до даты свертки
// остальные удаляем
Периодический.ОбратныйПорядок(1);
Периодический.ВыбратьЗначения(, ДатаСвертки);
СчетчикЗначений = 0;
Пока Периодический.ПолучитьЗначение() = 1 Цикл
Если СчетчикЗначений > 0 Тогда
Периодический.Удалить();
КонецЕсли;
СчетчикЗначений = СчетчикЗначений + 1;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Иначе
// обычный справочник
Справ.ВыбратьЭлементы();
Пока Справ.ПолучитьЭлемент() = 1 Цикл
Для СчетчикЦикла = 1 По ПериодическиеРеквизиты.РазмерСписка() Цикл
СтрокаСостояния();
ИдРекв = ПериодическиеРеквизиты.ПолучитьЗначение(СчетчикЦикла);
//Сообщить(«Текщий период. реквизит = «+ИдРекв);
Попытка //т.к. для групп многие реквизиты не доступны
Периодический.ИспользоватьОбъект(ИдРекв, Справ.ТекущийЭлемент());
Исключение
//Сообщить(«Невозможно получить реквизит [«+ИдРекв+»] для элемента «+ Справ.Код);
Продолжить;
КонецПопытки;
// оставляем только одно значение периодического реквизита до даты свертки
// остальные удаляем
Периодический.ОбратныйПорядок(1);
Периодический.ВыбратьЗначения(, ДатаСвертки);
СчетчикЗначений = 0;
Пока Периодический.ПолучитьЗначение() = 1 Цикл
Если СчетчикЗначений > 0 Тогда
Попытка //нельзя удалить значения, установленные документами
Периодический.Удалить();
Исключение
//ОписаниеОшибки()
КонецПопытки;
КонецЕсли;
СчетчикЗначений = СчетчикЗначений + 1;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла
КонецПроцедуры // УдалениеЗначенийПериодическихРеквизитов()
Для работы с периодическими реквизитами справочников и периодическими константами в системе «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 Тогда ПерВал.Удалить(); КонецЕсли; КонецЦикла; КонецПроцедуры
Другие статьи по схожей тематике
- Работа с константами
- Работа с датами
- Работа с журналами документов
- Работа со справочниками в 1С
- Работа с формами
- Работы с табличными формами
Может кто подскажет есть справочник Основные Средства Нужно удалить периодические реквизиты Идентификатор ВосстановительнаяСтоимость как правильно прописать коде. КонецПроцедуры
Как правильно прописать строку ПерВал.ИспользоватьОбъект(«»тут»»); Идентификатор ВосстановительнаяСтоимость
пробовал Основные.ТекущийЭлемент?
Продам СП, дорого! ИспользоватьОбъект(<?>) Синтаксис: ИспользоватьОбъект(<ИмяРеквизита>,<Объект>) Назначение: Сопоставляет объект типа ‘Периодический’ периодическому реквизиту справочника или периодической константе. Возвращает: 1 — если вызов метода закончился успешно, 0 — иначе. Параметры: <ИмяРеквизита> — строка с названием периодического реквизита справочника или периодической константы; <Объект> — значение элемента справочника, для которого задается применение периодического реквизита (для констант не нужен).
Укажите в каком месте ошибка.
Пишет ПерВал.ИспользоватьОбъект(«ВосстановительнаяСтоимость»,Основные.ТекущийЭлемент); {D:БУХГАЛТЕРИЯ ОТ 13102016ОЧИСТКА.ERT}: Поле агрегатного объекта не обнаружено (ТекущийЭлемент)
Основные.ТекущийЭлемент — ? Странно в одной процедуре, у тебя экран в 10″ что она не помещается целиком? не удивительно.
Проверил работает. Всем Спасибо
Стоп. А выборка не сбивается?
Тэги: 1С 7.7 и ранее
Комментарии доступны только авторизированным пользователям
- АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
- ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Работа с регистрами сведений в 1С 8.x
- Как добавить запись в непериодический независимый регистр сведений?
- Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?
- Как удалить все записи из независимого регистра сведений?
- Как удалить записи независимого регистра сведений с отбором по конкретной организации?
- Как добавить запись в периодический независимый регистр сведений?
- Как прочитать (изменить) записи в периодическом независимом регистре сведений?
- Как удалить записи в периодическом независимом регистре сведений?
- Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
- Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?
- Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
- Как «сделать периодическим» реквизит уже заполненного справочника?
- Как добавить записи в регистр сведений, подчиненный регистратору?
- Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
- Как удалить записи из регистра сведений, подчиненного регистратору?
Как добавить запись в непериодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись. Номенклатура = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;
НаборЗаписей.Записать();
Как считать содержимое непериодического независимого регистра сведений «СобственныеКонтрагенты»?
НаборЗаписей = РегистрыСведений.СобственныеКонтрагенты.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
// Перебрать записи в цикле…
Для Каждого Запись из НаборЗаписей Цикл
РегистрКонтрагент = Запись.Контрагент;
РегистрВидСвязи = Запись.ВидСвязи;
РегистрОбъект = Запись.Объект;
КонецЦикла;
// … или выгрузить записи в таблицу значений.
ТаблицаЗаписей = НаборЗаписей.Выгрузить();
ВЫБРАТЬ
*
ИЗ
РегистрыСведений.СобственныеКонтрагенты
Как удалить все записи из независимого регистра сведений?
НаборЗаписей = РегистрыСведений.ТорговоеОборудование.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
Как удалить записи независимого регистра сведений с отбором по конкретной организации?
НаборЗаписей = РегистрыСведений.ОбъектыСтроительстваОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация);
НаборЗаписей.Записать();
Как добавить запись в периодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта);
НаборЗаписей.Отбор.Период.Установить(ТекущаяДата);
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Валюта = ТекущаяВалюта;
НовЗапись.Период = ТекущаяДата;
НовЗапись.Курс = ТекущийКурс;
НовЗапись.Кратность = ТекущаяКратность;
НаборЗаписей.Записать(Истина);
Как прочитать (изменить) записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.Валюты.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(ДатаЗаписи);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.Валюта) + " " + Строка(Запись.Курс));
// Изменение данных полей записи.
Запись.Курс = 0;
КонецЦикла;
НаборЗаписей.Записать();
Как удалить записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| *
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| (КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1)
| ИЛИ
| НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"")
| И
| НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))";
ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
НаборЗаписей.Записать();
Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)?
Запрос = Новый Запрос;
МассивВалют = Новый Массив;
МассивВалют.Добавить(Валюта1);
МассивВалют.Добавить(Валюта2);
Запрос.УстановитьПараметр("МассивВалют", МассивВалют);
Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения);
Запрос.Текст = "
|ВЫБРАТЬ
| ВалютыСрезПоследних.Валюта,
| ВалютыСрезПоследних.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В (&МассивВалют)) КАК ВалютыСрезПоследних";
ТаблицаКурсов = Запрос.Выполнить().Выгрузить();
Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
Процедура ЗаменаПериода()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОтветственныеЛицаОрганизации.Период,
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница,
| ОтветственныеЛицаОрганизации.ОтветственноеЛицо
|ИЗ
| РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации
|ГДЕ
| ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1)
| И
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование | ПОДОБНО "Групп-Трейдинг"
| И
| (ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL
| ИЛИ
| НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Продавец"
| ИЛИ
| ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Кладовщик"))";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи();
Пока Выборка.Следующий() Цикл
Запись.Период = Выборка.Период;
Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница;
Запись.ОтветственноеЛицо = Выборка.ОтветственноеЛицо;
Запись.Прочитать();
Если Запись.Выбран() Тогда
Запись.Период = Дата(2004, 1, 1);
Запись.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры;
Как «сделать периодическим» реквизит уже заполненного справочника?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| &ДатаУстановки КАК Период,
| Проекты.Ссылка КАК Проект,
| Проекты.Ответственный
|ИЗ
| Справочник.Проекты КАК Проекты
|ГДЕ
| (НЕ(Проекты.ЭтоГруппа)) И (НЕ(Проекты.Ответственный = &Ответственный))";
Запрос.УстановитьПараметр("Ответственный", Справочники.Пользователи.ПустаяСсылка());
Запрос.УстановитьПараметр("ДатаУстановки", Дата(2000,1,1));
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.ЗакреплениеПроектов.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаРезультат);
НаборЗаписей.Записать();
Как добавить записи в регистр сведений, подчиненный регистратору?
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
НоваяЗапись.ЛимитПоставщика = 50;
НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
НоваяЗапись.ЛимитПокупателю = 25;
НаборЗаписей.Записать(Ложь);
Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) +
" " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки));
// Изменение данных полей записи.
Запись.ПроцентСкидкиНаценки = 0;
КонецЦикла;
НаборЗаписей.Записать();
Как удалить записи из регистра сведений, подчиненного регистратору?
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ЦеныНоменклатурыКонтрагентов.Регистратор
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать();
КонецЦикла;
Задайте вопрос программисту 1С
Универсальная обрезка и очистка периодических реквизитов
16.05.2017
Обработка по обрезке и очистке периодики в справочниках. Реализованы множественные фильтры для элементов и владельцев (если таковые имеются), выбор периодических реквизитов. Находит свое применение при обрезке баз (запоминаем значения на дату обрезки и смело удаляем все документы, которые устанавливают периодические реквизиты справочников ). Кроме того обработка позволяет очищать значения периодических реквизитов за период (например до даты обрезки) — тем самым уменьшить размер 1sconst.dbf — значения периодических реквизитов. Простая, но удобная и полезная.
На уникальность не претендую, но простой в эксплуатации обработки не нашел, пришлось самому написать. Пользуйтесь. Не забываем плюсовать.