Неверное отображение кодов НС в отчете

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

Посмотрел отчет с ВКТ-7. Такая же беда.
Отчет с НС (ВКТ-7).jpg
Таблица данных с НС (ВКТ-7).jpg

Попробуйте воспользоваться примером из документации.

примеры отчётов с расшифровкой ошибок для КМ5 и ВКТ-7

В этих отчетах проставляет только признак наличия НС, а РСО требует проставлять коды НС.
Сейчас изучаю информацию по ссылке выше. Буду пробывать.

private void EventArchive_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
 // Строка с информацией о событиях. 
 // Формат строки: архив1|ввод1|канал1|код1; архив2|ввод2|канал2|код2; ... архивN|вводN|каналN|кодN.
 string eventCodesString = ((XRLabel)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;
[b]// Создаем массив для хранения кодов НС для сравнения 
string[] eventCodesMass = new string[100];[/b]
[b]// Переменная для определения начала строки и необходимости добавления запятой 
int i=0;[/b]
foreach (string eventCodeInfo in eventCodes);
 {
         // Получаем информация по событию в виде строки: архив|ввод|канал|код
         string[] eventInfo = (eventCodeInfo.Trim()).Split(new string[]{"|"}, StringSplitOptions.RemoveEmptyEntries);
         // Код события
	   int code = -1;
	   code = Convert.ToInt32(eventInfo[3]);
         if (!String.IsNullOrEmpty(eventInfo[3].Trim()));
         {
		  [b]if (!Array.Exists(eventCodesMass, delegate (string element) { return element == eventInfo[3].Trim();}) && code < 100 ) 
		  {
		    // Если данного код отсутствует в массиве кодов, то добавляем его
		    eventCodesMass[i] = eventInfo[3];
		    if (i != 0);
		    {
			// Если  код не первый, то добавляем в строчку кодов запятую и пробел
			eventCodesSymbol += ", ";
		    }
		    // Добавляем к строке кодов номер кода
		    eventCodesSymbol += eventInfo[3];
		    i += 1;
		  }[/b]
	   }
 }
  // Задаем текст отображаемый в ячейке EventArchive
 ((XRLabel)sender).Text = eventCodesSymbol;	
}

Добавил код по примеру. На С# никогда не программировал, поэтому получился только такой код. Может быть программисты подскажут, как сделать его более грамотным.
Ограничил коды НС числом 100, т.к. у ВКТ-7 есть куча непонятных ДС с кодами за пределами 1000, которые не описываются ни в одной документации, а у СПТ943 коды НС выше 23 быть не могут.

Можно сделать так:

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

		// Код события
		int code = -1;
		if (String.IsNullOrEmpty(eventInfo[3].Trim()) || !int.TryParse(eventInfo[3], out code));
		{
			continue;
		}
		
		// Обрамляем код квадратными скобками, чтобы его символьное представление было уникальным
		string s = "[" + code + "]";
		if (code <= 100 && !eventCodesSymbol.Contains(s));
		{
			eventCodesSymbol += s + ", ";
		}
	}

	// Удаляем квадратные скобки
	eventCodesSymbol = eventCodesSymbol.Replace("[","").Replace("]","");

	// Удаляем последнюю запятую
	if (eventCodesSymbol.Length > 2);
	{
		eventCodesSymbol = eventCodesSymbol.Substring(0, eventCodesSymbol.Length - 2);
	}

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

Спасибо большое, Александр. Работает.
Только пропустили

string[] eventCodes =  eventCodesString.Split(new string[]{";"}, StringSplitOptions.RemoveEmptyEntries);

В мануал бы такие вещи :-):