|
Как научиться писать красивый и короткий код 1с? | ☑ | ||
---|---|---|---|---|
0
sintez1234
24.10.14
✎
12:10
|
Приведу пример. Нужно по каким-то правилам перегнать данные из одной таблицы значений в другую, когда просто выгрузить не получится, и при этом надо пронумеровать строки по порядку.
Обычное решение, как делают почти все: Счетчик = 0; Для Каждого Строка Из ТЗ Цикл Счетчик = Счетчик + 1; НоваяСтрока = Реестр.Добавить(); НоваяСтрока.Номер = Счетчик; Более красивое решение (при условии что сортировки нет): Для Каждого Строка Из ТЗ Цикл НоваяСтрока = Реестр.Добавить(); НоваяСтрока.Номер = Реестр.Количество(); Я когда нахожу более красивые/короткие решения в чужом коде, то стараюсь их запоминать. И вот как-то хочется писать максимально коротко, как и где этому учиться непонятно :) А вообще было бы интересно посмотреть на похожие "укороченные" решения. |
|||
1
sintez1234
24.10.14
✎
12:10
|
Название не удачно написал. Имелось ввиду "как учиться самому", а не учить других :)
|
|||
2
Галахад
гуру
24.10.14
✎
12:11
|
Зато первый быстрее.
|
|||
3
Fish
24.10.14
✎
12:12
|
(2) +100. Максимально коротко - не всегда максимально хорошо :)
|
|||
4
Dionis Sergeevich
24.10.14
✎
12:14
|
Реестр = ТЗ.Скопировать();
Для каждого Строка из Реестр Цикл ... |
|||
5
H A D G E H O G s
24.10.14
✎
12:15
|
(0) Кусок копрокода.
|
|||
6
H A D G E H O G s
24.10.14
✎
12:16
|
ТЗ -> ТаблицаПараметровУчета
Строка -> СтрокаТаблицыПараметровУчета |
|||
7
Chameleon1980
24.10.14
✎
12:16
|
новаястрока не пугает?
|
|||
8
H A D G E H O G s
24.10.14
✎
12:18
|
Реестр.Количество();
Не проводил исследований, хранит ли ТЗ в своем объекте КоличествоСтрок или считает динамически, поэтому сделал бы через счетчик. А ты проводил исследования? |
|||
9
Chameleon1980
24.10.14
✎
12:18
|
мож че не понял я
|
|||
10
H A D G E H O G s
24.10.14
✎
12:18
|
(7) НоваяСтрока-> НоваяСтрокаТаблицыРеестра
|
|||
11
Wirtuozzz
24.10.14
✎
12:18
|
это искусство, это само приходит. Со временем, посмотри попробуй как пишут 1с програмисты конфигурации, мне помогало. Они иногда очень дельно пишут и хитро, не сразу разберешься.
|
|||
12
DS
24.10.14
✎
12:18
|
(0) Никогда бы не делал как во втором фрагменте.
|
|||
13
Chameleon1980
24.10.14
✎
12:20
|
(10) кого? реестр?
|
|||
14
Chameleon1980
24.10.14
✎
12:21
|
я так понял про тз.
|
|||
15
vlandev
24.10.14
✎
12:21
|
Если код писать на английском - то буков должно быть поменьше , код будет покороче.
|
|||
16
Chameleon1980
24.10.14
✎
12:21
|
колонку и сорт, че не так-то? не вкурил
|
|||
17
Надо работать
24.10.14
✎
12:22
|
(0) Номер этот наверняка не нужен вообще )
|
|||
18
Злобный монстр
24.10.14
✎
12:22
|
(12) +1
|
|||
19
Надо работать
24.10.14
✎
12:23
|
(15) если бы типовые были на английском - тогда да, иначе фигня выйдет, твой код на английском, типовые переменные и методы - на русском
|
|||
20
Трик
24.10.14
✎
12:23
|
(0) Ты не поверишь, но такой код
Для каждого бла-бла-бла Новстрока.Реквизит = Объект.Реквизит1.Реквизит2.Реквизит3; Конец Цикла; Тоже короче чем Реквизит = Объект.Реквизит1.Реквизит2.Реквзиит3; Для каждого бла-бла-бла Новстрока.Реквизит = Реквизит Конец Цикла; Однако... |
|||
21
Chameleon1980
24.10.14
✎
12:24
|
а шустрее ли?
|
|||
22
Dionis Sergeevich
24.10.14
✎
12:25
|
(0) Объясните, мил человек, зачем Вам собственно счетчик в таблице значений? который у вас хранится в параметре "Номер"? Там же индекс строки есть
|
|||
23
Dionis Sergeevich
24.10.14
✎
12:26
|
Я бы скопировал ТЗ и обошел бы ее строки, обработав как необходимо. Причем копирование позволяет скопировать только часть таблицы (например необходимые колонки)
|
|||
24
Злобный монстр
24.10.14
✎
12:26
|
(12)(18) + В цикле вообще нужно обходится без вызова ненужных функций. Сколько она будет количество считать если там 100500 миллионов строк будет.
|
|||
25
Злобный монстр
24.10.14
✎
12:27
|
(22) Это кстати первое что в голову пришло.
|
|||
26
Fish
24.10.14
✎
12:27
|
(22) Не все, стремящиеся писать короткий код (толком не понимая зачем), слышали про индексы :)
|
|||
27
IVT_2009
24.10.14
✎
12:27
|
(22) потом скорей всего что то сортировать или сворачивать будет и не хочет оригинальную последовательность потерять.
|
|||
28
necro
24.10.14
✎
12:29
|
Не стоит писать хрень и гнаться за программистами на настоящих языках, которые пишут
i+=i++ + ++i=i; выглядит забавно, но не понятно. Никогда не нужно ориентироваться на экспрессию, нужно думать о понятности кода и его поддержке. Лучше добавить переменную, если так выглядит понятнее. |
|||
29
Лодырь
24.10.14
✎
12:29
|
(27) Если будет сворачивать - очень интересно как не потеряет "оригинальную последовательность"
|
|||
30
Dionis Sergeevich
24.10.14
✎
12:30
|
(0) Автор напиши функцию в одну строку которая получает число а возвращает его факториал =) Вот тебе красивый и коротккий код)
|
|||
31
Трик
24.10.14
✎
12:31
|
(28)Вот вот не драйвера чай пишем.
|
|||
32
Dionis Sergeevich
24.10.14
✎
12:31
|
(27) Так он нумерует последовательно - у него всегда Номер = Индекс +1
|
|||
33
Злобный монстр
24.10.14
✎
12:32
|
(28) согласен, а то ужмут 10 условий через вопросы в одну строку. Потом полчаса распутвай пытаясь понять че хотели
|
|||
34
mzelensky
24.10.14
✎
12:32
|
(0) вроде уже и так все сказали, но добавлю от себя.
Автор используя "Реестр.Количество();" полагается на то ,что счетчик количества строк хранится в классе объекта. Но ведь нигде это не документированно. Вполне вероятно ,что там аналогичное обычному циклу обновление. И в этом случае код №1 явно будет выигрывать. Оптимизация понятие относительно весьма. Так что + 100500 за то, что "короче" не всегда равняется "лучше" |
|||
35
Лодырь
24.10.14
✎
12:32
|
(28) +1
Убить иногда хочется людей экономящих на описании того, что они вообще делают в коде. А тем более использующих многоэтажные конструкции непонятно зачем. |
|||
36
Chameleon1980
24.10.14
✎
12:36
|
(30) рекурсия катит?
|
|||
37
Трик
24.10.14
✎
12:38
|
Надо проверить замером производительности.
|
|||
38
Chameleon1980
24.10.14
✎
12:38
|
опять миськами периимся
|
|||
39
NS
24.10.14
✎
12:41
|
(0) Нормальный программист всегда напишет первый вариант.
Второй - откровенный копрокод. |
|||
40
Dionis Sergeevich
24.10.14
✎
12:44
|
(36) Да. Без нее ни как)
|
|||
41
Тюря
24.10.14
✎
12:46
|
Думаю главное не красота, а скорость работы кода.
Чаще чем короче тем тормозней ))) |
|||
42
Chameleon1980
24.10.14
✎
12:46
|
(40) а где пробл? 1 строчка возврат при ?
|
|||
43
Dionis Sergeevich
24.10.14
✎
12:47
|
а в чем красота? Красота в удобочитаемости, в последовательности и логичности)
(42) У меня нет проблем) Это автору - пример красивого кода) |
|||
44
Dionis Sergeevich
24.10.14
✎
12:48
|
(42) да, возврат при 0, значение умножаем на рекурсию со значением - 1)
|
|||
45
sintez1234
24.10.14
✎
12:52
|
(8) Это в форме делается код, строк штук пять обычно, так что в данном случае производительность значения не имеет. Хотя в других случаях, где имеет, я бы тоже предпочел счетчик сделать.
|
|||
46
supremum
24.10.14
✎
12:53
|
(45) В один прекрасный момент их будет несколько тысяч. Лучше сразу делать нормально и не спотыкаться на ровном месте.
|
|||
47
mikecool
24.10.14
✎
12:55
|
(45) пользуйся замером производительности, вопросов будет меньше
|
|||
48
Exec
24.10.14
✎
12:58
|
имхо, лучший способ: http://i.imgur.com/sUysGgf.jpg
|
|||
49
Escander
24.10.14
✎
13:01
|
(0) оптимизация по объёму исходного кода - хучший вариант оптимизации
|
|||
50
МихаилМ
24.10.14
✎
13:05
|
(0)
отдельно заполнить массив и загрузить в колонку. |
|||
51
Chameleon1980
24.10.14
✎
13:09
|
(*49) неа
|
|||
52
Злобный монстр
24.10.14
✎
13:15
|
(48) Что это? О_О
|
|||
53
palpetrovich
24.10.14
✎
13:21
|
(52) выпрямление пальцев :)
|
|||
54
Chameleon1980
24.10.14
✎
13:23
|
аяаяй. точно
|
|||
55
Злобный монстр
24.10.14
✎
13:47
|
(53) А я подумал школа индусских программеров! :-)
|
|||
56
Анцеранана
24.10.14
✎
14:05
|
Если РольДоступна("Хирург") Тогда
Флажок.Видимость = Ложь; Иначе Флажок.Видимость = Истина; КонецЕсли; Флажок.Видимость = НЕ РольДоступна("Хирург"); (0) это что ли имется ввиду? У меня таких примеров немало. А у Гилёва даже есть спецкурс на тему оптимизации. |
|||
57
GROOVY
24.10.14
✎
14:08
|
(56) Это не оптимизация, а просто здравый смысл.
|
|||
58
Злобный монстр
24.10.14
✎
14:13
|
(56)(57) В этом случае да. Но когда вместо описанного комментариями нормального ветвления через несколько Если Тогда, заменяют на мегастроку с кучей ИЛИ И и ?(,,) тут плеваться охота...
|
|||
59
AROM
24.10.14
✎
14:18
|
Первый код логичнее и проще, следовательно лучше. Второй красивее, но некоторые и из каждой процедуры другую вызывают и считают себя крутыми программистами, когда можно все поместить в одной
|
|||
60
sintez1234
24.10.14
✎
14:25
|
(56) да, примерно это. Часто пишешь и просто не думаешь что это можно укоротить.
|
|||
61
sintez1234
24.10.14
✎
14:26
|
(59) во не! Я как раз не люблю когда в одной процедуре 150 страниц кода. Я сам вообще страюсь чтобы процедура влазила в экран :) Если не влазит, то дроблю на 2 процедуры уже. Народу это нравится, что код понятный и читабельный стает.
|
|||
62
Domovoi
24.10.14
✎
14:28
|
(0)Главное для проегра 1с за сколько времени он исправляет ошибки. Второй вариант быстрее вкурится и исправится чем первый и вероятность ошибок во втором коде меньше. Конечно в крайности бросаться не стоит и там где прога тормозит надо писать оптимально по производительности.
|
|||
63
Fish
24.10.14
✎
14:32
|
(61) А если текст запроса на экран не влазит? Тоже дробишь его на несколько процедур? :)
|
|||
64
Fragster
гуру
24.10.14
✎
14:45
|
(8) в сериализованной XML из ТЗ ЕМНИП количество строк есть, но даже если там руками поменять на 0, эта XML нормально прочитается в ТЗ
|
|||
65
18_plus
24.10.14
✎
14:48
|
(0) ТС, объясни, за каким фигом делать нумерацию в ТЗ?
а потом ещё заниматься оптимизацией, там где она как минимум не нужна? |
|||
66
18_plus
24.10.14
✎
14:49
|
тем более если там "строк штук пять обычно"???!!!
|
|||
67
ADirks
24.10.14
✎
14:50
|
(63) Конечно. Чем программа на декларативном языке отличается от программы на языке процедурном?
|
|||
68
18_plus
24.10.14
✎
14:51
|
пока получается только кот и фаберже
|
|||
69
18_plus
24.10.14
✎
14:53
|
(67) очень хочу увидеть хотя бы основные принципы разбиения больших запросов на части. поделись.
|
|||
70
MaxS
24.10.14
✎
14:56
|
(30) ПолучитьФакториалЧисла(МоёЧисло)
(69) Это есть в типовых. Куча запросов создаётся в отдельных функциях. |
|||
71
ADirks
24.10.14
✎
14:56
|
(69) примерно так, немножко беспорядок, но принцип думаю понятен
Функция тзп_Инвентаризация() ТекстЗапроса = " |SELECT | ДокИнв.МестоХранения, | ДокИнвТЧ.МПЗ, | $ПустойИД _IDDoc_, | Sum(ДокИнвТЧ.Количество) ИнвФакт, | Sum(ДокИнвТЧ.Количество - ДокИнвТЧ.КоличествоУчет) ИнвРасхождение |FROM | ЖурналДокументов жИнв | LEFT JOIN докИнвентаризацияМПЗ ДокИнв ON ДокИнв.IDDoc = жИнв.IDDoc | LEFT JOIN докИнвентаризацияМПЗТЧ ДокИнвТЧ ON ДокИнвТЧ.IDDoc = жИнв.IDDoc |WHERE | жИнв.IDDocDef = $ВидДокумента.ИнвентаризацияМПЗ | AND жИнв.Date_Time_IDDoc >= @НачДата AND жИнв.Date_Time_IDDoc <= @КонДата | AND жИнв.IsMark = 0 |GROUP BY | ДокИнв.МестоХранения, | ДокИнвТЧ.МПЗ |"; Возврат ТекстЗапроса; КонецФункции Функция тзп_СборДанных(оЗапрос) стрВсеФильтры = оЗапрос.стрВсеФильтры(); JOIN = "INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = рег.МПЗ |LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка"; тзп_ОстМХ = оЗапрос.тзп_ОстаткиИДвиженияПоРегистру("МестаХранения", "ВидМПЗ, МестоХранения, МПЗ, _IDDoc_", "Количество", стрВсеФильтры, JOIN); //тзп_ОстП = оЗапрос.тзп_ОстаткиИДвиженияПоРегистру("Партии", "ВидМПЗ, МестоХранения, МПЗ, Договор, _IDDoc_", "Количество, Сумма, Вес", стрВсеФильтры, JOIN); тзп_ОстП = оЗапрос.тзп_ОстаткиИДвиженияПоРегистру("Партии", "ВидМПЗ, МестоХранения, МПЗ, _IDDoc_", "Количество, Сумма, Вес", стрВсеФильтры, JOIN); ТекстЗапроса = " |SELECT //| регМХ.ВидМПЗ, | ДеревоУр1.Группа ГруппаМат1, | ДеревоУр2.Группа ГруппаМат2, | регМХ.МестоХранения, //| Coalesce($ВидСправочника36.Материалы + Материалы.ParentID, $ВидСправочника36.Номенклатура + Номенклатура.ParentID) ГруппаМПЗ, | Материалы.ParentID ГруппаМПЗ, | регМХ.МПЗ МПЗ, //| IsNull(регП.Заявка, $ПустойИД) Заявка, //| IsNull(регП.Договор, $ПустойИД) Договор, | регМХ._IDDoc_, | | Материалы.ТипМатериала, | IsNull(ЕдНУ.Коэффициент, 0) Нормоупаковка, | Материалы.ГруппаМатериалов, | Материалы.СрокПоставкиПодЗаказ, | | регМХ.КоличествоНО, | регМХ.КоличествоПриход, | регМХ.КоличествоРасход, | | регМХ.КоличествоНО * Материалы.Вес * ЕдИзмВес.Коэффициент ВесНО, | регМХ.КоличествоПриход * Материалы.Вес * ЕдИзмВес.Коэффициент ВесПриход, | регМХ.КоличествоРасход * Материалы.Вес * ЕдИзмВес.Коэффициент ВесРасход, //| "+ПересчитатьПоСредней("регМХ.КоличествоНО", "регП.КоличествоНО", "регП.ВесНО")+" ВесНО, //| "+ПересчитатьПоСредней("регМХ.КоличествоПриход", "регП.КоличествоПриход", "регП.ВесПриход")+" ВесПриход, //| "+ПересчитатьПоСредней("регМХ.КоличествоРасход", "регП.КоличествоРасход", "регП.ВесРасход")+" ВесРасход, | | "+ПересчитатьПоСредней("регМХ.КоличествоНО", "регП.КоличествоНО", "регП.СуммаНО")+" СуммаНО, | "+ПересчитатьПоСредней("регМХ.КоличествоПриход", "регП.КоличествоПриход", "регП.СуммаПриход")+" СуммаПриход, | "+ПересчитатьПоСредней("регМХ.КоличествоРасход", "регП.КоличествоРасход", "регП.СуммаРасход")+" СуммаРасход, | | IsNull(Инв.ИнвФакт, 0) ИнвФакт, | IsNull(Инв.ИнвРасхождение, 0) ИнвРасхождение |FROM | ( | "+оЗапрос.Отступ(тзп_ОстМХ)+" | ) регМХ | | LEFT JOIN ( | "+оЗапрос.Отступ(тзп_ОстП)+" | ) регП ON | регП.МПЗ = регМХ.МПЗ | AND регП.МестоХранения = регМХ.МестоХранения | AND регП._IDDoc_ = регМХ._IDDoc_ | | LEFT JOIN ( | "+оЗапрос.Отступ(тзп_Инвентаризация(), 2)+" | ) Инв ON | Инв.МПЗ = регМХ.МПЗ | AND Инв.МестоХранения = регМХ.МестоХранения | AND Инв._IDDoc_ = регМХ._IDDoc_ | //| LEFT JOIN спрНоменклатура Номенклатура ON Номенклатура.ид13 = регМХ.МПЗ | INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = регМХ.МПЗ | LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка | LEFT JOIN спрЕдиницыМатериалов ЕдИзмВес ON ЕдИзмВес.ID = Материалы.ЕдиницаИзмеренияВеса | | LEFT JOIN ( | SELECT distinct | Группы.Level, | Группы.ID Группа, | Элементы.ID Материал, | Материалы.Descr | FROM | Дерево_Материалы Элементы | LEFT JOIN Дерево_Материалы Группы ON Группы.ID = Элементы.ParentID and Группы.ParentID = ' 0 ' | LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Группы.ID | ) ДеревоУр1 ON ДеревоУр1.Материал = Материалы.ID AND ДеревоУр1.Level = 1 | | LEFT JOIN ( | SELECT distinct | Группы.Level, | Группы.ID Группа, | Элементы.ID Материал, | Материалы.Descr | FROM | Дерево_Материалы Элементы | LEFT JOIN Дерево_Материалы Группы ON Группы.ID = Элементы.ParentID and Группы.ParentID = ' 0 ' | LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Группы.ID | ) ДеревоУр2 ON ДеревоУр2.Материал = Материалы.ID AND ДеревоУр2.Level = 2 | |"; Если фТолькоСДвижениями = 1 Тогда ТекстЗапроса = ТекстЗапроса + " |WHERE | регМХ.МПЗ IN (SELECT рег.МПЗ | FROM регМестаХранения рег | LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Right(рег.МПЗ, 9) | "+оЗапрос.WHERE("Date_Time_IDDoc >= @НачДата AND Date_Time_IDDoc <= @КонДата", "Left(рег.МПЗ, 4) = $ВидСправочника36.Материалы", стрВсеФильтры )+" | ) |"; КонецЕсли; Возврат ТекстЗапроса; КонецФункции Функция тзп_Сгруппированно(оЗапрос) ТекстЗапроса = " |SELECT | "+Отступ(оЗапрос.СложитьЧастиЗапроса("Идентификатор"), 1)+", | sum(КоличествоНО) КоличествоНО, | sum(КоличествоПриход) КоличествоПриход, | sum(КоличествоРасход) КоличествоРасход, | sum(КоличествоНО) + sum(КоличествоПриход) - sum(КоличествоРасход) КоличествоКО, | | sum(ВесНО) ВесНО, | sum(ВесПриход) ВесПриход, | sum(ВесРасход) ВесРасход, | sum(ВесНО) + sum(ВесПриход) - sum(ВесРасход) ВесКО, | | sum(СуммаНО) СуммаНО, | sum(СуммаПриход) СуммаПриход, | sum(СуммаРасход) СуммаРасход, | sum(СуммаНО) + sum(СуммаПриход) - sum(СуммаРасход) СуммаКО, | | Sum(ИнвФакт) ИнвФакт, | Sum(ИнвРасхождение) ИнвРасхождение |FROM | ( | "+Отступ(тзп_СборДанных(оЗапрос))+" | ) рег | //|"+оЗапрос.WHERE(оЗапрос.стрВсеФильтры())+" | |GROUP BY | "+Отступ(оЗапрос.СложитьЧастиЗапроса("Идентификатор"), 1)+" |"; Возврат ТекстЗапроса; КонецФункции Функция тзЗапрос() Состояние("Запрос данных из БД ..."); оЗапрос = СоздатьОбъект("ТОтчет.Запрос"); оЗапрос.фИспользоватьПредставления = 1; оЗапрос.Инит(оНастройки); оЗапрос.фИспользоватьПредставления = 1; оЗапрос.ДобавитьДаты(НачДата, КонДата); оЗапрос.ДобавитьВсеФильтры(); //оЗапрос.ДобавитьФильтр(Перечисление.ВидыМПЗ.Материалы, "ВидМПЗ", "ВидМПЗ"); оЗапрос.ТекстЗапроса = " |SELECT | "+оЗапрос.SELECT("Данные")+", | | КоличествоНО, | КоличествоПриход, | КоличествоРасход, | КоличествоКО, | | ВесНО, | ВесПриход, | ВесРасход, | ВесКО, | | СуммаНО, | СуммаПриход, | СуммаРасход, | СуммаКО, | | ИнвФакт, | ИнвРасхождение |FROM | ( | "+Отступ(тзп_Сгруппированно(оЗапрос))+" | ) Данные | "+оЗапрос.JOIN("Данные")+" |ORDER BY | "+оЗапрос.ORDERBY()+" | |"; тзЗапрос = оЗапрос.Выполнить(); Возврат тзЗапрос; КонецФункции |
|||
72
Маратыч
24.10.14
✎
14:57
|
А если еще и обфускатором пройтись, код совсем, панимаешь, компактным станет. Насчет "красивым", правда, не уверен, гг.
|
|||
73
18_plus
24.10.14
✎
15:01
|
(71) вопросов больше не имею. уж разбил, так разбил.
|
|||
74
18_plus
24.10.14
✎
15:05
|
такое правда удобнее читать и сопровождать, чем один запрос простыней?
|
|||
75
ADirks
24.10.14
✎
15:07
|
(74) конечно, думаешь это просто так, из любви к искусству?
для сравнения, конечный результат Функция тзп_Инвентаризация() ТекстЗапроса = " |SELECT | ДокИнв.МестоХранения, | ДокИнвТЧ.МПЗ, | $ПустойИД _IDDoc_, | Sum(ДокИнвТЧ.Количество) ИнвФакт, | Sum(ДокИнвТЧ.Количество - ДокИнвТЧ.КоличествоУчет) ИнвРасхождение |FROM | ЖурналДокументов жИнв | LEFT JOIN докИнвентаризацияМПЗ ДокИнв ON ДокИнв.IDDoc = жИнв.IDDoc | LEFT JOIN докИнвентаризацияМПЗТЧ ДокИнвТЧ ON ДокИнвТЧ.IDDoc = жИнв.IDDoc |WHERE | жИнв.IDDocDef = $ВидДокумента.ИнвентаризацияМПЗ | AND жИнв.Date_Time_IDDoc >= @НачДата AND жИнв.Date_Time_IDDoc <= @КонДата | AND жИнв.IsMark = 0 |GROUP BY | ДокИнв.МестоХранения, | ДокИнвТЧ.МПЗ |"; Возврат ТекстЗапроса; КонецФункции Функция тзп_СборДанных(оЗапрос) стрВсеФильтры = оЗапрос.стрВсеФильтры(); JOIN = "INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = рег.МПЗ |LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка"; тзп_ОстМХ = оЗапрос.тзп_ОстаткиИДвиженияПоРегистру("МестаХранения", "ВидМПЗ, МестоХранения, МПЗ, _IDDoc_", "Количество", стрВсеФильтры, JOIN); //тзп_ОстП = оЗапрос.тзп_ОстаткиИДвиженияПоРегистру("Партии", "ВидМПЗ, МестоХранения, МПЗ, Договор, _IDDoc_", "Количество, Сумма, Вес", стрВсеФильтры, JOIN); тзп_ОстП = оЗапрос.тзп_ОстаткиИДвиженияПоРегистру("Партии", "ВидМПЗ, МестоХранения, МПЗ, _IDDoc_", "Количество, Сумма, Вес", стрВсеФильтры, JOIN); ТекстЗапроса = " |SELECT //| регМХ.ВидМПЗ, | ДеревоУр1.Группа ГруппаМат1, | ДеревоУр2.Группа ГруппаМат2, | регМХ.МестоХранения, //| Coalesce($ВидСправочника36.Материалы + Материалы.ParentID, $ВидСправочника36.Номенклатура + Номенклатура.ParentID) ГруппаМПЗ, | Материалы.ParentID ГруппаМПЗ, | регМХ.МПЗ МПЗ, //| IsNull(регП.Заявка, $ПустойИД) Заявка, //| IsNull(регП.Договор, $ПустойИД) Договор, | регМХ._IDDoc_, | | Материалы.ТипМатериала, | IsNull(ЕдНУ.Коэффициент, 0) Нормоупаковка, | Материалы.ГруппаМатериалов, | Материалы.СрокПоставкиПодЗаказ, | | регМХ.КоличествоНО, | регМХ.КоличествоПриход, | регМХ.КоличествоРасход, | | регМХ.КоличествоНО * Материалы.Вес * ЕдИзмВес.Коэффициент ВесНО, | регМХ.КоличествоПриход * Материалы.Вес * ЕдИзмВес.Коэффициент ВесПриход, | регМХ.КоличествоРасход * Материалы.Вес * ЕдИзмВес.Коэффициент ВесРасход, //| "+ПересчитатьПоСредней("регМХ.КоличествоНО", "регП.КоличествоНО", "регП.ВесНО")+" ВесНО, //| "+ПересчитатьПоСредней("регМХ.КоличествоПриход", "регП.КоличествоПриход", "регП.ВесПриход")+" ВесПриход, //| "+ПересчитатьПоСредней("регМХ.КоличествоРасход", "регП.КоличествоРасход", "регП.ВесРасход")+" ВесРасход, | | "+ПересчитатьПоСредней("регМХ.КоличествоНО", "регП.КоличествоНО", "регП.СуммаНО")+" СуммаНО, | "+ПересчитатьПоСредней("регМХ.КоличествоПриход", "регП.КоличествоПриход", "регП.СуммаПриход")+" СуммаПриход, | "+ПересчитатьПоСредней("регМХ.КоличествоРасход", "регП.КоличествоРасход", "регП.СуммаРасход")+" СуммаРасход, | | IsNull(Инв.ИнвФакт, 0) ИнвФакт, | IsNull(Инв.ИнвРасхождение, 0) ИнвРасхождение |FROM | ( | "+оЗапрос.Отступ(тзп_ОстМХ)+" | ) регМХ | | LEFT JOIN ( | "+оЗапрос.Отступ(тзп_ОстП)+" | ) регП ON | регП.МПЗ = регМХ.МПЗ | AND регП.МестоХранения = регМХ.МестоХранения | AND регП._IDDoc_ = регМХ._IDDoc_ | | LEFT JOIN ( | "+оЗапрос.Отступ(тзп_Инвентаризация(), 2)+" | ) Инв ON | Инв.МПЗ = регМХ.МПЗ | AND Инв.МестоХранения = регМХ.МестоХранения | AND Инв._IDDoc_ = регМХ._IDDoc_ | //| LEFT JOIN спрНоменклатура Номенклатура ON Номенклатура.ид13 = регМХ.МПЗ | INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = регМХ.МПЗ | LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка | LEFT JOIN спрЕдиницыМатериалов ЕдИзмВес ON ЕдИзмВес.ID = Материалы.ЕдиницаИзмеренияВеса | | LEFT JOIN ( | SELECT distinct | Группы.Level, | Группы.ID Группа, | Элементы.ID Материал, | Материалы.Descr | FROM | Дерево_Материалы Элементы | LEFT JOIN Дерево_Материалы Группы ON Группы.ID = Элементы.ParentID and Группы.ParentID = ' 0 ' | LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Группы.ID | ) ДеревоУр1 ON ДеревоУр1.Материал = Материалы.ID AND ДеревоУр1.Level = 1 | | LEFT JOIN ( | SELECT distinct | Группы.Level, | Группы.ID Группа, | Элементы.ID Материал, | Материалы.Descr | FROM | Дерево_Материалы Элементы | LEFT JOIN Дерево_Материалы Группы ON Группы.ID = Элементы.ParentID and Группы.ParentID = ' 0 ' | LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Группы.ID | ) ДеревоУр2 ON ДеревоУр2.Материал = Материалы.ID AND ДеревоУр2.Level = 2 | |"; Если фТолькоСДвижениями = 1 Тогда ТекстЗапроса = ТекстЗапроса + " |WHERE | регМХ.МПЗ IN (SELECT рег.МПЗ | FROM регМестаХранения рег | LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Right(рег.МПЗ, 9) | "+оЗапрос.WHERE("Date_Time_IDDoc >= @НачДата AND Date_Time_IDDoc <= @КонДата", "Left(рег.МПЗ, 4) = $ВидСправочника36.Материалы", стрВсеФильтры )+" | ) |"; КонецЕсли; Возврат ТекстЗапроса; КонецФункции Функция тзп_Сгруппированно(оЗапрос) ТекстЗапроса = " |SELECT | "+Отступ(оЗапрос.СложитьЧастиЗапроса("Идентификатор"), 1)+", | sum(КоличествоНО) КоличествоНО, | sum(КоличествоПриход) КоличествоПриход, | sum(КоличествоРасход) КоличествоРасход, | sum(КоличествоНО) + sum(КоличествоПриход) - sum(КоличествоРасход) КоличествоКО, | | sum(ВесНО) ВесНО, | sum(ВесПриход) ВесПриход, | sum(ВесРасход) ВесРасход, | sum(ВесНО) + sum(ВесПриход) - sum(ВесРасход) ВесКО, | | sum(СуммаНО) СуммаНО, | sum(СуммаПриход) СуммаПриход, | sum(СуммаРасход) СуммаРасход, | sum(СуммаНО) + sum(СуммаПриход) - sum(СуммаРасход) СуммаКО, | | Sum(ИнвФакт) ИнвФакт, | Sum(ИнвРасхождение) ИнвРасхождение |FROM | ( | "+Отступ(тзп_СборДанных(оЗапрос))+" | ) рег | //|"+оЗапрос.WHERE(оЗапрос.стрВсеФильтры())+" | |GROUP BY | "+Отступ(оЗапрос.СложитьЧастиЗапроса("Идентификатор"), 1)+" |"; Возврат ТекстЗапроса; КонецФункции Функция тзЗапрос() Состояние("Запрос данных из БД ..."); оЗапрос = СоздатьОбъект("ТОтчет.Запрос"); оЗапрос.фИспользоватьПредставления = 1; оЗапрос.Инит(оНастройки); оЗапрос.фИспользоватьПредставления = 1; оЗапрос.ДобавитьДаты(НачДата, КонДата); оЗапрос.ДобавитьВсеФильтры(); //оЗапрос.ДобавитьФильтр(Перечисление.ВидыМПЗ.Материалы, "ВидМПЗ", "ВидМПЗ"); оЗапрос.ТекстЗапроса = " |SELECT | "+оЗапрос.SELECT("Данные")+", | | КоличествоНО, | КоличествоПриход, | КоличествоРасход, | КоличествоКО, | | ВесНО, | ВесПриход, | ВесРасход, | ВесКО, | | СуммаНО, | СуммаПриход, | СуммаРасход, | СуммаКО, | | ИнвФакт, | ИнвРасхождение |FROM | ( | "+Отступ(тзп_Сгруппированно(оЗапрос))+" | ) Данные | "+оЗапрос.JOIN("Данные")+" |ORDER BY | "+оЗапрос.ORDERBY()+" | |"; тзЗапрос = оЗапрос.Выполнить(); Возврат тзЗапрос; КонецФункции |
|||
76
ADirks
24.10.14
✎
15:08
|
тьфу, извиняюсь
-- ДЕКЛАРАЦИЯ Set NoCount ON DECLARE @ПозицияТА Char(23), @ДатаИтогиТА Char(8) Set @ПозицияТА = '201410248MHJZ4 2V2R7 ' Set @ДатаИтогиТА = '20141001' DECLARE @НачДата Char(23), @ДатаИтогов Char(8), @НачДвиженийДляИтогов Char(24) DECLARE @КонДата Char(24), @КонДатаПлюс1 Char(8) Set @НачДата = '20140501' Set @КонДата = '20140531'+'я' Set @ДатаИтогов = '20140401' Set @НачДвиженийДляИтогов = '20140501' Set @КонДатаПлюс1 = '20140601' Declare @ВыбМестоХранения Char(9) Set @ВыбМестоХранения = ' 9 ' -- ПРЕФИКС DECLARE @RC int CREATE TABLE [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] (ID Char(13), ID9 Char(9), Вид int) INSERT INTO [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] Values(' 1EH 7T8 ', ' 7T8 ', 1817) INSERT INTO [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] Values(' 1EH AFD ', ' AFD ', 1817) INSERT INTO [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] Values(' 1EH 7VX ', ' 7VX ', 1817) If (SELECT Count(*) From [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] (NoLock)) > 100 Create Clustered Index [#IX_680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] on [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] (ID) -- ТЕЛО SELECT Данные.МестоХранения [МестоХранения $Справочник.МестаХранения], RTrim(спрМестоХранения.Descr) стрМестоХранения, спрМестоХранения.РасшифровкаДляОтчетов расшМестоХранения, Данные.СрокПоставкиПодЗаказ [СрокПоставкиПодЗаказ $Справочник.СрокПоставкиНаМатериалыПодЗаказ], RTrim(спрСрокПоставкиПодЗаказ.Descr) стрСрокПоставкиПодЗаказ, спрСрокПоставкиПодЗаказ.РасшифровкаДляОтчетов расшСрокПоставкиПодЗаказ, Данные.МПЗ [МПЗ $Справочник], RTrim(спрМПЗ.Descr) стрМПЗ, спрМПЗ.РасшифровкаДляОтчетов расшМПЗ, спрМПЗ.ОсновнойАртикул [МПЗ_ОсновнойАртикул $Справочник.Артикулы], спрМПЗ.ОсновнаяЕдиницаИзмерения [МПЗ_ОсновнаяЕдиницаИзмерения $Справочник.ЕдиницыМатериалов], спрМПЗ.ОсновнаяНормоупаковка [МПЗ_ОсновнаяНормоупаковка $Справочник.ЕдиницыМатериалов], спрМПЗ.ВыдаватьСоСкладаПоДокументам [МПЗ_ВыдаватьСоСкладаПоДокументам $Число], спрМПЗ.ПозаказныйУчетПотребностей [МПЗ_ПозаказныйУчетПотребностей $Число], спрМПЗ.Вес [МПЗ_Вес $Число], спрМПЗ.ЕдиницаИзмеренияВеса [МПЗ_ЕдиницаИзмеренияВеса $Справочник.ЕдиницыМатериалов], КоличествоНО, КоличествоПриход, КоличествоРасход, КоличествоКО, ВесНО, ВесПриход, ВесРасход, ВесКО, СуммаНО, СуммаПриход, СуммаРасход, СуммаКО, ИнвФакт, ИнвРасхождение FROM ( SELECT МестоХранения , СрокПоставкиПодЗаказ , МПЗ , sum(КоличествоНО) КоличествоНО, sum(КоличествоПриход) КоличествоПриход, sum(КоличествоРасход) КоличествоРасход, sum(КоличествоНО) + sum(КоличествоПриход) - sum(КоличествоРасход) КоличествоКО, sum(ВесНО) ВесНО, sum(ВесПриход) ВесПриход, sum(ВесРасход) ВесРасход, sum(ВесНО) + sum(ВесПриход) - sum(ВесРасход) ВесКО, sum(СуммаНО) СуммаНО, sum(СуммаПриход) СуммаПриход, sum(СуммаРасход) СуммаРасход, sum(СуммаНО) + sum(СуммаПриход) - sum(СуммаРасход) СуммаКО, Sum(ИнвФакт) ИнвФакт, Sum(ИнвРасхождение) ИнвРасхождение FROM ( SELECT ДеревоУр1.Группа ГруппаМат1, ДеревоУр2.Группа ГруппаМат2, регМХ.МестоХранения, Материалы.ParentID ГруппаМПЗ, регМХ.МПЗ МПЗ, регМХ._IDDoc_, Материалы.ТипМатериала, IsNull(ЕдНУ.Коэффициент, 0) Нормоупаковка, Материалы.ГруппаМатериалов, Материалы.СрокПоставкиПодЗаказ, регМХ.КоличествоНО, регМХ.КоличествоПриход, регМХ.КоличествоРасход, регМХ.КоличествоНО * Материалы.Вес * ЕдИзмВес.Коэффициент ВесНО, регМХ.КоличествоПриход * Материалы.Вес * ЕдИзмВес.Коэффициент ВесПриход, регМХ.КоличествоРасход * Материалы.Вес * ЕдИзмВес.Коэффициент ВесРасход, CASE WHEN регП.КоличествоНО != 0 THEN регМХ.КоличествоНО * (регП.СуммаНО / регП.КоличествоНО) ELSE 0 END СуммаНО, CASE WHEN регП.КоличествоПриход != 0 THEN регМХ.КоличествоПриход * (регП.СуммаПриход / регП.КоличествоПриход) ELSE 0 END СуммаПриход, CASE WHEN регП.КоличествоРасход != 0 THEN регМХ.КоличествоРасход * (регП.СуммаРасход / регП.КоличествоРасход) ELSE 0 END СуммаРасход, IsNull(Инв.ИнвФакт, 0) ИнвФакт, IsNull(Инв.ИнвРасхождение, 0) ИнвРасхождение FROM ( SELECT ВидМПЗ, МестоХранения, МПЗ, _IDDoc_ , sum(КоличествоНО) КоличествоНО, sum(КоличествоПриход) КоличествоПриход, sum(КоличествоРасход) КоличествоРасход, sum(КоличествоОборот) КоличествоОборот FROM ( SELECT регМестаХранения.МПЗ, регМестаХранения.МестоХранения, регМестаХранения.ВидМПЗ, ' 0 ' _IDDoc_, регМестаХранения.Количество КоличествоНО, 0 КоличествоПриход, 0 КоличествоРасход, 0 КоличествоОборот FROM регМестаХраненияИтоги регМестаХранения WHERE Period = @ДатаИтогов UNION ALL SELECT регМестаХранения.МПЗ, регМестаХранения.МестоХранения, регМестаХранения.ВидМПЗ, ' 0 ' _IDDoc_ , (1-2*регМестаХранения.DebKred)*регМестаХранения.Количество КоличествоНО, 0 КоличествоПриход, 0 КоличествоРасход, 0 КоличествоОборот FROM регМестаХранения регМестаХранения WHERE регМестаХранения.Date_Time_IDDOC >= @НачДвиженийДляИтогов And регМестаХранения.Date_Time_IDDOC < @НачДата -- и обороты UNION ALL SELECT регМестаХранения.МПЗ, регМестаХранения.МестоХранения, регМестаХранения.ВидМПЗ, регМестаХранения.IDDoc _IDDoc_, 0 КоличествоНО, (1-регМестаХранения.DebKred)*регМестаХранения.Количество КоличествоПриход, регМестаХранения.DebKred*регМестаХранения.Количество КоличествоРасход, (1-2*регМестаХранения.DebKred)*регМестаХранения.Количество КоличествоОборот FROM регМестаХранения регМестаХранения WHERE регМестаХранения.Date_Time_IDDOC >= @НачДата And регМестаХранения.Date_Time_IDDOC < @КонДата ) рег INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = рег.МПЗ LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка WHERE рег.МестоХранения = @ВыбМестоХранения And рег.МПЗ in (SELECT ID FROM [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] (NoLock)) GROUP BY ВидМПЗ, МестоХранения, МПЗ, _IDDoc_ HAVING sum(КоличествоНО) <> 0 Or sum(КоличествоПриход) <> 0 Or sum(КоличествоРасход) <> 0 ) регМХ LEFT JOIN ( SELECT ВидМПЗ, МестоХранения, МПЗ, _IDDoc_ , sum(КоличествоНО) КоличествоНО, sum(КоличествоПриход) КоличествоПриход, sum(КоличествоРасход) КоличествоРасход, sum(КоличествоОборот) КоличествоОборот, sum(СуммаНО) СуммаНО, sum(СуммаПриход) СуммаПриход, sum(СуммаРасход) СуммаРасход, sum(СуммаОборот) СуммаОборот, sum(ВесНО) ВесНО, sum(ВесПриход) ВесПриход, sum(ВесРасход) ВесРасход, sum(ВесОборот) ВесОборот FROM ( SELECT регПартии.МПЗ, регПартии.Партия, регПартии.МестоХранения, регПартии.Договор, регПартии.ВидМПЗ, ' 0 ' _IDDoc_, регПартии.Количество КоличествоНО, 0 КоличествоПриход, 0 КоличествоРасход, 0 КоличествоОборот, регПартии.Сумма СуммаНО, 0 СуммаПриход, 0 СуммаРасход, 0 СуммаОборот, регПартии.Вес ВесНО, 0 ВесПриход, 0 ВесРасход, 0 ВесОборот FROM регПартииИтоги регПартии WHERE Period = @ДатаИтогов UNION ALL SELECT регПартии.МПЗ, регПартии.Партия, регПартии.МестоХранения, регПартии.Договор, регПартии.ВидМПЗ, ' 0 ' _IDDoc_ , (1-2*регПартии.DebKred)*регПартии.Количество КоличествоНО, 0 КоличествоПриход, 0 КоличествоРасход, 0 КоличествоОборот, (1-2*регПартии.DebKred)*регПартии.Сумма СуммаНО, 0 СуммаПриход, 0 СуммаРасход, 0 СуммаОборот, (1-2*регПартии.DebKred)*регПартии.Вес ВесНО, 0 ВесПриход, 0 ВесРасход, 0 ВесОборот FROM регПартии регПартии WHERE регПартии.Date_Time_IDDOC >= @НачДвиженийДляИтогов And регПартии.Date_Time_IDDOC < @НачДата -- и обороты UNION ALL SELECT регПартии.МПЗ, регПартии.Партия, регПартии.МестоХранения, регПартии.Договор, регПартии.ВидМПЗ, регПартии.IDDoc _IDDoc_, 0 КоличествоНО, (1-регПартии.DebKred)*регПартии.Количество КоличествоПриход, регПартии.DebKred*регПартии.Количество КоличествоРасход, (1-2*регПартии.DebKred)*регПартии.Количество КоличествоОборот, 0 СуммаНО, (1-регПартии.DebKred)*регПартии.Сумма СуммаПриход, регПартии.DebKred*регПартии.Сумма СуммаРасход, (1-2*регПартии.DebKred)*регПартии.Сумма СуммаОборот, 0 ВесНО, (1-регПартии.DebKred)*регПартии.Вес ВесПриход, регПартии.DebKred*регПартии.Вес ВесРасход, (1-2*регПартии.DebKred)*регПартии.Вес ВесОборот FROM регПартии регПартии WHERE регПартии.Date_Time_IDDOC >= @НачДата And регПартии.Date_Time_IDDOC < @КонДата ) рег INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = рег.МПЗ LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка WHERE рег.МестоХранения = @ВыбМестоХранения And рег.МПЗ in (SELECT ID FROM [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] (NoLock)) GROUP BY ВидМПЗ, МестоХранения, МПЗ, _IDDoc_ HAVING sum(КоличествоНО) <> 0 Or sum(КоличествоПриход) <> 0 Or sum(КоличествоРасход) <> 0 OR sum(СуммаНО) <> 0 Or sum(СуммаПриход) <> 0 Or sum(СуммаРасход) <> 0 OR sum(ВесНО) <> 0 Or sum(ВесПриход) <> 0 Or sum(ВесРасход) <> 0 ) регП ON регП.МПЗ = регМХ.МПЗ AND регП.МестоХранения = регМХ.МестоХранения AND регП._IDDoc_ = регМХ._IDDoc_ LEFT JOIN ( SELECT ДокИнв.МестоХранения, ДокИнвТЧ.МПЗ, ' 0 ' _IDDoc_, Sum(ДокИнвТЧ.Количество) ИнвФакт, Sum(ДокИнвТЧ.Количество - ДокИнвТЧ.КоличествоУчет) ИнвРасхождение FROM ЖурналДокументов жИнв LEFT JOIN докИнвентаризацияМПЗ ДокИнв ON ДокИнв.IDDoc = жИнв.IDDoc LEFT JOIN докИнвентаризацияМПЗТЧ ДокИнвТЧ ON ДокИнвТЧ.IDDoc = жИнв.IDDoc WHERE жИнв.IDDocDef = 20430 AND жИнв.Date_Time_IDDoc >= @НачДата AND жИнв.Date_Time_IDDoc <= @КонДата AND жИнв.IsMark = 0 GROUP BY ДокИнв.МестоХранения, ДокИнвТЧ.МПЗ ) Инв ON Инв.МПЗ = регМХ.МПЗ AND Инв.МестоХранения = регМХ.МестоХранения AND Инв._IDDoc_ = регМХ._IDDoc_ INNER JOIN спрМатериалы Материалы ON Материалы.ид13 = регМХ.МПЗ LEFT JOIN спрЕдиницыМатериалов ЕдНУ ON ЕдНУ.ID = Материалы.ОсновнаяНормоупаковка LEFT JOIN спрЕдиницыМатериалов ЕдИзмВес ON ЕдИзмВес.ID = Материалы.ЕдиницаИзмеренияВеса LEFT JOIN ( SELECT distinct Группы.Level, Группы.ID Группа, Элементы.ID Материал, Материалы.Descr FROM Дерево_Материалы Элементы LEFT JOIN Дерево_Материалы Группы ON Группы.ID = Элементы.ParentID and Группы.ParentID = ' 0 ' LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Группы.ID ) ДеревоУр1 ON ДеревоУр1.Материал = Материалы.ID AND ДеревоУр1.Level = 1 LEFT JOIN ( SELECT distinct Группы.Level, Группы.ID Группа, Элементы.ID Материал, Материалы.Descr FROM Дерево_Материалы Элементы LEFT JOIN Дерево_Материалы Группы ON Группы.ID = Элементы.ParentID and Группы.ParentID = ' 0 ' LEFT JOIN спрМатериалы Материалы ON Материалы.ID = Группы.ID ) ДеревоУр2 ON ДеревоУр2.Материал = Материалы.ID AND ДеревоУр2.Level = 2 ) рег GROUP BY МестоХранения , СрокПоставкиПодЗаказ , МПЗ ) Данные LEFT JOIN спрМестаХранения спрМестоХранения (NoLock) on спрМестоХранения.ID = Данные.МестоХранения LEFT JOIN спрСрокПоставкиНаМатериалыПодЗаказ спрСрокПоставкиПодЗаказ (NoLock) on спрСрокПоставкиПодЗаказ.ID = Данные.СрокПоставкиПодЗаказ LEFT JOIN .спрМатериалы спрМПЗ (NoLock) on спрМПЗ.ид13 = Данные.МПЗ ORDER BY спрМестоХранения.ПорядокСортировки, спрСрокПоставкиПодЗаказ.ПорядокСортировки, спрМПЗ.ПорядокСортировки -- ПОСТФИКС Drop Table [#680832d7-2ace-4926-8bc4-ed9d8c6fb3b0] |
|||
77
Ranger_83
24.10.14
✎
15:09
|
(0) С опытом.
|
|||
78
AROM
24.10.14
✎
15:12
|
(61) Процедура на экран нормально, а процедура из 3-4 строк, в которой вызывается еще процедура - маразм. Как и латиница в 1с коде
|
|||
79
SUA
24.10.14
✎
15:41
|
(78) смотря какая цель
на клиентский обработчик изменения повесить вызов сервера (1 строка, процедура) - нормально, далее в серверном блоке получение новых вложенных реквизитов (1 строка, процедура) и обновление формы (1 строка, процедура, итого процедура из 2х строк с вызовом 2х процедур) - отлично да и без латиницы 7++ или работу с мс-офис хрен напишешь |
|||
80
DrZombi
гуру
24.10.14
✎
15:43
|
(0) А первый мне больше нравится. Стабильней :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |