Всем добрый день!

Нашел на сайте статью, что для переноса текста на новую строку используется (https://community.terrasoft.ru/blogs/12527).
В данный момент пытаюсь в элементе "Вопрос пользователю" в поле "Вопрос" указать вопрос, который необходимо отображать в несколько строк. Применение кавычек и не помогает. Пробовал использовать эти правила как в самом поле "Вопрос", так и в пункте "Question" элемента "Вопрос пользователя" в структуре Процесса.

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

С уважением,
Дмитрий

Нравится

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

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

Попробуйте так:
"Первая строка текста\\nВторая строка текста\\nТретья строка текста". Два обратных слеша обязательные - первый экранирует второй:)

Алексей, спасибо, помогло :)

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

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

Хотелось бы переопределить название кнопки в шапке раздела. Подскажите как это сделать?

Нравится

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

Добрый день.

На сколько я помню. то эти названия хранит таблица SysModuleEditLcz. Колонка RecordId хранит ссылку на таблицу SysModuleEdit, колонка Value хранит этот текст, который вам нужно изменить на то которое вам подойдёт.

Роман, зачем же так сурово? А если в базе чего-то нарушите?

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

в качестве очень близкого примера смотрите статью в документации разработчика
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dobavlenie-kno…

"Симута Роман Русланович" написал:

Роман, зачем же так сурово? А если в базе чего-то нарушите?

Предлагаю безопасный вариант

надо всего лишь создать замещающую схему страницы редактирования раздела

в замещающей схеме поменять значение локализируемой строки для кнопки

в качестве очень близкого примера смотрите статью в документации разработчика

https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dobavlenie-knop...

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

В локализируемых строках ее нет, только в таблице можно изменить.

Измените значение поля Value в таблице SysModuleEditLcz.

Да, был не прав. Для русской версии 7.8 (проверял для Sales) необходимо поменять значение поля ActionKindCaption в таблице SysModuleEdit. В таблице SysModuleEditLcz хранятся английские названия.

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

Караул!!!
Несколько дней назад синка сломалась, писало "Out of memory". Долго бился в стенку пока не проверил историю синхронизаций, там было 1 645 624 записей!!!! я сократил до 13 000. теперь при экспорте контрагентов пишет "List index out of bounds". Ошибка вываливается в разных местах, иногда при сохранении записи на дели истории, иногда при открытии настроек синки, иногда при открытии настройки соответствия полей. Синка полностью выведена из строя, клиент в бешенстве, я уже не знаю что делать!

Вот одно из мест ошибки

function GetFullObjectParam(ObjectID, Obj1C, SynType, ErrorsIsNotAcepted,
        Version, DataflowID, Dataset1CObject) {
        if (!Assigned(Dataset1CObject)) {
                Dataset1CObject = GetSingleItemByCode('ds_1CObject', 'GetFullObjectParam');
                EnableDatasetFilters(Dataset1CObject, false);
                ApplyDatasetFilter(Dataset1CObject, 'ID', ObjectID, true);
                Dataset1CObject.Open();

в строке Dataset1CObject.Open(); выбивает ошибку, посмотрел SQLText и проверил его в скл менеджере - работает нормально, выбрало нужную запись, в коде - ошибка.
кеш чистил, СКЛ сервер перезагружал. какие есть идеи? Нужно срочно это исправить
версия: xrm 3.4.0.130

Нравится

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

Я бы начал с анализа сервиса ds_1CObject и сервиса его запроса (sq_), может какая колонка слетела.
Плюс избавился бы для эксперимента от GetSingleItemByCode, заменив на Services.GetNewItemByUSI, хотя бы временно

только что в новом месте ошибка выскочила:

function GetAreRemindingsExist() {
	Main.RemindingsDataset.Close();
	var SelectQuery = Main.RemindingsDataset.SelectQuery;
	var PrimarySelect = GetSelectQueryPrimarySelect(SelectQuery);
	EnableFilter(PrimarySelect.Filters, 'ContactID', true);
	var ContactParameter = SelectQuery.Parameters.ItemsByName('ContactID');
	ContactParameter.ValAsGUID = Connector.CurrentUser.ContactID;
	EnableFilter(PrimarySelect.Filters, 'RemindTime', true);
	var RemindTimeParameter = SelectQuery.Parameters.ItemsByName('RemindTime');
	var today = new Date(System.Now());
	RemindTimeParameter.Value = today.getVarDate();
	Main.RemindingsDataset.Open();

вот тут: Main.RemindingsDataset.Open();
Как может вот так в разных местах все слететь???

вот еще одна ошибка:
Ошибка экспорта. Возникла при попытке открытия источника данных Контрагент. Ошибка открытия источника данных "ds_Account".
Оригинальное сообщение об ошибке: List capacity out of bounds (32)

Здравствуйте, Виталий!

А какие запросы идут в базу данных проверяли?
Также рекомендую проверить работает ли синхронизация хотя бы для одной записи.

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

Нечто новое. Делается бекап БД каждый день, я сделал новую бд, залил туда бекап от 1 июля и запустил на других бинарниках:confused:таже ошибка:confused:... Это что за прикол такой!!!
вот такую ошибку мне показало при попытке экспорта контрагентов:

Main.RemindingsDataset.Open()	List index out of bounds (3)

Здесь ошибка в напоминаниях, но бывает и при открытии ds_Account

Виталий,

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

Попробуйте очистить кеш и профиль пользователя Terrasoft.

"Савельева Алла" написал:

Здравствуйте, Виталий!

А какие запросы идут в базу данных проверяли?

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

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


записи проверял - нормальние, в скл работают
даже длня лной не работает

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

Сегодня создал новую настройку в интеграциях, взял раздел счета, выбило первоначальную ошибку Out Of Memory!!! в чем же может быть ошибка? А еще иногда после появления ошибки клиент закривается

То есть проблема наблюдается в разных местах системы, на разных бинарниках и базах, но на одном ПК?
Может, на этом компьютере памяти не хватает или она битая?

"Зверев Александр" написал:Может, на этом компьютере памяти не хватает или она битая?

перенесли. Теперь ошибка "list index of bounds(0)" выбивает в разделах контрагенты и контакты при сохранении карток... Какие у кого еще идеи есть??? везде выбивает на моменте сохранение Dataset

Это решил, прописал sp_change_users_login 'update_one', 'fkeys', 'fkeys' и ошибка пропала.
Еще вопрос. Сделал импорт одного контрагента и очень долго думало, гдето 2-3 мин а потом предложило загрузить метаданные, я нажал нет и оно опять 1-2 минуты подумало, сказало что недостаточно памяти и выбило ТС.
Как сократить это время "думания" ТС??? Для одной записи слишком долго думает...

Проанализируйте запросы к БД, которые выполняются в рамках синхронизации одной записи.

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

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

Контрагентов всего 6 тысяч, много раз просматривал отладчиком код, ТС просто закрывается без предупреждения в разных местах кода... Раньше ошибки выскакивали о недостатках памяти при открытии какого-то Dataset. Востанавливались разные бекапы на разних системах и ПК и везде одинаковые ошибки в ТС. И тут сделал синку с очень старой базой 1С и о чудо ошибок нет...
Оперативы стоит 16 гигов, в диспетчере она полностью она не задействуется, но выбивает ошибку о недостаче памяти...

Здравствуйте, Виталий!

Ответьте, пожалуйста, на следующие вопросы.

1. Выполнялся ли анализ запросов, которые поступают в базу данных?

2. Выполнялись ли накануне возникновения проблемы какие-то доработки в конфигурации 1С или Terrasoft до того, как произошел сбой?

3. Базы данных Terrasoft и 1С находятся на одном сервере?

4. Выполнялись ли накануне возникновения проблемы какие-то работы на серверах, где находятся 1С и Terrasoft?

5. Синхронизация выполняется под пользователем с правами администратора Terrasoft или под обычным пользователем?

6. Сбой происходит при попытке затянуть данные из 1C в Terrasoft или в обе стороны?

7. Нет ли проблем с работой другой функциональности в Terrasoft?

Также рекоммендую Вам попробовать обновить бинарные файлы Terrasoft до последней версии.

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

Здравствуйте. Вот имеем карточку контакта.

В нем есть некоторые поля, которые менеджер должен заполнить. Нужно эти сделать выделенны красным цветом, пока в эти поля не внесут хоть какую то информацию. Тоисть условие: Пока поле не заполнено оно подсвечивается красным и таким образом стимулирует менеджера его заполнить чтобы убрать подсветку. Как это можно реализовать? Может есть пример похожего кода? Спасибо!

Нравится

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

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

Я думаю лучшей стимуляцией пользователя будет обязательность этих полей.

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

Ну так что, есть хоть какие-то соображения как это можна реализовать?

Здравствуйте,
Хороший, но долгий путь: написать на основании контрола Terrasoft.controls.LookupEdit свой контрол, где анализировать наличие значения и делать addCls и removeCls, предварительно конечно написав эти css стили которые делают выделение цветом, которые вы будете добавлять или удалять.
Ну и потом вместо стандартного типа контрола для этих полей, использовать написанный вами контрол.

Простой путь, который идет в разрез с идеологией bpm’online: в карточке повесить обработчик на onEntityInitialized и на изменение колонок, подключить jQuery, подключить стили выделения цветом, и в обработчиках анализировать заполнение полей и добавлять, или удалять классы(стили css) для колонок в рантайме, средствами jQuery
https://api.jquery.com/addclass/

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

Добрый день.
В модальном окне разместил несколько полей.
FromDate, ToDate, Test. Они виртуальные(в базе их нет).
с полями типа дата проблем нет.
Но с lookup есть проблемы. Никак не пойму как его вызвать. Необходимо в лукапе выбрать несколько записей с таблицы Контакт и поместить в массив, потом его буду использовать для построения графика.
Подскажите пожалуйста как это реализовать. В коде js не смог найти примеров.
Прикрепляю скриншот и код страницы модального окна.

Нравится

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

Здравствуйте, Василий.

Проблема в том, что при нажатии на "лупу" так же вызывается модальное окно. BPM'online не поддерживает вызов нескольких модальных окон одно поверх другого.

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

Спасаибо за отзыв. Сделал новую вкладку.
Но возникла другая проблемка.
После выбора необходимых значений они не отображаются в лукапе, хотя я их могу получить через this.get('ResponsibleLookUp'). Повторю поля в таблице нет, оно виртуальное.
А также есть непонятная мне бага. После выбора записей при нажатии на "Выбрать" возникает ошибка(message: Несуществующий или пустой аргумент). При повторном нажатии всё проходит нормально. Прикрепил скриншот.
Код который обрабатывает выбор.

ResponsibleLookUpClick: function() {
 
	var config = {
		entitySchemaName: 'Contact',
		columns: ['Name'],
		multiSelect: true
	};
 
	var callback = function(args) {
		var items = args.selectedRows.getItems();
		debugger;
		var showInLookup = [];
		for(var i = 0; i<items.length;i++){
			showInLookup.push({value: items[i].Id, displayValue: items[i].Name})
		}
		this.set('ResponsibleLookUp',showInLookup);
		debugger;
	};
 
	LookupUtilities.Open(this.sandbox, config, callback, this);
 
},

Здравствуйте,
Лукап эдит по умолчанию не может отображать несколько значений, обходится это связкой атрибута для хранения массива значений, и эдита, с иконкой лукапа, по нажатию на который вызывается LookupUtilities.Open, в атрибут заносятся значения массива, а в атрибут на который завязан эдит, текстовое представление с разделитетелем «;». По ошибке не подскажу, не сталкивался, попробуйте её оттдебажить если не исчезнет после переделывания на вышеуказанную схему.

"Максим Шевченко" написал:

и эдита, с иконкой лукапа, по нажатию на который вызывается LookupUtilities.Open


Добрый день.
а нет ли у вас примера как сделать эдит с лупой, или где в bpm поискать?

{
				"operation": "insert",
				"name": "Number",
				"className": "Terrasoft.TextEdit",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 4,
						"layoutName": "SolutionTab_gridLayout"
					},
					"rightIconConfig": resources.localizableImages.LookUpIcon,
					"value": { "bindTo": "Number" }
				},
 
				"parentName": "SolutionTab_gridLayout",
				"propertyName": "items",
				"index": 6
			}

С учетом что в схеме добавлена картинка LookUpIcon

Добрый день.
Не получилось.
В консоли ошибка:
Свойство rightIconConfig Не было определено в классе Terrasoft.controls.Label

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

Добрый день.

Интересует следующий вопрос, по сути он является продолжением вот этой задачи: https://community.terrasoft.ru/forum/topic/20879

После получения ответа от нашего сервиса внутри метода onDataLoaded нужно в случае, если в ответе получено сообщения об ошибке удалить фотографию из галереи. Известен id фото. Собственно, вопрос - как вызвать удаление фото по его id? Я знаю, что есть метод deleteImage, но его из метода он внутри метода onDataLoaded почему-то не вызвать.

Редакция real-estate 7.7

Спасибо.

Нравится

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

Добрый день, Денис!
Методы deleteImage и onDataLoaded находятся в разных viewModel’ях, поэтому deleteImage нельзя вызвать из onDataLoaded.
Есть несколько вариантов решения проблемы:
1) Сделать запрос на удаление картинки в перегруженном методе onDataLoaded (запрос аналогичный как в методе deleteImage).
2) В GalleryImageViewModel сделать подписку на свое сообщение, которое будет выполнять метод deleteImage. А в GalleryDetail публиковать это сообщение.

Валерий, спасибо за ответ!

Я в итоге воспользовался третьим вариантом: по id ищу нужный элемент в DOM и инициирую через JS событие клика по кнопке удаления картинки. В итоге картинка удаляется.

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

Добрый день!

Для оформления договоров хотел сделать в печатной форме, чтобы автоматически сумма которая выражена числом (45500.00 руб) прописывалась в том числе прописью (сорок пять тысяч пятьсот руб 00 коп).
В форуме есть ссылка на рецепт(https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-sozdat-svoy...).
Поддержка сказала, что нужно воспользоваться макросом NumberRUExpressionConveter и он находится в конфигурации. ... Но, в моей конфигурации его я не нашел (у меня версия 7.3).
У меня большая просьба.. У кого есть этот макрос в конфигурации или просто кто знает - скиньте пожалуйста исходный код этого макроса (NumberRUExpressionConveter).

Большое спасибо.

Нравится

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

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

Добавил во вложению инструкцию по реализации подобного отображения.

Добрый день!

Да это работает, но есть одно но. Почему то не отображаются копейки.
Прикрепил скриншот.
В приложенной вами инстуркции также отображаются без копеек...
Возможно ли реализовать с копейками?

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

"Минигазимов Азат Рамильевич" написал:

Добрый день!

Да это работает, но есть одно но. Почему то не отображаются копейки.

