Имя: Пароль:
1C
1С v8
Неправильно считаются остатки в ОстаткиИОбороты
0 askharlov
 
04.09.13
15:37
Добрый день, всем!
Сделал запрос по остаткам и оборотам из виртуальной таблицы регистра накопления подчиненного регистратору. В запросе выбран также и регистратор.
Чтоб правильно считались остатки в том случае, когда регистратор не выводится в отчет поставил периодичность Авто и выбрал в запросе ПериодСекунда (все как написано на ИТС).
Все работает отлично (и с выбранным регистратором и без него), начальный и конечный остаток считается верно.
Далее...:
Делаю в запросе левое соединение с выборкой по расходным документам (которые являются регистратором) и оттуда беру одно поле: Сумма.
После этой последней манипуляции (левого соединения) начальные и конечные остатки считаются неправильно. Если регистратор выбран в отчете, то правильно, если не выбран, то неправильно (остатки сильно завышены).
В чем может быть проблема????
1 Starhan
 
04.09.13
15:42
запрос то покажешь?
2 askharlov
 
04.09.13
15:43
Конечно:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Организация,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Объект,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.ФазаРабот,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.ПредназначениеВидРабот,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Склад,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.ЛЗК,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Заявка,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Номенклатура,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.ХарактеристикаНоменклатуры,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.КоличествоНачальныйОстаток,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.КоличествоКонечныйОстаток,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.КоличествоПриход,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.КоличествоРасход,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.ПериодСекунда,
    ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Регистратор,
    ВЗСуммы.Сумма КАК СуммаРасход
ИЗ
    РегистрНакопления.ЗаявкиНаПоставкуОтУПТК.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            РасходСоСкладаУВТКТовары.Номенклатура КАК Номенклатура,
            СУММА(РасходСоСкладаУВТКТовары.Сумма) КАК Сумма,
            РасходСоСкладаУВТКТовары.Документ КАК Документ,
            РасходСоСкладаУВТКТовары.Ссылка КАК Ссылка
        ИЗ
            Документ.РасходСоСкладаУВТК.Товары КАК РасходСоСкладаУВТКТовары
        
        СГРУППИРОВАТЬ ПО
            РасходСоСкладаУВТКТовары.Номенклатура,
            РасходСоСкладаУВТКТовары.Документ,
            РасходСоСкладаУВТКТовары.Ссылка) КАК ВЗСуммы
        ПО ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Заявка = ВЗСуммы.Документ
            И ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Номенклатура = ВЗСуммы.Номенклатура
            И ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Регистратор = ВЗСуммы.Ссылка
3 askharlov
 
04.09.13
16:13
up
4 vicof
 
04.09.13
16:14
ЕстьNULL не забудь
5 askharlov
 
04.09.13
16:23
Прошу прощения! А куда ЕстьNULL влепить?
6 le_
 
04.09.13
16:23
А чего сумму в регистр не добавишь?
7 vicof
 
04.09.13
16:28
(5) Давай подумаем, когда NULLы образуются
8 le_
 
04.09.13
16:32
Тут объединение надо делать, если уж на то пошло...
9 askharlov
 
04.09.13
16:36
(6) Ну, если сумму добавить в регистр, то она будет только в расходе, приходные документы без суммы. Некрасиво получается, - регистр не закрывается по сумме.
(7) Так вроде ж в моем запросе NULLами не пахнет... Я ж говорю, что без левого соединения все работает шикарно. А чего я сделал-то плохого: всего навсего добавил еще один реквизит. Причем соединение ЛЕВОЕ, поэтому дополнительных записей не появилось, так откуда же NULLы?
(8) Не понял! Не вижу что с чем объединять, мне-то дополнительных записей не надо
10 vicof
 
04.09.13
16:38
(9) Левое соединение на то и левое, чтобы получались NULLы
11 le_
 
04.09.13
16:49
(9)
1. А почему нельзя делать движения из приходных документов?
2. Объединять нужно запрос по остаткам с ТЧ документов.
Примерно так:
    ВЫБРАТЬ
    ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента,
    ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя,
    ЗаказыПокупателейОстаткиИОбороты.КоличествоНачальныйОстаток,
    ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток,
    ЗаказыПокупателейОстаткиИОбороты.КоличествоОборот,
    ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход,
    0 КАК Сумма
ИЗ
    РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Авто, , ) КАК ЗаказыПокупателейОстаткиИОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ЗаказПокупателяТовары.Ссылка.ДоговорКонтрагента,
    ЗаказПокупателяТовары.Ссылка,
    0,
    0,
    0,
    0,
    ЗаказПокупателяТовары.Сумма
ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
12 spu79
 
04.09.13
16:50
можно попробую проявить чудеса телепатии?
Сумма в отчета по каждой строке = сумма документа * кол-во строк в документе. Угадал? внимательный на запрос смотри.
13 spu79
 
04.09.13
18:28
СУММА(РасходСоСкладаУВТКТовары.Сумма) КАК Сумма,
            РасходСоСкладаУВТКТовары.Документ КАК Документ,
            РасходСоСкладаУВТКТовары.Ссылка КАК Ссылка
        ИЗ
            Документ.РасходСоСкладаУВТК.Товары КАК РасходСоСкладаУВТКТовары
        
        СГРУППИРОВАТЬ ПО
            РасходСоСкладаУВТКТовары.Номенклатура,

Первая и последняя строка ни каких размышлений не добавляет?
14 askharlov
 
05.09.13
11:57
(12) не понял. У меня не сумма увеличивается, а количество.
(13) не добавляет. не вижу своих огрехов
(11) может и будет работать, только детальные записи выводить нельзя будет, придется выводить всегда только с группировкой. Хотя почему мой запрос глючит все равно никак не понимаю, вроде в нем все просто и логично.
(10) Согласен, но НУЛы получаются то в сумме, а проблемы то в расчете остатков по количеству. Попробовал поставить ЕстьНулл в сумме - не спасло.
15 spu79
 
05.09.13
12:30
(14) про (13. Ну что не понятно? СУММА(РасходСоСкладаУВТКТовары.Сумма) КАК Сумма, - считает сумму по колонке Сумма, ТЧ товары. так?
СГРУППИРОВАТЬ ПО
РасходСоСкладаУВТКТовары.Номенклатура, - группирует по номенклатуре, т.е. по Каждой строке ТЧ товары.
В результате группировки на каждую строку номенклатуры пишется полная сумма документа.
Если уж использовать итоги по колонке ТЧ, то в группировке не используй детализацию по строкам.
16 hhhh
 
05.09.13
12:39
(14) в общем соединение у тебя в конце

        ПО ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Заявка = ВЗСуммы.Документ
            И ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Номенклатура = ВЗСуммы.Номенклатура
            И ЗаявкиНаПоставкуОтУПТКОстаткиИОбороты.Регистратор = ВЗСуммы.Ссылка


ты должен жестко обеспечить, чтобы не было дубляжа, то есть

ВЗСуммы.Документ, ВЗСуммы.Номенклатура, ВЗСуммы.Ссылка - была одна строка.

ЕСли у тебя в таблице ВЗСуммы есть дубли по этим трем параметрам, то сразу выбрасывай свой запрос в корзину.
17 askharlov
 
05.09.13
12:57
(16) Ну, понятно!
Так я же именно для исключения дублей и делал вложенный запрос. И написал в нем:
      СГРУППИРОВАТЬ ПО
            РасходСоСкладаУВТКТовары.Номенклатура,
            РасходСоСкладаУВТКТовары.Документ,
            РасходСоСкладаУВТКТовары.Ссылка

Так что ДУБЛИ исключены!
18 askharlov
 
05.09.13
13:02
(15) извини, ты или неправ, или твою мысль я не понимаю. Группировка по номенклатуре во вложенном запросе для того и стоит, чтоб сумма считалась только по соответствующей номенклатуре, а не по всему документу. С суммой, кстати, все тип-топ (вижу в выведенном на экране отчете). А вот, как и писал с начальным и конечным остатками по количеству проблема!
19 askharlov
 
05.09.13
13:54
Вроде, нашел!:
Так как остатки в виртуальной таблице считаются по периодам, в числе которых является и регистратор, то, когда я соединяю виртуальную таблицу остатков и оборотов с таблицей расходных документов и ставлю связь по регистратору в том числе, то этот регистратор и портит всю картину (не дает СКД нормально посчитать остатки).
Убрал связь по регистратору и сразу остатки пошли правильные. Но, понятно, что при выведенном отчет регистраторе теперь завышенная сумма.
Вот теперь думаю, как с этим бороться. Думаю, можно ли как-то побороть не изменяя динамически запрос в зависимости от наличия - отсутствия регистратора в отчете
20 le_
 
05.09.13
14:02
(19) >Вот теперь думаю, как с этим бороться.
см. (8)
21 ДемонМаксвелла
 
05.09.13
14:03
(19) СКД?????
чего молчал то?

флаг "Обязательное поле"
22 askharlov
 
05.09.13
14:14
(21) какому полю влепить этот флаг? И где (в какой вкладке)?
23 askharlov
 
05.09.13
14:15
понял. Во вкладке "Роль"? А какому полю?