Имя: Пароль:
1C
1C 7.7
v7: Оптимизация запроса
,
0 bananan
 
25.12.12
11:35
Когда я задал обрботку 10 дней он работал 00:05:59, когда я ему задал тужу обработку но в функции ПересчетВЯщики(ТМЦ, Количество) в первой же строке вызвал Возврат - он работал 00:03:34 (на 2 минуты и 25 секунд меньше). Т.е. именно функция ПересчетВЯщики() сильно тормозит. К подчиненному справочнику Справочник.ЕдИз надо как-то иначе обращаться (не в функции, в функции опять же циклы). Т.е. е справочнику Справочник.ЕдИз надообращатьс через Запрос строго через запрос, может выполнять для этого второй Запрос. Подскажите как это сделать?
1 1Сергей
 
25.12.12
11:36
Сам понял что спросил?
2 Жан Пердежон
 
25.12.12
11:36
тс долго терпел
3 Ёпрст
 
25.12.12
11:37
воткнуть галку сортировка на реквизит Ед в справочнике ЕдИзм
искать потом через ВыбратьЭлементыПоРеквизиту
4 cw014
 
25.12.12
11:37
Какой фееричный бред
5 Sh1ko
 
25.12.12
11:38
Вы просто не знаете содержание предыдущих серий.
6 bananan
 
25.12.12
11:39
(3) Сейчас так попробую
7 Ёпрст
 
25.12.12
11:39
а так, как у тебя скуль, то любое обращение к внешней функции в тексте запроса будет всегда медленно, це не дбф.
8 bananan
 
25.12.12
11:44
(3) В функции наисал так:
Функция ПересчетВЯщики(ТМЦ, Количество)
   Спр.ИспользоватьВладельца(ТМЦ);
   Спр.ВыбратьЭлементыПоРеквезиту("Ед");
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Если (Спр.ПометкаУдаления()=0)И(Спр.Ед = Перечисление.Единицы.ящик) Тогда
           Возврат Количество/?(Спр.Коэффициент=0,1,Спр.Коэффициент);
       КонецЕсли;
   КонецЦикла;
   Возврат Количество;
КонецФункции  
Выскакивает модальное диалоговое окно с надписью:
Поле агрегатного объекта не обнаружено (ВыбратьЭлеменыПоРеквезиту): 36
9 miki
 
25.12.12
11:46
(8)в русском реквизИт через И.
Базван v.2?
10 Ёпрст
 
25.12.12
11:49
Одно непонятно, конфа автора вовсю использует 1cpp для расчета останков прямым запросом, в том числе, в модулях проведения, + класс на перехватчике для собственного логгирования..
Откуда там автор взялся с незнанием элементарщины ?!
11 bananan
 
25.12.12
11:50
(10) Так уж получилось. но, поверьте - неделя-две и от этого незнания и следа не будет
12 Андрей_Андреич
 
naïve
25.12.12
11:50
(10) Кстати, пока все дома - для DBF ф-я "ЗначениеВСтрокуБД()" работает?
13 bananan
 
25.12.12
11:52
(3) При попытке сохранить метаданные выдает модальное диалогово окно  Ошибка последовательности функций (это сервер ругается)
14 bananan
 
25.12.12
11:52
(12) Как проверить (пример кода плиз)
15 Ёпрст
 
25.12.12
11:53
(11) :))))))))))))))

(12) работает
16 bananan
 
25.12.12
11:53
+(13) Причем данная БД - тестовая и с ней работаю только я
17 bananan
 
25.12.12
11:56
+(13) с даной проблемой обратился к нашему сисадмину - сейчас он посмотрит
18 Mikeware
 
25.12.12
12:04
(11) не верю. ты уже доказал, что тебе 5 лет мало...
19 bananan
 
25.12.12
12:11
(18) Эти пять лет были совсем другие задачи
20 Ёпрст
 
25.12.12
12:11
(18) может, автор в другом измерении живет, для него 5-лет..это по нашенски - 5 минут
:)
21 Ёпрст
 
25.12.12
12:12
(19) ну, по твоим темам этого не скажешь.
22 bananan
 
25.12.12
12:12
(17) Сисадмин в данном случае ничего сделать не может.
А иначе этот запрос никак нельзя сделать?
23 Ёпрст
 
25.12.12
12:13
(22) можно
24 Ёпрст
 
25.12.12
12:13
начнеи его с select
25 bananan
 
25.12.12
12:14
(24) Т.е? Синтаксис SQL м как дальше?
26 Ёпрст
 
25.12.12
12:16
27 bananan
 
25.12.12
12:23
(26) Его можно запустить в QA
Что такое QA?
28 Ёпрст
 
25.12.12
12:26
29 bananan
 
25.12.12
12:37
(28) Софт я закачал, но... достукатьсяиз него к серверу не получиться без шефа..
А запрос это попробывал через 1С (код иакой:
Процедура Сформировать()
   Запрос=СоздатьОбъект("Запрос");
   ТекстЗапроса = "
       |SELECT
       |    Спр.Code as Код,
       |    Спр.Descr as Наименование
       |FROM
       |    sc433 as Спр";
       ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
       ТЗ.ВыбратьСтроку();
КонецПроцедуры
так выдает
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(10)}: Поле агрегатного объекта не обнаружено (ВыполнитьИнструкцию)
30 bananan
 
25.12.12
12:37
+(29) и чето делать7
31 Mikeware
 
25.12.12
12:39
(30) вариант 1.: почитать документацию
вариант 2.: спросить у шефа
32 Ёпрст
 
25.12.12
12:41
(31) к чтению ТС не приучен
33 bananan
 
25.12.12
12:44
Просто Выполнить а не ВыполнитьИнструукцию - это уже поменял, но:
ТЗ = Запрос.Выполнить(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(10)}:     <<?>> Спр.Code as Код,
Запрос[3] : Ожидается  '=' перед 'Спр'
ТЗ.ВыбратьСтроку();
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: Значение не представляет агрегатный объект (ВыбратьСтроку)
т.е. насколько я понимаю Спр.Code as Код, надо писать иначе. Как?
34 bananan
 
25.12.12
12:45
+(33) написал так: Код=Спр.Code as Код,
- он и на такой синтаксис ругается...
35 Ёпрст
 
25.12.12
12:46
(33) чего, не в состоянии ужо прочесть одну страничку в ворде из (26) ?
36 varelchik
 
25.12.12
12:47
С каких это пор у объекта Запрос появился метод ВыполнитьИнструкцию()?
Наверное все таки на использовать OdbcRecordSet?
37 bananan
 
25.12.12
12:48
(35) В состоянии, но там такого нет!
38 varelchik
 
25.12.12
12:49
(37) мда тогда я пошел.
39 Ёпрст
 
25.12.12
12:49
(37) не пиз..ди!
2-ая страничка сверху.
40 bananan
 
25.12.12
12:50
(39) Вторая страница с ферху:
Для DBF версии рекомендуется использовать объект “ OLEDBData”(для версии 1С++ 2.0.0.0 и выше) следующим образом:
       База = СоздатьОбъект("OLEDBData");
       Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
       Рез = База.Соединение(Соединение);
       Запрос = База.СоздатьКоманду();
А что делать, если на компьютере не установлен драйвер фокса? Дык, качать!

Запрос = СоздатьОбъект("ODBCRecordset");
Внимание! SQL версия не требует дополнительной инструкции подключения к базе, метод "УстБД1С()"  нужен для подключения к другой(не текущей) базе.
ТекстЗапроса = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование
|FROM
|    sc433 as Спр";

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();

Вот и выполнился наш первый запрос. Это конечно хорошо, но справочников в конфигурации много, смотреть каждый раз в DDS ой как не хочется, да и читать такие запросы совсем не удобно. Если использовать ADO, а не 1С++, то так и придется делать. Но скажем спасибо разработчикам 1С++, что в ней есть метапарсер имен, который сам переведет все идентификаторы объектов в их реальные имена. А делается это так:

ТекстЗапроса = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование
|FROM
|    $Справочник.Номенклатура as Спр";

Заменяются следующие имена:
$Справочник.ХХХ – справочник
$Документ.ХХХ – документ
$ДокументСтроки.ХХХ – табличная часть документа
А также регистры, журналы расчетов (об этом поговорим позднее)

Немножко усложним пример. Выберем дополнительно реквизит “ТипНоменклатуры”
ТекстЗапроса = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование,
|    $Спр.ТипНоменклатуры as ТипНоменклатуры
|FROM
|    $Справочник.Номенклатура as Спр";

Замечание: Чтобы избежать коллизий, всегда пользуйтесь алиасами.

Как вы уже заметили, мы не стали искать соответствий имен в DDS, а переложили эту задачу на метапарсер. Для того чтобы парсер понял, что это реквизит нужно перевести на язык SQL ставим знак $ перед именем таблицы: $Спр.ТипНоменклатуры
Правда, не все имена метапарсер преобразовывает в поля таблиц. Есть исключения – это предопределенные имена:
Для справочников
ИД (Ссылка)        ID    
Код            Code
Наименование    Descr
Родитель        ParentID
Владелец        ParentExt
ЭтоГруппа        IsFolder

И где здась обТЗ = Запрос.Выполнить(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(10)}:     <<?>> Спр.Code as Код,
Запрос[3] : Ожидается  '=' перед 'Спр'
ну и т.д.
41 bananan
 
25.12.12
12:51
+(40) у нас SQL
42 Ёпрст
 
25.12.12
12:51
(40) может стоить сходить к окулисту, или черничьки поесть ?
43 Ёпрст
 
25.12.12
12:52
Запрос = СоздатьОбъект("ODBCRecordset");
44 КонецЦикла
 
25.12.12
12:57
(10) O_o
45 bananan
 
25.12.12
12:59
Ёпрст4 большое спасибо, в этом форуме ты мне уже не первый раз помагаешь, остальные в основном ругаються.
ТС запросом:Запрос = СоздатьОбъект("ODBCRecordset"); поменял
а вот здесь ругается:
ТЗ.ВыбратьСтроку();
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: Значение не представляет агрегатный объект (ВыбратьСтроку)
ТЗ у нас вроде как и не определена, здесь ндо ТЗ создать как таблицу значений?
46 bananan
 
25.12.12
13:02
+(45) Объявил ТЗ как таблицаЗначений - все-равно ругается:
ТЗ.ВыбратьСтроку();
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(12)}: Значение не представляет агрегатный объект (ВыбратьСтроку)
47 Ёпрст
 
25.12.12
13:02
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса)
48 Mikeware
 
25.12.12
13:04
(47) не в коня корм...
49 bananan
 
25.12.12
13:04
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sc433'.
А какой прграммой лучше смотреть 1Cv7.DDS?
50 Ёпрст
 
25.12.12
13:06
программа notepad.exe
51 Mikeware
 
25.12.12
13:06
(47) нахрен тебе ДДС сдался?
ну, блокнотом посмотри... фаром. вордом. тотал командером. райтом...
52 Ёпрст
 
25.12.12
13:08
и если че, в твоей конфе нет справочника Номенклатура, у тя есть ТМЦ
53 bananan
 
25.12.12
13:10
(51) Проверить правильность имен полей
54 Ёпрст
 
25.12.12
13:11
(53) ран тебе еще, метапарсер обманывать
55 bananan
 
25.12.12
13:18
(54) Да никого я не хочу обманывать; просто ейчас выдает:
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(11)}: State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sc433'.
56 Ёпрст
 
25.12.12
13:20
(55) см (52)
57 bananan
 
25.12.12
13:24
(56) Да я и сгначала задал ТМЦ - ошибка посмотерл в файл там:
#==TABLE no 25     : Справочник ТМЦ
# Name    |Descr                         |SQLTableNam|RecordLock
T=SC92    |Справочник ТМЦ                |SC92       |R        
#-----Fields-------

Задал Descr - ошибка
оказыввается Справочник ТМЦ - SC92
58 bananan
 
25.12.12
13:24
=(57) Ращбираюсь дальше
59 Mikeware
 
25.12.12
13:25
(57) пляттттть...
 $Справочник.ТМЦ as Спр";
60 Ёпрст
 
25.12.12
13:26
(59) тупость затягивает, не так ли ?
:))
61 Mikeware
 
25.12.12
13:27
(60) главное - не заразиться...
62 Mikeware
 
25.12.12
13:29
вообще, настроение хреновое. товарищ умер.работать обломно. Домой ехать лень. к нему - на его жену смотреть тяжело...
вот и флужу...
63 bananan
 
25.12.12
13:30
(59) До этого уже дошел - работает, а вот
$Спр.ТипТМЦ as ТипТМЦ - не хочет:
Meta name parser error: поле таблицы не найдено "$Спр.ТипТМЦ"
64 Ёпрст
 
25.12.12
13:34
(63)Открой наконец пофигуратор, протри очки и посмотри - у справочника ТМЦ нет реквизита ТипТМЦ .
и не было.
65 bananan
 
25.12.12
13:38
(64) Спасибо
66 bananan
 
25.12.12
14:09
Разбираюсь с документом http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip так вот незнаю как мне определить НачДата и КонДата для запроса:
ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНкладная";
Поставил на форму два поля ввода выбора даты: НачДата и КонДата - не проходит:
44)}: Meta name parser error: не указан параметр ":НачДата"
Что здесь не так?
67 Ёпрст
 
25.12.12
14:10
(66) УстановитьТекстовыйПараметр
68 Ёпрст
 
25.12.12
14:10
читай статью, там всё есть
69 bananan
 
25.12.12
14:18
(68) Читаю, сделал так:
Запрос=СоздатьОбъект("ODBCRecordset");
   ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНкладная";

   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
   ТЗ.УстановитьТекстовыйПараметр("КонДата", КонДата);
   ТЗ.ВыбратьСтроку();
Дак ругается все равно:
: Meta name parser error: не указан параметр ":НачДата"
ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
я как-то не так вызываю?
70 Mikeware
 
25.12.12
14:20
плять. ТЗ -то тут причем?
71 Ёпрст
 
25.12.12
14:20
(69) думать то когда будешь ?
Устанавливать параметры запроса надо ДО его выполнения.
72 Ёпрст
 
25.12.12
14:21
ну и (70).. это я даже не увидел :))))))))))))))
73 Mikeware
 
25.12.12
14:21
писец какой-то... сначала выполняет запрос, потом параметры ему пытается передать....
причем параметры пытается передать результатам запроса
74 bananan
 
25.12.12
14:28
(70) ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
(73) Значит надо так:
ТЗ=СоздатьОбъект("Запрос");
ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
ТЗ.УстановитьТекстовыйПараметр("КонДата", КонДата)
75 Mikeware
 
25.12.12
14:29
без слов...
76 bananan
 
25.12.12
14:30
+(74) Дык и так не работает:
Meta name parser error: не указан параметр ":НачДата"
77 Mikeware
 
25.12.12
14:30
был бы ты 86 нола 0 посоветовал бы  позвать взрослых...
на по факту - либо у тебя маразм, либо дебильность в средней стадии
78 bananan
 
25.12.12
14:30
(75) А если со словами? Как это сдалать???
79 bananan
 
25.12.12
14:31
(77) Вот здесь как раз без слов.
Ты знаещь в какой обстановке я работаю?
80 bananan
 
25.12.12
14:32
Ёпрст4 как установить текстовый параметр?
81 bananan
 
25.12.12
14:34
+(80) Написал так:
Запрос=СоздатьОбъект("ODBCRecordset");
   ТЗ = СоздатьОбъект("Запрос");
   ТЗ.УстановитьТекстовыйПараметр("НачДата", НачДата);
   ТЗ.УстановитьТекстовыйПараметр("КонДата", КонДата);
   ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНкладная";

   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроку();
Все-равно ругается:
Поле агрегатного объекта не обнаружено (УстановитьТекстовыйПараметр
82 Ёпрст
 
25.12.12
14:34
АААААААААААААААААААААААААААААААААААААААААААААААААААААААААА!
83 Ёпрст
 
25.12.12
14:35
ладно, на вот:
екстЗапроса = "
       |SELECT .........

Запрос=СоздатьОбъект("ODBCRecordset");
Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
84 bananan
 
25.12.12
14:36
(82) Да нчего страшного, просто скажи как...
85 bananan
 
25.12.12
14:36
(83) Спасибо
86 palpetrovich
 
25.12.12
14:36
(79) неужели в окопе под бомбами?
87 bananan
 
25.12.12
14:38
(86) поверь, хуже
88 Ёпрст
 
25.12.12
14:40
(87) вмазанный шоле?
89 bananan
 
25.12.12
14:41
(88) Вмазаная у меня жена (уже не первый месяц)... :(
90 Ёпрст
 
25.12.12
14:42
(89) дык брось её нахрен
91 Ёпрст
 
25.12.12
14:42
это не лечится
92 bananan
 
25.12.12
14:44
(83) Ну тут тип документа видимо я неправильно задаю ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС.ERT(44)}: Meta name parser error: объект не найден "$ВидДокумента.РасходнаяНакладная"
пробывал так:
|    Жур.IDDocDef = $ВидДокумента.Реализацция";
тоже ругается как в украинской конфе обозвали $ВидДокумента?
93 Ёпрст
 
25.12.12
14:51
РасходнаяНакладная
94 bananan
 
25.12.12
14:51
(89) а двое детей?
95 Ёпрст
 
25.12.12
14:52
если что, она <> РасходнаяНкладная как у тебя в (81)
96 bananan
 
25.12.12
14:53
(95) Да так работает просто я в первы раз допустил опечатку РасходнаяНкладная
97 Ёпрст
 
25.12.12
14:53
(94) оставь себе, жену лишить родительских прав через суд, предоставив справки с наркушки
98 Ёпрст
 
25.12.12
14:54
Хотя, похрен, дал ей денех на дозняк - сама всё подпишет и отдаст
99 Ёпрст
 
25.12.12
14:55
ну а дальше - пинка под зад и давай - до свиданья!
100 bananan
 
25.12.12
14:56
(96) Дак дело в том, что такая фигнгя продолэаетс уже лет 5-6, и я с детьми разговаривал, Они говорят: №Если выбирать - то мы будем жить с мамой"
101 Ёпрст
 
25.12.12
14:59
(100) им лет то сколько ?
Да и.. привыкнут без мамы.
102 Ёпрст
 
25.12.12
14:59
Новую им найдешь, здоровую.
103 bananan
 
25.12.12
15:00
(101) Дочери 18,5 - студентка, сыну - 15,5 (школьник)
104 Ёпрст
 
25.12.12
15:02
(103) :)))))
да уж..
Тут даже думать не надо - дети сами по себе в таком возрасте,
разводись не думая, жене пинка под зад.
105 bananan
 
25.12.12
15:03
(104) Да мне ее жалко и детей. Что их ждет если они будут с мамой - алкоголичкой?
106 Ёпрст
 
25.12.12
15:05
(105) она еще и бухает ? :))
наркоша -алкоголик.. зачет
107 bananan
 
25.12.12
15:08
(106) насчет наркоты - мы с тобой тут не поняли друг-друга; нарктой она не балуется
108 Ёпрст
 
25.12.12
15:09
(107) пилять.. всё у тебя через одно место, даже с терминами.
109 bananan
 
25.12.12
15:09
по поводу запроса сделал так:
ТекстЗапроса = "
       |SELECT
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС
       |INNER JOIN
       |    $Документ.РасходнаяНакладная as Док ON Док.IDDoc = ДокС.IDDoc
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.ТМЦ";
;
   Запрос=СоздатьОбъект("ODBCRecordset");
   Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроку();
Дык ругается:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near 'Жур'
Чем ему Жур не нравится?
110 Ёпрст
 
25.12.12
15:09
А жену тогда кодируй, раз в месяц, пока не поумнееет
111 Ёпрст
 
25.12.12
15:10
(109) and Жур.Date_Time....
112 bananan
 
25.12.12
15:11
(108) может здесь разлчия в украинском и руссокм языках. У нас (87) вмазанный шоле? - это пьяния чи що :)
113 Ёпрст
 
25.12.12
15:11
и вот это
INNER JOIN
       |    $Документ.РасходнаяНакладна
тут как бэ не нужно
114 Ёпрст
 
25.12.12
15:12
(112) вмазанный - находящийся в наркотическом опьянении
115 bananan
 
25.12.12
15:13
(111) Написал так:
|SELECT
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС
       |INNER JOIN
       |    $Документ.РасходнаяНакладная as Док ON Док.IDDoc = ДокС.IDDoc
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       AND Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.ТМЦ";
выдает:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near 'Жур'.
116 Ёпрст
 
25.12.12
15:14
(115) см (111)
117 Ёпрст
 
25.12.12
15:14
and пропущен в условии
118 bananan
 
25.12.12
15:15
(116) блин смотрб в книгу вижу фигу
119 bananan
 
25.12.12
15:16
Написал так:
|INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       AND Жур.Closed & 1 = 1
Ругается:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'AND'.
120 varelchik
 
25.12.12
15:18
(115)
Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       AND Жур.Closed & 1 = 1
смотрим внематочно

Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND   AND Жур.Closed & 1 = 1
121 varelchik
 
25.12.12
15:18
нафига 2 and подряд?
122 bananan
 
25.12.12
15:20
(121) Уже исправил, спасибо. Изучаю дадьше
123 bananan
 
25.12.12
15:40
Ёпрст4  по поводу запроа к подчиненному справочнику что-то типа так (понятно что здесь совсем не то, но...):
ТекстЗапроса = "
|SELECT
|    Жур.IDDoc [Док $Документ],
|    Жур.IDDocDef Док_вид
|FROM
|    _1Sjourn Жур
|INNER JOIN
|    _1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND
|                      Отбор. MDID = 0 AND
|                    Отбор.ParentVal = :ВыбДок* AND
|                    Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~";  
?
Но как мне дотучаться до справочника по конкретному ТМЦ?
124 Ёпрст
 
25.12.12
15:44
(123) не угадал.
125 Ёпрст
 
25.12.12
15:48
можно либо коррелированный подзапрос в селекте, для получения коэффициента, либо соединение с подзапросом, в котором будут выбраны вся номенклатура и коэффициенты для нужной единицы измерения)
126 bananan
 
25.12.12
15:51
(125) УхЮ как сложно... Голова совсем не варит
127 bananan
 
25.12.12
15:52
+(125) С подзапросами никогда не работал, а об соединении с подзапросмо молчу
128 bananan
 
25.12.12
16:12
чего-то я не понимаю написал так:
ТекстЗапроса = "                            
       |SELECT
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    $ДокС.Ед as [Товар $Справочник.ЕдИзм],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.ТМЦ";
ругается:
State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'ДокС.SP1175' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
129 bananan
 
25.12.12
16:21
+(128) т.е. я в РАБОТАБЩИЙ ЗАПРОС:
   |SELECT
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.ТМЦ";
добавил еще одно поле для выбора
|SELECT
       |    $ДокС.Ед as [Товар $Справочник.ЕдИзм],
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
при этом GROUP BY меня перестал понимать :(
130 Ёпрст
 
25.12.12
16:35
(129)дык в гроуп бай кто добавлять поле будет ?
131 bananan
 
25.12.12
16:42
(130) полный код запроса:
|SELECT
       |    $ДокС.Ед as [Товар $Справочник.ЕдИзм],
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
|FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС in
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.ТМЦ";
132 Ёпрст
 
25.12.12
16:45
GROUP BY
       |    $ДокС.ТМЦ,$ДокС.Ед
133 bananan
 
25.12.12
16:51
(132) Спасибо. сейчас попробую
134 bananan
 
25.12.12
16:53
(132) Ура!!! Работает!! Сейчас буду пробывать делать реальный запрос
135 bananan
 
25.12.12
17:02
(132) Блин, что-то я круто туплю... Работало. Добавил в начале скрипта код:
  НачДата = НачМесяца(ТекущаяДата());
  КонДата = ТекущаяДата();
Стал он ругаться:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'in'.
Что за фи фигня? Или он у меня раньше не работал?
136 bananan
 
25.12.12
17:15
+(135) Кажется я понял: у меня раньше работал такой запрос:
|SELECT
|    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
|    SUM($ДокС.Кво) as Количество
|FROM
|    $ДокументСтроки.РасходнаяНакладная as ДокС
|INNER JOIN
|    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
|                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|                       Жур.Closed & 1 = 1
|GROUP BY
|    $ДокС.ТМЦ";
ане этот:
|SELECT              
       |   $ДокС.Ед as [Товар $Справочник.ЕдИзм],
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС in
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.ТМЦ,$ДокС.Ед";
137 bananan
 
25.12.12
17:20
+(136) Насколько я понимаю, ошибка здесь:
   |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
138 Ёпрст
 
25.12.12
17:23
as ДокС in

че то у тя со зрением - однозначно
139 Ёпрст
 
25.12.12
17:24
in выкини оттуда
140 bananan
 
25.12.12
17:38
(138) не со зрением,. а с головой
141 bananan
 
25.12.12
17:39
(139) Теперь, точно - роаботает, мне еще нужен номер документа
набрал:
|SELECT        
       |   $ДокС.DocNo as НомерДок,
       |   $ДокС.Ед as [Ед. измерения $Справочник.ЕдИзм],
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    $ДокС.DocNo,$ДокС.ТМЦ,$ДокС.Ед";
Выдает:
Meta name parser error: поле таблицы не найдено "$ДокС.DocNo
142 Ёпрст
 
25.12.12
17:40
| Жур.DocNo
143 bananan
 
25.12.12
17:45
(142) Спасибо. А Жур - это типа синоним на журнал документов?
144 Ёпрст
 
25.12.12
17:46
(143) яя, натюрлих
145 Ёпрст
 
25.12.12
17:46
только не синоним, а псевдоним таблички  _1SJourn в тексте запроса
146 bananan
 
25.12.12
17:48
(145) Еще раз спасибо!
147 bananan
 
25.12.12
18:03
Тут еще подводных (для меня) камней море... Поставил:
|SELECT        
       |   Жур.DocNo as НомерДок,
       |   $ДокС.Ед as [Ед. измерения $Справочник.ЕдИзм],
       |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],        
       |   $ДокС.Кф as [Коэффициент $Справочник.ЕдИзм.Коэффициент],
       |    SUM($ДокС.Кво) as Количество
       |FROM
       |    $ДокументСтроки.РасходнаяНакладная as ДокС
       |INNER JOIN
       |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
       |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |                       Жур.Closed & 1 = 1
       |GROUP BY
       |    Жур.DocNo,$ДокС.ТМЦ,$ДокС.Ед,$ДокС.Кф";
Дак он ругается:
Meta name parser error: поле таблицы не найдено "$ДокС.Кф"
148 bananan
 
25.12.12
18:04
+(147) Или здесь еще один подзпрос надо делать? если - даЮ то как?
149 bananan
 
25.12.12
18:25
Ау! Есьть кто живой? Как разрулить запрос (147)
150 bananan
 
25.12.12
18:37
Ёпрст4! Как ты мнре нужен!
151 varelchik
 
25.12.12
18:49
Усе пошли домой.
До встречи завтра.
152 bananan
 
25.12.12
18:52
(151) Завтра так завтраЮ мне еще час ы 8 минут на работе голову ломать над этим запросом...
153 viktor_vv
 
25.12.12
18:55
(147) В расходной в бухии там нет такого реквизита Кф. Есть "Коэффициент".

В твоем случае.

       |   $ДокС.Коэффициент as Коэффициент ,

Без типизации.
154 bananan
 
25.12.12
18:59
(153) Спасибо, работает
155 Stella0608
 
25.12.12
19:32
Опять пропустила все самое интересное. :)
Хотела уточнить у местных спецов - а у обычных семерочных запросов есть возможность обращения к подчиненным справочникам?
Не помню и сто лет их уже не писала :).
156 zak555
 
25.12.12
19:35
(155) делай запрос по нему
157 ADirks
 
26.12.12
06:17
(155) и правильно, нефиг всякие гадости писать
158 ЧеловекДуши
 
26.12.12
06:46
Не забывай в селекте ставить команду (NOLOCK)
Иначе можешь писать заявление по собственному...
...дай другому поломать БД...
159 ЧеловекДуши
 
26.12.12
06:47
+(147) Жур.Closed & 1 = 1

Убери из связей.... не кошерно это там иметьэ

Познай для себя команду WHERE
А по сути гуг рулит, в плане поисков ответов по SQL
160 ЧеловекДуши
 
26.12.12
06:48
+ И это тоже AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND

Убери в условие
161 ЧеловекДуши
 
26.12.12
06:51
+ INNER JOIN - на SQL 2000 он отрабатывает медленней, нежели попросту выполнить команду LEFT(Right) OUTER JOIN?
162 ADirks
 
26.12.12
07:31
(161) У них смысл разный. Поэтому оценивать медленнее/быстрее не слишком осмысленное занятие.
163 ЧеловекДуши
 
26.12.12
07:55
(162)Смысл разный и бесполезный.
Может и писать меньше, но медленней работает, проверено :)
164 ADirks
 
26.12.12
08:02
(163) Что значит "бесполезный"?
Кроме того, тупо сравнивать время выполнения запросов в SQL - тоже не информативно. Сравнивать надо планы запросов.
165 Stella0608
 
26.12.12
09:30
Разве медленнее?
А вообще, некоторые условия превращают левое/правое соединение во внутреннее :).
166 Stella0608
 
26.12.12
09:46
(159) Какой дает выигрыш перенос условия из соединения в Where?
167 Ёпрст
 
26.12.12
10:08
ТекстЗапроса="
|select        
|   Жур.iddoc as [Док $Документ.РасходнаяНакладная]
|   ,$ДокС.ТМЦ as [Товар $Справочник.ТМЦ]
|   ,sum($ДокС.Кво*$ДокС.Коэффициент) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum($ДокС.Кво*$ДокС.Коэффициент/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
|from
|    $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|inner join
|    _1sjourn as Жур (nolock) on Жур.IDDoc = ДокС.IDDoc
|      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
|      and Жур.Closed&1 = 1
|left join (
|             select  
|                   max($Спр.Коэффициент) as Коэффициент
|                    ,Спр.parentext as Владелец
|             from $Справочник.Единицы as Спр (nolock)
|             where $Спр.Ед =:ВыбЕдиница
|                   and $Спр.Коэффициент>0
|                   and Спр.ismark=0
|             group by Спр.parentext
|           ) as СпрЕдиницы on СпрЕдиницы.Владелец = $ДокС.ТМЦ
|
|group by
|    Жур.iddoc,$ДокС.ТМЦ
|";
Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
..................
168 ADirks
 
26.12.12
10:46
(166) есть мнение, что никакого :)
Просто человеку почему-то не нравится. А мне наоборот - нравится, считаю что в inner join все условия д.б. именно там. Но ему и inner join тоже не нравится, так что логично :)
169 bananan
 
26.12.12
11:45
(167) Неправильный запрос мы с вами сделали! Дело в том, что данный запрос показывает коэффициент ТМЦ по документа, а не берет коэффициент данного ТМЦ для еденицы ищмерения ящик!
Т.е. здесь таки надо делать еще один подзапрос
170 Ёпрст
 
26.12.12
11:49
(169) Еще подумай
171 bananan
 
26.12.12
11:50
(167) Хотя я просмотрел код Ёпрст4 - это вроде должно работать.
172 bananan
 
26.12.12
11:51
(170) 169 я написал не просотрев твой код. Сейчас проверю в скрипте (там надо многое изменить - так что рещультат будет минут через 7)
173 bananan
 
26.12.12
11:53
(172) У всех прошу прощения за опечатки
174 bananan
 
26.12.12
11:58
+(172) Выдает ошибку:
Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС01.ERT(101)}: Значение не представляет агрегатный объект (УстановитьТекстовыйПараметр)
175 Ёпрст
 
26.12.12
11:59
(174) нам отсюда не видно, что есть Запр в твоём коде
176 bananan
 
26.12.12
12:00
(175) Дело в том что код менялся много раз
Запр это Запрос
177 bananan
 
26.12.12
12:01
+(176) И меняться код еще будет не мало раз...
178 bananan
 
26.12.12
12:03
Дело в том что результаты работы запроса нужно выдать в Таблицу а не в ТблицуЗначений
179 Ёпрст
 
26.12.12
12:07
(178) да уж, мне бы твои проблемы
180 bananan
 
26.12.12
12:14
(179) а (174) что за фигнгя и как с ней бороться?
181 Ёпрст
 
26.12.12
12:15
(180) зачем бороться ?
Запр сделать объектом одбсрекордсет
182 bananan
 
26.12.12
12:23
(181) Моя невнимательность!
Но, дело в том, что он показывает количество ТМЦ в ящиках по ВСЕХ документах (вернее не все,а по документах РасходнаяНакладная (надо еще сюда же и по документу РасходнаяНакладнаяН)
183 ЧеловекДуши
 
26.12.12
12:25
(168)Останемся каждый при своем...
184 bananan
 
26.12.12
12:26
+(182) Но м количество проданых ящиков по всех документах - тожу надо
185 Ёпрст
 
26.12.12
12:26
(182) тогда тебе еще стоит ознакомится с юнион алл
186 ЧеловекДуши
 
26.12.12
12:27
(184)Сделай двумя запросами :)
(185)А я разочаровался в этом методе :(
187 bananan
 
26.12.12
12:27
(182) насколько позволяют мои знания английского - это объеденение всех?
Это SQL?
188 Ёпрст
 
26.12.12
12:28
(186) зря
189 bananan
 
26.12.12
12:29
Ёпрст4 так что мне разобраться с юнион алл?
190 Ёпрст
 
26.12.12
12:30
(189)
сделать запросы к табличным частям документов, объеденить их через юнион алл, отфильтровать их через внутреннее соедиенение
с журналом доков. всё.
191 bananan
 
26.12.12
12:33
(190) Думаешь я это, на данном этапе моиз щнаний, смогу сделать сам?
192 Ёпрст
 
26.12.12
12:35
(191) думаю нет, но мот попытаешься хотя бы ?
193 bananan
 
26.12.12
12:36
(192) Конечно попытаюсь (хотя попытка, зная, что она обречена - что даст?)
194 bananan
 
26.12.12
12:38
+(193) Мне уже страшно :(
195 bananan
 
26.12.12
12:39
(190) Данный запрос как раз обращается к табличным частым документов...
196 Sinus1984
 
26.12.12
12:42
ну из простого можно попробовать union all
197 bananan
 
26.12.12
12:42
+(194) Пока изучаю, вернее углубляю свои знания SQL
198 Ёпрст
 
26.12.12
12:47
ТекстЗапроса="
|select        
|   Жур.iddoc as [Док $Документ]
|   Жур.iddocdef as [Док_вид $ВидДокумента]
|   ,Таб.Товар as [Товар $Справочник.ТМЦ]
|   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
|from
|    (
|      select
|        $ДокС.ТМЦ as Товар
|        ,ДокС.iddoc as Документ
|        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
|      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|    
|      union all
|
|      select
|        $ДокН.ТМЦ
|        ,ДокН.iddoc
|        ,$ДокН.Кво*$ДокН.Коэффициент
|      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
|    )as Таб
|
|inner join
|    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
|      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
|      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
|      and Жур.Closed&1 = 1
|left join (
|             select  
|                   max($Спр.Коэффициент) as Коэффициент
|                    ,Спр.parentext as Владелец
|             from $Справочник.Единицы as Спр (nolock)
|             where $Спр.Ед =:ВыбЕдиница
|                   and $Спр.Коэффициент>0
|                   and Спр.ismark=0
|             group by Спр.parentext
|           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
|
|group by
|    Жур.iddoc,Жур.iddocdef,Таб.Товар
|";
Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
..................
199 sapphire
 
26.12.12
12:52
(198) Осталось только предположить, что ящик, это единица с максимальным коэффициентом
200 Ёпрст
 
26.12.12
12:54
(199) дык там же ищется максимум, только среди "ящиков"..
защита от дурака, мало ли. как они там единиц поназаводили..
201 bananan
 
26.12.12
12:56
(198) Я восхищет!
НО, выдает ошибку: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 4: Incorrect syntax near 'Жур'.
202 Ёпрст
 
26.12.12
12:58
(201)зпт воткни тут:
,Жур.iddocdef
203 bananan
 
26.12.12
13:04
(202) Спасибо
204 sapphire
 
26.12.12
13:08
(202) :))))))))))
205 bananan
 
26.12.12
13:12
+(202) Мне надо не только РасходнаяНакладная, но и РасходнаяНакладнаяН - если бы не было as просто через запятую указал...
Попробывал через запятую (from  $ДокументСтроки.РасходнаяНакладная, $ДокументСтроки.РасходнаяНакладнаяН as ДокС (nolock))
1С тупо ЗАВИСЛА.
Как здесь быть?
206 Ёпрст
 
26.12.12
13:14
(205) п...ц
а в (198) по твоему что?!
207 sapphire
 
26.12.12
13:14
ааа..... печалька
208 sapphire
 
26.12.12
13:15
(206) Нужен мозг. Срочно.
209 sapphire
 
26.12.12
13:15
(206) select * from * where *
210 sapphire
 
26.12.12
13:16
(206) Он не знает SQL
211 bananan
 
26.12.12
13:16
(206) ОГРОМНОЕ СПАСИБО, извини за невнимательность
212 bananan
 
26.12.12
13:22
+(211) А как в этом же запросе показать сколько ящиков ушло по каждой из накладных и вообще сколько ящиков товаров было продано за заданный период?
213 Ёпрст
 
26.12.12
13:25
дык он тебе и так всё это покажет.
у тя на выходе табличка

документ товар количество количествоВЯщиках

сворачивай по документу - будет количество в разрезе
документ количество ящики..
214 bananan
 
26.12.12
13:27
(213) Извини, тут сказывается мой малый опыт работы в таком плане...
Мне нужно эти данные показать на екране в виде Таблицы, а не Таблицу значений показать..
Что тут делать и как?
215 Ёпрст
 
26.12.12
13:28
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолчитьСтроку()=1 Цикл
 Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать("ёёё...");
216 sapphire
 
26.12.12
13:34
|select        
|    Док as [Док $Документ]
|   ,Док_вид as [Док_вид $ВидДокумента]
|   ,Товар as [Товар $Справочник.ТМЦ]  
|   ,КоличествоВБазовойЕдиницеИзмерения
|   ,КоличествоВЯщиках
|   ,SUM(КоличествоВЯщиках) OVER (PARTITION BY Док,Док_вид) КоличествоВЯщикахПоДокументу
|   ,SUM(КоличествоВЯщиках) OVER () КоличествоВЯщикахВсегоПоВсемДокументам
|from
|(
|select        
|    Жур.iddoc as [Док]
|   ,Жур.iddocdef as [Док_вид]
|   ,Таб.Товар as [Товар]
|   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
|from
|    (
|      select
|        $ДокС.ТМЦ as Товар
|        ,ДокС.iddoc as Документ
|        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
|      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|    
|      union all
|
|      select
|        $ДокН.ТМЦ
|        ,ДокН.iddoc
|        ,$ДокН.Кво*$ДокН.Коэффициент
|      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
|    )as Таб
|
|inner join
|    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
|      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
|      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
|      and Жур.Closed&1 = 1
|left join (
|             select  
|                   max($Спр.Коэффициент) as Коэффициент
|                    ,Спр.parentext as Владелец
|             from $Справочник.Единицы as Спр (nolock)
|             where $Спр.Ед =:ВыбЕдиница
|                   and $Спр.Коэффициент>0
|                   and Спр.ismark=0
|             group by Спр.parentext
|           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
|
|group by
|    Жур.iddoc,Жур.iddocdef,Таб.Товар
|) Документы
|";
Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);


select        
|   Жур.iddoc as [Док $Документ]
|   Жур.iddocdef as [Док_вид $ВидДокумента]
|   ,Таб.Товар as [Товар $Справочник.ТМЦ]
|   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффицие
217 sapphire
 
26.12.12
13:35
Ну в общем идея использовать предложение OVER
218 bananan
 
26.12.12
13:36
(215) Спасибо - сейчас попробую
(216) А это что за код?
219 Ёпрст
 
26.12.12
13:36
(216) погоди, ща скажет , что у него 2000 скуль..
:))
и болт с овером
220 sapphire
 
26.12.12
13:39
(219) Запросто :)
221 bananan
 
26.12.12
13:48
Запустил с периодом выборки один день, - просчитало все за секунду...
Запустил с периодом выборки - месяц (ноябрь) - зависла... :(
222 bananan
 
26.12.12
13:50
+(221) Пардон. не зависла - просто ушла в себя
223 bananan
 
26.12.12
13:51
+(222) Т.е. в результате таки выдала информацию по запросе (но писала что программа "не отвечает)"
224 Ёпрст
 
26.12.12
13:53
(223) основное время занимает не запрос.выполнитьинструкцию, а ТЗ.Показать()
225 bananan
 
26.12.12
13:59
(224) я тоже так думаю, сейчас буду переделывать это под таблицу (вместо таблицаЗначений)
226 bananan
 
26.12.12
14:14
Что-то я таки туплю, как в таблице мне из даного  запроса показать товар
В запросе мы написали:
$ДокС.ТМЦ as Товар
Пытаюсь вывести Запр.Товар
Выдает:
Поле агрегатного объекта не обнаружено (Товар)
227 bananan
 
26.12.12
14:15
+(226) И номер документа как показать?
228 bananan
 
26.12.12
14:15
++(226) Ну и количесвто ящиков по документу. и количество ящиков по всех документах вместе
229 Ёпрст
 
26.12.12
14:17
(226)ознакомься с теорией, что ли
http://www.1cpp.ru/docum/icpp/html/ODBC.html

(227) жур.docno
230 sapphire
 
26.12.12
14:17
а ну ясно-красно почему коматозит :))_))
231 bananan
 
26.12.12
14:18
(229) С теорией я ознакомлюсь - тут читать на несколько часов...
А как мне показать Товар из запроса?
232 sapphire
 
26.12.12
14:19
(229)

select
|        $ДокС.ТМЦ as Товар
|        ,ДокС.iddoc as Документ
|        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
|      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|    
|      union all
|
|      select
|        $ДокН.ТМЦ
|        ,ДокН.iddoc
|        ,$ДокН.Кво*$ДокН.Коэффициент
|      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)

Ну тут ты погорячился, ИМХО :))))
Запрос по ВСЕМ ТЧ БД :)
Он же сначала выборку обработает и только потом будет вычислять inner join :)

Да и я не глядя OVER при-рисовал.
233 sapphire
 
26.12.12
14:20
(231) Перепости код полностью
234 chelentano
 
26.12.12
14:20
(231) а сам думать пробовал?
235 sapphire
 
26.12.12
14:21
(234) Многие не приучены
236 chelentano
 
26.12.12
14:21
(235) так вы бы хоть деньги с него брали, что ли...
237 sapphire
 
26.12.12
14:22
(234) А есть экземпляры, коим нечем, вот пример

http://www.youtube.com/watch?v=Dsi55vRmLXU

это отсюда

"Красный декабрь": студенты РГТЭУ строят баррикады в ожидании ОМОНа
http://top.rbc.ru/society/26/12/2012/838466.shtml
238 sapphire
 
26.12.12
14:22
(236) Нам не жалко :)
239 Ёпрст
 
26.12.12
14:22
(232) ну и что ?
думаешь, если в подзапросе соединять какждый вид с журналом будет быстрее ? Нет.
240 Ёпрст
 
26.12.12
14:23
>>>Запрос по ВСЕМ ТЧ БД :)

да и не по всем, а только по двум пока..
241 sapphire
 
26.12.12
14:24
(240) План будет не оптимальным
242 sapphire
 
26.12.12
14:25
(240) Просто интересно, а паренек в состоянии план запроса посмотреть?
243 Ёпрст
 
26.12.12
14:25
(241) нормальный там план будет, можешь проверить..
куча соединений на фильтрацию документов в самом юнионе будет не быстрее.
244 sapphire
 
26.12.12
14:25
(239) Кстати, думаю, что да.
245 bananan
 
26.12.12
14:26
(232) Это я знаю, но как показать товар хотябы в окне сообщений?
246 Ёпрст
 
26.12.12
14:30
(245)
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
 Сообщить(ТЗ.Товар);
КонецЦикла;
247 bananan
 
26.12.12
14:30
(229) выдает поле агрегатного объекта не обнаружено
248 sapphire
 
26.12.12
14:31
(243) Там не куча, там одно + однотипные
и c индексами будет нормально, по 1sjourn пойдет по DOCTYPE, а
ТЧ по IDDOC
249 bananan
 
26.12.12
14:33
Вывести номер документа как?
ТЗ.Жур.docno     ошибка
Жур.docno    ошибка
Как вывести?
250 sapphire
 
26.12.12
14:41
(247) Полностью код покажи с начала запроса до низу
251 sapphire
 
26.12.12
14:42
(249) Это не восьмерка, да и восьмерке за количество точек более одной в полях наказывать надо
252 Sinus1984
 
26.12.12
14:45
Жур.docno это в запрос надо добавить
253 sapphire
 
26.12.12
14:50
(252) Маленькое уточнение, КАК :)
254 Sinus1984
 
26.12.12
14:50
(251)
типо так в 77 нельзя? да вроде и наказывать здесь не за что
ОКЕИ = Товар.ЕдиницаИзмерения.ОКЕИ
255 Ёпрст
 
26.12.12
14:52
(248) да, твоя правда.. не оптимальный план.. в 2 раза
:)
256 Ёпрст
 
26.12.12
14:53
время компиляции запроса отличается.
257 sapphire
 
26.12.12
14:53
(254) Это прямой запрос, речь о прямом запросе к БД 77.
В восьмерке, конструкция вида Товар.ЕдиницаИзмерения.ОКЕИ приведет к неявному соединению
258 bananan
 
26.12.12
14:54
(250) Полностью код запроса:
259 bananan
 
26.12.12
14:55
ТекстЗапроса = "                            
       |select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
260 sapphire
 
26.12.12
14:57
(259) Этот кусок у меня есть. Что ниже этого чуда?
261 bananan
 
26.12.12
15:00
(260)Запр=СоздатьОбъект("ODBCRecordset");
   Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
   Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
   ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
   //Таб.ВывестиСекцию("Шапка");
   ТЗ.ВыбратьСтроки();                          
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
       Таб.ВывестиСекцию("Строка");
   КонецЦикла;
   Кон=ТекущееВремя();
   
   //Таб.Опции(0,0,Таб.ВысотаСекции("Шапка"),0);
   Таб.ТолькоПросмотр(1);
   Таб.Защита(0);
   Таб.Показать("Расход","");
   
   
   Сообщить("Обрабатывалось с "+Нач+" до "+Кон);
262 Ёпрст
 
26.12.12
15:01
>> по 1sjourn пойдет по DOCTYPE
неа.. в плане тупо индекс скан всегда..
не хочет бегать по индексу..
263 sapphire
 
26.12.12
15:02
(262) Странно-странно.
264 sapphire
 
26.12.12
15:04
не знаю, может als у мну старый, но вот:
ВыполнитьИнструкцию(<?>,<?>,<?>)
Синтаксис:
ExecuteStatement(strTextSQL, obVT, bEraseVT)
Назначение:
Выполняет SQL запрос, при ошибке парсинга или при ошибке на ODBC драйвере формируется исключение. Если запрос возвращает набор строк, метод возвращает объект с результатом запроса, если запрос не возвращает набор строк (не select, а DML или прочий), возвращается количество обработанных строк. Если запрос содержит несколько SQL инструкций (multistatement batch), результаты возвращаются только от первой инструкции. Однако, на драйвер уходит весь текст запроса (По спецификации ODBC, будут ли выполнены остальные инструкции в пакете зависит от драйвера. Для драйвера SQL Server они выполняются), остальные результаты игнорируются. Если запрос возвращает набор данных, и в наборе данных нет ни одной строки, это не является ошибкой. Если запрос не параметризированный - метод гарантированно закрывает курсор.
Возвращает: объект с результатом запроса (ТаблицаЗначений или наследник), или число - количество обработанных строк.
Параметры:
- strTextSQL (Строка): текст запроса, если пустая строка запрос считается параметризированным. По умолчанию пустая строка.
- obVT (объект): ТаблицаЗначений или наследник от нее для приема результатов запроса, именно этот объект и будет возвращаемым значением. Это должен быть именно ТаблицаЗначений или наследник, а не объект реализующий ее интерфейс. Если тип объекта - пустое значение, создается объект типа ТаблицаЗначений. По умолчанию: пустое значение.
- bEraseVT (Число): 1 - очистить таблицу и создать колонки. 0 - не создавать. По умолчанию - 1.
265 sapphire
 
26.12.12
15:05
(261) Версия 1с++ какая?
266 bananan
 
26.12.12
15:05
(265) а как узнать?
267 bananan
 
26.12.12
15:06
+(266) програмно
268 Axel2009
 
26.12.12
15:07
так какой запрос то оптимизируем в итоге?
269 sapphire
 
26.12.12
15:08
//Т.е. у мну выглядело бы так:
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Запр.ВыполнитьИнструкцию(ТекстЗапроса,ТЗ);

//-- далее итератор вывода  и прочее --
270 sapphire
 
26.12.12
15:08
(268) см (259)
271 Ёпрст
 
26.12.12
15:08
(268) да пофик какой, атор один хрен результат работы любого запроса не в состоянии в моксель вывести
272 bananan
 
26.12.12
15:09
Вообще, я честно говоря, не понимаю.
Раз выражение ТЗ.Товар работает, то, по-идее, должно и работать выражение ТЗ.Жур.docno тоже бы должно было бы работать. Ан нет
273 Ёпрст
 
26.12.12
15:09
(269) та нафига так явно то ?
:)
он и так ТЗ возвращает всегда. хотя для вывода, лучше ИТЗ..
274 Ёпрст
 
26.12.12
15:10
(272) :)))))

ёёё..
275 bananan
 
26.12.12
15:10
(273) А что такое ИТЗ?
276 sapphire
 
26.12.12
15:10
(271) Ты слишком к нему суров, может он РГТЭУ закончил и ему лечится от такого образования надо...
277 bananan
 
26.12.12
15:10
И как, в конце-концов из даного запроса показать чилсо ящиков и т.д?
278 sapphire
 
26.12.12
15:10
(275) Объект из 1С++ Индексированная ТЗ
279 Sinus1984
 
26.12.12
15:11
ну в принципе и у него отработает и у тебя правильно
(269)
Если тип объекта - пустое значение, создается объект типа ТаблицаЗначений. По умолчанию: пустое значение.
280 sapphire
 
26.12.12
15:12
(273) Я последний раз 1С плюс-плюсил 6 лет назад, ты думаешь я следил за развитием проекта?
281 sapphire
 
26.12.12
15:13
у мну ALS от 1C++ 1.8.1.6 :))))))))))
282 Sinus1984
 
26.12.12
15:13
(272)
ну аналогия с товаром кривая какая то мож ТЗ.Док попробовать
283 Ёпрст
 
26.12.12
15:13
(280) аа..
284 sapphire
 
26.12.12
15:14
(282) Да, да, насоветуй, пусть еще по-тормознее будет.
285 bananan
 
26.12.12
15:15
(282) Работает
286 sapphire
 
26.12.12
15:15
(283) кста, ТС стоило бы Толи-абсента статейку в кз почитать, да?
287 Ёпрст
 
26.12.12
15:16
(286) не помогает, ему еще в начале дали
288 sapphire
 
26.12.12
15:16
(285) А ТЗ.Док.НомерДок? :))))
289 Ёпрст
 
26.12.12
15:16
:)
290 sapphire
 
26.12.12
15:16
(287) Да, это уже патология. Ладно, не будем нервировать больного.
291 sapphire
 
26.12.12
15:17
(289) как пить дать он щас так и сделает как в (288) :)))
292 Sinus1984
 
26.12.12
15:17
(284) я так понял тут давно уже оптимизацией и не пахнет)) тут надо тупо чтоб взлетело)
293 sapphire
 
26.12.12
15:18
(292) Ну если ты всю оптимизацию агитируешь убить на корню используя разыменвание полей... То можно в этой ветке по-обсуждать... Да что угодно
294 bananan
 
26.12.12
15:19
Ребята, я всем благодарен за дельные советы!
С 1С++ работаю - второй день
295 Sinus1984
 
26.12.12
15:20
(294) да и с 1С 7.7 день пятый походу
296 sapphire
 
26.12.12
15:21
(294) Если нужны прямые запросы... То надо хоть чуть-чуть почитать про SQL
297 sapphire
 
26.12.12
15:21
+(296) Рекомендую Ицик Бен-Ган Основы t-SQL.
Достаточно грамотно и просто.
298 bananan
 
26.12.12
15:24
(297) Обязательно прочитаю (уже скачиваю)
299 bananan
 
26.12.12
15:26
Но, в каонце концов, как мне это сгрупировать по документах, чтобы я в каждой строке не писал номер документа товар количесвто
ачтобы выдал строка - номер документа
след строка - товар и его количесвто в ящиках
след строка - товар и его количесвто в ящиках
....
Всего ящиков в документе
300 Ёпрст
 
26.12.12
15:27
(299) это тебе еще поучиться надо..
301 bananan
 
26.12.12
15:28
(300) НЕ спорю и учусь.
А как сделать (299)?
302 sapphire
 
26.12.12
15:30
(300) Может его спросить таки что за сервер у него? Вдруг OVER проканаяет? :)
303 Ёпрст
 
26.12.12
15:31
самое тупое, это отсортировать в запросе по позиции дока, потом при выводе

ПечДок="";
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
 Ежели ПечДок<>ТЗ.Док Тогда
    ПечДок = ТЗДок;
    ВывестиСекцию("Документ");
 КонецЕсли;
 ВывестиСекцию("Строка");
КонецЦикла;
ВывестиСекцию("Подвал");

ежели еще и переменную для подсчета в ящиках воткнешь унутрь цикла, так еще и поимеешь количество по накладной..

это самый примитив .
304 Ёпрст
 
26.12.12
15:32
(302) не, всё равно не поймет, как ТЗ вывести потом :))
Тут пальцем показывать надо
:)
305 bananan
 
26.12.12
15:34
(303) Те етот код и будет выводить инфу из запроса на экран?
306 Ёпрст
 
26.12.12
15:36
(305) исправишь ошибки синтаксиса - будет
307 bananan
 
26.12.12
15:40
(306) Исправил - работает
308 Ёпрст
 
26.12.12
15:41
аминь
309 Sinus1984
 
26.12.12
15:43
(307) ну круть теперь премию получишь наверно
310 bananan
 
26.12.12
15:43
(309) Премию? Ты не знаешь западно-украинских работодателей
311 Sinus1984
 
26.12.12
15:49
(310) я уже хотел порадоваться, что коллективный разум (в лице безработного Ёпрст4) сделал те подарок к НГ в виде премии
312 Ёпрст
 
26.12.12
15:50
С чего такая уверенность, что я безработный ?
313 bananan
 
26.12.12
15:51
Ёпрст4 - ОГРОМНОЕ СПАСИБО!!!!!!
314 Sinus1984
 
26.12.12
15:54
(312) ну не в смысле без зарплатного я сам на работе сижу а без работы ибо лень НГ скоро с наступающим
315 bananan
 
26.12.12
16:42
Ребята, еще помогите (я уже почти час ищу - ничего не нашел)
Короче, запрос работает правильно, но... в окне сообщений постоянно (вцикле) вылетает:
Поле агрегатного объекта не обнаружено (ТМЦ)
Вот весь код скрипта:
Процедура ПриОткрытии()
   НачДата = НачМесяца(ПолучитьДатуТА())+19;
   КонДата = ПолучитьДатуТА();
КонецПроцедуры

               
Процедура Подч()  
   Нач=ТекущееВремя();
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("НоваяТаблица");
   ТекстЗапроса = "                            
       |select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
   
   Запр=СоздатьОбъект("ODBCRecordset");
   Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
   Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
   ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
   //Таб.ВывестиСекцию("Шапка");
   ТЗ.ВыбратьСтроки();                          

   ПечДок="";
   ТЗ.ВыбратьСтроки();      
   ДокЯщ = 0;
   Итог=0;
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
         Если ПечДок<>ТЗ.Док Тогда
           ПечДок = ТЗ.Док;
           Таб.ВывестиСекцию("Документ");
           ДокЯщ = 0;
       Иначе
           ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
           Итог= Итог + ДокЯщ;
         КонецЕсли;
     Таб.ВывестиСекцию("Строка");
   КонецЦикла;              
 
   Таб.ВывестиСекцию("Подвал");

   Кон=ТекущееВремя();
   
   //Таб.Опции(0,0,Таб.ВысотаСекции("Шапка"),0);
   Таб.ТолькоПросмотр(1);
   Таб.Защита(0);
   Таб.Показать("Расход","");
   
   
   Сообщить("Обрабатывалось с "+Нач+" до "+Кон);
