Вопрос

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

Есть ли какая либо возможность сделать "копию", а не переписывать его вручную основываясь на схемах и объектах пакета "CoreForecast".

PS: Данный раздел явно не является типовым, его отличает как минимум то что у него есть только "представление раздела" и отсутствует какое либо представление записей основного объекта.
"Страница раздела" не является потомком обычных типовых страниц раздела, которые унаследованы от "Базовая схема раздела (NUI)", а является потомком "Базовая схема карточки ( NUI )".

По этому его даже невозможно воссоздать на основании сгенерированного мастером нового раздела,
Даже если удается повторить схемы и объекты, как такой раздел зарегистрировать вручную ?

У меня такой же вопрос

3 комментария

"Севостьянов Илья Сергеевич" написал:

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

Есть ли какая либо возможность сделать "копию", а не переписывать его вручную основываясь на схемах и объектах пакета "CoreForecast".

PS: Данный раздел явно не является типовым, его отличает как минимум то что у него есть только "представление раздела" и отсутствует какое либо представление записей основного объекта.
"Страница раздела" не является потомком обычных типовых страниц раздела, которые унаследованы от "Базовая схема раздела (NUI)", а является потомком "Базовая схема карточки ( NUI )".

По этому его даже невозможно воссоздать на основании сгенерированного мастером нового раздела,
Даже если удается повторить схемы и объекты, как такой раздел зарегистрировать вручную ?

Подписаться на обновления этого материала

Здравствуйте,

К сожалению, это даже не раздел в привычном понимании этого слова, и скопировать его не удастся, вы можете попробовать создать аналогичную функциональность, взяв за основу оригинальный ForecastsModule, из пакета CoreForecast, но вам, в зависимости от того, какую логику вы будете менять, может понадобится создать собственные объекты\сервисы\хелперы. В общем изучите все содержимое пакета CoreForecast, начиная с ForecastsModule. А регистрацию «раздела» делайте в:
SELECT * FROM SysModule

Да, мы уже смотрели "по аналогии",
Подскажите пожалуйста верны ли мои утверждения касаемо значений в соответствующих колонках
таблицы SysModule:
SysModuleEntityId
(Значение поля "Id" базового объекта раздела из таблицы SysModuleEntity, там регистрируются все объекты автоматически при добавлении их через конфигуратор, в нашем случае это будет копия объекта Forecast)
SectionModuleSchemaUId (Значение поля "UId" из таблицы SysSchema, аналогично - регистрируются ли там схема автоматически)

Есть так же еще некоторые связанные записи в таблице SysModuleEdit
За что она отвечает ?

Илья, думаю, что данная тема будет Вам полезна
http://www.community.terrasoft.ru/forum/topic/13357

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

Добрый день!

Очень нужен пример реализации загрузки планов по клиентам из эксельки.

Возможно любой другой пример (может есть реализация из "коробки")?

У меня такой же вопрос

4 комментария

Здравствуйте!

Данная информация хранится в объекте "Элемент планирования". Единственная проблема - Id записи, по которой проводится планирование, хранится в поле "Значение элемента планирования". Это значение не получится импортировать с файла Excel.

"Демьяник Алексей" написал:Единственная проблема - Id записи, по которой проводится планирование, хранится в поле "Значение элемента планирования". Это значение не получится импортировать с файла Excel.

Алексей, спасибо за ответ! Ни разу, за свою жизнь, не встречал ничего невозможного! Трудно, сложно - да, но "не получится" - это не мой подход.

Надеюсь, есть коллеги, кто реализовывал подобные действия...

"AlexLS" написал:

Алексей, спасибо за ответ! Ни разу, за свою жизнь, не встречал ничего невозможного! Трудно, сложно - да, но "не получится" - это не мой подход.

Надеюсь, есть коллеги, кто реализовывал подобные действия...

Создайте объект, который будет дублировать поля объекта "Элемент планирования" и импортируйте в созданный Вами объект. Замените поле с типом Guid на обычное текстовое поле.

Сложность - организовать перенос и созданного объекта в объект "Значение элемента планирования". Таким образом можно будет реализовать.

"Демьяник Алексей" написал:Таким образом можно будет реализовать.

Спасибо, Алексей! Надеюсь удастся воплотить в реальность такой замысел.
Пока мой уровень "новичка" не позволяет осознать сложность данной реализации.

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

Добрый день!
Подскажите, как в планировании зафиксировать шапку таблицы, чтоб она не уезжала при прокрутке.
Также интересует, как добавить столбцы, которые также будут фиксированы?

У меня такой же вопрос

1 комментарий

Добрый день, Александр!

Детализируйте, пожалуйста, свой запрос, желательно с использованием скриншотов.

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

Добрый день.
Стоит задача отобразить в разделе Планирование:
- продукты в разрезе контрагентов
и
- Контрагентов в разрезе Ответственных.
Вопрос:
Как можно создать подобную иерархическую структуру в разделе Планирование с расчётом итоговых показателей по каждому родителю?

Версия Бандл SalesOmnichannal+MarketingCampaign 7.5.0.1422

У меня такой же вопрос

3 комментария

Добрый день, Игорь!

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

"Адасюк Валерий Викторович" написал:Дело в том, что иерархическая структура там уже реализована, но логику нужно реализовывать самостоятельно. Необходимо соответствующим образом заполнить родительские поля для элементов планирования.

А можно хотя бы направление, в котором двигаться?

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

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

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

initSchemaName: function() {
  this.schemaName = "ForecastTab";
},

поставил тут свое значение, но все равно грузится ForecastTab

У меня такой же вопрос

34 комментария

Добрый день Олег!!!

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

1. Нахожу все формы, которые относятся и работают в разделе. Это формы раздела, страницы редактирования, детали, схемы таблиц, схемы бизнес-процессов
2. Поочередно выгружаю, через функцию экспорт все схемы
3. Выполняю замену "UId" схем в файлах на новые. Новые генерирую к примеру на SQL Management Studio, подав команду "select newid()". Замену выполняю с помочью программы "Far manager", для начала в файлах "*.md" нахожу старый "UID" и заменю на новые UID.
4. Выполняю замену названий схем на новые к примеру схема называлась "ContractPageV2" я внутри файла "ContractPageV2.md" переименовываю имя схемы на новое, к примеру на "MpoContractPageV2"
5. Действия 3,4 выполняю для всех выгруженных файлов.
6. Создаю новый пакет, прописываю необходимые зависимости, чтобы все схемы, что будут импортированы работали
7. Выполняю импорт
8. После импорта проверяю все ли "зависимости" целые на формах редактирования, формах раздела, деталях, бизнес-процессах, схемах таблиц. Проверку провожу по все загруженным схемам
9. Выполняю регистрацию, страниц редактирования, деталей, разделов.
10. Копирую для деталей, разделов их профили, средствами SQL Management Studio
11. Добавляю зарегистрированные Раздел на определенный Рабочий стол.
12. Проверяю работоспособность клонированного раздела
13. Веду дополнительную доработку, согласно своего технического задания.

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

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

В .md файлах js модулей описан код тот же что я могу посмотреть и изменить в js файлах, так что не вижу смысла переводить их сначала в .md для редактирования

"Глобин Олег" написал:для начала сделал копию раздела, в js коде заменил все переменные на свои, но все равно подгружается стандартная ForecastTab в новом разделе.

Добрый день Олег!!!

подскажите пожалуйста, после создания вы выполнили регистрацию раздела в таблицах SysModule, SysModuleLcz, SysModuleEntity? и так же второй вопрос выполнили ли вы регистрацию страниц редактирования в таблицах SysModuleEdit, SysModuleEditLcz? данные действия выполнили?

Да, данные действия выполнял вызывая хранимые процедуры RegisterSection и RegisterPage которые собственно и делают записи в указанных Вами таблицах, после этого привязал раздел к рабочему месту, он стал отоюражаться в меню, он открывается но неверно вызывается страница которую отрисовывает модуль

Олег, во вложении скиньте листинг раздела. А лучше конечно MD файл. Я его посмотрю, листинг и сам MD. Подготовлю SQL запросы, исполните и скажите в результате на экране, все появляется или нет. Есть подозрение что некорректно выполнена регистрация раздела. Но нужно смотреть, листинг и ваш MD. MD страницы редактирования тоже кидайте, чтобы корректно вам в ответ я подготовил запросы. Спасибо!!!

Спасибо Михаил, прикрепил .md файлы трех основных js модулей которые исполняются для загрузки раздела, на всякий случай и .md страницы редактирования прицепил

Продолжаем разговор. :smile:

не успел еще подготовить SQL запросы, что обещал но сразу вопрос. Объект таблицы "SxForecast" в системе вы тоже создали, и зарегистрировали его в таблице SysModuleEntity? Ну и подчиненные таблице так же должны быть созданы:
- SxForecastDimension
- SxForecastIndicator
- SxForecastItem
- SxForecastItemValue

Созданы данные таблицы?
Если да то буду далее анализировать ваш код. И еще вопрос. Клонировать раздел, вы для каких целей собрались? не дешевле было переделать существующий?

Я как ранее и говорил из данного раздела, брал только подход работы, и создавал свой раздел, в котором ведется Заполнение и обработка экономических таблиц БДР, БДДС

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

Давайте поступим так, чтобы вы уже Олег увидели на экране свой клонированный раздел Планирование, вышлите мне пожалуйста еще MD файл "SxForecast", как я и говорил подготовлю SQL запросы, чтобы убедиться регистрация прошла верно или нет. Если нет то подготовлю вам SQL скрипты по регистрации раздела, и его страниц.

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

"Власов Михаил Викторович" написал:

увидели на экране свой клонированный раздел Планирование


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

Олег, то что сейчас ошибочно выводиться на экран, покажите пожалуйста в виде скриншота, чтобы хоть представлять в какой схеме при генерации страницы мог произойти баг. так как у раздела планирования своя ViewModel и свой ViewModelGenerator.

Добрый день Олег!!!

по вашей задачи есть еще проблемы и вопросы? дайте пожалуйста обратную связь. Спасибо!!!

Добрый день Михаил,
Сейчас заново регистрирую раздел и страницы, отпишусь по завершению, скину скриншоты того что загружается

Итак, создал все нужные объекты и страницы, зарегистрировал раздел и страницы следующим запросом

DECLARE @SysEntitySchemaUId NVARCHAR(255);
DECLARE @SysModuleEntityId NVARCHAR(255);
DECLARE @SectionModuleSchemaUId NVARCHAR(255);
 
SET @SectionModuleSchemaUId = (SELECT TOP 1 Uid FROM SysSchema WHERE Name = 'SxForecastModule');
SET @SysEntitySchemaUId = (SELECT TOP 1 UId FROM SysSchema WHERE Name = 'SxForecast');
 
 
INSERT INTO SysModuleEntity (SysEntitySchemaUId) VALUES (@SysEntitySchemaUId);
 
SET @SysModuleEntityId = (SELECT TOP 1 Id FROM SysModuleEntity WHERE SysEntitySchemaUId = @SysEntitySchemaUId);
 
INSERT INTO SysModule (Caption, SysModuleEntityId, FolderModeId, GlobalSearchAvailable, HasAnalytics, HasActions, HasRecent, Code, ModuleHeader, SectionModuleSchemaUId) 
VALUES ('Прогнозирование', @SysModuleEntityId, 'B659D704-3955-E011-981F-00155D043204', 1, 1, 1, 0, 'SxForecast', 'Список: Прогнозирование', @SectionModuleSchemaUId);
 
INSERT INTO SysModuleLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEntityId, '3DA3C3B2-02FB-4CCA-80C3-7946D4E8F565', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');
 
INSERT INTO SysModuleLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEntityId, '7B904E78-84BF-408C-A7A1-1287E66837D3', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');
 
-- Регистрация страницы
 
INSERT INTO SysModuleEdit (SysModuleEntityId, UseModuleDetails, CardSchemaUId)
VALUES (@SysModuleEntityId, 1, (SELECT TOP 1 Uid FROM SysSchema WHERE Name = 'SxForecastPage'));
 
DECLARE @SysModuleEditId NVARCHAR(255);
SET @SysModuleEditId = (SELECT TOP 1 Id FROM SysModuleEdit WHERE SysModuleEntityId = @SysModuleEntityId);
 
INSERT INTO SysModuleEditLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEditId, 'A19BF4BF-E22B-49B5-B6E0-918FF6290020', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');
 
INSERT INTO SysModuleEditLcz (RecordId, ColumnUId, SysCultureId, Value)
VALUES (@SysModuleEditId, 'A19BF4BF-E22B-49B5-B6E0-918FF6290020', '1A778E3F-0A8E-E111-84A3-00155D054C03', 'Прогнозирование');

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

Ошибку исправил, немного поправили код страниц, в итоге раздел открывается но страницы не подгружается которая должна отрисовывать содержимое раздела. Скриншот в прикрепленном файле. В консоле браузера никаких ошибок не выдает

P.S. забыл добавить, вручную добавил запись в SxForecastItem чтобы проверить правильно ли идет запрос, чтобы вытягивало его во вкладки, на скриншоте его видно, вроде запрос отрабатывает нормально. Также почему то подтягиваются базовые схемы ForecastTab, ForecastModule, ForecastBuilder

Олег добрый день!!!

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

Нажав на "Шестеренка"-->Добавить, у вас должна открыться страница редактирования "Элемента планирования", с возможностью добавления Измерения, Периода, Названия. Данная страница открывается? Шестеренка, как на картинке есть в Правом верхнем углу? Я уже удалил конечно свой клонированный раздел, но на выходных ради эксперимента выполнял клонирование, данного раздела, у меня все прошло без ошибок.

По скриптам регистрации страниц. Здесь ошибок не вижу, все верно.

Михаил, шестеренка есть, но добавление заблокировано, доступно только "Настроить права доступа"

Олег день добрый!!!

посмотрите пожалуйста в дебаггере консоли браузера в функции "checkForecastCanEditRights" схемы "ForecastTab" (это старое название схемы), новое не знаю как у вас называется. Установите точку останова, и посмотрите что в строчке  this.set("AddButtonEnabled", Ext.isEmpty(result)); присваивается. Вот вам отправная точка поиска. Так как "Доступность" пунктов меню "Добавить", "Изменить", "Удалить" регулируется программно.

Добрый день Михаил, как оказалось модуль SxForecastTab (который должен был запускаться вместо ForecastTab) даже не запускается, т.е. не заходит в его метод init

Вместо этого упорно запускается стандартный ForecastTab, подтягивая за собой все остальные стандартные модули вроде ForecastModule, ForecastBuilder

P.S.

"Власов Михаил Викторович" написал:

в функции "checkForecastCanEditRights" схемы "ForecastTab" (это старое название схемы), новое не знаю как у вас называется. Установите точку останова, и посмотрите что в строчке this.set("AddButtonEnabled", Ext.isEmpty(result)); присваивается


Это значение отвечает за кнопку добавить на странице планирования.
1
В том меню за enable отвечает следующий код в ForecastBuilder'е

"enabled": {
    "bindTo": "ForecastRightLevel",
    "bindConfig": {"converter": "isSchemaCanAppendRightConverter"}
}

Здравствуйте, Олег!

У Вас на скриншоте написано в адресной строке – ForecastsModule
А значит, по нажатию в левом меню вызывается именно он, а не Ваш модуль.
Вызываемый модуль можно посмотреть в консоли, Terrasoft.configuration.ModuleStructure

Добрый день, Юрий,
Простите на каком из моих скриншотов вы смогли адресную строку найти? Вообще в последнем сообщение действительно стандартное планирование, чтобы показать кнопку и это не относилось к общему вопросу.

Оказалось что не заменил имя в методе LoadModule на свое, поэтому и тянуло стандартные схемы, заменил на свое и появилась следующая ошибка, видимо Module вызывается почему то дважды
1

Вероятная причина данной ошибки заключается в том, что sandbox не корректно загрузил модуль. Скорее всего, дело в том, как
Генерируются идентификаторы для модулей. Вам необходимо выполнить отладку клиентского кода.
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ClientCode…

Доброго времени суток. У меня аналогичная задача - скопировать раздел планирование.
Проблема следующая: раздел отображается, но не отображаются созданные записи. При загрузке раздела не удается получить структуру схемы ForecastTab (в SchemaBuilderV2 в методе requireAllSchemaHierarchy getSchemaStructure возвращает undefined). Код схемы скопирован с базовой.

Олег день добрый!!!

подскажите пожалуйста по вашему последнему посту проблема сохранилась? помощь требуется? готов завтра в течение дня вам помочь правильно скопировать раздел.

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

Оказалось дело не в связях. Хотя может дело не в ForecastTab (после добавления связей схемы пересоздать нужно, а я пересоздал только ее)
UPD: получилось исправить ошибку получения структуры ForecastTab. Теперь при добавлении записи появляется просто пустая страница. Ошибок в консоли нет.
UPD2: Получилось отрисовать страницу. Дело было в именах контейнеров.

Добрый день Олег!!!

я не знаю с чего вы начали при клонировании и изменении под свои нужды раздела Планирование, я расскажу свой опыт знакомства и клонирование под свои задачи Раздела Планирование. Все началось с постановки задачи. "Требуется создать раздел в котором бы Экономист с легкостью смог бы вести БДДР и БДС при планирование бюджета на предприятие."
конечно для этих целей за основу можно было взять раздел Планирование. Первое что я изучил как устроен раздел планирование, как он работает, какая структура данных задумана компанией Террасофт, требуется или нет переделывать структуру данных под себя, требуется или нет переделывать PivotGrid под себя. На данном этапе я понял, что структура базы данных компанией Террасофт задумана идеально и даже с запасом под разные другие задачи, и ее я сильно изменять не стал. Внес только пару новых полей. Далее что я проанализировал это как работает схема PivotGrid, что она умеет, что она не умеет, какая схема Бралась за основу. И понял что самое главное что не умеет схема PivotGrid это отрабатывать Табуляцию при позиционирование курсора в столбце и переходу к следующей ячейки текущей строки. Мне стало интересно почему же программисты компании Террасофт изначально при создании PivotGrid отключили событие по отработки Табуляции. И понял, что PivotGrid это перевернутый стандартный грид и при нажатии на Табуляцию курсор перемещается вниз по столбцу, а не вправо по строке.
вот именно эту задачу я первую и решил. Вторая проблема, что возникла это отсутствие промежуточных итогов, как к примеру они есть Сводной таблице в экселе. И данную проблему я решил путем доработки PivotGrid, решил так же проблему позиционирование курсора в иерархии и при обновление Grid-a, по умолчанию иерархический список всегда сворачивался и позиция курсора всегда пропадала, так себя ведет стандартный Grid и эту проблему я решил. Вот с чего я начал.
но а дальше я стал просто клонировать все схемы из пакета CoreForecast. Делал это все вручную, сначало выгрузил все схемы, через Экспорт на диск, и в полученных файлах сменил все UID на новые. Выполнял данную операцию посредствам Far Manager-a. При замене UId-дов всегда нужно не забывать что к примеру UID схемы таблицы Forecast пожет встречаться как в виде ссылки в других схемах. Для этого в Фаре я сначало выполнял поиск по файлам *.md, в поле "Содержащий текст" указывал искомый UId. После того как вхождения UID было найдено менял на новый UID.
После замены всех старых UId на новые я выполнил переименование всех выгруженных схем. И только после этого я выполнил Импорт схем обратно в Базу данных. После импорта я вылнил регистрацию требуемых схем в базе данных. Т.е новый раздел "ForecastsModule" зарегистрировал в таблице SysModule, SysModuleLcz. Страницы редактирования зарегистрировал в таблицах SysModuleEdit, SysModuleEditLcz. Провайдер уведомлений зарегистрировал в таблице NotificationProvider. Новую схему "Forecast" зарегистрировал в таблице SysModuleEntity. И все клонированный раздел заработал на 5 с плюсом. Ну конечно пришлось еще изменить много стандартных схем под свою задачу, но самое главное Олег чтобы у вас появилось понимание, что такое Генерация схем, ядром системы, как система это делает. Какая последовательность в генерации происходит. В данном разделе Планирование это очень хорошо прослеживается вся идеалогия MVVM модели, которую компания террасофт заложила как базись в свою систему. Без данного понимания и умения создавать свои Custom схемы с нуля, очень сложно будет создавать новые инструменты.
ведь BasePageV2, BaseSectionV2, BaseDetailV2 это всего лишь стандартные схемы облегчающие создание стандартных страниц, а если требуется создать нестандартую страницу, как раздел Планирование, то здесь нужно четкое понимание MVVM модели и понимание работы ядра системы, какой модуль (схема) за что отвечают при генерации страниц.

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

Спасибо, Михаил. Именно после переноса схем md файлами у меня наконец-то заработала ForecastTab, впредь так и буду поступать. Единственное для замены GUID я использовал не Far Manager, а Sublime. Особых проблем в принципе не возникло. Есть одна мелочь, которую я все еще не знаю как решить - я добавил новую колонку, и ее Caption длиннее других, и выходит так что он выводится в две строки. Буду благодарен, если подскажете каким образом можно расширить размер колонки, чтоб caption отображался одной строкой (желательно не меняя размер остальных).

Попробуйте переопределить CSS стили для реестра

Разобрался. Ширина задается для каждой колонки отдельно в ForecastTab.

Появилась другая проблема - изменил типы колонок с INTEGER на FLOAT и теперь вручную в поле План нельзя вписать значение - только скопировать.
UPD: спас тип MONEY

Олег сейчас все у вас получилось или есть проблемы?

Была проблема с переключением между вкладками - значение ActiveTab терялось, но с этим я уже разобрался. Сейчас кажется все работает, Михаил. Над данной "новой и интересной задачей" пришлось поломать голову :smile:
Спасибо за участие

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

Добрый день! В планировании производится расчет Плана, Факта и Потенциала, стоит задача значения Факта заменить на кастомизированное поле из продаж. Как это можно сделать? И какой пакет за это отвечает?

У меня такой же вопрос

4 комментария

Игорь, здравствуйте!

Вычисления – в пакете CoreForecast.

Значение нужно вычислять в хранимке tsp_RecalculateForecastFact, в блоке

SET @SQLText = N'
SELECT
(SELECT SUM(ISNULL(fiv.[Value], 0))
FROM [ForecastItemValue] fiv
WHERE fiv.[ForecastItemId] = @P5
AND fiv.[PeriodId] = @P6
AND fiv.[ForecastIndicatorId] = @P7
) PlanAmount,
(SELECT SUM(ISNULL(o.[Amount], 0))
FROM [Opportunity] o
WHERE o.[StageId] = @P1
AND o.[DueDate] >= @P2
AND o.[DueDate] < @P3
AND o.' + @ColumnName + N' = @P4
) FactAmount,
(SELECT SUM(ISNULL(o.[Amount], 0) * ISNULL(o.[Probability], 0) / 100)
FROM [Opportunity] o
INNER JOIN [OpportunityStage] os ON os.[Id] = o.[StageId]
WHERE os.[End] = 0
AND o.[DueDate] >= @P2
AND o.[DueDate] < @P3
AND o.' + @ColumnName + N' = @P4
) PotentialAmount'

