Запрос

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Запрос

Сообщение Marisha_P »

Здравствуйте! Подскажите, пожалуйста, как нужно подправить запрос, чтобы получить корректные данные.
В данном запросе выбираются счета-фактуры с ограничением по контрагенту и статье затрат на конкретную дату

Код: Выделить всё

select * from
pick, synonym pick pick2, 
groupsch(readonly), spgrsch(readonly), schfact(readonly),
basedoc(readonly),
synonym schfact  schfact_kor (readonly)
where
((
      6==pick2.wlist
and 4==pick.wlist
and pick2.crec==schfact.corg
and date1<<=schfact.dfact
and date2>>=schfact.dfact
and 0==spgrsch.wlist
and schfact.cbasedoc==spgrsch.cbasedoc
and spgrsch.cgroupsch==pick.crec
));   
А мне нужно, чтоб в результат попадали также и корректировочные счет-фактуры, у них привязки к ДО нет, и данные для них надо брать из основной счет-фактуры...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Запрос

Сообщение edward_K »

BookPrZk.cSchFactR - ссылка на корректируемую запись регистрации - новый вариант
(BookPrZk.Flags and cwCorr_Dop) -
признак включения корректирующей записи книги покупок в дополнительный лист
(BookPrZk.Flags and cwSpecCorr_Pr) -
спецкорректировка книги продаж, запись ссылается на корректируемую запись из другой СФ
BookPrZk.ds[2] - корректируемый период для непривязанных записей
константы
cwCorr_Dop : Word = 4; // Корректирующая запись, признак попадания в доп.лист
cwSpecCorr_Pr : Word = 8; // Корректирующая запись книги продаж, запись ссылается на корректируемую запись из другой СФ
В целом запрос будет сложноват.
Вам надо отобрать СФ с типом корректирующая СФ, к ней поднять книгу продаж и по ней подтянуть СФ, а уже по этим СФ поднять ДО.
Простым запросом в атлантисе не получиться , поскольку записей о регистрации в книгах будет несколько. Либо DSQL, либо вложенные запросы.
Нет под рукой базы с корр.СФ. Мож кто поможет еще 8) .

and BookPrZk.cSchFactR == BookPrZk_Corr.NRec
and BookPrZk_Corr.cSchFactS == SchFact_Corr.NRec
Если вам все равно на дупликаты то можно строку
and schfact.cbasedoc==spgrsch.cbasedoc
заменить например на
and if(isvalidall(tnSchFact_Corr),SchFact_Corr.cbasedoc, schfact.cbasedoc)==spgrsch.cbasedoc
Ну а потом нужно вырезать только уникальные записи - вот здесь у вас будут сложности без DSQL.
Впрочем на vip вы просто делаете обход по SCHFACT и проверяете валидность корректируемой СФ и все, а вот в сапорте будет не очень.
Ответить