Функция GetListing(body, answer) Экспорт
answer.result = Новый Массив;
answer.error = Истина;
answer.errortext = "Ошибка!";
Если body.Свойство("page") Тогда
page = Число(body.page);
Иначе
page = 1;
КонецЕсли;
Если body.Свойство("limit") Тогда
limit = Число(body.limit);
Иначе
limit = 20;
КонецЕсли;
Если body.Свойство("sidx") Тогда
sidx = body.sidx;
Иначе
sidx = "";
КонецЕсли;
Если body.Свойство("sord") Тогда
sord = body.sord;
Иначе
sord = "";
КонецЕсли;
Если body.Свойство("flt") Тогда
flt = body.flt;
Иначе
flt = Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХрюХрю.Номер КАК id,
| ХрюХрю.НачалоЧесания КАК dtstart,
| ХрюХрю.ДлительностьПочесывания КАК long,
| ХрюХрю.Пятачок.Наименование КАК column,
| ХрюХрю.ВыходПятачка.OCPP_num КАК outlet,
| ХрюХрю.НачальныеПоказанияСчастья КАК meterstart,
| ХрюХрю.КонечныеПоказанияСчастья КАК meterend,
| ПРЕДСТАВЛЕНИЕ(ХрюХрю.ТекущийСтатусПочесывания) КАК status,
| ХрюХрю.ТекущийСтатусПочесывания КАК ТекущийСтатусПочесывания
|ПОМЕСТИТЬ тЗарядки
|ИЗ
| Документ.ХрюХрю КАК ХрюХрю
|ГДЕ
| ХрюХрю.ЭЗС.Владелец.Код = &Код
| И ХрюХрю.ПометкаУдаления = ЛОЖЬ
| И ХрюХрю.НачалоЧесания МЕЖДУ &ДатаНачала И &ДатаКонца
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| тЗарядки.column КАК column,
| тЗарядки.dtstart КАК dtstart,
| тЗарядки.id КАК id,
| тЗарядки.long КАК long,
| тЗарядки.meterend КАК meterend,
| тЗарядки.meterstart КАК meterstart,
| тЗарядки.outlet КАК outlet,
| тЗарядки.status КАК status,
| тЗарядки.ТекущийСтатусПочесывания КАК ТекущийСтатусПочесывания
|ИЗ
| тЗарядки КАК тЗарядки
| &Фильтры
| &Сортировка ";
Запрос.УстановитьПараметр("Код", пп.Владелец.Код);
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Дата(body.datefrom)));
Запрос.УстановитьПараметр("ДатаКонца", КонецДня(Дата(body.datefrom)));
Сортировка = "";
Если ЗначениеЗаполнено(sidx) Тогда
Сортировка = "УПОРЯДОЧИТЬ ПО " + sidx + " " + sord + ", id desc";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Сортировка", Сортировка);
Условие = "";
status="";
Если ЗначениеЗаполнено(flt) Тогда
groupOp = flt.groupOp;
rules = flt.rules;
Для Каждого rule Из rules Цикл
Если rule.op = "bw" Тогда
ЧастичноеУсловие = "(" + rule.field + " ПОДОБНО ""%" + rule.data + "%"")";
Условие = Условие + ?(ЗначениеЗаполнено(Условие), " " + groupOp + " ", "") + ЧастичноеУсловие;
конецесли;
Если rule.op = "eq" Тогда
если rule.data<>"-1" тогда
Если rule.field = "status" Тогда
ЧастичноеУсловие = "(ТекущийСтатусПочесывания = &status)";
status=rule.data;
иначе
ЧастичноеУсловие = "(" + rule.field + " = """ + rule.data + """)";
конецесли;
Условие = Условие + ?(ЗначениеЗаполнено(Условие), " " + groupOp + " ", "") + ЧастичноеУсловие;
конецесли;
конецесли;
конеццикла;
Если ЗначениеЗаполнено(Условие) Тогда
Условие = "ГДЕ " + Условие;
КонецЕсли;
конецесли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Фильтры", Условие);
если status<>"" тогда
status=перечисления.СтатусыПочесывания[status];
Запрос.УстановитьПараметр("status", status);
конецесли;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
rows = Новый Массив();
РезультатЗапроса = Запрос.Выполнить().Выгрузить(); // нехорошо
колстрок = РезультатЗапроса.Количество();
total = Цел((колстрок - 1) / limit) + 1;
rowid = (page - 1) * limit;
lastrow = rowid + limit - 1;
records=0;
Пока rowid <= lastrow И rowid < колстрок Цикл
Стр = РезультатЗапроса[rowid];
cell = Новый Массив;
cell.Добавить(Стр.id);
cell.Добавить(Стр.dtstart);
cell.Добавить(Стр.long);
cell.Добавить(Стр.column);
cell.Добавить(Стр.outlet);
cell.Добавить(Стр.status);
cell.Добавить(Стр.meterend-Стр.meterend);
cell.Добавить(0);
row = Новый Структура("id, cell", Стр.id, cell);
rows.Добавить(row);
rowid = rowid + 1;
records=records+1;
КонецЦикла;
result = Новый Структура("page, total, records, rows", page, total, records, rows);
answer.result = result;
answer.errortext="";
answer.error = ложь;
возврат answer;
конецфункции