|
Пособите с переводом Запроса 7.7 на прямой запрос Злопчинский, Наивный, Franchiser, Chai Nic, АгентБезопаснойНацио, Бертыш, MWWRuza, lubitelxml, slad, kupec, ReaLg, DemonShinji2, Homer, trooba, mortal, AlexKimp, Волшебник, СвинТуз, Шурик71, phabeZ, obs191, vova1122, arsik, Бычье сердце, evgeniy_n, BOOL, toypaul, dergreche, Климов Сергей, valdos08 , Олдж, serpentt, breezee, Мультук, Prog_man, Karamzin, MM, Elf_80_lvl, Кац, abfm, dva1c, San335, Rawasert, Sserj, H A D G E H O G s
| ☑ | ||
|---|---|---|---|---|
|
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) это понятно было по вышеприведенному ответу
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |