Вопрос

Поля табличной части печатной формы

Добрый день! Подскажите пожалуйста, как можно данные из табличной части печатной формы записать в строчку, через запятую?Изображение удалено.

Нравится

11 комментариев
Лучший ответ

ЛизаКретова123,

А в чем сложности сделать через макрос?

Вся ваша задача решается за 10 минут примерно так, только подправить названия объектов, колонок и добавить какой надо символ разделения:

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("GetContactInfo")]
    class AccountInfoByTypeConveter : IExpressionConverter
    {
        private UserConnection _userConnection;
 
        public string Evaluate(object value, string arguments = "")
        {
            try
            {
                _userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
                Guid contractId = new Guid(value.ToString()); //передаете с печатной формы ID договора
                return getContactInfo(contractId);
            }
            catch (Exception err)
            {
                return err.Message;
            }
        }
        private string getStringForPrintForm(Guid contractId)
        {
            try
            {
                EntitySchemaQuery esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Запрос в таблицу дольщиков по Id договора");
                esq.AddColumn("Колонка дольщик");
                esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Contract", contractId));
                var entityCollection = esq.GetEntityCollection(_userConnection);
                string result = "";
                foreach (var entity in entityCollection)
                {
                    string contact = getContactInfo(entity.GetTypedColumnValue<Guid>("Id"));
                    result += contact;
                }
                return result;
            }
            catch (Exception err)
            {
                throw err;
            }
        }
        private string getContactInfo(Guid contractId)
        {
            try
            {
                EntitySchemaQuery esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Contact");
                esq.AddColumn("Name");
                esq.AddColumn("BirthDate");
                esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", contractId));
                var entityCollection = esq.GetEntityCollection(_userConnection);
                string result = "";
                foreach (var entity in entityCollection)
                {
                    result += entity.GetTypedColumnValue<string>("Name") + ", " + entity.GetTypedColumnValue<DateTime>("BirthDate").ToString() + " ";
                }
                return result;
            }
            catch (Exception err)
            {
                throw err;
            }
        }
    }
}

 

Писать собственный макрос нужно, где и формировать нужную строку.

https://academy.terrasoft.ru/documents/technic-sdk/7-6/kak-sozdat-svoy-…

Можете более подробно сформулировать Вашу задачу и привести пример, что в итоге должно получиться?

В разделе договоры есть деталь дольщики(несколько контактов) Необходимо получить печатную форму из раздела договоры, где будут указаны эти дольщики(ФИО и дата рождения через запятую). Например, Иван Иванович Иванов 12.09.1987, Петр Петрович Петров 03.02.1990

Эти поля я выводила через табличную часть печатной формы, проблема в том, что в таблицу все выводится корректно(пример выше, там немного другие данные)) , а в строчку дублируется первый дольщик. (Иван Иванович Иванов 12.09.1987, Иван Иванович Иванов 12.09.1987)

Надеюсь я понятно сформулировала задачу

Можно в объекте «договор» добавить новое текстовое поле и при добавлении записей в объект детали программно (БП, встроенным БП или триггером) формировать значение этой строки. Затем в печатной форме работать с этим полем как обычно.

ЛизаКретова123,

А если выводить в таблицу, но без заголовка таблицы и в одной ячейке все нужные значения?

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

Покажите скриншот печатной формы, которую Вы хотите получить?

Также уточните версию bpm'online, на которой нужно настроить такой отчет.

Алла Савельева,

Спасибо за идею выводить в одну ячейку, я попробую!

Версия 7.12.4.924 Real Estate

Сначала ФИО дольщиков и дата рождения выводится в строчку

а потом в таком виде(ниже): с паспортными данными и ИНН

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

 

Это в строчку

Алла Савельева,

Воспользовалась вашим советом: получилось реализовать для вывода в следующем виде:

Фио_дольщик1 / паспорт_ИНН1

Фио_дольщик2/ паспорт_ИНН2

Фио_дольщик 3/ паспорт_ИНН3

А в строку не получается, потому что значения все равно располагаются друг под другом

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

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

Пытаюсь сделать сейчас так, спасибо Вам! 

ЛизаКретова123,

А в чем сложности сделать через макрос?

Вся ваша задача решается за 10 минут примерно так, только подправить названия объектов, колонок и добавить какой надо символ разделения:

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("GetContactInfo")]
    class AccountInfoByTypeConveter : IExpressionConverter
    {
        private UserConnection _userConnection;
 
        public string Evaluate(object value, string arguments = "")
        {
            try
            {
                _userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
                Guid contractId = new Guid(value.ToString()); //передаете с печатной формы ID договора
                return getContactInfo(contractId);
            }
            catch (Exception err)
            {
                return err.Message;
            }
        }
        private string getStringForPrintForm(Guid contractId)
        {
            try
            {
                EntitySchemaQuery esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Запрос в таблицу дольщиков по Id договора");
                esq.AddColumn("Колонка дольщик");
                esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Contract", contractId));
                var entityCollection = esq.GetEntityCollection(_userConnection);
                string result = "";
                foreach (var entity in entityCollection)
                {
                    string contact = getContactInfo(entity.GetTypedColumnValue<Guid>("Id"));
                    result += contact;
                }
                return result;
            }
            catch (Exception err)
            {
                throw err;
            }
        }
        private string getContactInfo(Guid contractId)
        {
            try
            {
                EntitySchemaQuery esq = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "Contact");
                esq.AddColumn("Name");
                esq.AddColumn("BirthDate");
                esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", contractId));
                var entityCollection = esq.GetEntityCollection(_userConnection);
                string result = "";
                foreach (var entity in entityCollection)
                {
                    result += entity.GetTypedColumnValue<string>("Name") + ", " + entity.GetTypedColumnValue<DateTime>("BirthDate").ToString() + " ";
                }
                return result;
            }
            catch (Exception err)
            {
                throw err;
            }
        }
    }
}

 

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