Имя: Пароль:
1C
1С v8
Простой запрос и характеристики (без СКД) - слетают итоги
0 suvolod
 
18.12.11
15:25
Поставленная передо мной задача (специфическое форматирование отчета) не позволяет использовать СКД, поэтому столкнулся с тем, что обрабатывать характеристики надо как-то непосредственно в запросе. Пример:
1// У меня есть запрос следующего вида:

   Запрос.Текст =
       "ВЫБРАТЬ
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
       |    ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       |    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
       |    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
       |ИЗ
       |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода, &КонПериода, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
       |
       |УПОРЯДОЧИТЬ ПО
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование
       |ИТОГИ
       |    СУММА(КоличествоНачальныйОстаток),
       |    СУММА(КоличествоКонечныйОстаток)
       |ПО
       |    ОБЩИЕ,
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура";

Общие итоги по этому запросу возвращают, например, 1816 ед.  как КоличествоНачальныйОстаток и 1719 как КоличествоКонечныйОстаток.

2// В исходном запросе меня не устраивает то, что мне нужно "расшифровать" ХарактеристикаНоменклатуры, т.е. получить поля "Цвет", "Размер", "Рост", которые являются свойствами (и значениями) конкретной характеристики. Для этого я делаю внутреннее соединение к регистру сведений, где эти значения хранятся.  

   Запрос.Текст =
       "ВЫБРАТЬ
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
       |    ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       |    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
       |    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
       |    ЗначенияСвойствОбъектов.Свойство.Представление,
       |    ПРЕДСТАВЛЕНИЕ(ЗначенияСвойствОбъектов.Значение)
       |ИЗ
       |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода, &КонПериода, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
       |        ПО ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры = ЗначенияСвойствОбъектов.Объект
       |
       |УПОРЯДОЧИТЬ ПО
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование
       |ИТОГИ
       |    СУММА(КоличествоНачальныйОстаток),
       |    СУММА(КоличествоКонечныйОстаток)
       |ПО
       |    ОБЩИЕ,
       |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
       |    ХарактеристикаНоменклатуры";

3// Насколько я понимаю, этот запрос должен увеличить количество записей в результате. Т.е, если в запросе1 у меня по характеристике была запись вида:

Юбка  000000145 "Ч XXL"  3   1  

то в результате запроса2 она развернется в несколько строк:
Юбка  000000145 "Ч XXL"  3   1  -       -      (группировочная)
Юбка  000000145 "Ч XXL"  3   1  Цвет    Черный (детальная запись)
Юбка  000000145 "Ч XXL"  3   1  Размер  XXL    (детальная запись)

И все-бы хорошо, но итоговые записи теперь у меня считаются неправильно: - задваиваются, а то и затраиваются (по кол-ву свойств характеристик). Это можно как-то поправить или придется их отслеживать/рассчитывать вручную?
1 suvolod
 
18.12.11
15:35
... мне просто нужно знать, как правильно в этом случае работать с характеристиками. Сперва я вообще хотел оставить первый запрос как есть, а когда буду в цикле делать перебор характеристик номенклатуры из результата, отдельными маленькими запросами получать свойства и значение каждой характеристики. Но, наверное, это жутко неоптимально и все надо делать все одним запросом. Только вот как?
AdBlock убивает бесплатный контент. 1Сергей