|
v7: Черный запрос работает по-разному в DBF и SQL. | ☑ | ||
---|---|---|---|---|
0
Drac0
03.08.11
✎
15:07
|
Из-за небольшого косяка в учете приходится обрабатывать непроведенные документы за месяц. Для этого пишу следующий запрос:
Нач = НачМесяца(ДатаАктуальности); Кон = КонМесяца(ДатаАктуальности); ТекстЗапросаПерем = "//{{ЗАПРОС(Запрос) |Период с Нач по Кон; |ОбрабатыватьДокументы Непроведенные; |Обрабатывать НеПомеченныеНаУдаление; |КадрПеремещение = Документ.КадровоеПеремещение.ТекущийДокумент; |Начало = Документ.КадровоеПеремещение.Начало; |СотрудникП = Документ.КадровоеПеремещение.Сотрудник; |Подразделение = Документ.КадровоеПеремещение.Подразделение; |Функция Сч = Счётчик(); |Условие(СотрудникП = Сотрудник); |Условие((Начало >Нач) И (Начало < Кон)); |Условие(Подразделение=ВыбПодразделение); |"//}}ЗАПРОС ; Если ЗапросПерем.Выполнить(ТекстЗапросаПерем) = 0 Тогда Возврат 0; КонецЕсли; Если ЗапросПерем.Сч > 0 Тогда Возврат 1; КонецЕсли; Смысл в следующем: ищутся непроведенные документы кадрового перемещения за месяц, в которых дата Начала действия приказа попадает в этот месяц и происходит перемещение в выбранное подразделение. В DBF версии все хорошо: когда надо счетчик равен 0, когда надо 1 или более. Но вот в SQL счетчик всегда возвращает 1. Что это такое и как можно это обойти? Заранее благодарен. |
|||
1
vde69
03.08.11
✎
15:09
|
ЗапросПерем.ИспользоватьSQL(0)
|
|||
2
Ёпрст
03.08.11
✎
15:10
|
Всё правильно, у тебя всегда 1 запись будет, без группировки, в лучшем случае.
|
|||
3
Drac0
03.08.11
✎
15:11
|
Эту функцию планируется реализовать в скором времени.
|
|||
4
Drac0
03.08.11
✎
15:12
|
(2) Это для SQL, а для DBF такой запрос нормальный, получается?
|
|||
5
palpetrovich
03.08.11
✎
15:15
|
зачем тут вообще запрос?
|
|||
6
Drac0
03.08.11
✎
15:17
|
(5) Мне просто удобнее так условия накладывать.
|
|||
7
Ёпрст
03.08.11
✎
15:19
|
счетчик всего лишь считает, количество записей вошедших в выборку..
|
|||
8
Drac0
03.08.11
✎
15:19
|
Хотя с неработающим счетчиком и вправду, "зачем?" ...
|
|||
9
Drac0
03.08.11
✎
15:20
|
(7)Почему в DBF версии счетчик дает 0, если нет документов, удовлетворяющих условию?
|
|||
10
Ёпрст
03.08.11
✎
15:20
|
По идее, счётчик для данного запроса всегда 0 должен возвращать.
|
|||
11
Ёпрст
03.08.11
✎
15:21
|
+10 и это не зависит от формата ИБ.
|
|||
12
Скользящий
03.08.11
✎
15:21
|
В (1) дали ответ.
|
|||
13
Drac0
03.08.11
✎
15:22
|
(12) Отказаться от SQL только пока собираемся. Поэтому на текущий момент - не вариант.
|
|||
14
Drac0
03.08.11
✎
15:22
|
(11) Как оказалось, зависит.
|
|||
15
Ёпрст
03.08.11
✎
15:23
|
(14) это же не весь текст запроса ?
|
|||
16
Drac0
03.08.11
✎
15:24
|
(15) Весь :)
|
|||
17
Ахиллес
03.08.11
✎
15:29
|
Блин, а просто посмотреть, что в выборке возвращается?
|
|||
18
Ёпрст
03.08.11
✎
15:31
|
(17) в выборке ничего нет - у автора нет группировки.
а так, для этого запроса, ответ в (1) |
|||
19
Ёпрст
03.08.11
✎
15:32
|
хотя, и так должен возвращать правильное значение.
|
|||
20
Drac0
03.08.11
✎
15:34
|
(19) Платформа 27, MSSQL 2000, ЗиК типовая на 100%. Можете проверить на демобазе.
|
|||
21
Ёпрст
03.08.11
✎
15:36
|
(19) я проверил, всё правильно возвращает, правда, скуль 2008.
|
|||
22
Ёпрст
03.08.11
✎
15:37
|
+21
//******************************************* Процедура Сформировать() ТекстЗапроса = " |Период с Начдата По КонДата; |Док = Документ.Реализация.ТекущийДокумент; |Функция Счётчик = Счётчик(); |"; Запрос = СоздатьОбъект("Запрос"); Запрос.Выполнить(ТекстЗапроса); Сообщить("счётчик "+Запрос.Счётчик); КонецПроцедуры |
|||
23
ado
03.08.11
✎
15:38
|
А если таки добавить группировку по документу?
|
|||
24
Drac0
03.08.11
✎
15:40
|
(22) Тогда может от скуля зависит. А если с условиями на выборку?
(23) Тогда лучше выборку документов сделать. Чем сейчас и занят. |
|||
25
Ахиллес
03.08.11
✎
16:02
|
Нач = НачМесяца(ДатаАктуальности);
Кон = КонМесяца(ДатаАктуальности); ТекстЗапросаПерем = "//{{ЗАПРОС(Запрос) |Период с Нач по Кон; |ОбрабатыватьДокументы Непроведенные; |Обрабатывать НеПомеченныеНаУдаление; |КадрПеремещение = Документ.КадровоеПеремещение.ТекущийДокумент; |Начало = Документ.КадровоеПеремещение.Начало; |СотрудникП = Документ.КадровоеПеремещение.Сотрудник; |Подразделение = Документ.КадровоеПеремещение.Подразделение; |Группировка ТекущийДокумент; |Условие(СотрудникП = Сотрудник); |Условие((Начало >Нач) И (Начало < Кон)); |Условие(Подразделение=ВыбПодразделение); |"//}}ЗАПРОС ; ЗапросПерем.Выполнить(ТекстЗапросаПерем); Пока ЗапросПерем.Группировка(1) = 1 Цикл Возврат 1; Конеццикла; Возвтат 0; |
|||
26
Drac0
03.08.11
✎
16:07
|
(25) Да, так явно лучше. Что-то я как баран уперся: либо счетчик, либо никак.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |