Меню

Неверный тип параметра измерения основного регистра 1с



Получение базовых данных в регистрах расчета

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

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

Мы не будем рассматривать эти способы подробно, рассмотрим только их отличия и область применения.

Метод ПолучитьБазу()

Метод ПолучитьБазу() определен для объектов РегистрРасчетаМенеджер. и РегистрРасчетаЗапись. . Метод позволяет задать ресурсы базовых регистров, по которым необходимо получить обороты, задать поля, в разрезе которых нужно получить обороты и задать правила сопоставления измерений основного и базовых регистров расчета.

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

Имена измерений и ресурсов базовых регистров задаются в формате . .

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

В приведенном выше примере измерение «Физлицо» основного регистра при получении оборотов будет сопоставляться с измерением «Физлицо» базового регистра «ОсновныеНачисления» и измерением «Работник» базового регистра «ДополнительныеНачисления».

Таблица языка запросов для получения базовых данных

Для получения базовых данных в языке запросов определены виртуальные таблицы «РегистрРасчета. .База «. В качестве параметров виртуальной таблицы задаются измерения основного регистра, измерения базового регистра и поля, в разрезе которых нужно получить базовые данные. Измерения и разрезы задаются как массив (или список значений) строк с именами измерений.

Пример написания запроса с использованием виртуальных таблиц базовых данных:

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

Сравнение

Заметным отличием функционального метода получения базовых данных и получения при помощи запроса является то, что в функциональном методе одним вызовом метода можно получить базовые данные по всем базовым регистрам, а при использовании запросов получение базовых данных делается запросом к нескольким таблицам — по числу базовых регистров. Тем не менее, рекомендуемым способом получения данных является получение данных запросом. Это позволит, например, получить не только данные базовых видов расчета, но и дополнительную информацию, необходимую для расчета.

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

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

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

Источник

Свойство Базовое измерения регистра расчета

Одна из задач, решаемых при помощи регистров расчета — получение оборотов регистра при помощи запросов к виртуальной таблице базовых данных или метода ПолучитьБазу() . Обороты регистра получаются на основании большого числа разных исходных данных, в том числе настроек и содержимого плана видов расчета, настроек регистра расчета, параметров виртуальной таблицы базовых данных и т.п. Но одну из существенных ролей при получении базовых данных играют измерения регистра расчета.

Роль измерений при параметризации виртуальной таблицы базовых данных

Один из важных параметров виртуальной таблицы базовых данных — список измерений, по которым выполняется сопоставление записей регистра при суммировании данных. Для решения разных задач, возможно, придется выполнять суммирование ресурсов регистра по разным наборам измерений. Рассмотрим на примере регистра, предназначенного для расчета зарплаты и имеющего три измерения:

Представим, что необходимо решить следующие задачи:

  • Получение для тех или иных записей регистра оборотов регистра по всем записям с таким же подразделением, как и у исходной записи. Это может быть, например, расчет надбавки, зависящий от начислений всего подразделения.
  • Получение оборотов по записям с таким же Физлицом и Подразделением. Т.е. получение суммы начислений работника, которые ему же начислены в том же подразделении (исключаются начисления по этому же работнику, которые он получил по другим подразделениям).
  • Получение оборотов по записям с таким же Физлицом и такой же Организацией (все начисления Физлицу в рамках той же организации).

Все перечисленные задачи решаются при помощи запросов к виртуальной таблице базовых данных. При этом параметры «Измерения основного регистра» и «Измерения базового регистра» будут для всех трех задач разными. В первом случае измерение одно — «Подразделение»; во втором — «Физлицо» и «Подразделение»; в третьем — «Организация» и «Физлицо».

Оптимизация получения базовых данных

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

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

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

Именно эту задачу и позволяет решить свойство Базовое измерения регистра расчета. Устанавливая это свойство нескольким измерениям, разработчик конфигурации тем самым создает индекс по всем отмеченным как «базовые» измерениям (более подробно — см. раздел «Индексы таблиц базы данных»).

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

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

При выборе базовых измерений следует также оценивать их «селективность», т.е. представлять насколько много значений будет в том или ином измерении при эксплуатации конфигурации. Представим себе, что в нашем примере у одного физлица может встречаться очень мало (одна-две) организаций и относительно много подразделений. Т.е. физлицу почти всегда начисляется зарплата по одной организации и при этом часто начисляется зарплата по разным подразделениям. При таких обстоятельствах разумнее в качестве базовых выбрать измерения «Физлицо» и «Подразделение».

Но при этом важно помнить о порядке измерений регистра расчета.

О порядке измерений в регистре расчета

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

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

Если базовое измерение одно

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

Таким образом, в рассмотренном нами примере необходимо выставить свойство Базовое измерениям «Физлицо» и «Подразделение», свойство Индексирование измерению «Подразделение», а также убедится в том, что измерение «Физлицо» «выше» измерения «Подразделение» (порядок измерения «Организация» при этом не важен).

Источник

Получение базовых данных в регистрах расчета

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

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

Мы не будем рассматривать эти способы подробно, рассмотрим только их отличия и область применения.

Метод ПолучитьБазу() определен для объектов РегистрРасчетаМенеджер. и РегистрРасчетаЗапись. . Метод позволяет задать ресурсы базовых регистров, по которым необходимо получить обороты, задать поля, в разрезе которых нужно получить обороты и задать правила сопоставления измерений основного и базовых регистров расчета.

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

Имена измерений и ресурсов базовых регистров задаются в формате . .

Пример использования метода:
Код 1C v 8.х

В приведенном выше примере измерение «Физлицо» основного регистра при получении оборотов будет сопоставляться с измерением «Физлицо» базового регистра «ОсновныеНачисления» и измерением «Работник» базового регистра «ДополнительныеНачисления».

Таблица языка запросов для получения базовых данных
Для получения базовых данных в языке запросов определены виртуальные таблицы «РегистрРасчета. .База «. В качестве параметров виртуальной таблицы задаются измерения основного регистра, измерения базового регистра и поля, в разрезе которых нужно получить базовые данные. Измерения и разрезы задаются как массив (или список значений) строк с именами измерений.

Пример написания запроса с использованием виртуальных таблиц базовых данных:
Код 1C v 8.х

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

Сравнение
Заметным отличием функционального метода получения базовых данных и получения при помощи запроса является то, что в функциональном методе одним вызовом метода можно получить базовые данные по всем базовым регистрам, а при использовании запросов получение базовых данных делается запросом к нескольким таблицам — по числу базовых регистров. Тем не менее, рекомендуемым способом получения данных является получение данных запросом. Это позволит, например, получить не только данные базовых видов расчета, но и дополнительную информацию, необходимую для расчета.

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

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

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

Источник

Консоль для РегистровРасчета

Подготовить числа для вывода на консоль через ASCII и вывести на консоль
В регистре eax находится число, которое нужно превратить в ASCII-код и вывести на консоль символы.

Программа выводит ответ и в консоль и в файл, хотя нужно только в консоль
когда выбираю вывести в консоль, программа выводит ответ и в консоль, и в файл #include.

Не выводит текст в консоль, открывается пустая консоль без текста
Приложение должно вызывать консоль при выполнении каких то условий. В консоль записывается текст.

Ввести в консоль строку, программа должна вывести в консоль слова из этого предложения в столбик
Доброго времени суток! Задание: нужно ввести в консоль строку, а программа должна вывести в.

А что конкретно надо?

Добавлено через 1 минуту

Консоль запросов отлично работает с регистрами расчетов

Ну это же «Виртуальные таблицы» работай с реальной таблицей если тебйа не устраивает виртуальнайа»

У менйа буква «йа» не работает 😀

Добавлено через 11 минут
Хорошо. Скопирую сюда справку!

Измерения основного регистра
Измерения основного регистра (обязательный)

Тип параметра: Массив; СписокЗначений.
Массив строк или список значений, представляющих собой имена измерений основного регистра расчета, по которому строится таблица базовых данных.
Значения перечисленных в данном параметре измерений будут сопоставляться со значениями в соответствующих измерениях базового регистра расчета, заданных параметром .

Добавлено через 54 секунды
Аналогично и для

Источник

Неиндексированные измерения регистров сведений. В помощь 1С:Эксперту

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

(2) если кратко, то это список ваших потенциальных проблем.

вы смотрели видео-кейс?
в видео-кейсе о чем идет речь: о типовой конфигурации или об адаптированной конфигурации?
в видео-кейсе речь идет о типовом регистре или о нетиповом регистре сведений?

в чем проблема всех подобных доработок (в контексте темы видео-кейса):
первый разработчик создает регистр сведений для хранения информации,
второй разработчик пишет запросы к регистру сведений и другие механизмы обработки сведений.
Третий разработчик находит блокировки.

(2) если кратко, то это список ваших потенциальных проблем.

вы смотрели видео-кейс?
в видео-кейсе о чем идет речь: о типовой конфигурации или об адаптированной конфигурации?
в видео-кейсе речь идет о типовом регистре или о нетиповом регистре сведений?

в чем проблема всех подобных доработок (в контексте темы видео-кейса):
первый разработчик создает регистр сведений для хранения информации,
второй разработчик пишет запросы к регистру сведений и другие механизмы обработки сведений.
Третий разработчик находит блокировки.

> Обработка показывает неиндексированные измерения регистров сведений, из-за которых случаются блокировки.

(10)
1. Давайте сразу оговорим, что я не намерен отдуваться за всю фирму 1С и за всех программистов 1С.

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

2. Как думают 1С — я не знаю, и вы знать не можете — каждую конфигурацию разрабатывают своя группа разработчиков. Мы можем только предполагать.

Я просмотрел в БП регистр сведений АналитикаУчетаЗатрат — я полагаю, что измерения не индексировали, поскольку использовать их в запросе напрямую нельзя — эти измерения используются программно алгоритмом, достаточно сложным для восприятия.

Но меня удивило , в УТ не проиндексировано измерение СчетФактура в регистре сведений ЖурналУчетаСчетовФактур.

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

(12) речь о том, чтобы измерения делать или ведущими — чтобы при удалении записи удалялись автоматом, или индексировать — чтобы в запросах быстрее отборы накладывались.
Я подразумевал для Счетов-фактур (не для всех документов!) делать измерения ведущими, поскольку есть обмены и свертки баз.
В конкретном случае, регистр ЖурналУчетаСчетовФактур подчинен регистратору — которых три типа документов — Счет-фактура выданный и полученный, и ВводОстатков, поэтому при удалении СФ, записи автоматом удалятся. Поэтому еще одно одноименное измерение «СчетФактура» излишне делать ведущим.

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

А про цитату «индексировать все ссылочные измерения» — это я погорячился. А с вами тем более надо выбирать выражения — чтобы вы не цеплялись за слова.

даже в таких простых вопросах можно начать спорить.
слово «Маркетинг» мы произносим с буквой «р», а в англ. транскрипции эту букву мы не произносим. Такова природа англицизмов.

Смысл статьи — обратить внимание на видео-кейс Виктора Богачева, в котором он находит проблему в измерении, которое не является ведущим и не имеет признака «Индексировать».
Какой смысл вам прикладывать ссылку на статью ИТС, что все измерения индексируются платформой автоматом — когда у Виктора нашлось одно измерение, которое не проиндексировано — тут никто не разберет.

Виктор — вроде ведущий эксперт, и сомневаться в его словах нет смысла.
Я в обучающих целях реализовал список всех таких измерений — которые не являются ведущими, и не имеют признак «Индексировать». На большее не претендую.

НЕ понимаю, о чем мы спорим? Просто посмотрите видео-кейс, выводы делайте сами, можете поделиться своими знаниями и опытом, видением ситуации.

Переписываться в стиле : «вот тебе теория» — » а вот тебе другая теория» — «а вот еще одна теория» — не вижу смысла.

Но это немного другое:) Есть диалекты, которые произносят r, особенно американцы. Ладно, забыли.

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

(20) Вообще, по мне, так все просто, что касается, в чем смысл статьи.
сейчас расшифрую.

надо понимать, что

Разработка структуры регистра заключается в создании наборов измерений, ресурсов и реквизитов.

Для управления списком измерений, ресурсов и реквизитов регистра и редактирования их свойств служат управляющие элементы групп Измерения, Ресурсы, Реквизиты окна редактирования Регистр. С точки зрения настройки элементы этих групп одинаковы. Описание порядка использования этих управляющих элементов см. здесь.
5.14.2.4.1. Свойства измерения (ресурса, реквизита) регистра сведений

Свойства измерений, ресурсов и реквизитов редактируются при помощи палитры свойств. В основном они совпадают с общими свойствами объектов конфигурации. Ниже в этом разделе будут описаны уникальные свойства измерений, ресурсов и реквизитов.

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

Запрет пустых значений ‑ установка этого флажка включает механизм запрета записи регистра с пустым значением измерения.

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

При просмотре регистра в режиме 1С:Предприятие существует возможность сортировать записи регистра по индексированным измерениям, ресурсам и реквизитам. Необходимое число форм для просмотра и редактирования регистра должно быть создано в процессе разработки конфигурации.

надо понимать , что

Большинство прикладных объектов конфигурации имеют в составе подчиненных объектов группу Реквизиты. В этой группе указываются дополнительные характеристики объектов.

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

Чтобы ускорить эту работу, следует реквизитам, по которым будет выполняться отбор или сортировка, устанавливать свойство Индексировать. Если свойство установлено (выбрано значение Индексировать или Индексировать с доп. упорядочиванием), то подобные задачи будут выполняться эффективнее. Для примитивных типов реквизитов указание индексирования предоставляет пользователям средство сортировки списка по щелчку мыши в области заголовка колонки.

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

3) Выводы . Собственно, список показывает измерения, по которым не задано свойство Ведущее и признак Индексировать. Если вы обслуживаете типовые конфы, то можете проверить эффективность типовых регистров — конечно, нужно ли индексировать или нет — зависит от применяемых запросов и алгоритмов обработки, а это зависит напрямую от целей задачи, для которой регистр был создан.
Если у вас своя разработка — то список покажет вам потенциальные проблемы — локализует регистр и измерение — далее исходя из своих запросов и алгоритмов вы решите , нужно ли индексировать или нет.

Делать ли ведущим измерение — это совершенно другой вопрос, создавать ли дополнительно индекс по реквизиту — это другой вопрос — эти вопросы по сути относятся к разным задачам.
Так получилось, что проиндексировать измерение можно, сделав его ведущим — но насколько это оправдано — это тоже вопрос — может при удалении документа — не надо чтобы удалялись записи?! — Виктор этот вопрос не освещает. Я думаю, что он также в обучающих целях создал пример и продемонстрировал кейс.

4) расшифрую ссылку , которую вы прислали: платформа на некоторые измерения сама создает индексы

Источник

Читайте также:  Как решить задачу не производя измерений