Покажите простой пример прямого запроса, например, по остаткам на складе

30. sss999 48 21.11.13 13:22 Сейчас в теме
дружище не подскажешь почему не работает метод case вот запрос
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
Sum(case when покуп.debkred =1 then Покуп.Sp2201 else -(Покуп.Sp2201) end ) as продСтоим,
Sum(Sp2203) as Себест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.sp125 = СпрДог.ID
ON Покуп.SP2195 = СпрДог.ID
GROUP BY Контрагент,Договор
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
31. harleq 27 14.07.06 12:31 Сейчас в теме
Покажите простой пример прямого запроса, например, по остаткам на складе
+
32. АЛьФ 17.07.06 11:05 Сейчас в теме
ИМХО, простой пример будет не показательным. Если бы был пример запроса на 1С, то можно было бы перевести его на прямой запрос и сравнить их производительность.
+
33. CheBurator 3119 28.07.06 23:33 Сейчас в теме
Вот! У меня есть монитор заявок (лежит иллюсташка
http://www.infostart.ru/projects/?id=320&ref=174)
там практически один в один типовой 1Совский тяжелый запрос.
давайте его переложим на 1С++ и я доложу результаты)
ок?
+
34. CheBurator 3119 28.07.06 23:42 Сейчас в теме
Вот запрос

Код
    Запрос                     = СоздатьОбъект("Запрос");
    ТекстЗапроса             = "//{{ЗАПРОС(Сформировать)
    |Период с ВыбДокумент по ДатаКонцаАнализа;
    |Заявка         =    Регистр.Заявки.      ЗаявкаПокупателя,
    |                  Регистр.ЗаказыЗаявки.ЗаявкаПокупателя,
    |                  Регистр.РезервыТМЦ.  ЗаявкаПокупателя;
    |ТекДок         = Регистр.Заявки.ТекущийДокумент;
   |Фирма           = Регистр.РезервыТМЦ.Фирма,
   |                 Регистр.ОстаткиТМЦ.Фирма,
   |                 Регистр.Заявки.    Фирма,
   |                 Регистр.ЗаказыЗаявки.ЗаявкаПокупателя.Фирма;
    |КолЗаявки       = Регистр.Заявки.      КоличествоРасход;
    |КолЗаказа       = Регистр.ЗаказыЗаявки.Количество;
    |КолРезерва      = Регистр.РезервыТМЦ.  Количество;
    |КолОстатка      = Регистр.ОстаткиТМЦ.  Количество;
    |Номенклатура    = Регистр.Заявки.      Номенклатура,
    |               Регистр.ЗаказыЗаявки.Номенклатура,
    |               Регистр.РезервыТМЦ.  Номенклатура,
    |               Регистр.ОстаткиТМЦ.  Номенклатура;
    |Функция ВыписанаЗаявка        = Приход(КолЗаявки)  Когда (Заявка в ВыбДокумент);
    |Функция ОстатокНаСкладах   = КонОст(КолОстатка);
    |Функция ЧужиеРезервы       = КонОст(КолРезерва) Когда (Заявка <> ВыбДокумент);
    |Функция Зарезервировано    = КонОст(КолРезерва) Когда (Заявка в ВыбДокумент);
    |Функция СнятаЗаявка         = Расход(КолЗаявки)  Когда((Заявка в ВыбДокумент) и ((ТекДок.Вид() = ""ЗаявкаПокупателя"") или (ТекДок.Вид() = ""ОтменаЗаявок"")));
    |Функция ОстатокЗаявки      = КонОст(КолЗаявки)  Когда (Заявка в ВыбДокумент);
    |Функция ЗаказаноПоставщику = КонОст(КолЗаказа)  Когда (Заявка в ВыбДокумент);
    |Функция Отпущено            = Расход(КолЗаявки)  Когда((Заявка в ВыбДокумент) и (ТекДок.Вид() <> ""ЗаявкаПокупателя"") и (ТекДок.Вид() <> ""ОтменаЗаявок""));
    |Группировка Номенклатура Без Групп;
    |Условие (Номенклатура в СписокНоменклатура);
   |Условие (Фирма в ФирмаЗаявки);";
    
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
Показать полностью

+
35. CheBurator 3119 28.07.06 23:44 Сейчас в теме
ВыбДокумент - Документ.ЗаявкаПокупателя
+
36. orefkov 1152 03.08.06 12:16 Сейчас в теме
Регистр.Заявка - быстрая обработка движений?
+
37. CheBurator 3119 03.08.06 12:44 Сейчас в теме
Регистр.Заявки, быстрая обработка движений = вЫкл
+
38. orefkov 1152 03.08.06 13:50 Сейчас в теме
Какой тип у Регистр.Заявка.ЗаявкаПокупателя ?
+
39. support 4485 03.08.06 14:24 Сейчас в теме
40. orefkov 1152 03.08.06 14:32 Сейчас в теме
Тип измерения ЗаявкаПокупателя в этих четырех регистрах какой - просто Документ или Документ.ЗаявкаПокупателя ?
+
41. support 4485 03.08.06 14:41 Сейчас в теме
Тип измерения везде: Документ.ЗаявкаПокупателя
+
42. orefkov 1152 03.08.06 14:48 Сейчас в теме
Вот вроде накропал, на скорую руку. Не проверял. Требуется 1С++
Код

Запрос=СоздатьОбъект("ODBCRecordSet");
Запрос.УложитьСписокОбъектов(СписокНоменклатура, "#ВремТовары", "Номенклатура");
Запрос.УстановитьТекстовыйПараметр("ФирмаЗаявки", ФирмаЗаявки);
Запрос.УстановитьТекстовыйПараметр("ВыбДокумент", ВыбДокумент);
Запрос.УстановитьТекстовыйПараметр("ДатаКонцаАнализа", ДатаКонцаАнализа);

тз=Запрос.ВыполнитьИнструкцию(
"select
|   Рез.Номенклатура         [Номенклатура $Справочник.Номенклатура],
|   sum(Рез.ОстатокЗаявки)      [ОстатокЗаявки],
|   sum(Рез.ВыписанаЗаявка)    [ВыписанаЗаявка],
|   sum(Рез.СнятаЗаявка)      [СнятаЗаявка],
|   sum(Рез.Отпущено)         [Отпущено],
|   sum(Рез.ОстатокНаСкладах)   [ОстатокНаСкладах],
|   sum(Рез.ЧужиеРезервы)      [ЧужиеРезервы],
|   sum(Рез.Зарезервировано)   [Зарезервировано],
|   sum(Рез.ЗаказаноПоставщику)   [ЗаказаноПоставщику]
|from(
|   select -- ОстатокЗаявки = КонОст(КолЗаявки)  Когда (Заявка в ВыбДокумент)
|      РегЗаявка_О.Номенклатура [Номенклатура],
|      РегЗаявка_О.КоличествоРасходОстаток [ОстатокЗаявки],
|      0 [ВыписанаЗаявка],
|      0 [СнятаЗаявка],
|      0 [Отпущено],
|      0 [ОстатокНаСкладах],
|      0 [ЧужиеРезервы],
|      0 [Зарезервировано],
|      0 [ЗаказаноПоставщику]
|      from $РегистрОстатки.Заявки(:ДатаКонцаАнализа~,
|         inner join #ВремТовары ON Номенклатура=#ВремТовары.val,
|         ЗаявкаПокупателя=:ВыбДокумент and Фирма=:ФирмаЗаявки,
|         Номенклатура, КоличествоРасход) as РегЗаявка_О
|   union all
|   select -- ВыписанаЗаявка, СнятаЗаявка, Отпущено
|      $РегЗаявка_Д.Номенклатура,
|      0,
|      sum(case РегЗаявка_Д.debkred when 0 then $РегЗаявка_Д.КоличествоРасход else 0 end),
|      sum(case РегЗаявка_Д.debkred when 0 then 0 else
|            case when Журн.iddocdef=$ВидДокумента.ЗаявкаПокупателя or Журн.iddocdef=$ВидДокумента.ОтменаЗаявок then $РегЗаявка_Д.КоличествоРасход
|            else 0
|            end
|      end),
|      sum(case РегЗаявка_Д.debkred when 0 then 0 else
|            case when Журн.iddocdef=$ВидДокумента.ЗаявкаПокупателя or Журн.iddocdef=$ВидДокумента.ОтменаЗаявок then 0
|            else $РегЗаявка_Д.КоличествоРасход
|            end
|      end),
|      0,
|      0,
|      0,
|      0
|      from $Регистр.Заявки РегЗаявка_Д inner join _1sjourn Журн on РегЗаявка_Д.iddoc=Журн.iddoc
|         inner join #ВремТовары on $РегЗаявка_Д.Номенклатура=#ВремТовары.val
|      where Журн.date_time_iddoc >= :ВыбДокумент~~~~ and Журн.date_time_iddoc <= :ДатаКонцаАнализа
|         and $РегЗаявка_Д.ЗаявкаПокупателя=:ВыбДокумент and $РегЗаявка_Д.Фирма = :ФирмаЗаявки
|      group by $РегЗаявка_Д.Номенклатура
|      having
|         sum(case РегЗаявка_Д.debkred when 0 then $РегЗаявка_Д.КоличествоРасход else 0 end)<>0 or
   |      sum(case РегЗаявка_Д.debkred when 0 then 0 else
|            case when Журн.iddocdef=$ВидДокумента.ЗаявкаПокупателя or Журн.iddocdef=$ВидДокумента.ОтменаЗаявок then $РегЗаявка_Д.КоличествоРасход
|            else 0
|            end
|         end) <> 0 or
|         sum(case РегЗаявка_Д.debkred when 0 then 0 else
|            case when Журн.iddocdef=$ВидДокумента.ЗаявкаПокупателя or Журн.iddocdef=$ВидДокумента.ОтменаЗаявок then 0
|            else $РегЗаявка_Д.КоличествоРасход
|            end
|         end)<>0
|   union all
|   select -- ОстатокНаСкладах   = КонОст(КолОстатка)
|      РегОстТМЦ.Номенклатура,
|      0,
|      0,
|      0,
|      0,
|      РегОстТМЦ.КоличествоОстаток,
|      0,
|      0,
|      0
|      from $РегистрОстатки.ОстаткиТМЦ(:ДатаКонцаАнализа~,
|         inner join #ВремТовары ON Номенклатура=#ВремТовары.val,
|         Фирма=:ФирмаЗаявки,
|         Номенклатура, Количество) as РегОстТМЦ
|   union all
|   select -- ЗаказаноПоставщику = КонОст(КолЗаказа)  Когда (Заявка в ВыбДокумент)
|      РегЗаказыЗаявки.Номенклатура,
|      0,
|      0,
|      0,
|      0,
|      0,
|      0,
|      0,
|      РегЗаказыЗаявки.КоличествоОстаток
|      from $РегистрОстатки.ЗаказыЗаявки(:ДатаКонцаАнализа~,
|         inner join #ВремТовары ON Номенклатура=#ВремТовары.val,
|         ЗаявкаПокупателя=:ВыбДокумент and Фирма=:ФирмаЗаявки,
|         Номенклатура, Количество) as РегЗаказыЗаявки
|   union all
|   select -- ЧужиеРезервы = КонОст(КолРезерва) Когда (Заявка <> ВыбДокумент)
|      РегРезервы1.Номенклатура,
|      0,
|      0,
|      0,
|      0,
|      0,
|      РегРезервы1.КоличествоОстаток,
|      0,
|      0
|      from $РегистрОстатки.РезервыТМЦ(:ДатаКонцаАнализа~,
|         inner join #ВремТовары ON Номенклатура=#ВремТовары.val,
|         ЗаявкаПокупателя<>:ВыбДокумент and Фирма=:ФирмаЗаявки,
|         Номенклатура, КоличествоРасход) as РегРезервы1
|   union all
|   select -- Зарезервировано = КонОст(КолРезерва) Когда (Заявка в ВыбДокумент)
|      РегРезервы2.Номенклатура,
|      0,
|      0,
|      0,
|      0,
|      0,
|      0,
|      РегРезервы2.КоличествоОстаток,
|      0
|      from $РегистрОстатки.РезервыТМЦ(:ДатаКонцаАнализа~,
|         inner join #ВремТовары ON Номенклатура=#ВремТовары.val,
|         ЗаявкаПокупателя=:ВыбДокумент and Фирма=:ФирмаЗаявки,
|         Номенклатура, КоличествоРасход) as РегРезервы2
|) as Рез
|group by Рез.Номенклатура");
тз.ВыбратьСтроку();
Показать полностью
+
43. CheBurator 3119 03.08.06 16:18 Сейчас в теме
О! Буду пробовать.
На выходных попытаюсь, прогнать, проверить, сравнить.
Результаты сообщу
+
44. CheBurator 3119 06.08.06 16:52 Сейчас в теме
На выходных - не получится!
Это ж под SQL надо гонять?
+
45. orefkov 1152 07.08.06 08:38 Сейчас в теме
46. CheBurator 3119 07.08.06 10:10 Сейчас в теме
Конечно - хорошо, погоняем... Но плохо, что только под скулем.
Придется дома скуль разворачивать - туды его в качель...
+
47. orefkov 1152 07.08.06 10:14 Сейчас в теме
Прямые запросы на дбф - баловство.
+
48. CheBurator 3119 07.08.06 22:05 Сейчас в теме
Баловство, не баловство - придется две ветки в алгоритме тянуть...?
+
49. orefkov 1152 08.08.06 11:20 Сейчас в теме
Ну тогда уже три :)
ДБФ в монопольном режиме - встроенные средства.
ДБВ в немонопольном - работа через OLE DB.
СКЛ - работа через ODBC.
+
50. CheBurator 3119 14.08.06 18:29 Сейчас в теме
Суппорта! Сделайте рядом со вставкой кода кнопарь "Копировать в буфер"!!!!
+
51. CheBurator 3119 16.08.06 01:11 Сейчас в теме
Выругалось примерно здесь
$РегистрОстатки.РезервыТМЦ
точнее скажу завтра
+
52. CheBurator 3119 16.08.06 15:19 Сейчас в теме
Я офигеваю от этого запроса..
ТЗСпп = Запрос.ВыполнитьИнструкцию(
{\\SERVERPC2\BAZ\COMPLEX_SQL.DIR\EXTFORMS\БВК_НОВ_БЭ_МОНИТОРЗАЯВОК1CPP.ERT(86)}: Meta name parser error: недопустимое значение параметра "$РегистрОстатки.РезервыТМЦ" (5)

Чтобы это значило?
+
53. orefkov 1152 16.08.06 15:40 Сейчас в теме
Ищем кусок "as РегРезервы1", перед этим исправляем ",КоличествоРасход)" на ",Количество)"
Аналогично для "as РегРезервы2"
+
54. CheBurator 3119 16.08.06 15:55 Сейчас в теме
Быстро пробую...
Это проскочило, зато
{\\SERVERPC2\BAZ\COMPLEX_SQL.DIR\EXTFORMS\БВК_НОВ_БЭ_МОНИТОРЗАЯВОК1CPP.ERT(86)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Фирма'.
+
55. orefkov 1152 16.08.06 16:03 Сейчас в теме
Перед ВыполнитьИнструкцию вставь "запрос.Отладка(1);"
То, что вывалится в окно сообщений, кидай.
+
56. orefkov 1152 16.08.06 16:04 Сейчас в теме
А, не надо, уже понял. Ща отвечу.
+
57. orefkov 1152 16.08.06 16:11 Сейчас в теме
Фирма - общий реквизит доков?
+
58. CheBurator 3119 29.09.06 00:40 Сейчас в теме
Как и обещал, привожу сравнительные цифры функционирования проги с использованием обычных запросов и варианта, переписанного на прямые запросы. Логика программы не менялась, просто 1сные запросы переписаны на прямые запросы 1С++. Итого, цифры:
-----------------------------
Обычный 1С: 629 сек
Прямой 1С++ 18 сек
-----------------------------
выигрыш по времени ~35 раз
ладно, допустим удалось удачно соптимизировать 1Сные штатные запросы и увеличить скорость их выполнения в 2 раза - но даже и тогда увеличение скорости работы ~17 раз.
Я в ауте... срочно придется совершентсоваться в прямых запросах и учить SQL...
+
59. orefkov 1152 29.09.06 09:33 Сейчас в теме
А итоговый текст выполнения запроса увидеть можно?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот