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

Нравится

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

Для этого вам необходимо либо создать новый справочник, либо перечисление.
Справочник создается Файл\Справочники\Настройка справочников в открывшемся окне пункт "Создать" кнопки "Добавить". Перечисление добавляется как сервис в Terrasoft Администратор

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

Справочник и перечисление это разные сущности. Примеры справочников Вы можете посмотреть Файл\Справочники. Перечисление же представляет собой перечень константных значений, к примеру пол (мужской, женский).
Создание справочника описано в http://terrasoft.ru/documentation/tsadmin/ пункт "Быстрое создание справочника"

у меня ХRМ выдает ошибку если я делаю "быстрое создание справочника". Не могли бы Вы подсказать как сделать перечисление и воткнуть его в "карточку контрагента"?

Уверены ли Вы что необходимо использовать перечисление?
Что за ошибка возникает при создании справочника? В какой момент?

я не уверен откровенно говоря. хотелось бы просто уметь это делать.
при быстром создании справочника вылезает ошибка что то там fkey... бла бла бла не может быть олицетворена. могу сделать скрин.
решил сделать справочник по этому мануалу:
http://community.terrasoft.ru/developer/solutions/1903
однака после того как я пытаюсь его открыть уже в клиенте - ничего не происходит. не могу понять где ошибся :-(

Выполните на SQL Server-е скрипт для вашей базы:

sp_change_users_login 'Auto_fix','fkeys'

Олег спасибо. Скрипт помог. Справочник я создал. Как мне теперь в "карточку контрагента" внедрить поле с вариантами ответов из справочника?

Используйте функционал пользовательских полей: Файл\Настройка\Пользовательские поля (см. Руководство Администратора пункт Настройка пользовательских полей)

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

странно когда я писал, Вашего сообщения еще не было. ну да ладно. Олег, а как можно уменьшить поля со значениями. У меня оно расползлось по всей длине карточки клиента. Точнее у меня уже там два поля. Как мне сделать эти поля фиксированными? Править wnd_aсcountedit?

Их нет в wnd_AccountEdit. Если поля реализованы как пользовательские, Вы не сможете корректировать их (ширина, высота), только расположение (в левом или правом столбце). пользовательские поля отображаются в элементе fmUserFields, можете попробовать выкрутить что-то с помощью дополнительных группировок(Frame Group), но в обязательном порядке предварительно сохраните сервис окна.

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

"Кулак Олег" написал:можете попробовать выкрутить что-то с помощью дополнительных группировок(Frame Group)

да я понял по поводу юзерфилдс

"ЕгоровЮА" написал:упс и еще тут же возник вопрос. пользовательские поля имеются только в существующих карточках клиента. во вновьсоздаваемых их нет. почему?

Попробуйте в "новых карточках" заполнить поле тип.

Олег совершенно верно. оно появляется после заполнения поля ТИП. можно ли сделать чтобы они были независимо от этого поля?

Должен помочь http://community.terrasoft.ru/ideas/4009 пост Раловец Ольги

"Кулак Олег" написал:В случае добавления большого количества полей я иногда делаю это с помощью UserFields, предварительно сохранив файл uf_, а после создания загрузив его обратно, таким образом остается только добавить контролы на карточку.

Олег, Вы об этом? мне это, мягко говоря, мало что дало. Не могли бы Вы мне это дело поподробней разжевать?

"ЕгоровЮА" написал:Не могли бы Вы мне это дело поподробней разжевать?

Более подробную информацию Вы можете получить путем поиска по Community, обратившись в службу поддержки support@tscrm.com, пройдя курс обучения "Создание конфигураций на базе Terrasoft XRM"

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

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

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

function ds_ReportOfferingsInInvoiceOnDatasetCalcFields(Dataset) {
//amount to string
var DatasetObject = new Object;

Dataset.DisableEvents();
if (!DatasetObject.IsCalculated) {
var SumDataset = Dataset.SelectQuery.Open();
SumDataset.GotoFirst();
var Sum = 0;
var SumTax = 0;
while (!SumDataset.IsEOF) {
Sum = Sum + SumDataset('BasicAmount');
SumTax = SumTax + SumDataset('BasicTaxAmount')
SumDataset.GotoNext();
}
var StringSum = Sum.toString()
var StringSumTax = SumTax.toString()
DatasetObject.IsCalculated = true;
var Result = AmountToStr(StringSum, 'ru', 'RUR');
var ResultTax = AmountToStr(StringSumTax, 'ru', 'RUR');
Dataset.Values('TotalStr') = Result;
Dataset.Values('TotalStrTax') = ResultTax;
}
Dataset.EnableEvents();
}

все считается правильно, переводится в слова корректно.
У меня проблема вывод полученной строки (суммы прописью) в отчете. Вывожу ее при помощи стандартного Memo.
Напомню, что в отчете два датасета - ds_ReportInvoiceWithNDSForRussia (master) и ds_ReportOfferingInInvoice (detail). Вычисляемое поля для суммы прописью высчитывается в ds_ReportOfferingInInvoice.

Если кладу мемо не на бенд (просто на старницу), или на бенд master-a (или его child), то все работает.

Но если кладу мемо на бенды завязанные на detail или на ReportSummary или на PageFooter, то появляется ошибка Источник данных '%s' не открыт.
1. Как обойти эту ошибку?
2. Глобально задача, отображить это поле где-то под detail (списком товаров) на каком-нибудь бенде.

Нравится

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

Посмотрите свойство CloseDataSource, датасета Fastreport.
Данное свойство должно находиться в состоянии False.

Спасибо, Николай, за совет. Но CloseDataSource уже проверял - False.

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

Денис, ошибка не из-за вычисляемого поля происходит. Если отображать любое другое поля из detail-запроса, то ошибка примерно такая же (только источник указывается явно, а не '%s').

Тут вопрос в том, на каких бендах можно отображать поля detail-запроса. По логике казалось, что если у соответствующего Dataset-a CloseDataSource ставить в false, то к полю запроса можно будет обратиться всегда.
Но на практике оказывается, что поля detail запроса можно вывести только на:
1. на child-ах detail-бенда
2. на master-бенде и его footer, child, header (если он находится над detail-бендом)
3. прямо на странице (не на бенде)
4. на самом detail-бенде.

а вот в footer-е, принадлежащему detail-бенду, отобразить поле нельзя - а здесь-то больше всего и хотелось.

!!!вообще очень хотелось бы узнать от знающих людей, когда можно обращаться к полям detail dataset-a. У меня сложилось впечатление, что к ним можно обращаться до тех пор пока detail запрос не отработает, а после датасет закрывается и доступ к полям исчезает.

В целом, свою проблему я решил, но про доступ к полям detail dataset-a хочется узнать.

Поделюсь как я решил свою задачу - может быть кому-то сэкономит время.

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

Количество наименований и сумму счета отобразил в footer-е detail-бенда (detail бенд завязан на ds_ReportOfferingInInvoice). Количество наименования отобарзил при помощи переменной Line, сумму взял из master dataset (ds_ReportInvoiceWithNDSForRussia).
А вот сумму прописью - вычисляемое поле detail dataset- отобразить не удавалось из-за той самой ошибки.

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

Отобразить смог при помощи добавочного detail-бенде (привязнному к тому же ds_ReportOfferingInInvoice). На этом бенде расположил сумму прописью. Чтобы сумма не повторялась столько раз, сколько товаров в счете, надо в количестве строк (кажется rowcount или как-то так) поставить 1 (по умолчанию стоит 0).

Андрей, добрый день.

По поводу полей detail dataset'а Вы правы: не удавалось получить их значение ниже detail-бенда (да и, честно говоря, насчёт корректного получения значений датасета вне detail-бенда есть сомнения). Скорее всего, это связано с особенностями реализации Fast Report.

Вообще, если есть подобные задачи, их можно решать с помощью переменных в коде отчёта. Например, при обработке события OnBeforePrint detail-бенда записываем нужное значение из датасета в некоторую глобальную переменную, а в footer-бенд добавляем memo, содержащий имя этой переменной в квадратных скобках. В итоге получим необходимый результат.

Сори за оффтоп.
Пробую Ваш скрипт для расчета сумы стоимости продуктов в счете, но у меня отображает только стоимость первого в счете продукта, не суммируя остальных.
Цикл отслеживающий конец таблицы отрабатывает 9 раз при том что записей 3.
Может ли быть это связано с тем что у меня ТС 3.4.0.97

var DatasetObject = new Object;
	Dataset.DisableEvents();
	if (!DatasetObject.IsCalculated) 
		{
		var SumDataset = Dataset.SelectQuery.Open();
		SumDataset.GotoFirst();
		var Sum = 0;
		while (!SumDataset.IsEOF) 
			{
			Sum = Sum + SumDataset('BasicAmount');
			SumDataset.GotoNext();
			ShowInformationDialog('DatasetIsCalculated'+Sum.toString());
			}
		var StringSum = Sum.toString()
		DatasetObject.IsCalculated = true;
		var Result = AmountToStr(StringSum, 'ua', 'UAH');
		Dataset.Values('SumText') = Result;
	}
Dataset.EnableEvents();

Владимир, я рекомендовала бы считать итог средствами отчета Fast Report (если поле, по которому производится суммирование, выводится в датабэнд). Обратите внимание, memo, в котором рассчитывается сумма, должно находиться в футере датабэнда.

Либо же агрегирующей колонкой подзапроса.

В данном конкретном случае для диагностики необходимы Ваши сервисы отчета.

Анна, сума считается правильно. Мне нужна сумма прописью, но использовать функцию AmountToStr в отчете я не могу. В скрипте отчета, ds_ReportOfferingsInInvoiceScript не могу получить сумму :wink:

Владимир, наиболее вероятная проблема - Memo лежит не в футере бэнда.

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

Анна, вопрос уже на рассмотрении в службе поддержки.
Как только все разрешится, выложу результаты.
Пока определились с тем, что создали дополнительное поле в sq, подзапрос с расчетом итогов (суммирование). А потом функцией AmounttoStr, буду выводить результат в виде текста

"Лабьяк Олег Игоревич" написал:

Андрей, добрый день.

По поводу полей detail dataset'а Вы правы: не удавалось получить их значение ниже detail-бенда (да и, честно говоря, насчёт корректного получения значений датасета вне detail-бенда есть сомнения). Скорее всего, это связано с особенностями реализации Fast Report.

Вообще, если есть подобные задачи, их можно решать с помощью переменных в коде отчёта. Например, при обработке события OnBeforePrint detail-бенда записываем нужное значение из датасета в некоторую глобальную переменную, а в footer-бенд добавляем memo, содержащий имя этой переменной в квадратных скобках. В итоге получим необходимый результат.

С уважением,

Олег Лабьяк,

инженер-программист,

группа компаний Terrasoft.

Олег, а вариант глобальной переменной не для футера, а для мастер бенда детали пройдет?У меня не проходит. Нужно в мастер датасете посчитать сумму по детальке

Антон, уточните, пожалуйста, что именно у вас "не проходит" - значение из глобальной переменной не подставляется/не отображается или ошибку выдает?

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