Вопрос

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

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

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

Эта логика реализована во встроенном БП объекта «Продукт в продаже» (OpportunityProductInterest). Там в обработчике событий сохранения и удаления записей в объекте детали запускается функция CalckOpportunityAmount с кодом:

var oppotrunityAmountSelect = new Select(UserConnection)
	.Column("Amount")
	.From("OpportunityProductInterest")
	.Where("OpportunityId").IsEqual(Column.Parameter(opportunityId)) as Select;
double opportunityAmount = 0.0;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
	using (IDataReader dr = oppotrunityAmountSelect.ExecuteReader(dbExecutor)) {
		while (dr.Read()) {
			if(!dr.IsDBNull(0)){
				opportunityAmount += (double)UserConnection.DBTypeConverter.DBValueToDecimal(dr[0]);
			}
		}
	}
}
var update = new Update(UserConnection, "Opportunity")
		.Set("Amount", Column.Parameter(opportunityAmount))
		.Where("Id").IsEqual(Column.Parameter(opportunityId));
	update.Execute();

 

Зверев Александр, 

Спасибо. Нашел - получилось что бы в поле записывалась сумма, но я так понимаю должно быть еще сообщение которое заставляет страницу обновляться (или точнее поле на фронте). Не нахожу таких сообщений в OpportunityPageV2 и наверно с БП объекта тот что отправляет

У страницы OpportunityPageV2 есть много версий в разных пакетах.

Зверев Александр,

Я смотрел сразу через дебагер в chrome, что бы видеть все версии сразу

Не оно ли:

details: /**SCHEMA_DETAILS*/{
...
OpportunityProduct: {
	schemaName: "OpportunityProductDetailV2",
	filter: {
		masterColumn: "Id",
		detailColumn: "Opportunity"
	},
	subscriber: {methodName: "onOpportunityProductChanged"}
},
...
methods: {
 
/**
 * Reloads current record.
 * @private
 */
onOpportunityProductChanged: function() {
	this.loadEntity(this.get("Id"));
	this.sendSaveCardModuleResponse(this);
},

 

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

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

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

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

День добрый! 

Скрипт по апдейту значений из продукта в заказе продуктов в счете (через график поставок и оплат) лежит в схеме OrderAmountHelper.

Удачи!

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

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

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

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

Добрый день!

Абсолютно аналогичным образом.
Создайте новый ActionMenuItem в wnd_OpportunityWorkspace.

Код-пример для обработки нового действия продаж Вы можете взять из функции amiRecalcAmountOnExecute скрипта scr_InvoiceWorkspace.

Сама логика пересчета реализована в функции RecalcAmount того же скрипта.

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

В контекстном меню Счета в Действиях отсутствует опция "пересчитать сумму". Есть только "Сгенерировать номер". Как добавить "пересчитать сумму"? Версия 3.3.0.42 x15

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

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

Т.е. в самом разделе в действиях он есть, а в контекстном меню грида нет? Или ни там ни там нет?

Ни там, ни там нет.

Тогда добавьте в окно раздела в меню, которое соответствует меню действий пункт amiRecalcAmount и повесьте на него

function amiRecalcAmountOnExecute(ActionMenuItem) {
    var Dataset = BaseWorkspace.GridDataset;
    if (IsDatasetEmpty(Dataset)) {
	    return;
	}
	Dataset.DisableEvents();
	try {
		var GridWindow = wndGridData.Window;
		var grdData = GridWindow.ComponentsByName('grdData');
		var ArrayIDs = GetArrayByCollection(grdData.SelectedIDs);
		var Passed = 0;
		for (var i = 0; i < ArrayIDs.length; i++) {
			var InvoiceID = ArrayIDs[i];
			Dataset.Locate('ID', InvoiceID);
 
			var CanUpdateInvoice =
				(GetCanUpdateTableGroup(Dataset)) &&
				(Dataset.GetCurrentRecordAccessLevel() == tfalFullAccess);
			if (!CanUpdateInvoice) {
				Passed++;
				continue;
			}
			RecalcAmount(InvoiceID);
		}
		var PassedMessage = '';
		if (Passed > 0) {
			PassedMessage = ' ' + "Пропущено %1 записей.";
			PassedMessage = FormatStr(PassedMessage, Passed);
		}
		var Message = "Выполнен пересчет для %1 записей." + PassedMessage;
		var Message = FormatStr(Message, ArrayIDs.length - Passed);
	    ShowInformationDialog(Message);
	} finally {
		Dataset.EnableEvents()
	}
}

Посмотрите, в скрипте раздела есть функция RecalcAmount?

Не могу найти раздел действий.
Где искал: Файл - Справочники - Настройка Справочников - Счет и там выбрал окно реестра (wnd_InvoiceGridArea).
Открывается Terrasoft Administrator, там захожу на невизуальные. На невизуальных есть amGrid и amDelete. Если добавлять элемент на amGrid, то действие добавиться в корень контекстного меню (не в действия).
Подскажите,пожалуйста, как правильно добраться до соотвествующего меню действий

Андрей, Вам необходимо добавить действие в сервис окна воркспейса wnd_InvoicesWorkspace.

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

Осваиваю функциональность TS CRM вер.3.2.1.4. Сегодня столкнулся с ситуацией, набор продуктов в счете есть, сумма по продуктам считается, но попытка пересчитать сумму дает стабильно 0.00, вопрос куда смотреть?
Я раньше я сделал несколько счетов, начал по классической технологии -
1. Создал договор.
2. Созадал счет.
3. Набрал продукты в счет.
4. Нажал кнопку пересчет суммы.
самый первый счет тоже страдал аналогичной болезнью, я его удалил. Сделал заново, все сработало нормально, думал, може че не туда ткнул по неопытности... Потом два счета сделал, все отработало предсказуемо, а сегодня начал делать счет - опять 0-сумма. Я грешил на то что попробовал счет просто без договора создать, удалил его, создал договор, на детали счета добавил счет, добавил туда продукты и опять сумма -0.0 если надо могу скрин экрана прислать...

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

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

Добрый день, Руслан!
1. Наличие значения в поле "Договор" карточки Счета на результат пересчета суммы не влияет.
2. Пересчет суммы означает:
а) суммирование значений поля "Итого (б.в.)" записей на детали Продукты в разделе счета,
б) помещение результата в поле "Сумма (б.в.)" для текущей записи в разделе Счета,
в) и вычисление значения поля "Сумма" исходя из значений полей "Сумма (б.в.)" и "Курс валюты" для текущей записи в разделе Счета.

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

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

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