Добрый день!
Столкнулся с задачей следующего характера:
Имеются 2 детали, по обоим надо посчитать сумму и выдать в печатную форму итоговую сумму. Можно ли это как-то компактно реализовать или только созданием дополнительного поля в которое и будет писаться эта сумма?
Пример: В первой детали услуги на сумму в 100р, во второй детали материалы на 200р. В итоге, в печатной форме я увижу 300р.
Нравится
Быстров Сергей пишет:
Да, верно, вы передаете в макрос параметр по которому хотите найти ваши значения. Делаете 2 выборки, одну из таблицы А и вторую из таблицы Б, суммируете их между собой, а затем result = А + Б;
return result; = это значение вернется в место вызова на самой печатной форме. Могу сбросить примеры
Если делаете в Word, то воспользуйтесь макросами и за 5 минут решите вашу проблему
https://academy.terrasoft.ua/documents/technic-sdk/7-13/kak-sozdat-makr…
Литвинко Павел,
Интересное решение, но текущих примеров недостаточно. Я правильно понимаю, что в моем случае я буду вытаскивать в печатную форму ID обращения (к которому подключены 2 детали), а потом искать в макросе эту самую сумму путем перебора?
Быстров Сергей пишет:
Да, верно, вы передаете в макрос параметр по которому хотите найти ваши значения. Делаете 2 выборки, одну из таблицы А и вторую из таблицы Б, суммируете их между собой, а затем result = А + Б;
return result; = это значение вернется в место вызова на самой печатной форме. Могу сбросить примеры
namespace Terrasoft.Configuration
{
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.DB;
using Terrasoft.Core.Entities;
using Terrasoft.Core.Packages;
using Terrasoft.Core.Factories;
[ExpressionConverterAttribute("Название макроса по которому будете вызывать его из печатной формы")]
class CurrentDateConveter : IExpressionConverter
{
private UserConnection _userConnection;
public string Evaluate(object value, string arguments = "")
{
try
{
_userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
Guid paramId = new Guid(value.ToString());
return GetAmount(_userConnection, paramId);
}
catch (Exception err)
{
return err.Message;
}
}
private string GetAmount(UserConnection userConn, Guid value)
{
string result = "";
EntityCollection collection1 = GetEntity(userConn, "Таблица", "Колонка для фильтра", value.ToString());
EntityCollection collection2 = GetEntity(userConn, "Таблица2", "Колонка для фильтра", value.ToString());
foreach (var entity in collection1)
{
// var recCol1 = Посчитали сумму
}
foreach (var entity in collection2)
{
// var recCol2 = Посчитали сумму
}
result = recCol1 + recCol2;
return result;
}
private EntityCollection GetEntity(UserConnection userConn, string schemaName, string filterColumnName, string filterValue)
{
var esq = new EntitySchemaQuery(userConn.EntitySchemaManager, schemaName);
esq.AddAllSchemaColumns();
esq.Filters.Add(esq.CreateFilterWithParameters(
FilterComparisonType.Equal,
filterColumnName,
filterValue));
var entityCollection = esq.GetEntityCollection(userConn);
return entityCollection;
}
}
}
Литвинко Павел,
Неловкий вопрос - result в данном случае строка, а у меня же это сумма. Или я чего-то не понимаю? Да и сумма у меня дробная.
В итоге получилось вот так:
private string GetAmount(UserConnection userConn, Guid value)
{
EntityCollection collection1 = GetEntity(userConn, "UsrPrice", "UsrWorkObr", value.ToString());
EntityCollection collection2 = GetEntity(userConn, "UsrMaterialCost", "UsrCase", value.ToString());
float recCol1 = 0;
float recCol2 = 0;
foreach (var entity in collection1)
{
recCol1 = float.Parse(entity.GetTypedColumnValue<string>("UsrCostSummVAT")) + recCol1;
}
foreach (var entity in collection2)
{
recCol2 = float.Parse(entity.GetTypedColumnValue<string>("UsrCostSumm")) + recCol2;
}
return (recCol1 + recCol2).ToString("R");
}