СКД: Группировки??? #547244


#0 by NeeD
Элементарная задача: построить ведомость по остаткам товаров и исключить из неё движения по документам определенного типа. Решаем через СКД. Исходный запрос: ВЫБРАТЬ    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,    ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход Всё нормально строится, только нужно исключить движения по документу КорректировкаСерийИХарактеристикТоваров. Попробуем это сделать:    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, С движениями всё нормально, но вот с остатками непонятки - они начинают суммироваться как бы по нижнему уровню групировки по регистратору! То есть, например, если начальный остаток был 1, а затем одно произвольное движение (для которого в расшифровке по группировке начальный остаток тоже 1), то в данном варианте отчета, в начальном остатке будет уже 2!!! Как ни будь можно обойти эту проблему, или для подобных задач СКД не подходит, и нужно программно организовывать обход группировки по регистратору с анализом самого регистратора, то есть писать отчет с 0?
#1 by Defender aka LINN
Играй, гармонь. Роли полей.
#2 by Dem1urg
А так нельзя? ВЫБРАТЬ    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,    ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход ГДЕ НЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаСерийИХарактеристикТоваров
#3 by NeeD
Не помогает. А можно поподробнее. Роль у Номенклатуры - измерение. Что ещё нужно сделать?
#4 by IronDemon
Создай новый запрос из 1 варианта в СКД и посмотри внимательно
#5 by NeeD
Исходя из более правильный вариант:    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,    ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход ГДЕ    (НЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.КорректировкаСерийИХарактеристикТоваров) Куда смотреть - на роли? Там вроде всё очевидно...
#6 by NeeD
Одним словом вопрос остается открытым... Может кто сталкивался?
#7 by le_
На ИТС есть пара статей о остатках и регистраторах.
#8 by proger2011
Попробуй вытащить регистратор и секунду в поля
#9 by NeeD
Тут ещё круче. Эта проблема проявляется только если группировать только по номенклатуре. Если добавить ещё и группировку по регистратору - то всё нормально, остатки не искажаются.
#10 by NeeD
P.S. В данном запросе поля регистратор нет, но я пробовал и с ним, и получалось. Но мне не нужен разворот по регистратору.
#11 by IronDemon
Во вложенный запрос помести
#12 by Defender aka LINN
Мда. Нахрена, интересно, я ответы пишу?
#13 by le_
Регистратор - это уточнение периода.
#14 by NeeD
Благодарю! Разобрался! Но без нормального описания СКД нет понимания почему оно заработало в результате соподчинения измерения регистратору :-). Одним словом нужна нормальная книга, может посоветуете что ни будь?
#15 by Defender aka LINN
По сКД такое богатство книг, даже и не знаю, что посоветовать... Попробуй Хрусталеву. Еще модно почитать Хрусталеву, или Хрусталеву. Если ничего из этого не найдешь - то хотя бы Хрусталеву почитай.
#16 by le_
Кстати, можт, есть желающие еще одну книгу написать? ) Не забудьте только подробнее описать про расширение языка запросов для СКД, про "Номер группы" в конструкторе запросов, ну и про остатки и обороты с регистраторами и реквизитами регистраторов. Остальное у Хрусталевой, вроде, имеется ) Думаю, она сразу станет бестселлером среди 1с-ников )
#17 by Defender aka LINN
"про "Номер группы" в конструкторе запросов" - тебе открыть тайну? Он еще в 8.0 был. И про него все написано в документации. Книгу ему подавай...
#18 by le_
Что-то я не нашел...
#19 by IronDemon
Вы про разный "Номер группы". Один про номер в объединении таблиц второй про поле.
#20 by Defender aka LINN
Неа. Он же сказал "в конструкторе запросов"
#21 by le_
Я имею ввиду НГ на закладке "Компоновка данных" (подзакладка "Таблицы"). Если кто знает, подскажите, для чего оно.
#22 by Defender aka LINN
Ровно для того же, для чего и в построителях. И работает точно так, как описано в документации. Поэкспериментируй с номерами групп и посмотри, какие тексты запроса будут получаться, и все поймешь.
#23 by le_
Defender, по-моему, тебе нужно задуматься о реализации идеи в ) Готов быть первым покупателем )
#24 by Defender aka LINN
Документацию не читают, Хрусталеву не читают... Думаешь, кто-нибудь меня читать станет? :)
#25 by le_
Думаю, будут ) Ты, главное, опиши все заковыристые и неосвещенные вопросы ) А если еще и курсы будешь вести и в качестве литературы свою книгу  рекомендовать, она оч. быстро расходиться будет.
#26 by NeeD
Тут в продолжении темы очередные непонятки... Пока Хрусталеву не прочитал, надеюсь на вашу помощь :-). Исходный запрос - это так сказать в качестве примера. Реально нужно к нему присоединять ещё и остатки на конец периода по резервам, заказам, производству и т.д. Все эти дополнительные остатки выбираются из соответствующих таблиц "остатки" в отличии от основных данных, которые выбираются из таблицы "ОстаткиИОбороты". Так вот, для нашего случая, когда происходит неявный обход группировки "регистратор", нужно у полей этих дополнительных остатков установить признак "Остатки", причём у меня заработало только в том случае, если я указал в поле "тип" - "нет". В случае выбора "Конечный остаток" или "Начальный остаток" при выводе отчета возникает ошибка, что то типа несоответствия чего то из Набора1 (точно не помню - пишу из дома). Насколько я понял, только у одного поля может быть установлено "Начальный остаток" или "Конечный остаток", только вот непонятна суть этих типов остатков, если всё работает и с типом "Нет"... И вообще, для большого количества полей типа "Остаток" как быть, особенно если выборка производится из нескольких таблиц "ОстаткиИОбороты". Извиняюсь за сумбурность изложения, но уж больно тема заинтересовала, хочется разобраться :-)
#27 by IronDemon
Для роли поля "Остатки", как ни странно, нужны 4 поля. Начальный остаток, приход, расход, конечный остаток. Не обязательно их выводить, достаточно чтобы они присутствовали для расчета.
#28 by NeeD
А если таких полей больше 4?
#29 by IronDemon
Оборот? Он не нужен :)
#30 by IronDemon
Ну или
#31 by NeeD
Полей больше. Из регистра остатки товаров - начальный остаток, приход, расход, конечный остаток, из регистра резервы - конечный остаток, из регистра заказы на производство - конечный остаток, из регистра заказы поставщикам - конечный остаток, из регистра товары к передаче - конечный остаток, из регистра товары к получению - конечный остаток. Полное соединение по номенклатуре. В приход и расход включать информацию в зависимости от регистратора (довольно сложные условия). Так вот, для всех полей кроме первых четырех я прописал тип поля - остатки с типом "нет". Получился нужный мне результат. Правильно ли это с методологической точки зрения?
#32 by IronDemon
>> В приход и расход включать информацию в зависимости от регистратора Это методологически не правильно :) В этом случае у тебя будут остатки не те которые рассчитаны в регистре а те которые посчитаются в запросе. >> для всех полей кроме первых четырех Они будут "правильные" не по всем группировкам.
#33 by NeeD
В моем случае, несмотря на то что на приход и расход стоят фильтры, остатки абсолютно правильные :-). Только вот алгебра получается кривая: нач.ост. + приход - расход не обязательно = кон.остаток. Но нам нужно именно так. По большому счету эти поля нужно называть по другому. Одним словом, нужно отфильтровать складские движения и всякие там пересорты. И мне помогли достичь этого результата роли полей - соподчинение измерения "номенклатура" регистратору.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С