|
Пособите с переводом Запроса 7.7 на прямой запрос | ☑ | ||
|---|---|---|---|---|
|
0
Бертыш
06.04.26
✎
17:31
|
В унаследованном коде есть запрос к данным
Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса="//{{Запрос(СформироватьПоГрафику) |ЭлементГрафика = Справочник.Графики.ТекущийЭлемент; |Сотрудник = Справочник.Графики.Владелец; |Подразделение = Справочник.Графики.Подразделение; |Отделение = Справочник.Графики.Отделение; |ДатаРаб = Справочник.Графики.ДатаРаб; |ВремяРаб = Справочник.Графики.Время; |Группировка Сотрудник; |Группировка ЭлементГрафика; |Группировка ДатаРаб; |Группировка ВремяРаб; |Условие(Подразделение в спПодразделение); |Условие(Отделение в _Отделение); |Условие(Сотрудник в спСотрудник); |Условие(ДатаРаб >= _ДатаНач); |Условие(ДатаРаб <= _ДатаКон); |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Возврат; КонецЕсли; и далее обход группировок Запроса Пока Запрос.Группировка(1)=1 Цикл n_Сотрудник = Запрос.Сотрудник; Пока Запрос.Группировка(2)=1 Цикл Как то в оны времена практически прошли мимо меня прямые запросы на 7.7. Простенькие запросы писать доводилось, но тут что то я туплю По части перевода самого запроса понятно до группировки. Так думаю что вместо группировки я должен задать итоги а-ля запросы 1С 8, но далее мне как то непонятно как эти итоги обходить. Может подскажет кто из коллег как перевести такой код 7.7 на прямой запрос? Я кажется с 2005 го года практически не сталкивался с 7.7 перейдя на восьмёрку. В общем не знал, да ещё и забыл :) |
|||
|
1
Злопчинский
06.04.26
✎
18:23
|
Я когда не знаю/туплю - пишу просто.
напиши простой линейный запрос без группировок выгрузи в индексированную таблицу и сгруппируй уже ИТЗ |
|||
|
2
Злопчинский
06.04.26
✎
18:25
|
База скульная или файловая?
|
|||
|
3
Злопчинский
06.04.26
✎
18:30
|
Меня группировка по ВремяРаб сильно смущает...
Время раб - это количество времени, поработанное в ДатуРаб? Или отметка времени? |
|||
|
4
АгентБезопасной Нацио
06.04.26
✎
19:08
|
скажи человечьим языком, что ты хочешь получить...
|
|||
|
5
Бертыш
06.04.26
✎
19:11
|
(2) Скульная.
(4) Там далее есть унаследованный код обработки по выборке из родного запроса. Вот и хочу с минимальными изменениями чтобы он отрабатывал при прямом запросе как и при Запросе обычном |
|||
|
6
Бертыш
06.04.26
✎
19:13
|
(3) Количество времени которое должно быть отработанно в дату
|
|||
|
7
Наивный
06.04.26
✎
19:29
|
А что функций нет - так задумано?
|
|||
|
8
АгентБезопасной Нацио
06.04.26
✎
19:35
|
(5) я за 15 лет таки не изчил черные запросы.
Но будет что-то типа |select |ЭлементГрафика = Графики.id [ТекущийЭлемент $Справочник.Графики], |Графики.ParentId [Сотрудник $Справочник.Графики], |$Графики.ПодразделениеПодразделение [Подразделение $Справочник.Подразделения], |$Графики.Отделение [Отделение $Справочник.Отделения ], |$Графики.ДатаРаб [ДатаРаб $Дата ], |$Графики.Время [ВремяРаб ] | from $Справочник.Графики как Графики |where | $Графики.Подразделение in (select id from #tab_podr) |and $Графики.ДатаРаб > :ДатаНач в параметрах УложитьСписокОбъектов(#tab_podr, спПодразделение) и типа того затем ИТЗ = ВыполнитьЗапрос(ТекстЗапроса) Ну и в конце ИТЗ.Сгруппировать("Сотрудник, ЭлементГрафика, ДатаРаб, ВремяРаб") |
|||
|
9
Бертыш
06.04.26
✎
20:59
|
Спасибо
|
|||
|
10
Злопчинский
06.04.26
✎
22:09
|
(7) для выборок по справочникам наличие Функций не обязательно.
|
|||
|
11
Злопчинский
06.04.26
✎
22:19
|
(6) |Группировка ВремяРаб;
- при таком пояснении - еще подозрительнее выглядит. Это имеет смысл если в результате надо получить типа 07.04.26 отработать 20 мин "хз где" (какое-то подразделение, какое-то отделение - но какое именно подразделение и отделение - хз) 07.04.26 отработать 40 мин "хз где" (какое-то подразделение, какое-то отделение, но какое именно подразделение и отделение - хз) что скорее всего бессмысленно само по себе, максимум что можно сказать: что есть отработка 20 мин где-то и отработка 40 мин где-то |
|||
|
12
Злопчинский
06.04.26
✎
22:24
|
(6) Если нужно ПОСЧИТАТЬ количество времени, которое должно быть отработано в дату, то
|Группировка ВремяРаб; - выкинуть нафиг Добавить |Функция НадоОтработать = Сумма(ВремяРаб); При этом времяРаб - должно быть задано числом (= времени отработки, в секундах или минутах иди часах) . А группировка по ВремяРаб может быть оправдана только если время раб задано типа 01:30:50 - тогда напрямую просуммировать не получится и тогда суммировать при обходе результатов - и даже здесь эта группировка лишняя (если по уму), ибо ибо перечень количеств времени внутри даты (для разных подразделение и отделений) получается при обходе группировки ДатаРаб |
|||
|
13
Злопчинский
06.04.26
✎
22:27
|
"А группировка по ВремяРаб может быть оправдана только если время раб задано типа 01:30:50 - тогда напрямую просуммировать не получится "
- и даже здесь можно попробовать |Функция НадоОтработать = Сумма(МояФункция(ВремяРаб)); где МояФункция(ВремяСтрокой) на выходе выдает нужное количество секунд или минут или часов |
|||
|
14
Злопчинский
06.04.26
✎
22:29
|
(9) все что выше сказано - соответственно транслируется в код АБН с поправками группировок ИТЗ, типа
ИТЗ.Сгруппировать("Сотрудник, ЭлементГрафика, ДатаРаб", "ВремяРаб") если ВремяРаб задано числом |
|||
|
15
АгентБезопасной Нацио
07.04.26
✎
10:43
|
(9) дык чо? запрос хотя бы отработал?
|
|||
|
16
Наивный
07.04.26
✎
11:07
|
(14) не Сгруппировать, а Гркппировать
|
|||
|
17
Наивный
07.04.26
✎
11:07
|
То есть Группировать ))
|
|||
|
18
АгентБезопасной Нацио
07.04.26
✎
12:11
|
(17) Ну и еще имя индекса надо указать. Но это после - для начала хотя бы запрос бы выполнил...
|
|||
|
19
АгентБезопасной Нацио
07.04.26
✎
12:18
|
В (8) ошибся - должно быть что-то типа
|Графики.ParentExt [Сотрудник $Справочник.Сотрудники], |
|||
|
20
Бертыш
08.04.26
✎
23:25
|
(15) Неа. Ругается на колонку Подразделение
|
|||
|
21
Злопчинский
09.04.26
✎
02:06
|
(20)
1. полный код запроса в студию и копипаст ругательства 2. в метаданных Справочник.Графики.Подразделение - Подразделение какой тип и вид задан |
|||
|
22
Наивный
09.04.26
✎
05:23
|
(20) Там АБН писал
|$Графики.ПодразделениеПодразделение [Подразделение $Справочник.Подразделения], "ПодразделениеПодразделение" ошибочка дважды скопипастил. может и ты скопипастил не задумываясь |
|||
|
23
Бертыш
09.04.26
✎
08:44
|
Я там по сравнению с предложенным коллегой нафантазировал немного
текстЗапроса = " |select |ЭлементГрафика [ТекущийЭлемент $Справочник.Графики], |Графики.Подразделение [Подразделение $Справочник.Подразделения], |Графики.ParentExt [Сотрудник $Справочник.Сотрудники], |Графики.ДатаРаб [ДатаРаб $Дата], |Графики.ParentExt.ФИОЗУП |from $Справочник.Графики as Графики (nolock) |where | (isMark=0) |and | (Подразделение in (select id from #tab_podr)) |and | (ДатаРаб BETWEEN :абНачДата AND :абКонДата~) "; А ругается State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]lnvalid column name 'Подразделение' Ладно бы ругался на нафантазированное какое ФИОЗУП, а то на Подразделение Тип реквизита Подразделение Справочник.Подразделения |
|||
|
24
АгентБезопасной Нацио
09.04.26
✎
08:45
|
(23) Ну там же английским-по-белому: $Графики.Подразделение
|
|||
|
25
АгентБезопасной Нацио
09.04.26
✎
08:46
|
И никакого ЭлементГрафика не существует. Есть Графики.id
|
|||
|
26
Бертыш
09.04.26
✎
08:48
|
(25) меня смутило =
Сейчас откорректирую |
|||
|
27
АгентБезопасной Нацио
09.04.26
✎
08:52
|
|select
|Графики.id [ТекущийЭлемент $Справочник.Графики], |Графики.ParentExt [Сотрудник $Справочник.Сотрудники], |$Графики.Подразделение [Подразделение $Справочник.Подразделения], |$Графики.Отделение [Отделение $Справочник.Отделения], |$Графики.ДатаРаб [ДатаРаб $Дата], |$Графики.Время [ВремяРаб] | from $Справочник.Графики as Графики (nolock) |where | $Графики.Подразделение in (select id from #tab_podr) |and $Графики.ДатаРаб > :ДатаНач |and Графики.isMark = 0 |
|||
|
28
Наивный
09.04.26
✎
08:53
|
(27) (select id from #tab_podr)
Ошибочка. надо (select Val from #tab_podr) |
|||
|
29
АгентБезопасной Нацио
09.04.26
✎
09:01
|
(28) Возможно. Лет 10 уже клюшками не пользуюсь..
|
|||
|
30
Бертыш
09.04.26
✎
09:06
|
Теперь ругается на
invalid object name #tab_podr который я пытаюсь передать через конструкцию абЗапрос.УложитьСписокОбъектов(списПодразделения,"tab_podr","Подразделения"); |
|||
|
31
Бертыш
09.04.26
✎
09:09
|
Что с id что с Val ругается на tab_podr
|
|||
|
32
Наивный
09.04.26
✎
09:15
|
Попробуй [##Tab_Podr]
|
|||
|
33
АгентБезопасной Нацио
09.04.26
✎
09:31
|
(30) абЗапрос.УложитьСписокОбъектов(списПодразделения,"#tab_podr","Подразделения");
|
|||
|
34
АгентБезопасной Нацио
09.04.26
✎
09:33
|
+(33) Если списПодразделения - СЗ с элементами одинакового типа, то тип справочника можно и не указывать
|
|||
|
35
Наивный
09.04.26
✎
09:36
|
(34) А если в списке есть группы - надо указывать. проще указать
|
|||
|
36
АгентБезопасной Нацио
09.04.26
✎
09:38
|
(35) Если "по иерархии" - то да, надо.
|
|||
|
37
Бертыш
09.04.26
✎
09:52
|
Я так ещё смекаю что я напрямую из Сотрудников реквизит ФИОЗУП не получу и надо будет соединение делать.
|
|||
|
38
АгентБезопасной Нацио
09.04.26
✎
09:58
|
(37) Ну сделай соединение. Но для начала хоть что-нибудь сделай, чтоб работало
|
|||
|
39
Наивный
09.04.26
✎
09:59
|
(37) Ну если ТЗ по капле выдавать будешь ...
А ты его потом при обходе таблицы считай |
|||
|
40
Злопчинский
09.04.26
✎
10:14
|
А что обозначает $ в $графики.Подразделение
? |
|||
|
41
АгентБезопасной Нацио
09.04.26
✎
10:17
|
(40) То, что поле Подразделение в таблице Графики нужно разыменовывать в то поле, которое реально в таблице (какое-то там SP****)
|
|||
|
42
Злопчинский
09.04.26
✎
10:23
|
(41) понятно
|
|||
|
43
АгентБезопасной Нацио
09.04.26
✎
11:09
|
(42) точно так же, как таблица $Справочник.Графики разыменовывается в таблицу SC***.
Аналогично поля Отделение, ДатаРаб - тоже надо разыменовывать. Ну а поля Графики.id, Графики.ParentExt, Графики.isMark - разыменовывать не надо, они такие и есть в таблицах. |
|||
|
44
Злопчинский
09.04.26
✎
11:22
|
(43) это понятно было по вышеприведенному ответу
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |