Пересчет планового значения

Добрый день!

Сделала настройку планирования. Сейчас устанавливать плановые значения можно только из раздела планирования.

1.Как сделать, чтобы плановые значения рассчитывались автоматически из данных какой-либо таблицы? (допустим tbl_Plan)

2. На детали [Измерения] выбрано измерение [Контрагент] (данные из дополнительного запроса). На каждую запись измерения [Контрагент] есть доступ. Если добавить новую запись в раздел [Контрагенты], то эта запись тоже отобразиться в планировании, но фактического значения не будет пока не установить доступ. Можно ли как-то обойти этот механизм с раздачей доступа?

Нравится

5 комментариев

Здравствуйте, Александра!

Для автоматизации данных механизмов Вам необходимо выполнить существенную программную доработку.

Алгоритм следующий:

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 // здесь получим список полей запроса 

Идентификатор одного из полей соответствует нашему:

01

В случае, если планирование не меняется Вами в течение длительного периода времени, можно зашить значение FieldName в качестве константы, и добавлять новые записи в таблицу прав для него.

Показать все комментарии