Имя: Пароль:
1C
1С v8
РБ и запрос
0 zak555
 
03.07.14
13:19
осв по счету показывает

контрагент не0
договор 0
валюта не0

запихнул запрос в консоль

ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто2.Владелец,
    ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
    ХозрасчетныйОстатки.Валюта КАК Валюта,
    ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
    ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаОстатокДт,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт КАК ВалютнаяСуммаОстатокДт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт КАК ВалютнаяСуммаОстатокКт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет = &Счет, , Организация = &Орг) КАК ХозрасчетныйОстатки

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Субконто2.Владелец,
    ХозрасчетныйОстатки.Субконто2,
    ХозрасчетныйОстатки.Валюта,
    ХозрасчетныйОстатки.СуммаОстатокДт,
    ХозрасчетныйОстатки.СуммаОстатокКт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт,
    ХозрасчетныйОстатки.Субконто3

УПОРЯДОЧИТЬ ПО
    Субконто2,
    Валюта,
    Субконто3
ИТОГИ
    СУММА(СуммаОстатокДт),
    СУММА(СуммаОстатокКт),
    СУММА(ВалютнаяСуммаОстатокДт),
    СУММА(ВалютнаяСуммаОстатокКт)
ПО
    Субконто2,
    Валюта

показывает аналогично ОСВ

решил обойти написанный запрос по группировкам -- у группировки договор ресурс не равен 0

почему?
1 zak555
 
03.07.14
20:14
на другом компе нормально отработало
2 VitShvets
 
03.07.14
20:49
Если было демоническое обновление, то кэш почистить можно попробовать.
3 a_alenkin
 
03.07.14
20:53
что такое РБ? Республика Беларусь?
4 zak555
 
03.07.14
20:54
(3) РегистрБухгалтерии
5 zak555
 
03.07.14
20:55
вопрос в тему

какое условие добавить, чтобы выводил результаты, где сумма по договору = 0 ?
6 VitShvets
 
03.07.14
20:58
Попробуй "ИМЕЮЩИЕ СУММА(НужнаяСумма) = 0"
7 zak555
 
03.07.14
21:29
(6) это не то
8 zak555
 
04.07.14
08:33
+ (5) пока мысль
вывести не нулевые договора, потом их соединить с запросом где есть ИТОГИ и оставить NULL
9 zak555
 
04.07.14
10:14
+ (8) но что-то не выходит
10 zak555
 
04.07.14
10:19
ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    ХозрасчетныйОстатки.Субконто2 КАК Договор,
    ХозрасчетныйОстатки.Валюта,
    ХозрасчетныйОстатки.Субконто3 КАК Документ,
    ОстаткиНеНулевыхДоговоров.Субконто2 КАК ДоговорЕсть,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт,
    ОстаткиНеНулевыхДоговоров.СуммаОстатокКт КАК СуммаЕсть
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Организация = &Организация) КАК ОстаткиНеНулевыхДоговоров
        ПО ХозрасчетныйОстатки.Субконто2 = ОстаткиНеНулевыхДоговоров.Субконто2
            И (ОстаткиНеНулевыхДоговоров.Субконто2 ЕСТЬ NULL )
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Контрагент КАК Контрагент,
    ВТ.Договор КАК Договор,
    ВТ.Валюта КАК Валюта,
    ВТ.Документ,
    ВТ.СуммаОстатокКт КАК СуммаОстатокКт,
    ВТ.ВалютнаяСуммаОстатокКт КАК ВалютнаяСуммаОстатокКт
ИЗ
    ВТ КАК ВТ
ИТОГИ
    СУММА(СуммаОстатокКт),
    СУММА(ВалютнаяСуммаОстатокКт)
ПО
    Контрагент,
    Договор,
    Валюта
11 VitShvets
 
04.07.14
10:36
Я бы использовал основной таблицей, договора:
12 VitShvets
 
04.07.14
10:41
1. Формируем выборку по счетам, как в "ВТ", только без левого соединения.
2. Формируем еще одну таблицу "ВТ_Договора", как выборку из справочника договоров с условием
Владелец В (ВЫБРАТЬ РАЗЛИЧНЫЕ Контрагент ИЗ ВТ)
3. Соединяем 2 таблицы, при этом основная таблица, это таблица "ВТ_Договора", суммы договорам по ЕСТЬNULL() ставим в 0.
4. Группируем и формируем итоги.
13 zak555
 
04.07.14
11:01
получилось вот что -- можно ли это ускорить ?



ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто2 КАК Договор,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстатки
ГДЕ
    ХозрасчетныйОстатки.СуммаОстатокКт = 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто2.Владелец КАК Контрагент,
    ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
    ХозрасчетныйОстатки.Валюта КАК Валюта,
    ХозрасчетныйОстатки.Субконто3,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт КАК ВалютнаяСуммаОстатокКт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
            &Период,
            Счет = &Счет,
            ,
            Организация = &Организация
                И Субконто2 В
                    (ВЫБРАТЬ
                        ВТ.Договор
                    ИЗ
                        ВТ)) КАК ХозрасчетныйОстатки
ИТОГИ
    СУММА(СуммаОстатокКт),
    СУММА(ВалютнаяСуммаОстатокКт)
ПО
    
    Субконто2,
    Валюта
14 VitShvets
 
04.07.14
14:50
А зачем 2 раза выборка из остатков? Я что-то вот такое имел ввиду:
ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    ХозрасчетныйОстатки.Субконто2 КАК Договор,
    ХозрасчетныйОстатки.Валюта,
    ХозрасчетныйОстатки.Субконто3 КАК Документ,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт,
    ХозрасчетныйОстатки.ВалютнаяСуммаОстатокКт
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстатки

ИНДЕКСИРОВАТЬ ПО
    Контрагент,
    Договор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДоговорыКонтрагентов.Владелец КАК Контрагент,
    ДоговорыКонтрагентов.Ссылка КАК Договор,
    ДоговорыКонтрагентов.ВалютаВзаиморасчетов КАК Валюта
ПОМЕСТИТЬ ВТ_Договора
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
    ДоговорыКонтрагентов.Владелец В
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ВТ_Остатки.Контрагент
            ИЗ
                ВТ_Остатки)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Договора.Контрагент КАК Контрагент,
    ВТ_Договора.Договор КАК Договор,
    ЕСТЬNULL(ВТ_Остатки.Валюта, ВТ_Договора.Валюта) КАК Валюта,
    ЕСТЬNULL(ВТ_Остатки.СуммаОстатокКт, 0) КАК Сумма,
    ЕСТЬNULL(ВТ_Остатки.ВалютнаяСуммаОстатокКт, 0) КАК СуммаВалютная
ИЗ
    ВТ_Договора КАК ВТ_Договора
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
        ПО ВТ_Договора.Контрагент = ВТ_Остатки.Контрагент
            И ВТ_Договора.Договор = ВТ_Остатки.Договор
ИТОГИ
    СУММА(Сумма),
    СУММА(СуммаВалютная)
ПО
    Договор,
    Контрагент,
    Валюта
15 zak555
 
04.07.14
14:50
(14) зачем мне все договора ?
16 VitShvets
 
04.07.14
14:53
Это будут все договора, по контрагентам попавшим в выборку по остатка. Я видимо не понимаю фразу: "чтобы выводил результаты, где сумма по договору = 0"
17 VitShvets
 
04.07.14
14:55
Условно, если договор завели, а движений по нему ещё не было, то выборку по регистру договор не попадет, но формально остатки по нему равны нулю.