Имя: Пароль:
1C
1C 7.7
v7: группировка таблицы
,
0 yanejsh
 
01.11.11
10:30
есть таблица ИндексированнаяТаблица
Подразделение Номенклатура КоличествоНоменклатуры Материал КоличествоМатериала
Как из нее получить таблицу:
Подразделение1 КоличествоНоменклатуры ..
  Номенклатура1 КоличествоНоменклатуры ..
    Материал1 КоличествоМатериала
    Материал2 КоличествоМатериала
    Материал3 КоличествоМатериала
Если Группировать по Подразделению, Номенклатуре и Материалу -- КоличествоНоменклатуры и КоличествоМатериала, то получится что количествономенклатуры сложится у тех строк, где есть количествоМатериала, что неправильно. Если КоличествоНоменклатуры добавить в группировку столбцов, то не будет суммироваться итоги по номенклатуре и подразделению.
Как же сделать надо?
1 PuhUfa
 
01.11.11
10:33
как получена таблица?
2 Ёпрст
 
01.11.11
10:33
группировать по Подразделению и Номенклатуре вестимо, в последней тзПотомки будут нужные материалы..
3 yanejsh
 
01.11.11
10:35
(1) Запросом конечно
(2) сейчас пробую
4 yanejsh
 
01.11.11
10:41
(2) группировать по номенклатуре, а количествономенклатуры суммируется ведь, и получается неправильное количество
5 PuhUfa
 
01.11.11
10:42
(3) сразу в запросе сгруппировать не предлагать?
6 yanejsh
 
01.11.11
10:44
(5) предложи, только запрос-то прямой и не мной писаный. если я там поставлю группировать, то разве не тоже самое будет? и как тогда обходить таблицу?
7 yanejsh
 
01.11.11
10:53
хелп ми
8 yanejsh
 
01.11.11
11:04
ап1
9 1Сергей
 
01.11.11
11:05
нафиг тут вообще таблица?
10 yanejsh
 
01.11.11
11:06
(9) а как тогда?
11 1Сергей
 
01.11.11
11:08
(10) Запросом
12 yanejsh
 
01.11.11
11:10
(11) в цикле перебирать таблицу по подразделениям и номенклатуре, и каждый раз запрос для поиска материалов? так чтоли?
13 Mikeware
 
01.11.11
11:14
(12) а что тебе надо в итоге?
14 Ёпрст
 
01.11.11
11:15
(13) получить готовый код вестимо.
:)
15 yanejsh
 
01.11.11
11:16
в (0) нарисовала вроде. табличка с номенклатурой, и самый последний уровень - это информация о материалах, из которых состоит номенклатура
16 Минона
 
01.11.11
11:16
17 yanejsh
 
01.11.11
11:16
не надо мне готовый код. я смысл не могу понять, как надо организовать это дело
18 viktor_vv
 
01.11.11
11:16
(12) Покажи пару строчек исходной таблицы, котрую группировать хочешь. У тебя походу количество выпуска номенклатуры в каждой строчке стоит.
19 Mikeware
 
01.11.11
11:16
(14) Это и так ясно... Вопрос в том, что должен выдавать готовый код....
Кмплектацию для кровати, чтоль?
20 Ёпрст
 
01.11.11
11:17
(15) текст запроса покажешь, или так и будем дальше телепатировать, что тебе надо в итоге ?
21 viktor_vv
 
01.11.11
11:19
Это либо переписать прямой запрос с Таблицей выпуска номенклатуры и к ней Объединить все таблицу материалов. Либо из твоей таблицы сделать две.
22 yanejsh
 
01.11.11
11:19
(18) ну конечно в каждой строчке, как по другому то. табличка уже есть такая:
Подразделение1 Номенклатура1 КолНом=6 Материал1 колМат=5
Подразделение1 Номенклатура1 КолНом=6 Материал2 колМат=3
Подразделение1 Номенклатура1 КолНом=6 Материал3 колМат=7
Подразделение1 Номенклатура2 КолНом=9 Материал1 колМат=3
...
23 yanejsh
 
01.11.11
11:20
ТекстЗапроса = "
   |SELECT Подразделения.ID [Подразделение $Справочник.Подразделения]
   |    , Номенклатура.ID [Продукция $Справочник.Номенклатура]
   |    , $Номенклатура.ТипНоменклатуры [ТипНоменклатуры $Перечисление.ТипыНоменклатуры]
   |    , ВидыНоменклатуры.ID [ВидПродукции $Справочник.ВидыНоменклатуры]
   |    , $Разделка.КоличествоСырья КоличествоНоменклатуры
   |    , $Номенклатура.ЕдиницаИзмерения [ЕдИзмНомен $Справочник.ЕдиницыИзмерений]
   |    , $РазделкаСтроки.ВидМПЗвТЧ [ВидМПЗ $Перечисление.ВидыМПЗ]
   |    , $РазделкаСтроки.Выход [Материал $Справочник]
   |    , $РазделкаСтроки.Количество КоличествоМатериала
   |    , $РазделкаСтроки.ЕдиницаИзмерения [ЕдИзмМат $Справочник]
   |    , Разделка.IDDOC [ДокРазделка $Документ.Разделка]
   |    , ПодзапросСумма.Сумма As СуммаМатериала
   |FROM $Документ.Разделка AS Разделка With (NOLOCK)
   |    INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON Разделка.IDDOC = Журнал.IDDOC
   |    LEFT OUTER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON $Разделка.Сырье = $ВидСправочника36.Номенклатура + Номенклатура.ID
   |    LEFT OUTER JOIN $Справочник.Подразделения AS Подразделения With (NOLOCK) ON $Разделка.Подразделение = Подразделения.ID
   |    LEFT OUTER JOIN $Справочник.ВидыНоменклатуры AS ВидыНоменклатуры With (NOLOCK) ON $Номенклатура.ВидНоменклатуры = ВидыНоменклатуры.ID
   |    LEFT OUTER JOIN $ДокументСтроки.Разделка AS РазделкаСтроки With (NOLOCK) ON Разделка.IDDOC = РазделкаСтроки.IDDOC
   |    LEFT OUTER JOIN (SELECT ПроизводственныеЗатраты.IDDOC Документ
   |            , $ПроизводственныеЗатраты.Затрата Затрата
   |            , $ПроизводственныеЗатраты.Продукция Продукция
   |            , $ПроизводственныеЗатраты.Сумма Сумма
   |        FROM $Регистр.ПроизводственныеЗатраты AS ПроизводственныеЗатраты With (NOLOCK)) AS ПодзапросСумма ON Разделка.IDDOC = ПодзапросСумма.Документ AND $РазделкаСтроки.Выход = ПодзапросСумма.Затрата
   |WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= :ДатаНач)
   |    AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= :ДатаКон)
   |    AND ((Журнал.CLOSED & 1) = 1)
24 yanejsh
 
01.11.11
11:28
уф
25 viktor_vv
 
01.11.11
11:31
Можно еще так попробовать.
Вместо
$Разделка.КоличествоСырья КоличествоНоменклатуры
Написать
Case When РазделкаСтроки.LineNo_ = 1 Then $Разделка.КоличествоСырья  Else 0 End as КоличествоНоменклатуры

Это если автонумерация строк стоит в документе. Тогда количество номенклатуры будет только по одной строке.
26 Ёпрст
 
01.11.11
11:35
(25)<=1  , ибо строк может и не быть в ТЧ
27 yanejsh
 
01.11.11
11:42
запрос неправильно составлен, или как?
28 Ёпрст
 
01.11.11
11:44
(27) в запросе нужно оставить только 1 строку с количеством номенклатуры, в остальных строках = 0 должно быть.
29 yanejsh
 
01.11.11
11:47
(28) это-то и так понятно, что нужно. вопрос в том, как?
если по (25), то в номенклатуре, которая не разбивается по материалам = 0 количество встает
30 viktor_vv
 
01.11.11
11:48
(29) Ты (26) читала ?
31 yanejsh
 
01.11.11
11:51
(Case When (РазделкаСтроки.LineNo_ <= 1)OR(ISNULL($РазделкаСтроки.Количество,0)=0) Then $Разделка.КоличествоСырья  Else 0 End)   -вот так получается
32 viktor_vv
 
01.11.11
11:51
(30)+ Я вот все думал, что при разделке хоть что-то должно остаться, а так съедаете наверное все :).
33 yanejsh
 
01.11.11
11:51
(30) разницы нет, результат совпал
34 viktor_vv
 
01.11.11
11:53
(31) Тогда уж

Case When IsNULL(РазделкаСтроки.LineNo_,1) = 1 Then $Разделка.КоличествоСырья  Else 0 End as КоличествоНоменклатуры