1C: Еще один вариант вывода данных с пагинацией
На этот раз, данные подготовлены для JSON JqGrid. Рабочий вариант для не большого количества записей (около 1000). В противном случае будут «тормоза» в 1С, т.к. листается вся выборка для построения «страницы» (не моё).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
Функция 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; конецфункции |