...

...

Решен ли вопрос о дробной части?
Каково решение?

"<a href="mailto:admin@aergroup.ru">admin@aergroup.ru</a>" написал:

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

Минигазимов Азат Рамильевич пишет:

Добрый день!

Да это работает, но есть одно но. Почему то не отображаются копейки.

...

...

Решен ли вопрос о дробной части?

Каково решение?

Не я не смог решить. Прописываю от руки каждый раз.

Данная задача в любом случае решается написанием собственного макроса,
https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-sozdat-svo…
вы можете либо сами написать свою логику преобразования на языке с#, либо использовать библиотеку, которая умеет это делать, написанную на c#, подключив её на закладку «Внешние библиотеки» в пакете, и потом использовать её возможности в макросе. Таких библиотек я не знаю, но если вы таковую найдете, суть задачи сведется лишь к получению строки-цифры в макросе, преобразованию её в цифру, передаче её в библиотеку, которая вернет строку результат, который и будет результирующей строкой для word отчета. Все как в выше приведенной статье.

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

Добрый день, Коллеги!

Ситуация следующая:

Есть раздел "Исполнители", в котором необходимо сформировать файл word, содержащий поля объекта "Пункт отправления".

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

При настройке печатной формы добавляю объект как табличную часть. Колонку объекта описываю следующим образом:

Пункт погрузки.[Загрузки заявки:Загрузка].Исполнители (колонка "Исполнители": Id)

При формировании отчета - ошибки нет, но и данные не подтягиваются в word.

Вопрос: Что не так? И вообще корректно ли здесь таким образом прописывать путь к колонке?
Спасибо.

Нравится

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

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

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

Спасибо за отзыв!

Развязочная таблица есть. Это "Загрузки заявки".
В данной интерпретации проблема не решена, но мы решили задачу упрощением архитектуры.
Так что вопрос не актуален. Спасибо!

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

Добрый день.
Необходимо для нового раздела с тремя типами записей добавить для каждого типа мини-страницу.
Делаю по инструкции: https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-k...
Создал "Схему модели представления карточки". Унаследовался от BaseMiniPage.
Для каждой страницы редактирования раздела в SysModuleEdit добавил значение MiniPageSchemaUId
Добавил модуль со стилями.
В итоге при добавлении записи открывается стандартная страница редактирования.

Подскажите, что не так?

Нравится

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

[quote="Мария Ватулина"]Вот аналогичная тема - http://www.community.terrasoft.ru/forum/topic/16310[/quote]

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

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

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

Игорь, статья в Академии
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-mini-…
описывает создание мини-карточки, которая появляется при наведении курсора на ссылку на запись раздела. В примере это запись раздела "База знаний".
Но это не тот тип миникарточки, который появляется при создании новой записи раздела

Встречный вопрос, как привязать к кнопке "Добавить" мини-карточку вместо обычной?
Смотрю ActivitySectionV2, но признаков открытия minPage кроме как вызова метода this.openAddMiniPage в методе onSelectionKeyPress не нашёл, однако при нажатии на Добавить задачу debugger в этот метод не заходит.

Точной последовательности создания миникарточки, к сожалению, Вам сказать не могу пока.
Однако, укажу откуда начать
посмотрите следующий метод в BaseSectionV2
addRecord: function(typeColumnValue) {
...
if (this.hasAddMiniPage(typeColumnValue)) {
this.openAddMiniPage({
entitySchemaName: this.entitySchemaName,
valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});
} else {
this.openCardInChain({...
}
При создании записи в разделе, если к нему привязана миникарточка, то отладчик останавливается на точке останова, установленной в this.openAddMiniPage
А далее надо смотреть

В BaseSectionV2 в методе addRecord происходит проверка наличия мини-карточки по типу

this.hasAddMiniPage(typeColumnValue)

, где в свою очередь проверяется miniPage.hasAddMiniPage. Это свойство на данный момент у меня undefind.
Вопрос: Где устанавливается это свойство для той или иной страницы редактирования?

p.s.: Я докопал до BaseSchemaViewModel.initEditPages, где формируется конфигурация мини-страницы:

MiniPage: {
  schemaName: editPage.miniPageSchema,
  hasAddMiniPage: editPage.hasAddMiniPage
},

, но где присваивается значение editPage.hasAddMiniPage так и не нашёл.

hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону

"Симута Роман Русланович" написал:hasAddMiniPage - всего лишь атрибут который отображает есть ли для данного раздела мини-карточка добавления записи
При глобальном поиске по приложению (F12 затем Ctrl+Shift+F) по слову miniPageSchema или hasAddMiniPage
в первых трех строках отображаются объекты Terrasoft.Configuration с идентификаторами схем миникарточек, привязанных к разным разделам. Скорее всего информация об этом занесена непосредственно в БД. Можно покопать в эту сторону

Тоже искал глобальным поиском + режим отладки раздела Активности (здесь MiniPage.hasAddMiniPage = true)
Но у меня MiniPage.hasAddMiniPage передаётся Undefined, хотя название схемы мини-карточки передаётся и для соответствующих записей в таблице SysModuleEdit заполнено поле MiniPageSchemaUId.

В какой таблице искать hasAddMiniPage?

В таблицах SysModuleEdit, SysModule, SysModuleEntity, SysSchema такого поля нет.
P.S.: Вообще было бы прекрасно, если бы в академии появилась статья по добавлению мини-карточки в раздел к кнопке "Добавить".

Игорь, свойство hasAddMiniPage определено в миксине MiniPageUtilities.

Миксин подключается к модели представления в классе BaseSchemaViewModel реализованном в одноименном модуле. В этом же классе есть метод initEditPages, в котором заполняется коллекция моделей представления для каждой entitySchema и там же заполняютя значениями свойства hasAddMiniPage (поищите глобальным поиском)

Поскольку вы создали новый раздел, то возможно, что это свойство у вас не инициализируется
посмотрите в глобальном объекте Terrasoft.configuration.EntityStructure (просто наберите в консоли)
пример для объекта Account - во вложении
посмотрите в объекте вашего раздела

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

Да Роман, это я уже находил и писал выше.
Но как всё же проинициализировать свойство editPage.hasAddMiniPage (НЕ miniPage.hasAddMiniPage)?

Узнал. Нужно добавить системную настройку с кодом Has[ИмяСущностиРаздела]MiniPageAddMode, например, как для раздела HasAccountMiniPageAddMode
Это системная настройка булевского типа, из нее и прилетает значение свойства hasAddMiniPage в Terrasoft.configuration.EntityStructure

Да, Роман! То, что надо. Спасибо.

В продолжении темы, страница выводится, НО одна для всех типов.
Смотрю по коду и вижу, что в

 this.openAddMiniPage({
   entitySchemaName: this.entitySchemaName,
   valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
});

необходимо передать ещё один параметр miniPageSchemaName, передаю.

Далее в MiniPageContainerViewModel.setSchemaParametersInfo
в строке

var schemaName = this.getSchemaName(entitySchemaName) || config.miniPageSchemaName;

Т.о. в конфигурацию мини-карточки попадает название схемы первой зарегистрированной мини-карточки, хранящаяся в Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema, а не переданное в параметре miniPageSchemaName значение. И как следствие выводится не та мини-карточка.
Вопрос: Не было ли целесообразней поменять местами this.getSchemaName(entitySchemaName) и config.miniPageSchemaName в строке

var schemaName = this.getSchemaName(entitySchemaName) || config.miniPageSchemaName;

или передавать в this.getSchemaName(entitySchemaName) вторым аргументом тип создаваемой записи?

Решил эту проблему подменой значения Terrasoft.ModuleUtils.moduleStructure[entitySchemaName].miniPageSchema на нужное мне.
Но как-то это костыльно...
Если у кого есть другие варианты реализации, буду благодарен за подсказку

И ещё проблема, после сохранения и закрытия мини-карточки не происходит обновление реестра раздела, подскажите, что пропустил.

Добавьте в схеме раздела

        // Обновление данных реестра.
        this.reloadGridData();

Пример можно глянуть здесь
https://academy.terrasoft.ru/documents/technic-sdk/7-8/dataservice-sozd…

А какой механизм реализован в р. Активности и р. Лиды? Ведь там реестр обновляется.

Честно говоря, не знаю. Надо смотреть :)

А зачем тогда изобретать велосипед с reloadGridData?
Тоже, к сожалению, концов не нашёл в р. Активности и р. Лиды.

Вопрос решил. В sectionV2 подписался на сообщение ReloadDashboardItems.

 subscribeSandboxEvents: function() {
                this.callParent(arguments);
                this.sandbox.subscribe("ReloadDashboardItems", function(){
                    this.reloadGridData()
                }, this);
            }
Показать все комментарии

Создали делать2 в детали1.
Деталь2 самописная.

в Карточки схемы детали1

details: /**SCHEMA_DETAILS*/{
                        "UsrContragentOperation": {
                                "schemaName": "UsrContragentOperationDetailV2",
                                "entitySchemaName": "UsrContragentOperation",
                                filter: {
                                                masterColumn: "Id",
                                                detailColumn: "UsrTranspPlanLine"   //деталь2
                                                }
                        }

Но при добавлении записи в деталь2 Id пуст.
Т.е. получается что мы передаем id.
Что не так?
Как отловить в отладчике это значение?

Нравится

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

Здравствуйте,
При объявлении второй детали в детали, пишите "useRelationship": true

"UsrDetail2": {
				"schemaName": "UsrSchema2Detail",
				"entitySchemaName": "UsrDetail2",
				"filter": {
					"detailColumn": "UsrDetail1",
					"masterColumn": "Id"
				},
				"useRelationship": true
			}

В колонку связи второй детали, ту которая указана в «detailColumn», установится значение из карточки родителя (первой детали), из колонки что указана в «masterColumn», именно поэтому типы этих колонок должны совпадать.
И да, не забудьте во второй детали настроить колонки, по умолчанию в детали в детали, не будет выведена ни одна колонка.

Пример всей реализации, деталь в контрагентах. А в ней вторая деталь:

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

define("UsrUsrDetail11Page", [], function() {
	return {
		entitySchemaName: "UsrDetail1",
		details: /**SCHEMA_DETAILS*/{
			"UsrDetail2": {
				"schemaName": "UsrSchema2Detail",
				"entitySchemaName": "UsrDetail2",
				"filter": {
					"detailColumn": "UsrDetail1",
					"masterColumn": "Id"
				},
				"useRelationship": true
			}
		}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "UsrString",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "UsrString"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "UsrAccount",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 12,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "UsrAccount"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "insert",
				"name": "Detail1GeneralTabContainer",
				"parentName": "Tabs",
				"propertyName": "tabs",
				"values": {
					"caption": "Tab",
					"items": []
				}
			},
			{
				"operation": "insert",
				"name": "UsrDetail2",
				"values": {
					"itemType": Terrasoft.ViewItemType.DETAIL
				},
				"parentName": "Detail1GeneralTabContainer",
				"propertyName": "items"
			}
		]/**SCHEMA_DIFF*/,
		methods: {},
		rules: {}
	};
});

Результат:

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