Заголовок индикатора нужно менять в таблице ForecastIndicator. Изменять нужно только Name, поле Code не трогать.

Спасибо!

"Арменчу Артём Александрович" написал:

Заголовок индикатора нужно менять в таблице ForecastIndicator. Изменять нужно только Name, поле Code не трогать.


Спасибо! А если нет доступа к таблицам?
можно сделать так?

(SELECT SUM(ISNULL(fiv.[Value], 0))
FROM [ForecastItemValue] fiv
WHERE fiv.[ForecastItemId] = @P5
AND fiv.[PeriodId] = @P6
AND fiv.[ForecastIndicatorId] = @P7
) PlanAmount,
(SELECT SUM(ISNULL(o.[UsrMarginAmount], 0))
FROM [Opportunity] o
WHERE o.[StageId] = @P1
AND o.[DueDate] >= @P2
AND o.[DueDate] < @P3
AND o.' + @ColumnName + N' = @P4
) FactAmount,
(SELECT SUM(ISNULL(o.[UsrMarginAmount], 0) * ISNULL(o.[Probability], 0) / 100)
FROM [Opportunity] o
INNER JOIN [OpportunityStage] os ON os.[Id] = o.[StageId]
WHERE os.[End] = 0
AND o.[DueDate] >= @P2
AND o.[DueDate] < @P3
AND o.' + @ColumnName + N' = @P4
) PotentialAmount'

И ещё уточнение, я же не могу править пакет CoreForecast. поэтому просто создаю tsp_RecalculateForecastFact в Custom?

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

Для этого необходимо перейти в конфигурацию, выбрать пакет Custom и перейдя на вкладку "SQL-сценарии" добавить нужный скрипт. Далее для него выполнить действие «Установить выбранные элементы» в меню «SQL скрипт».
Но настоятельно рекомендуем перед применением скриптов выполнять бэкап.

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

По индикатору планирования: нужно создать в пакете Custom скрипт:

UPDATE ForecastIndicator
SET Name = <Новое название индикатора в одинарных кавычках>
WHERE Code = 'Fact'

и его также установить.

"Арменчу Артём Александрович" написал:По индикатору планирования: нужно создать в пакете Custom скрипт:

Спасибо, вроде всё получилось. пока нет данных особо не проверить, но на первый взгляд всё хорошо.

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

Здравствуйте! Требуется настроить планирование по работе менеджера. У менеджера есть задача обзвонить и назначить определенное количество встреч. Данная информация фиксируется через Задачи.
Как сделать настройку планирования, чтобы данная настройка отображалась в Разделе Планирования?
Пробовал сделать, но почему то не вышло.
Сделал запрос по задачам, создал настройку планирования - в поле показатель выбрал поле Количество,которые сформировано в запросе из Заголовка, выбрал функцию "Сумма".
Мне кажется, не совсем правильно выбрал показатель в настройке планирования.
При нажатии кнопки "Пересчитать факт" в разделе планирования выдает ошибку
Сообщение об ошибке: Ошибка открытия источника данных "". Оригинальное сообщение об ошибке: Operand data type nvarchar is invalid for sum operator
Как вывести в настройки планирования фактическое количество Задач в показатель? И чтобы по этому показателю можно было формировать плановые данные?

Спасибо.

У меня такой же вопрос

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

Все настроил. в Демо базе есть пример. Вопрос снимается

Добрый день. Подскажите, пож-ста, где можно глянуть пример? в какой версии TS?

Пример можно посмотреть в демо версии

спасибо!

Здравствуйте!
Настраиваю Планирование задач по примеру в демо версии. Смотрю количество задач по Ответственным. На детали Подробно для выбранного в списке ответственного отображается 4 задачи, при этом в колонке факт основной таблицы - 0,00.
Нажимаю "Пересчитать факт" ситуация сохраняется. В чем может быть причина?

Проблема решилась настройкой прав доступа.:smile:

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

Доброго времени суток,
Просьба подсказать как добавить в Итоги раздела Планирование сумму по колонке Потенциал, в коробочной версии реализована сумма Палана и Факта.
планирование
Terrasoft 3.3.2.172

У меня такой же вопрос

2 комментария

Здравствуйте!

Поскольку реестр раздела формируется динамически в программном коде, Вам следует редактировать следующие сущности:

1. Структуру таблиц, где хранится планирование: tbl_Planning и tbl_PlanningData;

2. написать новые скрипты расчета потенциала по аналогии с содержимым Planning\Library\scr_PlanningFixedUtils в конфигурации

3. Добавить колонки в реестр отображения wnd_PlanningViewGrid

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

Здравствуйте Анна,
Решение задачи:
Изменения выделены комментариями //20.07
1.Подсчет:
В src_PlanningUtils

function CreateDimensionDataset(Planning, DimensionKey) {
	var Dataset = Services.CreateItem('DBDataset');
	var DataFields = Dataset.DataFields;
	var DataField;
 
	var DataTable = GetSingleItemByCode('tbl_PlanningData');
...
 
	for (Key in Planning.Indicators) {
		Column = Planning.Query.Columns[Key];
		IndicatorCaption = "Итого | " + Column.Caption;
		NamePrefix = GenNamePrefixByUID(Column.RecordID);
 
		if (Column.IsPlanning) {
			if (Values('PlanningValue')('IsVisible')) {
				DataField = DataFields.CreateCalcDataField();
				DataField.Name = 'PlanningSum_' + NamePrefix;
				DataField.IsReadOnly = true;
				DataField.Caption = IndicatorCaption + ' | ' + Values('PlanningValue')('Caption');
				DataField.MultilineCaption = DataField.Caption;
				DataField.IsFilteringField = false;
				DataFields.AddItem(DataField);
			}
		}
 
		if (Values('ActualValue')('IsVisible')) {
			DataField = DataFields.CreateCalcDataField();
			DataField.Name = 'ActualSum_' + NamePrefix;
			DataField.IsReadOnly = true;
			DataField.Caption = IndicatorCaption + ' | ' + Values('ActualValue')('Caption');
			DataField.MultilineCaption = DataField.Caption;
			DataField.IsFilteringField = false;
			DataFields.AddItem(DataField);
		}
 
//20.07
		if (Values('FixedValue')('IsVisible')) {
			DataField = DataFields.CreateCalcDataField();
			DataField.Name = 'FixedSum_' + NamePrefix;
			DataField.IsReadOnly = true;
			DataField.Caption = IndicatorCaption + ' | ' + Values('FixedValue')('Caption');
			DataField.MultilineCaption = DataField.Caption;
			DataField.IsFilteringField = false;
			DataFields.AddItem(DataField);
		}		
 
//20.07		
	}
 
	return Dataset;
}
function PlanningOnDatasetCalcFields(Planning, Dataset) {
	var Values = Planning.Values;
	var ValuesKeys = Values.Keys().toArray();
...
	if (Planning.DisplayRecordSum) {
		for (IndicatorKey in Planning.Indicators) {
			Indicator = Planning.Query.Columns[IndicatorKey];
 
			var PlanningSum = 0.0;
			var ActualSum = 0.0;
			//20.07
			var FixedSum = 0.0;
			//20.07
 
			for (PeriodKey in Planning.Periods) {
				Period = Planning.Periods[PeriodKey];
 
				NamePrefix = GenNamePrefixByDate(Period.BeginDate, Indicator.RecordID);
 
				var PlanningFieldName = Values('PlanningValue')('Prefix') + '_' + NamePrefix;
				var ActualFieldName = Values('ActualValue')('Prefix') + '_' + NamePrefix;
				//20.07
				var FixedFieldName = Values('FixedValue')('Prefix') + '_' + NamePrefix;				
				//20.07
 
				PlanningField = Dataset.Datafields.ItemsByName(PlanningFieldName);
				ActualField = Dataset.Datafields.ItemsByName(ActualFieldName);
				//20.07
				var FixedField = Dataset.Datafields.ItemsByName(FixedFieldName);
				//20.07
				if (PlanningField) {
					PlanningSum = PlanningSum + PlanningField.Value;
				}
				if (ActualField) {
					ActualSum = ActualSum + ActualField.Value;
				}
 
				//20.07
				if (FixedField) {
					FixedSum = FixedSum + FixedField.Value;
				}
				//20.07				
			}
 
			NamePrefix = GenNamePrefixByUID(Indicator.RecordID);
			if (Indicator.IsPlanning) {
				if (Values('PlanningValue')('IsVisible')) {
					PlanningFieldName = 'PlanningSum_' + NamePrefix;
					PlanningField = Dataset.Datafields.ItemsByName(PlanningFieldName);
					if (PlanningField) {
						PlanningField.Value = PlanningSum;
					}
				}
			}
			if (Values('ActualValue')('IsVisible')) {
				ActualFieldName = 'ActualSum_' + NamePrefix;
				ActualField = Dataset.Datafields.ItemsByName(ActualFieldName);
				if (ActualField) {
					ActualField.Value = ActualSum;
				}
			}
 
			//20.07
				if (Values('FixedValue')('IsVisible')) {
 
				FixedFieldName = 'FixedSum_' + NamePrefix;
				FixedField = Dataset.Datafields.ItemsByName(FixedFieldName);
				if (FixedField) {
					FixedField.Value = FixedSum;
				}
			}
			//20.07			
 
		}
	}
}

2. Отображение: В wnd_PlanningViewGridScript функция CreateGridViewColumns создает колонки в GridView

function CreateGridViewColumns() {
	var Planning = PlanningViewGrid.Planning;
	var GridView = grdData.ActiveView;
...	
	if (Planning.DisplayRecordSum) {
		for (Key in Planning.Indicators) {
			Indicator = Planning.Query.Columns[Key];
			IndicatorCaption = "Итоги | " + Indicator.Caption;
			NamePrefix = GenNamePrefixByUID(Indicator.RecordID);
 
			if (Indicator.IsPlanning) {
				if (Values('PlanningValue')('IsVisible')) {
					ColumnNamePrefix = GridView.Name + '_col' + NamePrefix;
					ColumnName = 'PlanningSum_' + ColumnNamePrefix;
					Column = Window.CreateComponent('DataGridColumn', ColumnName);
					Column.DataFieldName = 'PlanningSum_' + NamePrefix;
					Column.MinWidth = 40;
					Column.Width = 70;
					GridView.AddItem(Column);
				}
			}
 
			if (Values('ActualValue')('IsVisible')) {
				ColumnNamePrefix = GridView.Name + '_col' + NamePrefix;
				ColumnName = 'ActualSum_' + ColumnNamePrefix;
				Column = Window.CreateComponent('DataGridColumn', ColumnName);
				Column.DataFieldName = 'ActualSum_' + NamePrefix;
				Column.MinWidth = 40;
				Column.Width = 70;
				GridView.AddItem(Column);
			}	
 
 
			//20.07
				if (Values('FixedValue')('IsVisible')) {
				ColumnNamePrefix = GridView.Name + '_col' + NamePrefix;
				ColumnName = 'FixedSum_' + ColumnNamePrefix;
				Column = Window.CreateComponent('DataGridColumn', ColumnName);
				Column.DataFieldName = 'FixedSum_' + NamePrefix;
				Column.MinWidth = 40;
				Column.Width = 70;
				GridView.AddItem(Column);
			}
			//20.07
		}
	}
 
	Column = Window.CreateComponent('DataGridColumn', GridView.Name + '_colFake');
	Column.IsVisible = false;
	GridView.AddItem(Column);
}
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

3.4.0.92 xrm

Вызывается функция function FillEnumByColumns(Enum, Columns, OnlyType, ForDimension, UseTableField), в которой сравнивается

- OnlyType {...} Object
[0] 7 Number
с
Field.SQLDataType (число от 0 до 7) Number.

Откуда берется Field.SQLDataType? И почему вставляются значения в перечисления только если Field.SQLDataType = 7. 7 - это что?

рис 1
рис 2
рис 3

У меня такой же вопрос

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

создала заново в "Настройках планирования" свое планирование по операциям - перечисление в измерениях заполнились. Но статей так и нет. см. рис 4.
рис 4

Пробовала изменить
//FillEnumByColumns(Enum, PlanningDimensionEdit.Query.Columns, null, true, true); // 2011
FillEnumByColumns(Enum, PlanningDimensionEdit.Query.Columns, null, false, true);
появляется статья :)
но потом при открытии "Плантрования" идет многократно "Ошибка открытия запроса (Деталь)".
рис 5Рис 5

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

Field.SQLDataType - это тип поля в сервисе таблицы tbl_Cashflow, по которой строится планирование. Это системное перечисление ядра: http://www.terrasoft.ru/sdk/_SQLDataTypeEnum.html

Значение 7 соотвествует типу Уникальный идентификатор.

Добавить статью у Вас не получается, потому что она неправильно вытянута в запрос: следует вытягивать ее в виде

Операции.Статья, а не Статьи операций.ID

тогда вместо статей подтягиваются пользователи
рис 8рис 6рис 7

Причем пришлось создать еще одно планирование, потому что в существующем не подтягивалась статья в измерение.

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

Веротянее всего, вопрос все-таки в построении запроса для планирования, однако для диагностики скриншотов недостаточно - необходим сам запрос. Есть ли у Вас возможность предоставить резервную копию БД для анализа?

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

Для устранения проблемы необходимо:

1. Загрузить в конфигурацию модифицированный скрипт scr_UserReportCommon (в приложении);

2. Установить в сервисах таблиц Статья и Касса основную колонку для отображения:

cashflowclausecashaccount

3.Корректно настроить запрос (пример запроса в Мастере):

planningquery

Если колонки Статья и Касса в запросе уже есть, желательно их удалить и добавить заново. Обратите внимание, в результате запроса справа должны отображаться названия. Колонки не должны содержать идентификаторы либо быть пустыми.

4. Очистить кэш и перезапустить Terrasoft.

5. Добавить измерения в планирование. Если они уже есть - удалить и добавить заново.

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

База данных с настроенным планированием по следующей ссылке:
http://depositfiles.com/files/exhm61l97

Супер, заработало! :)

>>> 1 <<< Теперь вчера отображались на детали Подробно операции, сегодня при входе в базу - то пусто то есть операции :)
Кроме того в гриде не обновляются суммы из операций, какие кнопки не нажимай:)
Редактировать колонку План то могу то не могу, хотя "6. Не забудьте для каждой записи в добавленном измерении раздать доступ для разных групп пользователей." сделала для всех пользователей все права.
И в настройках планирования мое планирование выделено красным цветом.
Почему?)
рис 9

>>> 2 <<< На Вашей базе добавляю операции с типом Приход - они видны в планировании, а вот добавила Расходную - она в планировании не появилась.
рис 10

Анна, если у Вас планирование выделено красным цветом, следует выполнить следующее:

1. Пересохранить его (открыть и нажать ОК);
2. Проверить измерения, показатели и информационные поля - для всех ли есть поля в запросе. При необходимости - также пересохранить.

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

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

111

Анна, спасибо! Красота получилась :)
А как установить план сразу на весь год, а по периоду, выставленному в планировании (у меня квартал)?

Анна, это устанавливается в настройках планирования:

planperiod

"Alimova Anna" написал:Анна, это устанавливается в настройках планирования:

Так вот интересная штука! Я так делала. Сделала сначала год, установила сумму. Потом поменяла на квартал - и он в 1 квартал бросил всю сумму, а не разделил ее на 4 квартала.

Вопрос снят, непринципиально:)

Почему в измерение нельзя добавить Группу статьи?
См. "планирование по операциям 4" Бекап

Можно ли отображать в гриде или на детали Статью/Категорию/Группу статьи/Плательщика не закладками а одним списком построчно, примерно так
_Статья "Реклама" 1 000 грн
___категория 1 600 грн
______касса 1 300 грн
______касса 2 300 грн
...
___категория 2 400 грн

______касса 1 300 грн
______касса 2 100 грн
...
?

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

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

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

Ок, ясно, спасибо :)

Где в админке механизм отображения колонок периодов в зависимости от выбранной галочки например "1 квартал"? смр рис 5

В скрипте wnd_PlanningViewGridScript в функции function CreateGridViewColumns()

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

Есть несколько проблем с правами.

Планирование
В разделе Настройка планирования на детали Доступ поставил права на запись, на детали Измерения поставил права на запись.
Также поставил права в разделе Планирование в детали Доступ. Тем не мене пользователи не могут пересчитать факт.

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

Права на деталь
Можно ли настроить права таким образом, чтобы пользователь имел только права чтения на запись, и права на запись в детали файлы? Попробовал настроить подобным образом, записывать в деталь всё равно не даёт.

Спасибо.

У меня такой же вопрос

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

Добрый день, Виталий!

По вопросу планирования: просмотрите, пожалуйста, прикрепленный документ Настройка раздела ПЛАНИРОВАНИЕ.doc – в нем даны подробные рекомендации о там, как настроить данный раздел, и раздать права доступа на его измерения.

По вопросу настройки раздела E-mail: необходимо видеть скриншоты Ваших настроек прав доступа в разделе Администрирование, а также скриншот Детали[Доступ] в разделе E-mail для одного из почтового сообщения, о котором идет речь. Отправьте нам их, пожалуйста, на support@terrasoft.ru (с указанием номера инцидента по Вашему запросу в теле письма: 0110145).

По правам на деталь: рассмотрим пример Детали[Визы] в разделе Документы. Доступ на деталь можно назначать как на отдельный объект (группа таблиц), так и совместно с разделом системы - Документы, указав в сервисе таблицы Вызы tbl_DocumentVises параметр Группа таблиц (Parent Table Group) – DocumentVises.png.

В случае, если Вы желаете администрировать Деталь как отдельную группу таблиц, в разделе Администрирование :: Права доступа к группам таблиц, нажмите кнопку «Добавить». Укажите название как «Визы в документах», а имя объекта SQL: tg_VisesInDocuments (префикс tg_ - обязателен). Затем в серсвисе tbl_DocumentVises указать параметр Группа таблиц (Parent Table Group) равным «Визы в документах». В разделе Администрирование :: Права доступа к группам таблиц после этого можно будет настраивать доступ к Детали по новой записи «Визы в документах».

Может кто сталкивался...
Почему возникает такая проблем с доступом: не доступны все кнопки Добавить-Изменить-Удалить... в окне wnd_VisesDetailGridArea. Причём при обновлении окна они на доли секунды становятся доступны, но доступность сразу исчезает. У пользователя полные права. У пользователя с аналогичными правами всё работает.
Кэш чистил.
Что это может быть и как исправить?

Здравствуйте.

Свойство IsEnabled устанавливается в функции:

1

где главным параметром выступает переменная CanEditWorkspace, которая в свою очередь заполняется следующим образом:

2

т.е. зависит от прав доступа на текущую (выделенную в реестре) запись.
Таким образом, у Вас, скорее всего, пользователь не имеет полных прав на запись.

Пользователь входит в группу, которая имеет расширенные права (на документы у группы полный доступ). Конкретно этому логину помимо этого дал полные права - никакого эффекта.
Переустановка ТерраСофт с очисткой %USERPROFILE%\\Application Data\\Terrasoft решила проблему после мониторинга Windows по обращению к файлам и реестру.

Хммм! Вышеописанное произошло вчера. Только что, с начала дня пользователи включили компы и понеслось автообновление Винды. Тот же пользователь, которому вчера переустанавливал Террасофт сообщает о рецессии проблемы, т.к. времени на выяснение причин возникновения траблы не дали - могу сообщить, что было обновление Windows XP. Просто переустановил ТерраСофт.

Здравствуйте, Vadson.

Скорее всего Вам просто нужно очистить (удалить все содержимое) папки Cache:

Пуск-Выполнить-%Appdata%-Terrasoft-Cache.

Фокус с очисткой кэша не удался (сразу написал об этом). Хорошо, что до переустановки винды не дошло:wink:

Vadson, здравствуйте.

Предлагаю поставить отладчик в функции function DoPrepare(Window) и проверить чему равна переменная AccessLevel.

Снова возникла аналогичная проблема, но у другого пользователя. Быстренько переустановили Террасофт. Проблема не исчезла (доступа к визированию у пользователя не появилось). У данного пользователя к группе договоров права на чтение, добавление, изменение. Поставили дебагер. Когда дебагер работает - AccessLevel=2. Доступ есть. Отключаем дебагер и пользователь снова не может поставить визу. Насколько непонимаю, то GetCurrentRecordAccessLevel работает как-то совсем непонятно. Кэш чистил. Доступ без дебагера появляется только при внесении ещё доступа на удаление.

Добрый день.
В выражении var AccessLevel = WorkspaceGridDataset.GetCurrentRecordAccessLevel(); метод GetCurrentRecordAccessLevel() определен в ядре. Причиной поведения приложения, описанного Вами может быть взаимодействие приложения с сервером СУБД.

Попробуйте изменить функцию DoPrepare(Window) в сервисе Common\Details\Vises\wnd_VisesDetailGridAreaScript, приведите ее, например, к такому виду:

function DoPrepare(Window) {
	SetAttribute(Window, 'EditWindowUSI', 'wnd_VisesDetailEdit');
	var WorkspaceGridDataset =
		Window.ParentWindow.Attributes('WorkspaceGridDataset');
	SetAttribute(Window, 'WorkspaceGridDataset', WorkspaceGridDataset);
	var IsCanEditWorkspace = false;
    if (Assigned(WorkspaceGridDataset)) {
 
	    var VisesContactsDataset = GetSingleItemByCode('ds_VisesContacts', 'VisesContacts');
	    ApplyDatasetFilter(VisesContactsDataset, 'ContactID', Connector.CurrentUser.ContactID, true);
 
		VisesContactsDataset.Open();
 
		// старый способ назначения переменной AccessLevel 
		//var AccessLevel = WorkspaceGridDataset.GetCurrentRecordAccessLevel();
 
		var AccessLevel = (VisesContactsDataset.RecordsCount > 0) ?  tfalFullAccess : tfalReadAccess;
	    IsCanEditWorkspace = (AccessLevel == tfalFullAccess);
	}
	SetAttribute(Window, 'CanEditWorkspace', IsCanEditWorkspace);
	wnd_BaseGridAreaOnPrepare(Window);
}

Спасибо Павел!!!! Работает.

Войдите или зарегистрируйтесь, чтобы комментировать