Регистр сведений не работает отбор

Отбор регистра сведений

Здравствуйте!
Релиз платформы: 8.1.11.67
Релиз БП: 1.6.9.4
Вот пример из синтаксис-помощника:

КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НаборКурсов.Отбор.Валюта.Установить(Доллар);

Не работает. У «НаборКурсов.Отбор» нет свойств, реквизитов,есть только методы.
Что-то изменилось или я что-то делаю не так?

А если пишу так:

. то не строчке «Набор.Записать()» ругается, что в наборе не установлен отбор.

(4)
Прочитал.
«Список свойств объекта (Отбор) зависит от свойств регистра: для регистров сведений, для которых в конфигураторе установлен режим записи «Подчинение регистратору», отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений»

Регистр сведений «КурсыВалют» — независимый, периодический, но не «Период», не «Валюта» (а это измерение) установить не получается.

(10) чайник, это же пример!

В моем случае ДокументОснование — это измерение регистра «РазмещенныеПоступления», а «Размещено» — ресурс.

Да хоть кофейник!
В контексте Вашего примера вылетает ошибка:
Поле объекта не обнаружено (ДокументОснование)
на строке:
НаборЗаписей.Отбор.ДокументОснование.Установить(ДокументОснование);

(21)
Да, спасибо, работает.

НаборКурсов.Отбор.Период.Установить(ТекущаяДата());
писал:
Спасибо!

Источник

Как установить отбор по измерениям у подчиненного регистра сведений

Доброе время суток,

Бухгалтерия 2.0.
Сделал отбор по регистратору у подчиненного регистра сведений:

Но этого не достаточно, надо набор записей отбирать дополнительно по сотруднику.
Пытался так сделать:

Получаю ошибку: Поле объекта не обнаружено (Сотрудник)

Это стандартная конфигурация и там есть данное измерение:

В любой непонятной ситуации читайте синтаксис-помощник:

РегистрСведенийНаборЗаписей. .Отбор (InformationRegisterRecordSet. .Filter)
РегистрСведенийНаборЗаписей. (InformationRegisterRecordSet. )
Отбор (Filter)
Использование:

Только чтение.
Описание:

Тип: Отбор.
Содержит объект Отбор, по которому осуществляется текущая фильтрация записей при считывании или записи набора. Список свойств объекта зависит от свойств регистра: для регистров сведений, для которых в конфигураторе установлен режим записи «Подчинение регистратору», отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений, для непериодических — только по значению измерений.
Разделители с уровнем разделения НезависимоИСовместно, в состав которых входит регистр, используются наравне с измерениями.
Важно! Отбор может устанавливаться только на равенство.

Сервер, толстый клиент, внешнее соединение.

Источник

Выборка из регистра сведений с отбором

вроде бы ничего особенного но я голову сломал.

Мне нужно сделать выборку из регистра сведений (он непериодический). Из примера понятно:

Отб_ = Новый Структура();
отб_.Вставить(«ГрафикРаботы»,гр);
отб_.Вставить(«Месяц»,НачалоМесяца(Дата(Год(ВыборкаПоРаботнику.ДатаТабеля),Месяц(ВыборкаПоРаботнику.ДатаТабеля),Число(НомерДня))));
рег=регистрыСведений.ГрафикиРаботыПоВидамВремени.Выбрать(отб_);

В регистре есть измерения «ГрафикРаботы»,»Месяц» и еще несколько.
Так вот отбор только по «ГрафикРаботы» работает, а по двум измерениям — нет. При выполнении кода пишет что неверно указан параметр в функции .Выбрать(), т.е. неверный отб_.
Может я конечно и туплю, но уже голову сломал — не могу эту проблему победить. Подскажите где собака? (зарыта)

С уважением, Yuri aka Frob.

(1) frob_st, Из синтаксис-помщника:

Важно! Структура может содержать только один элемент.
Если параметр не указан, то отбор не используется.

Читайте внимательно синтаксис-помошник:

В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее». Вид сравнения может быть только Равно.

Читайте также:  Как настроить приставку smart box

Скорее всего у вас неиндексированные поля для отбора.

Тип: Структура.
Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры — значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее». Вид сравнения может быть только Равно.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Важно! Структура может содержать только один элемент.

Зачем такой ужас?

А отбор у вас, возможно, не работает потому, что Дата() возвращает дату и время, а в регистре измерение использует только дату.
Попробуйте так:

Источник

Регистр сведений и Динамический список, почему перестаёт работать отбор?

Есть обработка, на форме три динамических списка. Один — документы заказы покупателя, Два — подчиненные документы, Три — регистр сведений самописный.
Так вот, всё работало хорошо, пока я не заполнил регистр сведений на 1000+ записей. Тут то всё и рухнуло.

Один — заполняется нормально, Два тоже работает стабильно, хотя и там и там документов 10 000+, но вот регистр мой почему-то отказывается воспринимать отбор, когда в нём много записей. На 900+ записей работает, а на 1000+ просто пустой динамический список, при тех же операциях. забиваю регистр тоже одной и той же обработкой.

Обычный вроде код. Обычный вроде регистр. Регистры имеют ограничения?

Куда посмотреть, куда копать?

У меня по прогнозу в регистр будет за месяц 10 000 + записей.

(4) SPID, Не помогло. или может помогло. Но картина не поменялась. А вот идея проверить с формы отбор от (7) RocKeR_13 — по крайней мере смог увидеть, что с формы работает.

