Вопрос

Коллеги, доброго времени суток!

Подскажите пожалуйста:

В разделе "Счета" при изменении количества/цен продуктов идет автоматический пересчет "Суммы" счета. Как я понял код, отвечающий за изменение находится в пакете Invoice => схеме объекта InvoiceProduct => подпроцессе SubProcessScriptAmountChange => внутри скрипта ScriptAmountChange, который отрабатывает при получении сообщения события InvoiceProductSaved или InvoiceProductDeleted. Поиск по сообществу показал, что видимо просто так переопределить код внутри скрипта нельзя, если он не вынесен в метод. Чтобы заменить логику его работы нужно создать свой подпроцесс с входами через те же сообщения (но со своими названиями) и в конце вызываемого скрипта перед return вписать

ActivatedEventElements.Remove("InvoiceProductSaved");
ActivatedEventElements.Remove("InvoiceProductDeleted");

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

У моих входных событий совпадают с родительскими поля "Сообщение" (InvoiceProductSaved и InvoiceProductDeleted), но отличаются "Название" (иначе компилятор предупреждает, что override неправильно делаю, и получается только hide.. ну и всё равно не работает), поле "Условие" в связи от исключащего ИЛИ пустое, судя по "Исходному коду" это как раз то, что нужно, т.к. в этом случае функция всегда возвращает true.

Пытался и напрямую оба события на скрипт завязать - всё равно не работает.

Вопрос соответственно - что я делаю не так?

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

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

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

Описанное решение выглядит правильно. 

Для перекрытия логики по родительскому сигналу, необходимо в дочернем БП объекта подписаться на аналогичное событие объекта и в скрипте перед return true  вставить:

if (ActivatedEventElements.Contains("InvoiceProductSaved")) {

    ActivatedEventElements.Remove("InvoiceProductSaved")

}

Проверьте, что БП в дочернем объекте помещен в "Событийный подпроцесс".

Так же, вы хотите удалить сразу два сигнала. Поэтому, советую выполнять проверку какой сигнал пришел и удалять его( как в примере выше).

Спасибо!
Попробовал в другом объекте (OrderProduct) проверить. Создал в процессе замещающего объекта событийный подпроцесс, в него поместил одно начальное событие (сообщение OrderProductSaved) из него прямой переход на скрипт, в котором три строчки:
global::Common.Logging.ILog _Logger = global::Common.Logging.LogManager.GetLogger("Client");
_Logger.Info("Order product saved event test");
return true;

Одновременно в переопределенный метод RecalculateOrderAmount вписываю в начале:
global::Common.Logging.ILog _Logger = global::Common.Logging.LogManager.GetLogger("Client");
_Logger.Info("Order product saved event test 2, "+GetPropertiesData());

Метод вызывается только в родительском процессе по цепочке от сообщений OrderProductSaved или OrderProductDeleted.

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

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

Добрый день!

Проверила ваш кейс у себя, всё получилось.

Вот как я делала:

Событийный подпроцесс - http://prntscr.com/jhpu81

Задание-сценарий - http://prntscr.com/jhpuoz

Добавила продукты в счете - http://prntscr.com/jhpuz6

Сумма не считается - http://prntscr.com/jhpv9a

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

В настоящий момент возможна следующая ситуация:
1) менеджер создал счёт в bpm'online, добавил продукты, согласовал цены с клиентом.
2) затем на продукт изменилась цена
3) менеджер открывает счёт, меняет валюту счёта, сохраняет.

В результате система самостоятельно вписывает в счёт новые цены на продукты. Во многих случаях не самая лучшая логика. Как её исправить?

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

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

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

Данный функционал изначально был реализован для того, чтобы сохранять точность пересчетов (чтобы не терялись десятые и тысячные).

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

Спасибо

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

в Таблице продукты у нас есть 2 поля Цена, Цена б.в. Базовая валюта, это та валюта которая выбрана как валюта по умолчанию, Я сделал так в своих системах, что если меняют Валюту в Счетах, Договорах, то происходит Пересчет поля "Цена", Цена б.в. (к примеру это рубли) остается без изменений. По умолчанию в системе BPMOnline этот механизм работал и работает ошибочно. Сейчас на память не помню, но если мне пасять не изменяет, то при изменении Валюты система пересчитывала (по умолчанию) поле Цена б.в. а это ни есть правильно. Базовая валюта, это валюта по умолчанию, валюта системы.

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

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

Стоит задача в invoiceSection в грид для каждой записи добавить 2 собственных кнопки "печать 1" и "печать 2", которые будут открывать 2 различных отчета.
Также необходимо либо подменить отчет, который печатается по кнопке печать, либо скрыть её.

Подскажите, пожалуйста, как можно реализовать данную задачу?

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

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

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

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

Рекомендации предоставлены в дублирующемся топике

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

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

Стоит задача в invoiceSection в грид для каждой записи добавить 2 собственных кнопки "печать 1" и "печать 2", которые будут открывать 2 различных отчета.
Также необходимо либо подменить отчет, который печатается по кнопке печать, либо скрыть её.

Подскажите, пожалуйста, как можно реализовать данную задачу?

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

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

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

Прошу прощения за дубль.
http://www.community.terrasoft.ru/forum/topic/11408

Здравствуйте, Александр!
Отчеты регистрируются в справочнике "Печатные формы". Базовая кнопка добавляется следующим образом:

			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "DataGridActiveRowPrintAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"style": Terrasoft.controls.ButtonEnums.style.GREY,
						"caption": {"bindTo": "Resources.Strings.PrintRecordGridRowButtonCaption"},
						"tag": "print"
					}
				}
			]/**SCHEMA_DIFF*/

Добавляйте свои по аналогии.
Обработка нажатия определяется в методе "onActiveRowAction" в BaseSectionV2:

				onActiveRowAction: function(buttonTag, primaryColumnValue) {
					switch (buttonTag) {
						case "edit":
							this.editRecord(primaryColumnValue);
							break;
						case "copy":
							this.copyRecord(primaryColumnValue);
							break;
						case "delete":
							this.deleteRecords();
							break;
						case "print":
							this.printRecord(primaryColumnValue);
							break;
						case "processEntryPoint":
							this.onProcessEntryPointGridRowButtonClick();
							break;
					}
				},
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Возникла проблем с калькуляциями в системе. Пропадает по пару копеек или пару десятков копеек в сумме счета и в цене продукта в счете. Все цены занесены в долларах. После конвертации системой в гривны выдается неверный результат. Решили, что это из-за количества знаков после комы. Поменяли з двух до четырёх. Но подсчет остался без изменений. Подскажите, в чем проблема и где исправлять?

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

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

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

Мне ожидать от Вас ответа на форуме или нужно обращаться к Вам на службу технической поддержки по email?

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

Спасибо!

Наталия, добрый день.

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

0. Перед внесением изменений настоятельно рекомендуем создать резервную копию БД.
1. Запустить приложение Terrasoft Administrator.
2. Открыт сервис scr_OfferingPriceEdit.
3. Найти функцию function UpdateBasicPrices(). Добавить в нее строку кода, как отображено на скриншоте:

OfferingPriceEdit.PrimaryPrice = 
                   RoundFloatValue(OfferingPriceObject.Price, 2);

http://i65.fastpic.ru/big/2014/1129/89/8e426a43b29f135894aeed360e27dc89.png

4. Найти функцию function UpdatePriceFieldDueDiscountChange(), заменить ее на:

function UpdatePriceFieldDueDiscountChange() {
         var Dataset = dlData.Dataset;       
/*      var Price = RoundFloatValue(CalcNonBasicPrice(OfferingPriceEdit.PrimaryBasicPrice * 
                   (100 - edtDiscountPercent.Value) / 100, OfferingPriceEdit.CurrencyID, 
                   OfferingPriceEdit.Rate), 2); */
 
    var Price = OfferingPriceEdit.PrimaryPrice - edtDiscount.Value; 
         Dataset.Attributes('DisableDiscountRecalc') = true;
         Dataset('Price') = Price;
         Dataset.Attributes('DisableDiscountRecalc') = false;
}

5. Сохранить внесенные изменения. Перезапустить приложение Terrasoft. Проверить работу функциональности.

Наталья, прошу сообщить по результату.

Допоможіть розібратись з перерахунком цін в рахунку при конвертації валюти
в файлі докладно описано

Разница в 2 копейки может набегать из-за округления, Вы указываете цену с налогом.

8,33 * 1,2 * 5 = 49,98

тоді щоб вірно рахувало суму потрібно не враховувати податок?

і що являє собою валюта базова?ми працюєм у гривнях але оприбуткування відбувається в іноемній валюті, як краще в даному випадку працювати з терасофтом

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

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

Добрый день, коллеги.

Не нашел явного решения поэтому прошу помощи в решение задачи.

У нашей компании появилось двое платежных реквизитов. Ранее создавал отчет типа fastreport для формирования отчета "Счет" по определенному юр. лицу (у нас два юр. лица). Теперь у юр. лица (буду его называть "одуван") "одуван" появилось двое платежных реквизитов. В деталях контрагента выбрал основной платежный реквизит. При попытке создать отчет "счет" у меня создается отчет на двух листах с основным платежным реквизитом. Такое происходит, когда только два платежных реквизита. И всегда основным выбирается старый основной платежный реквизит, нового как-будто не видит система.
Что пытался сделать и какие мысли были.
Пытался создать фильтр в fastreport - не работает. Выбирал по полю "Банк". Но тут что-то явно делаю не так
Идея: создать доп.поле в карточке счет. в которое из поисковой карточки или выпадающего поля будет выбираться основной платежный реквизит. Это решение плохо тем, что заставляет делать дополнительные манипуляции сотрудников, а им это не нравится.

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

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

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

Забыл уточнить. софт Terrasoft CRM 3.3.2.127

Павел, самым простым вариантом, как по мне, будет следующее:

1. Добавить в карточку платежного реквизита поле "По умолчанию для печати счета" с типом булево.
2. В сервисе sq, который используется для построения отчета, добавить параметр с типом целое число и значением 1, и в блок WHERE добавить уловие:

tbl_AccountBillingInfo.ПоУмолчаниюДляПечатиСчета = Parameter:.ПоУмолчаниюДляПечатиСчета

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

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

Дмитрий,

Правильно ли я Вас понимаю, что во 2-ом (втором) случае логика будет такая: Сотрудник пытается с формировать отчет "Счет" и в случае если настроен соответствующий фильтр, то появится окно-фильтр, в котором сотрудник либо заполнит соответствующее поле и сформируется счет с данными реквизитами банка либо не заполнит и в таком случае выберется платежные реквизиты, которые имеют значение по умолчанию.

Да, все верно.
Фильтры можно преднастроить в сервисе отчета через TS Administrator.

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

Здравствуйте, подскажите пожалуйста как можно решить задачю!

В карточке продаж в группе элементов "Счета" по одному нажатию нужно формировать и прикреплять счет к этой продаже не переходя и редактирую карточку счета! тоесть: Нажимаю на кнопку Добавить и в этот момент вся информация продажи и продукты продажи в том числе, подтягивались в счет, автоматически создавали его и добавляли в группу элементов "Счет"( вообщем все что мы делаем руками при добавлении счета, нажал-> открыл-> заполнил->сохранил, делалось автоматически )
Буду благодарен за инф.

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

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

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

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

Далее в левом блоке кода, добавить примерно такой код:

define('OpportunityPage', ['ext-base', 'terrasoft', 'sandbox', , 'Opportunity', 'OpportunityPageStructure',
    'OpportunityPageResources', 'GeneralDetails'],
    function(Ext, Terrasoft, sandbox, Opportunity, structure, resources, GeneralDetails) {
 
        structure.userCode = function() {
 
this.methods.createInvoice = function(){             
    //код для создания счета
   //получить данные продажи можно так
   var opportunityId = this.get('Id');
   var OpportunityTitle = this.get('Title');
};
this.actions = [
{
    caption: 'Создать счет',
    methodName: 'createInvoice'
}
];
        };
     return structure;
    });

После публикации, у Вас на странице появится действие "Создать счет".
В функции createInvoice необходимо прописать логику добавления нового счета.
Как получить значения полей текущей продажи есть в примере.
Чтобы получить файлы продажи - нужно будет создавать отдельные select'ы, а затем и insert'ы.
Примеры можно посмотреть в исходных кодах конфигурации.

Дмитрий, большое Вам спасибо, просто огромное))

> Чтобы получить файлы продажи - нужно будет создавать отдельные select'ы, а затем и insert'ы.
Примеры можно посмотреть в исходных кодах конфигурации.

А можно указать место, где это можно посмотреть?

Здравствуйте, Наталья!

Пример можно посмотреть в схеме MoneyModule, функции "function onLoadCurrencyRate".

А можно перейти на страницу счета через
function goToPage()
{
var url = document.getElementById('id_Элемента');
document.location.href = url.value;
} ???
Из-за того что анг язык в BPM не работает, уж больно сложно придумывать код)

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

Юрий,

this.add('EditPageName', null, this);

Дмитрий :lol: Большое спасибо)

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

Периодически возникает необходимость создавать маски номеров не стандартного типа (%1), а с использованием нулей в начале (например, 000000%1).

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

00000010

получиться следующая:

000000010

Есть некоторые варианты решения вопроса, но мы «выкрутились» простым кодом JavaScript:

1. Создали для примера следующую маску:

/system/files/invoicemask_1.png

2. Добавили следующий код для счетов:

         var CurrentNumber = Dataset.Values('InvoiceNumber');
         var CurrentNumberLength = CurrentNumber.length;
         if (CurrentNumberLength > 8) {
                   var NewNumber = CurrentNumber.substring(CurrentNumberLength - 8);
                   Dataset.Values('InvoiceNumber') = NewNumber;
         }

/system/files/invoice_2.png

В результате мы получили нумерацию такого типа:

/system/files/invoicenumber_3.png

Поделиться

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

Доброго времени суток всем!
Недавно вот придумал такой еще универсальный вариант:

В сервисе Common\Library\scr_CommonActions приведите функцию
function GenerateSystemNumber(ItemName) к виду:

function GenerateSystemNumber(ItemName) {
	var GeneratedNumber;
	var SystemParameterName = FormatStr('%1Number', ItemName);
	var MaskName = FormatStr('%1Mask', ItemName);
	var SystemNumber =
		GetSystemParameterValueEx(SystemParameterName, true) + 1;		
 
	try {
        var MaskLength = System.GetSystemSettingValue(FormatStr('%1Length', MaskName), false);
 
    	while (SystemNumber.toString().length < MaskLength) {
           SystemNumber = '0'.concat(SystemNumber);
        }
 
    } catch (e) {
    	Log.Write(0, e.message);
	} finally {
        //var MaskLength = null;
    }
 
	SetSystemParameterValue(SystemParameterName, SystemNumber);
	var Mask = GetSystemParameterValueEx(MaskName, false);
	if ((Mask != EmptyStr) && (Mask != undefined) && (Mask != null)) {
		GeneratedNumber = FormatStr(Mask, SystemNumber.toString());
	} else {
		GeneratedNumber = SystemNumber.toString();
	}
	return GeneratedNumber;
}

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

<Имя Разделя><Mask>Length

.

Например:
раздел Счета - Invoice
маска счета: InvoiceMask
количество символов номера в номере счета: InvoiceMaskLength

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

Есть вопрос: что будет, если в момент времени между выполнением строк

var SystemNumber =
                GetSystemParameterValueEx(SystemParameterName, true) + 1;

и

SetSystemParameterValue(SystemParameterName, SystemNumber);

то же самое проделает скрипт другого пользователя?

Например, если у нас в системе не 10-20 пользователей работают, а 200-500?

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

Если такая ситуация в жизни возможна - приведет только к тому, что в системе появится 2 счета с одинаковыми номерами. Но к ошибке это точно не приведет. Т.к. GetSystemParameterValueEx и SetSystemParameterValue приводят к обращению в СУБД, а она уже управляет очередью запросов.

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

В целом, можно не беспокоиться.

Позволю себе не согласиться...

У нас регулярно происходят подобные ситуации, правда применительно к шагам процесса, а не генерации уникальных номеров. Когда-нибудь думаю дойдут руки поправить.

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

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

Задачи две:
1. Так как у каждого контграгента можно выставлять по несколько платежных реквизитов, то хорошо бы для поставщика и клиента в карточке редактирования счета иметь возможность выбора платежных реквизитов.
2. Для каждого типа платежных реквизитов поставщика использовать свою нумерацию счета с префиксом. Например, для компании ООО "Контакт-Центр" счета будут именоваться "СКЦ-15", а для компании ООО "Цифровая Страна" - "СЦС-51". Соответственно логично, что при выборе платежных реквизитов поставщика сразу формировать номер счета с учетом порядка.

Как я собираюсь это делать:
1. В таблицу и карточку редактирования платежных реквизитов внести поле префикса для счета. Соответсвенно префиксы "СКЦ-" и "СЦС-"
2. Добавить в карточку редактирования счета список выбора платежных реквизитов.
3. Добавить в таблицу счета целочисленное поле СчетчикНомера
4. Создать скрипт на изменение значениея поля списка реквизитов поставщика. Этот скрипт для соответствующего типа платежных реквизитов через SQL запрос формирует номер счета и записывает его в поле СчетчикНомера (естественно чтобы не считался текущий счет при выборе максимального номера СчетчикНомера, то в SQL запросе исключаем текущую запись). В номер счета подставляется текст префикс+СчетчикНомера.

Если есть другие реализации, буду рад услышать.

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

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

Здравствуйте, Илья.

Есть одно маленькое замечание: в базовой версии продукта, существует системная настройка InvoiceNumber, которая хранит текущий номер счета. Соответственно есть вариант реализации автоматической нумерации счета, используя эту настройку. Т.е при изменении значения поля платежные реквизиты в карточке счета, считываем эту настройку, считываем префикс счета, формируем номер счета и записываем его в поле "Номер". После чего системную настройку увеличиваем на 1.

Если у Вас возникнут дополнительные вопросы в рамках реализации описанного Вами функционала - обращайтесь.

"Олейник Дмитрий" написал:

Здравствуйте, Илья.

Есть одно маленькое замечание: в базовой версии продукта, существует системная настройка InvoiceNumber, которая хранит текущий номер счета. Соответственно есть вариант реализации автоматической нумерации счета, используя эту настройку. Т.е при изменении значения поля платежные реквизиты в карточке счета, считываем эту настройку, считываем префикс счета, формируем номер счета и записываем его в поле "Номер". После чего системную настройку увеличиваем на 1.

Если у Вас возникнут дополнительные вопросы в рамках реализации описанного Вами функционала - обращайтесь.

С уважением,
Олейник Дмитрий
Эксперт 3-й линии поддержки

Да так проще, спасибо.

Подскажите, реализовали ли вы 2-й пункт своего плана (2. Добавить в карточку редактирования счета список выбора платежных реквизитов.)
Если да то поделитесь реализацией.
С Уважением Дмитрий

"Анищенко Дмитрий" написал:

Подскажите, реализовали ли вы 2-й пункт своего плана (2. Добавить в карточку редактирования счета список выбора платежных реквизитов.)
Если да то поделитесь реализацией.
С Уважением Дмитрий

Да делали.

Илья, поделитесь реализацией?)

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

Здравствуйте Террасофт!

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

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

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

Нужно на событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик вроде:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
	var LookupDataset = LookupDataControl.DataField.LookupDataset;	
	var TypeID = atOur;//константа с GUID, описать в scr_Consts
	ApplyDatasetFilter(LookupDataset, 'TypeID', TypeID, true);
}

Содержание константы - ID записи в tbl_AccountType с текстом "Наша компания".

Опробовал предложенный метод, при нажатии на поиск в поле поставщика, появляется ошибка - что-то вроде: "не нравится atOur". Прошу рабочее решение?
В начале темы выразился не корректно:
На данный момент в поле поставщика по умолчанию стоит контрагент "Ваша компания", мне требуется сделать так, что бы по умолчанию было пусто и что бы отображал в поиске только контрагентов с типом "Наша компания".

"Березин Игорь Викторович" написал:"не нравится atOur". Прошу рабочее решение?

Нужно посмотреть значение поля ID в записи в таблице tbl_AccountType с текстом "Наша компания". Это можно сделать в СУБД или нажатием кнопки "предпросмотр" и затем "выполнить SQL" на sq_AccountType.

Потом в скрипт scr_Consts внести строку вроде:

//Наша компания
var atOur= '{12B90989-C863-42D4-A90B-DDD6024A7FED}';

Тогда заработает. Только значение константы может быть другим.

А ещё такая константа может быть изначально, попробуйте вместо atOur написать так:

 var TypeID = OurCompanyAccountType;

И ничего смотреть в БД не понадобится.

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

См. аналогичное решение здесь.

Не работает!
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.
В итоге такой скрипт получился:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
	//TODO
	var LookupDataset = LookupDataControl.DataField.LookupDataset;  
    var TypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';//константа с GUID, описать в scr_Consts
    ApplyDatasetFilter(LookupDataset, 'TypeID', TypeID, true);
}

Александр вы случаем не представитель компании Террасофт?
Когда вы отвечаете, мне почему то 7 сообщений подряд на почту приходит.
Не знаю куда сообщить о данном баге?

А так:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var TypeID = OurCompanyAccountType;
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);
}

Сообщения приходят при каждой правке комментария.

Ситуация со скриптом не изменилась.
OurCompanyAccountType - присутствует в scr_Consts.

По сообщениям понятно, спасибо.

"Березин Игорь Викторович" написал:Ситуация со скриптом не изменилась.

А какое сообщение об ошибке возникает?

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

Откройте MS SQL Management Studio и выполните следующий запрос:

select * from tbl_AccountType where Name = 'Наша компания'

1

После этого измените функцию следующим образом:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var TypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);
}

В случае возникновения ошибки, пожалуйста, укажите здесь её текст.

"Березин Игорь Викторович" написал:По сообщениям понятно, спасибо.

Как я вас понимаю...:smile:

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

Дмитрий выполнил запрос к бзае, код у меня такой же как и у вас с Александром. Сделал вставку вашего кода, проверил и ни каких изменений не произошло.
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.

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

Для того чтобы в списке контрагентов, при выборе поставщика в счете, отображались только контрагенты с типом "Наша компания" необходимо:

1) Запустить Terrasoft Administrator;
2) Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:
1
3) В этом же сервисе в блоке "Where" добавить фильтр сравнения AccountTypeID:
2
4) На событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var AccountTypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', AccountTypeID, true);
}

5) Сохранить изменения и перезапустить клиентское приложение Terrasoft .

"Олейник Дмитрий" написал:Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:

Неужели этот фильтр не существует "в коробке" изначально? Удивительно.

Ура заработало!

Всем спасибо за помощь.

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

Видимо, новосозданный фильтр AccountTypeID стал включенным. Надо снять галку у него.

Открыл ds_Account нашел "Поле фильтрации" и убрал галку. Ни каких изменений не произошло.
Александр возможно вы имели ввиду другую галку, в другом месте?

В sq_Account фильтр сравнения AccountTypeID должен быть отключён по умолчанию и включаться только когда надо.

Заработало!
Спасибо Александр.

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