Как в периодическом независимом регистре сведений «КурсыВалют» удалить все записи по валютам с наименованиями «EUR» и «USD», период которых меньше 01 января 2005 года?
Сначала получим таблицу записей, которые необходимо оставить. Поскольку условий несколько, да еще и не все они на равенство, оптимальнее это сделать при помощи запроса. Следующий запрос даст нам желаемое:
Источником данных для запроса послужила таблица записей регистра.
Были применены отборы, чтобы в результат попали записи, для которых период более или равен 01 января 2005 года, или наименования не USD и не EUR. Обратите внимание: при составлении условия по периоду, чтобы не пользоваться параметром запроса, прямо в тексте запроса применили литерал даты ДАТАВРЕМЯ(), в котором части даты указываются в «обратном» порядке: год, месяц, порядковый номер дня в месяце.
Результатом запроса будет таблица, в которой по каждой записи заполнены все поля регистра сведений КурсыВалют.
Далее выполняем запрос, выгружаем результат в таблицу значений ТаблицаОставляемыхЗаписей
Создаем переменную НаборЗаписей, тип значения РегистрСведенийНаборЗаписей.КурсыВалют, выгружаем в нее таблицу значений ТаблицаОставляемыхЗаписей.
Поскольку сама таблица была получена из регистра, то названия ее колонок совпадут с названиями полей регистра, а значит, загрузка пройдет успешно.
Далее записываем заполненный только нужными записями набор записей в регистр с замещением его исходных данных (как вы уже помните, параметр Замещать метода Записать() по умолчанию имеет значение Истина).
При составлении запроса для полей, имеющих составной тип данных, например, измерение "Объект" в регистре сведений "Контактная информация", часто возникает необходимость проверить тип значения этого поля.
Проверку можно выполнить с помощью оператора ССЫЛКА
Виртуальная таблица "РегистрРасчета.<ИмяРегистра>.ДанныеГрафика" определена для тех регистров расчета, которые поддерживают период действия. При конфигурировании с таким регистром расчета необходимо связать непериодический регистр сведений который и будет поставлять информацию о графике.
Для более удобного получения данных графика в системе определена виртуальная таблица, которая помимо прочих полей содержит виртуальные поля:
То есть для каждого числового ресурса регистра сведений, назначенного регистру расчета в качестве графика, можно получить для строк регистра расчета его сумму с учетом базового периода строки регистра расчета, периода действия, периода регистрации и фактического периода действия.
При построении виртуальной таблицы данных графика происходит соединение таблиц регистра расчета, регистра сведений, а в случае получения поля "<Имя ресурса графика>ФактическийПериодДействия" - еще и таблицы фактического периода действия регистра расчета. Так как данные для всех четырех перечисленных полей получаются путем соединения с таблицей регистра сведений по разным условиям, это значит, что в общем случае будет выполнено четыре соединения с таблицей регистра сведений.
При получении виртуальных таблиц система старается действовать оптимально, в частности, выполняется только то количество соединений, которое необходимо для получения полей виртуальной таблицы перечисленных в разделе "ВЫБРАТЬ".
Следствием этого является то, что при составлении текста запроса не следует выбирать поля данной виртуальной таблицы "про запас". Эта рекомендация может показаться общей, но следует помнить, что, как правило, получение "ненужного" поля в запросе к реальным таблицам или другим виртуальным таблицам приводит к некоторому увеличению сетевого трафика и, в общем случае, весьма незначительному снижению производительности. Ясно, что получение в запросе пяти полей регистра мало чем отличается от получения в запросе еще одного, шестого поля, если речь не идет о "больших" полях. Но в случае виртуальной таблицы данных графика появление еще одного виртуального поля из ряда перечисленных выше изменяет ситуацию принципиально. Время выполнения запроса может измениться в разы. То есть рекомендация составлять запросы оптимально по части числа выбираемых полей принимает особый смысл для данной виртуальной таблицы.
Следует также заметить, что принципиальное влияние на производительность запроса к виртуальной таблице данных графика оказывает не столько число виртуальных полей, сколько число их различных "видов".
Рассмотрим пример. В регистре сведений, назначенном в качестве графика, есть ресурсы "ЧислоДней" и "ЧислоЧасов". Рассмотрим три запроса.
При сопоставлении времени выполнения этих запросов мы обнаружим, что второй запрос при прочих равных условиях выполняется почти то же время, что и первый запрос, несмотря на появление еще одного виртуального поля. А вот третий запрос исполняется заметно дольше (возможно, в несколько раз), чем второй, несмотря на одинаковое число выбираемых виртуальных полей.
Это связано с тем, что для получения полей "ЧислоДнейПериодРегистрации" и "ЧислоЧасовПериодРегистрации" выполняется одно соединение с регистром сведений по значению поля "ПериодРегистрации" регистра расчета (сколько бы ресурсов регистра при этом не пришлось суммировать). А при получении еще и поля "ЧислоЧасовПериодДействия", выполняется еще одно соединение с регистром сведений, которое выполняется по значению поля "ПериодДействия".