(7) RocKeR_13, с формы проверил.. с формы отбор рабоатет нормально. А программный падает(((
У меня два списка тоже отлично работают, падает только мой))

Тот же Заказ, при записях 1000+ не работает отбор, а при записях 1000- работает. фантастика) пробелы точно не играет тут роль. Где-то в другом косячу)))

(10) aka Любитель XML, регистр без регистратора. Регистр — некая история общения между двумя отделами если вдаваться в подробности зачем) Ни чего лишнего)))

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

(12) RocKeR_13, ни знаю почему, но как только ушел от произвольного запроса, так всё заработало!

Решено!
Для тех кто по гуглу придёт, попробую правильно изложить. Суть проблемы: был динамический список, который формировался на основе произвольного запроса. Динамический список брал данные с регистра сведений, как только регистр сведений переполнялся 1000+ переставал работать программный отбор, именно программный, при этом с формы отбор работал. По предложению RocKeR_13, убрал произвольный запрос и поставил на основание таблицы, так все нормально вернулось в своё русло. И даже сравнение по ссылкам заработало, хотя раньше он отказывался сравнивать. Программный код фактически не менял. Фича 1с или у меня кривые руки)))

Читайте также:  Муж уже три года не работает как быть

Интересно реально почему при произвольном запросе не работало?( т.е. работало на количество записей меньше 1000

(18) RocKeR_13, я пробовал не «содержит», а «подобно» по идее там и «%» не нужны должны быть, я даже больше пробовал, просто со строкой фиксированной сравнивал и всё равно программный не срабатывал при 1000+ пока отпустил дальнейшие исследование)) где-то явно баг, может регистр глючит или дин список, или сам отбор. Но вот реально ведь всё работает идеально когда меньше 1000, только больше всё ложится))) вот парадокс, благо не успел обновить рабочею конфу и заметил. Буду дальше отлавливать баги. Спасибо ещё раз за идею на прямую таблицу указать!

ВЫВОД . Скорее всего не работало как правильно сказал RocKeR_13 из-за ПРЕДСТАВЛЕНИЯ

Тип: Строка.
Исходная строка.
Возвращаемое значение:

Вы ставите отбор на строку, или ссылку?

Попробуйте использовать ссылки

ПРЕДСТАВЛЕНИЕ(ДорожнаяКарта.ДокументОснования.Ссылка) КАК Заказ,
ДорожнаяКарта.ДокументОснования.Ссылка как ЗаказСсылка
****
//Документ = СокрЛП(СсылкаНаЗаказПокупателя ());
Документ = СсылкаНаЗаказПокупателя (); //типЗнч Документ.ссылка

Источник

Программирование в 1С для всех

В предыдущей статье Работа с набором записей регистра сведений мы узнали, как использовать объект набор записей регистра сведений для группового создания записей. В процессе записи набора наш регистр или полностью очищается, или добавляются новые записи, сохраняя при этом старые. Причем контроль уникальности по измерениям во втором случае не ведется, и может возникнуть ошибка «Запись с такими ключевыми полями существует!»

Но очень часто возникают задачи, когда нужно отредактировать какие-то уже имеющиеся записи, например, сделав отбор по какому-то одному или нескольким измерениям. Эти задачи выполняются при помощи отборов набора записей.

Рассмотрим следующую задачу: в моей конфигурации есть независимый периодический регистр сведений «ЦеныНаТопливо», который имеет следующую структуру.

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

В этом коде с помощью свойства Отбор объекта НаборЗаписей сделать так, чтобы в наборе были записи, соответствующие только нужному нам поставщику.

В отборе как к свойству объекта можно обращаться ко всем измерениям регистра сведений и к периоду, если имеем дело с периодическим регистром сведений. Если регистр сведений подчинен регистратору, то отбор возможен только по регистратору.

Когда мы обращаемся к свойству объекта Отбор посредством названия измерения, то мы получаем объект Элемент отбора, у данного объекта только один метод — Установить. Данный метод устанавливает значение отбора.

Можно производить отбор по одному полю, а можно и по нескольким. В случае отбора по нескольким полям логическая связь между полями будет осуществляться с помощью булевой операции «И».

Имейте в виду, что отбор в регистрах сведений можно устанавливать только на равенство!

Читайте также:  Перезагрузить смартфон у которого не работает кнопка включения

После того, как мы установили отбор, нам необходимо извлечь данные из базы в объект Набор записей, осуществляется это с помощью метода Прочитать. Этот метод считывает записи из базы данных по установленному отбору и записывает их в объект НаборЗаписей.

Как Вы уже знаете, объект Набор записей является коллекцией объектов Запись регистров сведений. Поэтому после того, как мы с помощью метода Количество проверили, есть ли в принципе записи по данному отбору, мы обходим данную коллекцию с помощью цикла: Для каждого…Цикл. Где переменная НормаЗапись является объектом Запись регистров сведений. С помощью этого объекта мы получаем доступ ко всем полям записи регистра сведений и можем их изменять на свое усмотрение. После того, как мы поменяли все нужные нам записи, необходимо записать набор. Обращаю внимание, что записывается именно набор в целом, а не конкретная запись по отдельности.

Причем, с помощью отбора можно проверять наличие уже существующих записей. Например, будем записывать данные в наш регистр, но перед этим проверим, есть ли записи по нужным полям.

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

Имейте ввиду, что после того, как вы примените метод Прочитать к набору записей, то состав набора изменится согласно установленному отбору.

С помощью набора записей можно не только создавать новые записи, но и удалять имеющиеся. Например, решим следующую задачу: очистим все записи для определенного вида топлива.

В этом коде мы получаем данные для определенного набора и очищаем их.

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Источник

Оцените статью