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

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску
 
(не показано 9 промежуточных версий 1 участника)
Строка 1: Строка 1:
__TOC__
==Общие вопросы==
===В. С каким количеством приборов учёта может работать ваша программа?===
О. Количество приборов учёта для одного лицевого счёта не ограничено.
После получение лицевого счёта от абонента сценарий выполняет запрос, указанные на странице «Поиск доступных приборов учёта по лицевому счёту». По умолчанию это запрос:
  select * from Counter where Account ='[Account]' order by CounterName
пусть значение '''[Account]''' будет равно '''123456789''', таким образом, мы получаем запрос:
  select * from Counter where Account ='123456789' order by CounterName
в результате выполнения которого мы получаем таблицу:
:{|border="1" cellspacing="0"
|-
|style="background-color:#eeeeee;" cellpadding="0" cellspacing="0" align="center"|'''Id_Counter'''
|style="background-color:#eeeeee;" cellpadding="0" cellspacing="0" align="center"|'''Account'''
|style="background-color:#eeeeee;" cellpadding="0" cellspacing="0" align="center"|'''CounterName'''
|style="background-color:#eeeeee;" cellpadding="0" cellspacing="0" align="center"|'''LastReading'''
|-
|align="right"|1
|align="right"|123456789
|align="center"|По горячей воде
|align="right"|0
|-
|align="right"|5
|align="right"|123456789
|align="center"|По холодной воде
|align="right"|0
|-
|align="right"|6
|align="right"|123456789
|align="center"|Электросчётчик
|align="right"|0
|}
Сценарий обрабатывает все приборы учёта, данные по которым получены в результате запроса. В описанном нами случае это будет три прибора учёта: '''По горячей воде''', '''По холодной воде''', '''Электросчётчик'''.
Если по лицевому счёту будет получен всего один прибор учёта, сценарий спросит показания по одному прибору учёта. Если будет пятьдесят приборов учёта, сценарий будет запрашивать показания по пятидесяти приборам учёта.
==Вопросы по работе с данными==
==Вопросы по работе с данными==


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


Например, предположим, что в таблице текущее показание прибора учёта ('''[Счетчик.LastReading]''') равно '''456''', а от абонента получено новое показание ('''[Reading]'''), равное '''234'''. Для проверки используется функция:
Например, предположим, что в таблице текущее показание прибора учёта ('''[Счетчик.LastReading]''') равно '''456''', а от абонента получено новое показание ('''[Reading]'''), равное '''234'''. Для проверки используется функция:
Строка 36: Строка 79:
}
}
</syntaxhighlight>
</syntaxhighlight>
===В. Как использовать в проверке показаний данные из другой таблицы===
О. В функции можно использовать класс для работы с базой данных — '''Database'''. Вы можете использовать любые SQL-запросы, поддерживающиеся драйвером для вашей базы данных.
<syntaxhighlight lang="javascript">
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;
}
</syntaxhighlight>
===В. Адрес распознан но не найден в базе данных===
О. Данная ситуация происходит по причине не полного соответствия результата отправленного сервисом распознавания, и записью в базе данных.
Например, предположим, абонент назвал адрес и он пришел от сервиса распознавания в таком виде ''40 лет Октября'', в базе он записана так ''40лет Октября''. В данном случае адрес не будет найден, так как ответ от сервиса распознавания пришел с проблем, данная ситуация повторится и в том случае, если не будут совпадать регистры. 


[[Category:Приём показаний]]
[[Category:Приём показаний]]

Текущая версия на 10:20, 4 декабря 2020

Общие вопросы

В. С каким количеством приборов учёта может работать ваша программа?

О. Количество приборов учёта для одного лицевого счёта не ограничено.

После получение лицевого счёта от абонента сценарий выполняет запрос, указанные на странице «Поиск доступных приборов учёта по лицевому счёту». По умолчанию это запрос:

  select * from Counter where Account ='[Account]' order by CounterName

пусть значение [Account] будет равно 123456789, таким образом, мы получаем запрос:

  select * from Counter where Account ='123456789' order by CounterName

в результате выполнения которого мы получаем таблицу:

Id_Counter Account CounterName LastReading
1 123456789 По горячей воде 0
5 123456789 По холодной воде 0
6 123456789 Электросчётчик 0

Сценарий обрабатывает все приборы учёта, данные по которым получены в результате запроса. В описанном нами случае это будет три прибора учёта: По горячей воде, По холодной воде, Электросчётчик.

Если по лицевому счёту будет получен всего один прибор учёта, сценарий спросит показания по одному прибору учёта. Если будет пятьдесят приборов учёта, сценарий будет запрашивать показания по пятидесяти приборам учёта.

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

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

О. Для проверки корректности полученных данных используется функция на языке 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;
}

В. Адрес распознан но не найден в базе данных

О. Данная ситуация происходит по причине не полного соответствия результата отправленного сервисом распознавания, и записью в базе данных.

Например, предположим, абонент назвал адрес и он пришел от сервиса распознавания в таком виде 40 лет Октября, в базе он записана так 40лет Октября. В данном случае адрес не будет найден, так как ответ от сервиса распознавания пришел с проблем, данная ситуация повторится и в том случае, если не будут совпадать регистры.