Архив ошибок в ведомости параметров потребления

Добрый день уважаемые Господа разработчики
В отчеты (ведомость параметров потребления) приходится добавлять данные из архива ошибок устройства и возникает необходимость иметь необходимый нам вид представления этой записи, в связи с чем вопрос встал: как это сделать?
В нем добавлена колонка для записи НС прибора, и все как бы формируется, но в таком формате, который не устраивает снабжающую организацию, им так не по фэншую, и они нам мозг выносят в связи с этим.
АРХИВ | ВВОД | КАНАЛ | НС;
Можно ли как то обыграть макросом или другим каким то способом обработать эти ячейки, чтобы оставить только номер ввода и номер нештатки или вообще только номер нештатки (применительно хотя бы пока к моделям СПТ94Х)

Вот отчет
Отчет ГВС ХВС ГВС по двум магистралям с НС c 26.11.2018 по 25.12.2018.pdf (239 KB)

У нас в примерах есть отчетная форма “KM5DB”. В ней приведен пример как это можно сделать при помощи скриптов. Вы можете сделать у себя по аналогии с этой отчетной формой.

Я её смотрел уже перед тем как добавить в форму это поле, там нет скриптов, там просто добавлена строка загрузки соответствующих данных из базы, без скриптов. Поэтому хотелось бы пример скрипта все таки для обработки данных, можно и для других данных не обязательно именно этих

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

Не так написал извиняюсь
Скрипт там есть но он не выполняется, поэтому все остается как есть, вот в таком виде:

Формат строки: архив1|ввод1|канал1|код1; архив2|ввод2|канал2|код2; … архивN|вводN|каналN|кодN.

В настройках скрипта установлена единственное свойство “перед печатью” и выбран скрипт “EventGroups_BeforePrint”

Вот его фрагмент:

// Формируем текст для колонки ‘Классификатор ошибок’
// Эта колонка связана с полем DeviceEventCodes, в котором события записаны в виде строки:
// архив1|ввод1|канал1|код1; архив2|ввод2|канал2|код2; … архивN|вводN|каналN|кодN
private void EventGroups_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
// Строка с информацией о событиях.
// Формат строки: архив1|ввод1|канал1|код1; архив2|ввод2|канал2|код2; … архивN|вводN|каналN|кодN.
string eventCodesString = ((XRTableCell)sender).Text;

if (String.IsNullOrEmpty(eventCodesString))
return;

// Получаем массив типов архива и кодов событий:
// eventCodesString - строка с форматом: архив1|ввод1|канал1|код1; архив2|ввод2|канал2|код2; … архивN|вводN|каналN|кодN
string[] eventCodes = eventCodesString.Split(new string[]{";"}, StringSplitOptions.RemoveEmptyEntries);

// Формируем обозначения для групп событий и типов архивов
string eventCodesSymbol = String.Empty;
foreach (string eventCodeInfo in eventCodes)
{
// Получаем информация по событию в виде строки: архив|ввод|канал|код
string[] eventInfo = (eventCodeInfo.Trim()).Split(new string[]{"|"}, StringSplitOptions.RemoveEmptyEntries);

// Код типа архива
int archiveType = -1;
if (!String.IsNullOrEmpty(eventInfo[0].Trim()))
archiveType = Convert.ToInt32(eventInfo[0]);

// Номер теплового ввода
int heatLeadIn = -1;
if (!String.IsNullOrEmpty(eventInfo[1].Trim()))
heatLeadIn = Convert.ToInt32(eventInfo[1]);

// Номер канала
int channelNumber = -1;
if (!String.IsNullOrEmpty(eventInfo[2].Trim()))
channelNumber = Convert.ToInt32(eventInfo[2]);

// Код события
int code = -1;
if (!String.IsNullOrEmpty(eventInfo[3].Trim()))
code = Convert.ToInt32(eventInfo[3]);

// Формируем символьное отображение событий

// Период отключения питания
if (Array.Exists(codes_U, delegate(int c) { return (c == code); }) && eventCodesSymbol.IndexOf(“U”) == -1)
eventCodesSymbol += “U”;

// Период t1-t2 < min
else if (Array.Exists(codes_D, delegate(int c) { return (c == code); }) && eventCodesSymbol.IndexOf(“D”) == -1)
eventCodesSymbol += “D”;

// Период функционального отказа
else if (Array.Exists(codes_E, delegate(int c) { return (c == code); }) && eventCodesSymbol.IndexOf(“E”) == -1)
eventCodesSymbol += “E”;

// Период G > max
else if (Array.Exists(codes_G, delegate(int c) { return (c == code); }) && eventCodesSymbol.IndexOf(“G”) == -1)
eventCodesSymbol += “G”;

// Период G < min
else if (Array.Exists(codes_g, delegate(int c) { return (c == code); }) && eventCodesSymbol.IndexOf(“g”) == -1)
eventCodesSymbol += “g”;

// Период прочих кодов
else if (eventCodesSymbol.IndexOf("") == -1)
eventCodesSymbol += "
";
}

((XRTableCell)sender).Text = eventCodesSymbol;
}

Поэтому огромная просьба разобраться почему он не выполняется при формировании отчета и подсказать как правильно исключить в строке архив1|ввод1|канал1|код1; архив2|ввод2|канал2|код2; … архивN|вводN|каналN|кодN первые три записи и оставить только “кодN”

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

Указанная отчетная форма предоставляется как есть. По ней техническая поддержка не оказывается. Скажу лишь что данная отчетная форма неоднократно тестировалась и полностью работоспособна.

Также, если самостоятельно разработать отчетную форму не получается, вы можете заказать ее разработку у нас на коммерческой основе.

  1. Я понимаю что в нем привязка сделана к кодам прибора КМ-5, дело не в этом, проблема в том что этот скрипт не исполняется
  2. “Разработка скрипта” это слишком громко сказано мы считаем, в данном случае нужно из строки исключить три отображаемых кода и все!
    Хорошо пусть коммерческий отдел вышлет нам предложение, я надеюсь что оно будет по адекватной цене
    Или напишите куда обратиться и что написать
    Надо было с этого начать, про коммерческое их использование или разработку на коммерческой основе
    И в документации написать что скрипты пользователь использовать не может так как нет на них документации или их использование не документировано
    В SCADA системах если есть скрипты то на них есть библиотека на типовые применения и есть руководство по их использованию
    У вас как то все странно с ними получается

Тогда просьба до заявки на коммерческой основе дать ссылку на документацию или здесь написать какие настройки в свойствах ячейки отчетной формы должны быть для исполнения/выполнения пользовательского скрипта. А то может оказать что проблема с настройками для использования скрипта или вовсе окажется что он не отрабатывается по причине ошибки.
Повторюсь что мы настроили по образу и подобию примера из формы для КМ-5, имя скрипта “EventGroups_BeforePrint” указали в свойстве “перед печатью” в ветке “скрипты” свойств ячейки
Может еще какие то настройки есть где нужно что то изменить

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

На списке точек учета выберите нужную и откройте список событий (вкладка Действия → Архив событий устройства). Сделайте и приложите скриншот списка событий за период, для которого формируется отчет.