КонецПроцедуры
В таблице выводятся:
ТЗ.Док
ТЗ.Товар        
ТЗ.КоличествоВЯщиках
Итог                    
Где это чертово ТМЦ?
316 Ёпрст
 
26.12.12
16:49
в расщифровке
317 Ёпрст
 
26.12.12
16:49
смотри свойства ячеек таблицы
318 bananan
 
26.12.12
16:58
(316) Спасибо. Я б до такого сам не догадался
319 bananan
 
26.12.12
17:39
Еще один вопрос, на сегодня надеюсь последний.
Код для вывод у меня такой:
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
         Если ПечДок<>ТЗ.Док Тогда
           ПечДок = ТЗ.Док;
           Таб.ВывестиСекцию("Документ");
           ДокЯщ = 0;
           ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
       Иначе
           ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
           Итог= Итог + ДокЯщ;
         КонецЕсли;
     Таб.ВывестиСекцию("Строка");
   КонецЦикла;              
     Таб.ВывестиСекцию("ПодвалДок");
   Таб.ВывестиСекцию("Итог");

Где поставить Таб.ВывестиСекцию("ПодвалДок");, чтобы он у меня показывал число ящиков по документу, после каждого документа?
320 bananan
 
26.12.12
17:51
+(319) Да и количесвто ящиков он у меня неправильно считает :(
321 bananan
 
26.12.12
17:53
Кто-нибудь, помогите!
322 sapphire
 
26.12.12
17:59
ВыведеноСтрокВДокументе=0;
Пока ТЗ.ПолучитьСтроку()=1 Цикл
         Если ПечДок<>ТЗ.Док Тогда
            Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
            ПечДок = ТЗ.Док;
            Таб.ВывестиСекцию("Документ");
            ДокЯщ = 0;
            ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
            ВыведеноСтрокВДокументе=0;  
        Иначе
            ВыведеноСтрокВДокументе=ВыведеноСтрокВДокументе+1;  
            ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
            Итог= Итог + ДокЯщ;
         КонецЕсли;
     Таб.ВывестиСекцию("Строка");
   КонецЦикла;  
            Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
         
//      Таб.ВывестиСекцию("ПодвалДок");
   Таб.ВывестиСекцию("Итог");
323 sapphire
 
26.12.12
18:00
(321) Приступ непонимания только по средам или ежедневно? :)
324 sapphire
 
26.12.12
18:01
и еще... код сам по себе кривой до безобразия
325 sapphire
 
26.12.12
18:02
ВыведеноСтрокВДокументе=0;
Пока ТЗ.ПолучитьСтроку()=1 Цикл
         Если ПечДок<>ТЗ.Док Тогда
            Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
            ПечДок = ТЗ.Док;
            Таб.ВывестиСекцию("Документ");
            ДокЯщ = 0;
           
            ВыведеноСтрокВДокументе=0;  

        КонецЕсли;  
            ВыведеноСтрокВДокументе=ВыведеноСтрокВДокументе+1;  
            ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
            Итог= Итог + ДокЯщ;

     Таб.ВывестиСекцию("Строка");
   КонецЦикла;  
            Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
         
//      Таб.ВывестиСекцию("ПодвалДок");

   Таб.ВывестиСекцию("Итог");
326 bananan
 
26.12.12
18:03
(323-324) Приступ немонимания... Хотите верьте. хотите нет, но в этом году в феврале месяце умерла моя мама, а в ноябре умерла моя сеестра..
Может потому я торможу
327 bananan
 
26.12.12
18:04
(325) Так он никогда Подвал док не выведет
Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
328 sapphire
 
26.12.12
18:05
(326) Ну и что? У меня жена умерла в ноябре, я же не ною.
329 sapphire
 
26.12.12
18:06
(327) Вы и вправду верите в то, что не зайдет?
330 bananan
 
26.12.12
18:07
(329) Пардон, опять торможу
331 sapphire
 
26.12.12
18:22
(330) Вооттт. Именно-с.
332 bananan
 
26.12.12
18:43
Опять какая-то фигня: задаю формат(Итог, "ЧЦ=15; ЧД=2; ЧРД='.'")
Выдает:
59Ц26
333 Ёпрст
 
27.12.12
09:33
(332) открой наконец СП и прочти про функцию Формат
334 bananan
 
27.12.12
12:23
Доброе утро! Скрипт работает - все нормально, но...
Теоретический вопрос запрос у нас задается так:
|select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   $Спр.Коэффициент as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
Так вот, в подзапросе union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
as Количество - добавил я (хотя и без этого оно работало нормально). Но, по идее, если нет as Количество во втором подзапросе, то через что будет работать  union all?
Второе в строке max($Спр.Коэффициент) as Коэффициент зачем вызывается max? (Хотя без max выдает ошибку: Column '???.SP115' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.)
Т.е. зачем вроде понятно - чтобы не выдавал ошибку.. Но почему так?
335 Ёпрст
 
27.12.12
12:33
(334)
1.
http://msdn.microsoft.com/ru-ru/library/ms180026(v=sql.100).aspx

не надо там никаких псевдонимов в селекте во втором запросе и всех последующих.

2. Это "защита от дурака" - если введут несколько единиц измерения "ящик" на одну номенклатуру с разными(одинаковыми/нулевыми) коэффицентами - берем тупо с максимальным коэффициентом
336 bananan
 
27.12.12
12:33
(333) Открыл, прочел, исправил. а код (332) я брал с какого-то сайта :(
337 bananan
 
27.12.12
12:34
(335) А почему без max выдаетошибку?
338 ЧеловекДуши
 
27.12.12
12:36
(337)Познай для себя программу "Query Analyzer" - помогает
339 bananan
 
27.12.12
12:40
(338) Программа бесплатная? А то на этой фиирме только лицензионное по
340 ЧеловекДуши
 
27.12.12
12:41
(339)Оно в составе сервера :)
341 Botanik8888
 
27.12.12
12:41
(339) Вы это серьезно?
342 ЧеловекДуши
 
27.12.12
12:41
+ SQL сервера
343 Ёпрст
 
27.12.12
12:47
(337) потому, что гроуп бай
344 Ёпрст
 
27.12.12
12:49
и тебе как бэ, скуль дословно ответил:

Column '???.SP115' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
345 bananan
 
27.12.12
14:11
Прдон еще один (елементарный вопрос) могу я в ячейке таблицы выдать текст в котором к нему прибавлется значение переменной (в данном случае Всего ящиков за заданный период с НачДата по КонДата)?
346 Ёпрст
 
27.12.12
14:22
можешь
347 bananan
 
27.12.12
14:23
(346) Как? Выражение, шаблон. фиксированный шаблон?
348 Ёпрст
 
27.12.12
14:24
свойства ячейки - Шаблон

в формулу:
Всего ящиков за [ПериодСтр(НачДата,КонДата)]  [ВсегоЯщиков]
349 bananan
 
27.12.12
14:24
+(347) Может там какой то синтксис которого я не знаю?
350 bananan
 
27.12.12
14:25
(348) Спасибо - дело в синтаксисе
351 bananan
 
27.12.12
15:18
Все-таки еще один вопрос (на этот раз думаю, что последний)
Если в данном запросе не показывать каждвй товар иего количество
, то ону бдет работать быстрее?
Сейчас я сделал тупо когда установлен флажок Подробно - строка Строка (ТМЦ, количество) - показывается, когда флаг не установлен, то эта строка не показывается.
А может еще и запрос поменять? Если да, то как?
352 Ёпрст
 
27.12.12
15:19
(351) свёрнуто чтоб по документам было ?
353 Ёпрст
 
27.12.12
15:20
выкидываешь из селекта
,$ДокС.ТМЦ as [Товар $Справочник.ТМЦ]

и из гроуп бай тоже
и привет
354 bananan
 
27.12.12
15:45
(353) Спасибо. сейчас попробую. А так запрос будет быстрее работать или это там какая милисекунда?
Например подробно за прошлый месяц он у меня работет 2.5 минуты
355 Ёпрст
 
27.12.12
16:14
(354) можно еще улучшить, если присоединение журнала делать на каждый документ отдельно в подзапросе с юнионами.
356 bananan
 
27.12.12
16:44
(355) Ну, пока и так работает моего опыта и знаний на это пока не хватает. А (355) это для подробнорго отчета или нет или для обоих?
357 Ёпрст
 
27.12.12
16:47
для обоих
358 Ёпрст
 
27.12.12
16:50
2.5 минуты.. это слишком долго.
Где-то еще есть обращение к серваку, надеюсь, в результате запроса дату свою и другие атрибуты документа не получаешь как

ТЗ.Док.ДатаДок ?
359 bananan
 
27.12.12
16:51
(357) Так и думал. попробую сам, а не получитьсчя - обращусь  к тебе
360 bananan
 
27.12.12
16:52
(359) ТЗ.Док обращаюсь просто так
361 Ёпрст
 
27.12.12
16:52
меня до 7-го не будет ужо.. через 8 минут
362 bananan
 
27.12.12
16:53
(361) Тми за 8 минут сможешь такой запрос написать?
363 Ёпрст
 
27.12.12
16:58
ТекстЗапроса="
|select        
|   Таб.Документ as [Док $Документ]
|   ,Таб.iddocdef as [Док_вид $ВидДокумента]
|   ,Таб.Товар as [Товар $Справочник.ТМЦ]
|   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
|from
|    (
|      select
|        $ДокС.ТМЦ as Товар
|        ,Жур.iddocdef
|        ,ДокС.iddoc as Документ
|        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
|      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|      inner join _1sjourn as Жур (nolock) on Жур.IDDoc = ДокС.iddoc
|      and Жур.iddocdef  = $ВидДокумента.РасходнаяНакладная
|      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
|      and Жур.Closed&1 = 1
|    
|      union all
|
|      select
|        $ДокН.ТМЦ
|        ,Жур2.iddocdef
|        ,ДокН.iddoc
|        ,$ДокН.Кво*$ДокН.Коэффициент
|      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
|      inner join _1sjourn as Жур2 (nolock) on Жур2.IDDoc = ДокН.iddoc
|      and Жур2.iddocdef  = $ВидДокумента.РасходнаяНакладнаяН
|      and Жур2.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
|      and Жур2.Closed&1 = 1
|    )as Таб
|
|left join (
|             select  
|                   max($Спр.Коэффициент) as Коэффициент
|                    ,Спр.parentext as Владелец
|             from $Справочник.Единицы as Спр (nolock)
|             where $Спр.Ед =:ВыбЕдиница
|                   and $Спр.Коэффициент>0
|                   and Спр.ismark=0
|             group by Спр.parentext
|           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
|
|group by
|    Таб.Документ,Таб.iddocdef,Таб.Товар
|";
Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
..................
364 bananan
 
27.12.12
17:01
(363) ОГромное спасибо!
365 bananan
 
27.12.12
17:38
(363) Прочитаешь уже в следующем году. Но второй вариант, который по твоим словам должен был бы работать быстрее работал на 24 секунды дольше, чем прыдидущий
366 Botanik8888
 
27.12.12
17:42
А ты его несколько раз запусти
367 bananan
 
27.12.12
18:09
(366) А что єто даст?
368 bananan
 
27.12.12
18:11
ПОнятно, что львиную долю времени занимает вывод рещультатов запроса, а не сам запрос. Т.е. если улучшений вариант и давал какую-то экономию то это милисекунды или того меньше
369 Botanik8888
 
27.12.12
19:27
1. Вы замер сделайте именно на выполнение запроса.
2. Если правильно составлен запрос то вывод данных на печать не будет занимать "львиной доли" (если не тысячи строк выводятся на печать)
3. К (366) - Понятие план запроса вам знакомо?
370 ADirks
 
27.12.12
19:33
(369) это как интересно запрос влияет на время формирования печатной формы? вроде, не связанные процессы
371 bananan
 
27.12.12
20:01
(370) Резк\ультаты работы запроса выводяться на экран или как?
372 Botanik8888
 
27.12.12
20:26
(370) - может я неверно выразился, имелось ввиду что
если запросом получает все необходимые данные и нет необходимости их дальше преобразовывать, то на печать должно вывестись очень быстро.
Именно потому что они ну совсем не связанные процессы...
373 Botanik8888
 
27.12.12
20:27
" то на печать должно вывестись очень быстро. " - читать как формирование печатной формы не должно занять много времени.
374 bananan
 
28.12.12
11:39
Сейчас внес дополнения в код и буду знать: общее время работы скрипта, время выполнения запроса, время вывода на экран - Вот и увидем реальные цифры.
+  О выводе на экран, толи у меня видеокарта медленная, то ли ввобще комп, но именно вывод на экран занимает очень много времени.
P.S. Когда я "приукрасил" немного таблицу (разные цвета для шапки, ну шапка - фыгня, а вот для ТМЦ и совсем другой цвет для суммыящиков по документу (а документов скрипт обрабатывает ну очень много) - время работы скрипта увеличилось вдове!
375 ADirks
 
28.12.12
11:41
(374) Ты случайно объединений ячеек не добавил при приукрашательстве? Вдвое - подозрительно много.
376 bananan
 
28.12.12
11:42
Результаты работы улучшенной версий скрипт работал 13мин 49сек
Запрос работал: 7 секунд
377 bananan
 
28.12.12
11:43
(375) Добавлял
378 ADirks
 
28.12.12
11:45
ну так убери нафиг
это тормоза, потери памяти, и потециально глюки при отображении
379 bananan
 
28.12.12
11:46
(378) Не знал. Спасибо. Уберу
380 ADirks
 
28.12.12
11:48
по поводу скорости формирования mxl: http://www.rikcenter.ru/download/TestVivoda.zip

кратко: не выводить агрегатных данных, особенно в расшифровки - это основные тормоза. Ещё прикольно использовать подготовленные секции, но это уже следующим шагом.
381 bananan
 
28.12.12
12:07
Простой (первый неоптимизированний вариант скртипта): Общее время работы 13 минут 47 секунд (на 2 секунды меньше от оптимизированного).
Запрос в этой первой версии работал 3секунды - против 7 секунд в оптимизированной версии!
382 bananan
 
28.12.12
12:31
(380) Что за линк там в архиве файлы дбф, один вв файл и один мд файл к 1С. Что с ними делать и что они дают?
383 ADirks
 
28.12.12
12:33
(382) это тестовая конфа, в которой сравниваются разные методы вывода в mxl
384 bananan
 
28.12.12
12:46
(383) Понял, а, не в курсе где обо всем этом можно почитать (скорость формирования)?
385 ADirks
 
28.12.12
12:50
Ну ты посмотри там в код - всё примитивно. Это проще, чем русским языком объяснять. Помнится, этот тест мы сделали в ходе обсуждения на 1С++ форуме - можешь там поискать.
386 bananan
 
28.12.12
13:40
(385) Спасибо
387 bananan
 
28.12.12
14:19
Ребята! еще подскажите как мне из 1С в T-SQL "перевести"
Условие (ТМЦ в выбТМЦ)
?
WHERE ТМЦ in выбТМЦ
полный текст запроса :
|select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
388 bananan
 
28.12.12
14:21
+(387) И где это поставить в тексте запроса?
389 bananan
 
28.12.12
14:25
(387, 388) выбТМЦ у меня на форме отчета окно для выбора тмц
390 Mikeware
 
28.12.12
14:26
(388) а документацию будет читать пушкин? или тарас шевченко?
391 bananan
 
28.12.12
14:28
(389) Т.е. как этот параметр передать в запрос?
(390) Да я буду читать, но сейчас когда запрос уже готов и рабоатет надо доставить только этот выбор ТМЦ
392 bananan
 
28.12.12
14:30
Конечно у меня еще совсем нет опыта, сделал так:
  ТекстЗапроса = "                            
       |select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар
       | HAVING Товар in :выбТМЦ"
Дак ругается:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 43: Incorrect syntax near ''.
393 bananan
 
28.12.12
14:35
+(391) Параметр в запрос передаю так:
Запр.УстановитьТекстовыйПараметр("выбТМЦ", выбТМЦ);Запр.УстановитьТекстовыйПараметр("выбТМЦ", выбТМЦ);
394 bananan
 
28.12.12
14:37
Кто-нибудь ПОМОГИТЕ пожалуйста!!!!!!!!!!!!!!!!!!11
395 monsterZE
 
28.12.12
14:44
Отбор по списку или группе
Для таких случаев у объекта ODBCRecordset есть метод
УложитьСписокОбъектов(Список, Таблица, ВидСправочника) и
УложитьСписокОбъектов13(Список, Таблица)
Список – это список или группа. После  выполнения этого метода появляется таблица с именем Таблица и колонками Val, IsFolder
Однако не стоит злоупотреблять этим методом. Анализируя производительность можно увидеть, что этот метод на группах работает медленно и это совершенно очевидно, т.к. группа может содержать огромное число элементов, которые надо переписать во временную таблицу. ГОРАЗДО эффективней получить список подгрупп входящих в выбранную группу и делать условие по принадлежности к родителю, а не по ID

Пример: Выберем все документы реализации, у которых склад входит в выбранную группу

ТекстЗапроса = "
|SELECT
|    Док.IDDoc as [Док $Документ.Реализация]
|FROM
|    $Документ.Реализация as Док
|WHERE
|    $Док.Склад IN (SELECT Val FROM #Группа)";
RS.УложитьСписокОбъектов(ВыбГруппа, "#Группа", "Склады");

Замечание: Рекомендуется использовать локальные временные таблицы – префикс #. В этом случае не нужно заботиться об уникальности имени таблицы для разных пользователей, а также об их последующем удалении.
В ДБФ версии драйвер сам создает такие таблицы и сам же генерирует им имя.
Можно сделать универсальный способ получения имени таблицы, работающий как в ДБФ, так и в СКЛ:
   ИмяТаблицы="#Группа ";
   Запрос.УложитьСписокОбъектов(СписокРодителей,ИмяТаблицы);
   ТекстЗапроса=" (SELECT Val FROM "+ИмяТаблицы+")";
В случае СКЛ запрос выполнится из таблицы "#Группа", а в случае ДБФ система сгенерит имя и вернет ее в переменную ИмяТаблицы. В случае ДБФ имя временной таблицы выглядит так ‘f6d3b234a56c765f52da’ что, конечно не очень красиво для текста запроса(особенно если его еще и разбирать на ошибки нужно или на дополнения). Можно сделать запрос более красивым и универсальным: для этого воспользуемся методом УстановитьТекстовыйПараметр()
396 bananan
 
28.12.12
14:46
(395) Спасибо, попробую разобраться
397 monsterZE
 
28.12.12
14:46
скачай уже мануал к 1с++ там все, что надо хорошо расписано и с примерами - "MSSQL при помощи ВК 1С.doc"
или кинь мыло в асю или личку - отправлю
398 bananan
 
28.12.12
14:47
(397) Сча кину мыло
399 bananan
 
28.12.12
14:48
А как кинуть в личку?
400 bananan
 
28.12.12
14:49
+399 Аська у меня здесь пока не установлена :(
401 monsterZE
 
28.12.12
14:52
вот порвая ссылка в яндексе =)
Книга знаний: Эффективное использование MSSQL с помощью ВК 1C++
--
или адрес своего мыла тут напиши
402 bananan
 
28.12.12
14:54
403 bananan
 
28.12.12
15:33
Помогите совсем неопытному...
|WHERE
|    $Док.Склад IN (SELECT Val FROM #Группа)";
RS.УложитьСписокОбъектов(ВыбГруппа, "#Группа", "Склады");
но у меня в запросе по поводу ТМЦ нет WHERE
404 bananan
 
28.12.12
15:34
+(403) Полный текст запроса см. в (387)
405 monsterZE
 
28.12.12
15:42
(403) так добавь..? =)
а лучше, наврное, добавить в твои подзапросы..
406 bananan
 
28.12.12
15:45
Написал так:
  ТекстЗапроса = "                            
       |select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар
       | HAVING Таб.Товар IN (SELECT Val From #Группа)";
. . .
Запр=СоздатьОбъект("ODBCRecordset");
   Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
   Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
   Запр.УложитьСписокОбъектов13(выбТМЦ, "#Группа");
   Нач3=ТекущееВремя();                        
   ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
Так он, запрос, ничего не находит. Понимаю ошибка в SQL (HAVING Таб.Товар IN (SELECT Val From #Группа)";)
А как иначе мне указать SQL что интересуют ТМЦ или Группы ТМЦ выбранная пользователем в окне выбора?
407 bananan
 
28.12.12
15:47
(405) Так WHERE Таб.Товар = #Группа И где именно в тексте запроса это добавить?
408 monsterZE
 
28.12.12
15:53
|from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
where Таб.Товар IN (SELECT Val From #Группа)
       |    
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
where Таб.Товар IN (SELECT Val From #Группа)
       |    )as Таб
409 monsterZE
 
28.12.12
15:58
тока ессно никаких таб.товар, а  $ДокС.ТМЦ IN (SELECT Val From #Группа)
410 bananan
 
28.12.12
15:59
Зделал так:
   |select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | WHERE Таб.Товар IN (SELECT VAL FROM #Группа)
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
Выдает:
The column prefix 'Таб' does not match with a table name or alias name used in the query
:(
411 monsterZE
 
28.12.12
16:00
(409) =) жош
412 bananan
 
28.12.12
16:01
(411) Написал так:
| WHERE $ДокН.Товар IN (SELECT VAL FROM #Группа)
Выдает:
{\\SERVER12\VPKTEST$\EXTFORMS\ПРОДАЖА В ЯЩИКАХ 2.ERT(110)}: Meta name parser error: поле таблицы не найдено "$ДокС.Товар"
413 monsterZE
 
28.12.12
16:02
(412) =) ты издеваешься?
414 monsterZE
 
28.12.12
16:03
у тебя в документе в табличной части какое поле? вот его и подставляй.
415 bananan
 
28.12.12
16:03
+(412) когда написал так:
| WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)
То запрос ничего не находит! :(:(
416 bananan
 
28.12.12
16:07
Можете вере не там надо ставить?
Подный текст запроса:
ТекстЗапроса = "                            
       |select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       | WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
417 monsterZE
 
28.12.12
16:08
Запрос.УложитьСписокОбъектов(ВыбТовар, "#Группа","Товары");
418 monsterZE
 
28.12.12
16:13
ВыбТовар элемент формы справочник.товары
419 bananan
 
28.12.12
16:13
Выдает: Запр.УложитьСписокОбъектов(ВыбТМЦ, "#Группа","Товары");
{\\SERVER12\VPKTEST$\EXTFORMS\ПРОДАЖА В ЯЩИКАХ 2.ERT(108)}: Недопустимое значение третьего аргумента метода!
420 monsterZE
 
28.12.12
16:14
и ты из своего суперзапроса, сделай сначала чтобы маленькие запросы работали.. просто отбери товар по группе с реквизита формы
421 bananan
 
28.12.12
16:15
Все написал так  - работает
а написал так:Запр.УложитьСписокОбъектов(ВыбТМЦ, "#Группа","ТМЦ");
422 monsterZE
 
28.12.12
16:16
@#$ я х^ею =) у тебя справочник не Товары видимо называется...
я же кусок даже из мануала запостил.
423 monsterZE
 
28.12.12
16:16
(421) неможетбыть =)
424 bananan
 
28.12.12
16:28
(423) Сам не верю :
425 bananan
 
28.12.12
16:28
(423) Спасибо!
426 bananan
 
03.01.13
15:55
Всем огромное спасибо за помощь и подсказки! Запрос таки работает, но возникла такая проблема. Если в списке ТМЦ не ничего не выбрать - то и запрос ничего не вернет, хотя за данный период продажи и были... :(
чтобы освежить тему показываю весь текст запроса:
|select        
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
       |   ,Таб.Товар as [Товар $Справочник.ТМЦ]
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       | WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)
       |    )as Таб
       |
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by
       |    Жур.iddoc,Жур.iddocdef,Таб.Товар"
427 bananan
 
03.01.13
15:58
+(426) Насколько я понимаю вся "загвоздака" здесь:
WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)
т.е. если ТМЦ из текущего документа не выбрано в списке - то оно и пропускается...
Но как здесь быть НЕ ЗНАЮ. подскажите
428 bananan
 
03.01.13
16:03
+(426, 427) Но. если убрать WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа), то, естественно не будут выбираться товары выбранные пользовтелем в списке...
429 Mikeware
 
03.01.13
16:05
(428) тебя еще не убили?
430 bananan
 
03.01.13
16:06
+ Если не с помощью запроса, то текст запроса надо формировать в зависимости от отого есть ли выбранные ТМЦ, а через SQL это никак нельзя сделать?
431 bananan
 
03.01.13
16:06
(429) Как видиш
432 bananan
 
03.01.13
16:08
(429) Может ты чего подскажешь?
433 bananan
 
03.01.13
16:17
+ К тому же, если не делать WHERE по выбраным ТМЦ, то по чему их делать?
434 bananan
 
03.01.13
16:24
+(433) Тоесть если нет выбраных ТМЦ в списке выбора - WHERE совсем опустить?
435 bananan
 
03.01.13
16:38
что-то все сегодня спят?
Предыдущие вопросы - решены мною, но как програмно определить выбрал ли что0либо пользователь в окне выбора?
436 Mikeware
 
03.01.13
16:43
(431) а жаль.... пора бы... за нечитание документации
437 Mikeware
 
03.01.13
16:45
(434) формируй текст запроса динамически.
438 bananan
 
03.01.13
16:47
(437) Тоесть если
Если ВыбТМЦ.РазмерСписка()<0 Тогда
       //запрос без ВЕРЫ
ИНАЧЕ
               // Запрос с WHERE
КонецЕсли;
ТАк?
439 bananan
 
03.01.13
16:47
(438) меньше 1
440 Mikeware
 
03.01.13
16:53
(438)
Если ... тогда
ТекстЗапроса+="where всякая_херня";
конецЕсли
441 bananan
 
03.01.13
16:59
(440)З Не понял что ты имел в виду, но сделал как в (438) - работает и работает так как надо
442 monsterZE
 
03.01.13
17:50
(441) он имел ввиду, что текст запроса можно собирать по условиям, динамически. подозреваю, что ты скопировал весь текст запроса два раза =) с верой и без..
а можно обойтись одной строчкой
443 Mikeware
 
03.01.13
17:51
(442) "не поможет..."©
444 bananan
 
03.01.13
19:06
(442)-(443) Теперь скрипт у меня такой (код полностью даю):
//*******************************************
Процедура ПриОткрытии()
   НачДата = НачМесяца(ПолучитьДатуТА())+19;
   КонДата = ПолучитьДатуТА();
   Подробно=1;
КонецПроцедуры

               
Процедура Подч()  
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("НоваяТаблица");
   
   ТекстЗапроса = "
       |select    
       |   Жур.iddoc as [Док $Документ]
       |   ,Жур.iddocdef as [Док_вид $ВидДокумента]";
   Если Подробно=1 тогда
       ТекстЗапроса = ТекстЗапроса + "   ,Таб.Товар as [Товар $Справочник.ТМЦ]";
   КонецЕсли;                                                                    
   ТекстЗапроса = ТекстЗапроса + "
       |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
       |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
       |from
       |    (
       |      select
       |        $ДокС.ТМЦ as Товар
       |        ,ДокС.iddoc as Документ
       |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)";
   Если ВыбТМЦ.РазмерСписка()>0 ТОГДА
       ТекстЗапроса = ТекстЗапроса + "| WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)";
   КонецЕсли;
   ТекстЗапроса = ТекстЗапроса + "
       |      union all
       |
       |      select
       |        $ДокН.ТМЦ
       |        ,ДокН.iddoc
       |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)";
   Если ВыбТМЦ.РазмерСписка()>0 ТОГДА
           ТекстЗапроса = ТекстЗапроса + "| WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)";
   КонецЕсли;
   ТекстЗапроса = ТекстЗапроса + "
       |    )as Таб
       |inner join
       |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
       |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
       |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
       |      and Жур.Closed&1 = 1
       |left join (
       |             select  
       |                   max($Спр.Коэффициент) as Коэффициент
       |                    ,Спр.parentext as Владелец
       |             from $Справочник.ЕдИзм as Спр (nolock)
       |             where $Спр.Ед =:ВыбЕдиница
       |                   and $Спр.Коэффициент>0
       |                   and Спр.ismark=0
       |             group by Спр.parentext
       |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |
       |group by ";
   Если Подробно=1 тогда
       ТекстЗапроса = ТекстЗапроса + " Жур.iddoc,Жур.iddocdef,Таб.Товар";    
   ИНАЧЕ
       ТекстЗапроса = ТекстЗапроса + " Жур.iddoc,Жур.iddocdef";
   КонецЕсли;                                                                    
   

   Запр=СоздатьОбъект("ODBCRecordset");
   Запр.Отладка();
   Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
   Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
   Запр.УложитьСписокОбъектов(ВыбТМЦ, "#Группа","ТМЦ");;                        
   ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
   Кон2=ТекущееВремя();
   Таб.ВывестиСекцию("Шапка");
   ТЗ.ВыбратьСтроки();                          

   ПечДок="";
   ТЗ.ВыбратьСтроки();      
   ДокЯщ = 0;
   Итог=0;          
   ВыведеноСтрокВДокументе=0;
   Пока ТЗ.ПолучитьСтроку()=1 Цикл
         Если ПечДок<>ТЗ.Док Тогда
            Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
            ПечДок = ТЗ.Док;
            Таб.ВывестиСекцию("Документ");
            ДокЯщ = 0;
           
            ВыведеноСтрокВДокументе=0;  

        КонецЕсли;  
            ВыведеноСтрокВДокументе=ВыведеноСтрокВДокументе+1;  
            ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
            Итог= Итог + ДокЯщ;

     Если Подробно=1 тогда
         Таб.ВывестиСекцию("Строка");
     КонецЕсли
   КонецЦикла;  
            Если 0<ВыведеноСтрокВДокументе Тогда
                Таб.ВывестиСекцию("ПодвалДок");
            КонецЕсли;
   

   Таб.ВывестиСекцию("Итог");
     
   Кон=ТекущееВремя();
   
   Таб.Опции(0,0,Таб.ВысотаСекции("Шапка"),0);
   Таб.ТолькоПросмотр(1);
   Таб.Защита(0);
   Таб.Показать("Расход","");
КонецПроцедуры
// ===============================
Процедура ВыбратьТМЦ(Реж)
   Перем Фрм;
   Перем Тек;
   Если ВыбТМЦ.РазмерСписка()>0 Тогда
       Тек=ВыбТМЦ.ПолучитьЗначение(ВыбТМЦ.ТекущаяСтрока());
   КонецЕсли;
   ОткрытьПодбор("Справочник.ТМЦ",,Фрм,Реж,Тек);
   Фрм.ВыборГруппы(1);
КонецПроцедуры

// ===============================
Процедура ОбработкаПодбора(Выб)
   ВыбТМЦ.ДобавитьЗначение(Выб);
   ВыбТМЦ.ТекущаяСтрока(ВыбТМЦ.РазмерСписка());
КонецПроцедуры
445 Mikeware
 
03.01.13
19:55
(444) подробно не смотрел, но на первый взгляд потянет...
хотя в школу бы, в 10 класс не помешало бы вернуться...
446 wsxedc83
 
03.01.13
21:43
Прочитал тему - жесть.
447 chelentano
 
04.01.13
09:51
(435) "Предыдущие вопросы - решены мною" - ага, тобою, точно
448 Mikeware
 
04.01.13
10:06
(447)
В село по разбитой дороге вьезжает телега, загруженная углем, в которую запряжена старая тощая кляча...
в телеге на горе угля сидит мужичок...
и радостно кричит:
- Люди!!! Я вам уголь привез!!!
Кляча устало оборачивается:
- Ага, бл.., ТЫ привез...
©
449 trad
 
04.01.13
11:11
(444)такое динамическое построение текста выглядит понятнее. Не так ли?

   ТекстЗапроса = "
   |select    
   |   Жур.iddoc as [Док $Документ]
   |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
   |    /*ПолеТовар*/
   |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
   |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
   |from
   |    (
   |      select
   |        $ДокС.ТМЦ as Товар
   |        ,ДокС.iddoc as Документ
   |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
   |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
   |      /*Условие1*/
   |      union all
   |
   |      select
   |        $ДокН.ТМЦ
   |        ,ДокН.iddoc
   |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
   |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
   |      /*Условие2*/
   |    )as Таб
   |
   |inner join
   |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
   |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
   |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~
   |      and Жур.Closed&1 = 1
   |left join (
   |             select  
   |                   max($Спр.Коэффициент) as Коэффициент
   |                    ,Спр.parentext as Владелец
   |             from $Справочник.ЕдИзм as Спр (nolock)
   |             where $Спр.Ед =:ВыбЕдиница
   |                   and $Спр.Коэффициент>0
   |                   and Спр.ismark=0
   |             group by Спр.parentext
   |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
   |group by Жур.iddoc, Жур.iddocdef /*ГруппТовар*/
   |";
   Если Подробно=1 Тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ПолеТовар*/", ",Таб.Товар as [Товар $Справочник.ТМЦ]");
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ГруппТовар*/", ",Таб.Товар");
   КонецЕсли;
   Если ВыбТМЦ.РазмерСписка()>0 Тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие1*/", "WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)");
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие2*/", "WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)");
   КонецЕсли;
450 bananan
 
04.01.13
16:34
(449) Спасибо за совет/подсказку - я просто не знал что так можно...
Основная теорема систематики: Новые системы плодят новые проблемы.