Добрый день!
Сделала настройку планирования. Сейчас устанавливать плановые значения можно только из раздела планирования.
1.Как сделать, чтобы плановые значения рассчитывались автоматически из данных какой-либо таблицы? (допустим tbl_Plan)
2. На детали [Измерения] выбрано измерение [Контрагент] (данные из дополнительного запроса). На каждую запись измерения [Контрагент] есть доступ. Если добавить новую запись в раздел [Контрагенты], то эта запись тоже отобразиться в планировании, но фактического значения не будет пока не установить доступ. Можно ли как-то обойти этот механизм с раздачей доступа?
Нравится
Здравствуйте, Александра!
Для автоматизации данных механизмов Вам необходимо выполнить существенную программную доработку.
Алгоритм следующий:
1. При добавлении контрагента проверять, используется ли контрагент в каком-либо виде планирования (проанализировать содержимое таблицы tbl_PlanningDimension);
2. Добавить права на данного контрагента для найденного значения tbl_PlanningDimension а таблицу tbl_PlanningDataRightsDef для той группы пользователей, у которых они должны быть.
Оптимальный вариант - реализовать это в виде хранимой процедуры на уровне базы данных, однако это выходит за пределы конфигурирования.
Если я правильно поняла, то схема для добавления доступа на новую запись следующая:
При добавлении контрагента для всех видов планиования проверить есть ли ID нового контрагента в Поле ID запроса таблицы tbl_PlanningDimension, если есть, то для данного элемента измерения добавить доступ для определенной группы в таблице tbl_PlanningDataRightsDef. Я правильно поняла?
И еще вопрос, в какой момент и где можно изменить планируемые значения из скрипта?
Александра,
в данном случае Вы поняли не совсем верно.
В таблице tbl_PlanningDimension хранятся: Идентификатор планирования, Название поля, по которому происходит планирование, Идентификатор запроса.
Вам необходимо проверять, для каких записей в tbl_PlanningDimension полем является AccountID, и для них добавлять записи в tbl_PlanningDataRightsDef, при чем AccountID брать из новой созданной записи, а всю остальную информацию (PlanningID, PlanningDimensionID, DimensionID) - из tbl_PlanningDimension
Несовсем поняла как проверять для каких записей в tbl_PlanningDimension полем является AccountID, т.е. какие поля сравнивать?
Попробовала для конткретного планирования добавить запись в таблицу tbl_PlanningDataRightsDef для новой записи (к которой нет доступа), но почему-то не добавляет. Если же доступ уже установлен, то добавляет еще один.
Александра, механизм сопоставления значений tbl_PlanningDimension с разделами, таблицами, справочниками неочевиден.
Данные в таблице организованы следующим образом:
Поле, по которому проводится измерение, хранится в виде идентификатора (например "{629883FF-10C5-4581-8644-232E37680F77}") поля пользовательского запроса.
то есть, получить заголовок поля можно только предварительно открыв пользовательский запрос:
var UserQuery = new Object(); var QueryID = {}; //тут нужно подставить идентификатор нужного запроса, по которому формируется планирование var QueryDataset = Services.GetSingleItemByUSI('ds_Query'); ApplyDatasetFilter(QueryDataset, 'ID', QueryID, true); QueryDataset.Open(); var XMLData = QueryDataset('XMLData'); //получаем сам запрос UserQuery.ID = QueryID; UserQuery.XMLData = XMLData; LoadUserQuery(UserQuery, QueryID); LoadUserQueryData(UserQuery);
Отсюда можно получить заголовок поля, по которому строится планирование:
UserQuery.Columns // здесь получим список полей запроса
Идентификатор одного из полей соответствует нашему:
В случае, если планирование не меняется Вами в течение длительного периода времени, можно зашить значение FieldName в качестве константы, и добавлять новые записи в таблицу прав для него.