Добрый день!
Столкнулся с задачей следующего характера:
Имеются 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"); }