Имя: Пароль:
1C
1С v8
отчет продажи, СКД и задвоение, затроение записей
0 Эмбеддер
 
26.03.13
14:11
В КА стандартный отчет "продажи" хочу добавить цену товара по типам цен, делаю такое соединение

// Здесь мы определяем даты, откуда будем брать цены
ЛЕВОЕ СОЕДИНЕНИЕ
(
ВЫБРАТЬ
   Максимум(РегЦеныВнутр.Период) МаксПериод,
   НАЧАЛОПЕРИОДА(ОтборПродажи.Регистратор.Дата, День) ПериодДок,
   РегЦеныВнутр.Номенклатура Номенклатура,
   РегЦеныВнутр.ТипЦен,
   РегЦеныВнутр.ХарактеристикаНоменклатуры
ИЗ
   РегистрСведений.ЦеныНоменклатуры РегЦеныВнутр
СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, {Номенклатура }) КАК ОтборПродажи
   ПО РегЦеныВнутр.Номенклатура = ОтборПродажи.Номенклатура
   И РегЦеныВнутр.ХарактеристикаНоменклатуры = ОтборПродажи.ХарактеристикаНоменклатуры
   И ВЫБОР КОГДА ОтборПродажи.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА ВЫРАЗИТЬ(ОтборПродажи.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).ТипЦен ИНАЧЕ Неопределено КОНЕЦ = РегЦеныВнутр.ТипЦен
   И РегЦеныВнутр.Период<=НАЧАЛОПЕРИОДА(ОтборПродажи.Регистратор.Дата, День)
СГРУППИРОВАТЬ ПО
   НАЧАЛОПЕРИОДА(ОтборПродажи.Регистратор.Дата, День),
   РегЦеныВнутр.Номенклатура,
   РегЦеныВнутр.ТипЦен,
   РегЦеныВнутр.ХарактеристикаНоменклатуры
) ЗапросЦен
ПО
   ИсточникДанных.Номенклатура=ЗапросЦен.Номенклатура
  И ВЫБОР КОГДА ИсточникДанных.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА ВЫРАЗИТЬ(ИсточникДанных.ДокументПродажи КАК Документ.РеализацияТоваровУслуг).ТипЦен ИНАЧЕ Неопределено КОНЕЦ = ЗапросЦен.ТипЦен
   И ИсточникДанных.ХарактеристикаНоменклатуры=ЗапросЦен.ХарактеристикаНоменклатуры
   И ЗапросЦен.ПериодДок=НАЧАЛОПЕРИОДА(ИсточникДанных.Регистратор.Дата, День)
// а здесь собственно сами цены на эти даты
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ РАЗЛИЧНЫЕ
   Период,
   ТипЦен,
   Номенклатура,
   ХарактеристикаНоменклатуры,
   Цена
ИЗ
   РегистрСведений.ЦеныНоменклатуры
) РегЦены
ПО
   РегЦены.Номенклатура = ЗапросЦен.Номенклатура
   И РегЦены.ХарактеристикаНоменклатуры = ЗапросЦен.ХарактеристикаНоменклатуры
   И РегЦены.ТипЦен = ЗапросЦен.ТипЦен
   И РегЦены.Период=ЗапросЦен.МаксПериод


если просто выполняю запрос, все соединяется нормально. а в отчете продаж записи множатся. подозреваю, что это происходит из-за того, что СКД выкидывает какие-то неиспользуемые поля, они уходят из условия и записи множатся. что надо сделать с фигурными скобками, чтобы все условия в отборе сохранились (их не выкинуло СКД)?
1 samozvanec
 
26.03.13
14:17
че значит множатся?
2 Эмбеддер
 
26.03.13
14:24
(1) например, в 2-х таблицах (продажи и цены) по 10 записей, везде номенклатура+характеристика номенклатуры+период уникальные (различные). и соединяем их по условию номенклатура=номенклатура, характеристика=характеристика, период=период, то при равенстве всех наборов 10 записей так и останется. но если выкинуть какие-то проверки, что делает СКД, оставив допустим только номенклатура=номенклатура, то записей станет больше 10, максимум 10*10=100 штук
3 samozvanec
 
26.03.13
14:35
(2) типа СКД игнорирует условия соединения, ты это имеешь в виду?
4 Эмбеддер
 
26.03.13
14:40
(3) да
5 samozvanec
 
26.03.13
14:46
(4) не бывает такого. смотри настройки. может там связь наборов, может ресурсы как-то по-хитрому считают...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший