Приём показаний приборов учёта. Ответы на вопросы
Общие вопросы
В. С каким количеством приборов учёта может работать ваша программа?
О. Количество приборов учёта для одного лицевого счёта не ограничено.
После получение лицевого счёта от абонента сценарий выполняет запрос, указанные на странице «Поиск доступных приборов учёта по лицевому счёту». По умолчанию это запрос:
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;
}