Advertisement
Guest User

Untitled

a guest
Nov 5th, 2020
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.25 KB | None | 0 0
  1. Функция ПолучитьЗаказы(ДанныеАвторизации, ПараметрыПолучения) Экспорт
  2.  
  3. PeriodFrom = глСвойствоСтруктуры(ПараметрыПолучения, "PeriodFrom");
  4. PeriodTo = глСвойствоСтруктуры(ПараметрыПолучения, "PeriodTo");
  5. PeriodType = глСвойствоСтруктуры(ПараметрыПолучения, "PeriodType");
  6. Statuses = глСвойствоСтруктуры(ПараметрыПолучения, "Statuses", Новый Массив);
  7.  
  8. ПериодС = Неопределено;
  9. ПериодПо = Неопределено;
  10. ИмяПоляДаты = ?(PeriodType = "PickupDate", "ВремяПодачи", "Дата");
  11. Статусы = Новый Массив;
  12.  
  13. Если ЗначениеЗаполнено(PeriodFrom) Тогда
  14. ПериодС = XMLЗначение(Тип("Дата"), PeriodFrom);
  15. КонецЕсли;
  16.  
  17. Если ЗначениеЗаполнено(PeriodTo) Тогда
  18. ПериодПо = XMLЗначение(Тип("Дата"), PeriodTo);
  19. КонецЕсли;
  20.  
  21. Для Каждого ИдентификаторСтатуса Из Statuses Цикл
  22.  
  23. СтатусСсылка = ApiИнтеграцийСлужебный.ПолучитьСсылку(
  24. ИдентификаторСтатуса, Справочники.такСтатусыЗаказовТакси, "Статус");
  25.  
  26. Статусы.Добавить(СтатусСсылка);
  27.  
  28. КонецЦикла;
  29.  
  30. ПараметрыПоиска = ApiИнтеграцийСлужебный.НовыйПараметрыПоиска();
  31. ПараметрыПоиска.Сортировка.Добавить(ИмяПоляДаты + " УБЫВ");
  32. ПараметрыПоиска.ЗначенияПараметров.Вставить("НачалоПериода", ПериодС);
  33. ПараметрыПоиска.ЗначенияПараметров.Вставить("ОкончаниеПериода", ПериодПо);
  34. ПараметрыПоиска.ЗначенияПараметров.Вставить("Статусы", Статусы);
  35.  
  36. ЗаполнитьСтандартныеПараметрыПоиска(ПараметрыПоиска, ПараметрыПолучения);
  37.  
  38. Если ЗначениеЗаполнено(ПериодС) И ЗначениеЗаполнено(ПериодПо) Тогда
  39. ПараметрыПоиска.ПараметрыЗапроса.Добавить(СтрШаблон("%1 МЕЖДУ &НачалоПериода И &ОкончаниеПериода", ИмяПоляДаты));
  40. ИначеЕсли ЗначениеЗаполнено(ПериодС) Тогда
  41. ПараметрыПоиска.ПараметрыЗапроса.Добавить(СтрШаблон("%1 >= &НачалоПериода", ИмяПоляДаты));
  42. ИначеЕсли ЗначениеЗаполнено(ПериодПо) Тогда
  43. ПараметрыПоиска.ПараметрыЗапроса.Добавить(СтрШаблон("%1 <= &ОкончаниеПериода", ИмяПоляДаты));
  44. КонецЕсли;
  45.  
  46. Если Статусы.Количество() > 0 Тогда
  47. ПараметрыПоиска.ПараметрыЗапроса.Добавить("Статус В (&Статусы)");
  48. КонецЕсли;
  49.  
  50. РезультатПоиска = НайтиЗаказы(ПараметрыПоиска, ДанныеАвторизации);
  51.  
  52. Страница = ApiИнтеграцийСлужебный.СтраницаРезультатовПоиска(РезультатПоиска);
  53.  
  54. Пока РезультатПоиска.Выборка.Следующий() Цикл
  55.  
  56. Страница.Items.Добавить(ДанныеЗаказа(РезультатПоиска.Выборка));
  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. Возврат ApiИнтеграцийСлужебный.НайтиСущностиСПостраничнойНавигацией(ПараметрыПоиска);
  92.  
  93. КонецФункции
  94.  
  95. Функция НовыйПараметрыПоиска() Экспорт
  96.  
  97. ПараметрыПоиска = Новый Структура;
  98. ПараметрыПоиска.Вставить("Поля", Новый Массив);
  99. ПараметрыПоиска.Вставить("НомерСтраницы", 1);
  100. ПараметрыПоиска.Вставить("КоличествоРезультатов", 50);
  101. ПараметрыПоиска.Вставить("Сортировка", Новый Массив);
  102. ПараметрыПоиска.Вставить("ПараметрыЗапроса", Новый Массив);
  103. ПараметрыПоиска.Вставить("ЗначенияПараметров", Новый Структура);
  104. ПараметрыПоиска.Вставить("Таблица", "");
  105.  
  106. Возврат ПараметрыПоиска;
  107.  
  108. КонецФункции
  109.  
  110. Функция СтраницаРезультатовПоиска(РезультатПоиска) Экспорт
  111.  
  112. Результат = Новый Структура;
  113. Результат.Вставить("Total", РезультатПоиска.Всего);
  114. Результат.Вставить("Items", Новый Массив);
  115.  
  116. Возврат Результат;
  117.  
  118. КонецФункции
  119.  
  120. Функция НайтиСущностиСПостраничнойНавигацией(ПараметрыПоиска) Экспорт
  121.  
  122. Поля = ПараметрыПоиска.Поля;
  123. НомерСтраницы = ПараметрыПоиска.НомерСтраницы;
  124. КоличествоРезультатов = ПараметрыПоиска.КоличествоРезультатов;
  125. Сортировка = ПараметрыПоиска.Сортировка;
  126. ПараметрыЗапроса = ПараметрыПоиска.ПараметрыЗапроса;
  127. ЗначенияПараметров = ПараметрыПоиска.ЗначенияПараметров;
  128. Таблица = ПараметрыПоиска.Таблица;
  129.  
  130. ВсегоЗаписей = НомерСтраницы * КоличествоРезультатов;
  131.  
  132. мТекстЗапроса = Новый Массив;
  133. мТекстЗапроса.Добавить("ВЫБРАТЬ ПЕРВЫЕ " + XMLСтрока(ВсегоЗаписей));
  134.  
  135. ВыбираемыеПоля = Новый Массив;
  136.  
  137. Для Каждого Поле Из Поля Цикл
  138. ВыбираемыеПоля.Добавить(СтрШаблон("Таблица.%1", Поле));
  139. КонецЦикла;
  140.  
  141. мТекстЗапроса.Добавить(СтрСоединить(ВыбираемыеПоля, ",") + ",");
  142. мТекстЗапроса.Добавить("АВТОНОМЕРЗАПИСИ() КАК ПорядковыйНомер");
  143. мТекстЗапроса.Добавить("ПОМЕСТИТЬ втНачВыборка");
  144. мТекстЗапроса.Добавить("ИЗ " + Таблица + " КАК Таблица");
  145. мТекстЗапроса.Добавить("ГДЕ &ФильтрПоискаВТ;");
  146. мТекстЗапроса.Добавить("////////////////////////////////////////////////////////////////////////////////");
  147. мТекстЗапроса.Добавить("ВЫБРАТЬ * Из втНачВыборка");
  148. мТекстЗапроса.Добавить("ГДЕ ПорядковыйНомер МЕЖДУ &НачальныйНомерЗаписи И &КонечныйНомерЗаписи;");
  149. мТекстЗапроса.Добавить("////////////////////////////////////////////////////////////////////////////////");
  150. мТекстЗапроса.Добавить("ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ " + Таблица + ".Ссылка) КАК Количество");
  151. мТекстЗапроса.Добавить("ГДЕ &ФильтрПоиска");
  152.  
  153. Запрос = Новый Запрос(СтрСоединить(мТекстЗапроса, Символы.ПС));
  154.  
  155. ЗначенияПараметров.Вставить("НачальныйНомерЗаписи", (НомерСтраницы - 1) * КоличествоРезультатов + 1);
  156. ЗначенияПараметров.Вставить("КонечныйНомерЗаписи", ВсегоЗаписей);
  157.  
  158. Для Каждого КиЗ Из ЗначенияПараметров Цикл
  159.  
  160. Запрос.УстановитьПараметр(КиЗ.Ключ, КиЗ.Значение);
  161.  
  162. КонецЦикла;
  163.  
  164. ФильтрПоискаВТ = Новый Массив;
  165.  
  166. Если ПараметрыЗапроса.Количество() = 0 Тогда
  167. ФильтрПоискаВТ.Добавить("ИСТИНА");
  168. Иначе
  169. ФильтрПоискаВТ.Добавить(СтрСоединить(ПараметрыЗапроса, Символы.ПС + " И "));
  170. КонецЕсли;
  171.  
  172. ФильтрПоиска = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ФильтрПоискаВТ);
  173.  
  174. Если Сортировка.Количество() > 0 Тогда
  175. ФильтрПоискаВТ.Добавить("УПОРЯДОЧИТЬ ПО");
  176. ФильтрПоискаВТ.Добавить(СтрСоединить(Сортировка, " ," + Символы.ПС));
  177. КонецЕсли;
  178.  
  179. Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ФильтрПоискаВТ", СтрСоединить(ФильтрПоискаВТ, Символы.ПС));
  180. Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ФильтрПоиска", СтрСоединить(ФильтрПоиска, Символы.ПС));
  181.  
  182. Пакет = Запрос.ВыполнитьПакет();
  183.  
  184. Результат = Новый Структура;
  185. Результат.Вставить("Всего", Пакет[Пакет.ВГраница()].Выгрузить()[0].Количество);
  186. Результат.Вставить("Выборка", Пакет[Пакет.ВГраница()-1].Выбрать());
  187.  
  188. Возврат Результат;
  189.  
  190. КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement