Приём показаний приборов учёта. Ответы на вопросы

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску

Вопросы по работе с данными

В. Можно ли настроить проверку приёма показаний так, чтобы принимались и значения меньше текущих?

О. Для проверки корректности полученных данных используется функция на языке Javascript. В тексте функции переменные области действия сценария заменяются их значениями. Если результатом работы функции будет true (истина), проверка считается пройденной. Любой другой результат воспринимается как непройденная проверка, возвращается текстовая строка, которая произносится в линию абоненту как объяснение, почему не приняты показания.

Например, предположим, что в таблице текущее показание прибора учёта ([Счетчик.LastReading]) равно 456, а от абонента получено новое показание ([Reading]), равное 234. Для проверки используется функция:

function (Database) 
{
   if ([Счетчик.LastReading] > [Reading]) return 'Введённые показания [Reading] меньше текущих [Счетчик.LastReading]';

   return true;
}

После выполнения подстановок мы получаем следующий код:

function (Database) 
{
   if (456 > 234) return 'Введённые показания 234 меньше текущих 456';

   return true;
}

и результатом работы функции будет строка: «Введённые показания 234 меньше текущих 456». Показания не приняты, абоненту сообщается, по какой причине.

Если же принимаются любые показания, независимо от того, больше они или меньше текущих в базе данных, сравнение можно убрать:

function (Database) 
{
   return true;
}

В. Как получить данные из другой таблицы?

О. В функции можно использовать класс для работы с базой данных — Database. Вы можете использовать любые SQL-запросы, поддерживающиеся драйвером для вашей базы данных.

function (Database) 
{
   var ListCounters = '';      // Записываем в переменную названия приборов учёта по номеру лицевого счёта

                               // Получаем записи из базы данных
   var Record = Database.Query ("select CounterName from Counter where Account='[Account]' order by CounterName");

   while (Record.Fetch ()) {   // Пока есть необработанные записи

      if (ListCounters !== '') ListCounter += ', ';      // Если уже получены названия, добавляем запятую

      ListCounters += '[' + Record.GetFieldValue ('CounterName') + ']';      // Добавляем название прибора учёта

      Record.Next ();          // Переход к следующей записи
   }

   return ListCounters;
}