Объединение запросов, Остатки и Обороты по регистратору
Привет!
Есть нетиповой регистр ПодарочныеСертификаты. Нужно получить остатки по нему и движения в разрезе регистраторов. Если я правильно понял, то для этого нужно объединить в запросе виртуальные таблицы Остатки и ОборотыИОстатки. Сделал это по примеру, который нашел в инете. Проблема в том, что пример этот подразумевает использование СКД, с которой я вообще не знаком.
Прошу подсказать как решить задачу максимально простым и быстрым способом. Спасибо)
Ошибки:
1. При открытии отчета: Ошибка в схеме компоновки данных по причине: Ошибка получения информации набора данных по причине: Ошибка в запросе набора данных по причине: {(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
2. При вызове конструктора запроса из модуля: Ожидается имя таблицы <<?>> СГРУППИРОВАТЬ ПО
Есть нетиповой регистр ПодарочныеСертификаты. Нужно получить остатки по нему и движения в разрезе регистраторов. Если я правильно понял, то для этого нужно объединить в запросе виртуальные таблицы Остатки и ОборотыИОстатки. Сделал это по примеру, который нашел в инете. Проблема в том, что пример этот подразумевает использование СКД, с которой я вообще не знаком.
Прошу подсказать как решить задачу максимально простым и быстрым способом. Спасибо)
Ошибки:
1. При открытии отчета: Ошибка в схеме компоновки данных по причине: Ошибка получения информации набора данных по причине: Ошибка в запросе набора данных по причине: {(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
2. При вызове конструктора запроса из модуля: Ожидается имя таблицы <<?>> СГРУППИРОВАТЬ ПО
Запрос.Текст = "ВЫБРАТЬ
| ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
| СУММА(ПодарочныеСертификатыОстатки.КоличествоОстаток) КАК Остаток,
| NULL как Регистратор
|
|ПОМЕСТИТЬ ОстаткиИОбороты
|
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.Остатки(, ) КАК ПодарочныеСертификатыОстатки,
|
|СГРУППИРОВАТЬ ПО
| ПодарочныеСертификатыОстатки.Штрихкод
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПодарочныеСертификатыОбороты.Штрихкод,
| NULL,
| ПодарочныеСертификатыОбороты.Регистратор
|
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.Обороты(НачалоПериода, КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОстаткиИОбороты.Штрихкод КАК Штрихкод,
| СУММА(ОстаткиИОбороты.Остаток) КАК Остаток,
| ОстаткиИОбороты.Регистратор КАК Регистратор
|ИЗ
|ОстаткиИОбороты КАК ОстаткиИОбороты
|
|СГРУППИРОВАТЬ ПО
| ОстаткиИОбороты.Штрихкод,
| ОстаткиИОбороты.Регистратор
|
|ИТОГИ ПО
| ОстаткиИОбороты.Штрихкод";
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) запрос конечно стремный.
Формируете временную таблицу из 3 подзапросов объединением. При этом в 3 подзапросе пытаетесь использовать формируемую временную таблицу. Ее на этот момент еще нет. Она будет доступна только если ее использовать в следующем пакете запроса.
Опишите подробно, что хотите получить в итоге?
Можно в Excel пример набросать и показать.
Пока видится, что нужны колонки Штрихкод, Регистратор, Остаток.
Остаток на момент регистратора, или общий остаток на текущий момент?
Если на момент регистратора, то и объединение не нужно, Все данные есть в виртуальной таблице ОстаткиИОбороты.
Если на текущий момент, то какой смысл в выводе регистраторов без данных на этот момент?
Формируете временную таблицу из 3 подзапросов объединением. При этом в 3 подзапросе пытаетесь использовать формируемую временную таблицу. Ее на этот момент еще нет. Она будет доступна только если ее использовать в следующем пакете запроса.
Опишите подробно, что хотите получить в итоге?
Можно в Excel пример набросать и показать.
Пока видится, что нужны колонки Штрихкод, Регистратор, Остаток.
Остаток на момент регистратора, или общий остаток на текущий момент?
Если на момент регистратора, то и объединение не нужно, Все данные есть в виртуальной таблице ОстаткиИОбороты.
Если на текущий момент, то какой смысл в выводе регистраторов без данных на этот момент?
(9) Нужен простой отчет по остакам сертификатов с детализацией движений по регистратору. Я в семерке такой сделал бы без проблем) пытался использовать ОстаткиИОбороты по регистратору с обходом результатов по группировкам. первой группировкой являлся штрихкод, второй - регистратор. Так вот я не понял как мне получить конечный остаток по штрихкоду т.к. группировка выдает мне все движения по регистру. Например, есть Приход ШК1 и ШК2 и расход ШК1. По идее, в результат запроса ШК1 попадать не должен, так как его остаток = 0. Но обход по группировке мне выдает его движения.
(11) как-то так:
ВЫБРАТЬ
ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток,
ПОМЕСТИТЬ ОстаткиИОбороты
ИЗ
РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки,
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ОстаткиСертификатов.Штрихкод
ОстаткиСертификатов.Остаток,
ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
ИЗ
ОстаткиСертификатов КАК ОстаткиСертификатов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )
Показать
прошу прощения. Я не часто пишу на форуме. По поводу соединения - это я заработался уже :(. Да, запрос в (15) все правильно покажет
(15)
наверное последний вопрос. как мне правильно оформить этот код? сделал так: выдает ошибку...
наверное последний вопрос. как мне правильно оформить этот код? сделал так: выдает ошибку...
Запрос.Текст = "ВЫБРАТЬ
|ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
|ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток,
|ПОМЕСТИТЬ ОстаткиИОбороты
|ИЗ
|РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки,
|;
|//////////////////////////////////////////////////////////// //////////////////////
|ВЫБРАТЬ
|ОстаткиСертификатов.Штрихкод
|ОстаткиСертификатов.Остаток,
|ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
|ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
|ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
|ИЗ
|ОстаткиСертификатов КАК ОстаткиСертификатов
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
|ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )";
Показать
(29) у меня нет вашей конфигурации. писал прямо тут.
Вот так попробуйте:
Вот так попробуйте:
Запрос.Текст = "ВЫБРАТЬ
|ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
|ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток
|ПОМЕСТИТЬ ОстаткиСертификатов
|ИЗ
|РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки
|;
|//////////////////////////////////////////////////////////// //////////////////////
|ВЫБРАТЬ
|ОстаткиСертификатов.Штрихкод
|ОстаткиСертификатов.Остаток,
|ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
|ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
|ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
|ИЗ
|ОстаткиСертификатов КАК ОстаткиСертификатов
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
|ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )";
Показать
В первом запросе после синонима таблицы стоит запятая, намекая на то, что там будет указана вторая таблица. А её нет. Убрать запятую надо, видимо.
Вообще не понятно, для чего использовать все эти объединения, когда существует вирт. таблица ОстаткиИОбороты
Ошибка при открытии обработки:
Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
Вообще остатков по регистратору не бывает. Хотите получить - анализируйте обороты от начала времён и до интересующей даты...
Настоятельно рекомендую для начала закинуть запрос в консоль запросов. Там отладить, а потом уже можно будет его в СКД прицепить
Судя по всему, задача состоит в том, чтобы увидеть отчет вида "подарочный сертификат","остаток на начало периода","расход в разрезе документов", "остаток на конец периода". Так ?
и почему же он не должен попадать, если есть движения за период ? А вот если поставить условие на КонечныйОстаток <> 0, тогда и запрос возвращать его не будет
(13) научите, плз, как правильно проставить условие.
Запрос.Текст = "ВЫБРАТЬ
| ПодарочныеСертификатыОстаткиИОбороты.Штрихкод КАК Штрихкод,
| ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК ПодарочныеСертификатыОстаткиИОбороты
|
|СГРУППИРОВАТЬ ПО
| ПодарочныеСертификатыОстаткиИОбороты.Штрихкод,
| ПодарочныеСертификатыОстаткиИОбороты.Регистратор,
| ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток
|
|УПОРЯДОЧИТЬ ПО
| ПодарочныеСертификатыОстаткиИОбороты.Регистратор
|ИТОГИ ПО
| Штрихкод";
Запрос.Текст = "ВЫБРАТЬ
| ПодарочныеСертификатыОстаткиИОбороты.Штрихкод КАК Штрихкод,
| ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК ПодарочныеСертификатыОстаткиИОбороты
|
|СГРУППИРОВАТЬ ПО
| ПодарочныеСертификатыОстаткиИОбороты.Штрихкод,
| ПодарочныеСертификатыОстаткиИОбороты.Регистратор,
| ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток
|
|УПОРЯДОЧИТЬ ПО
| ПодарочныеСертификатыОстаткиИОбороты.Регистратор
|ИТОГИ ПО
| Штрихкод";
(18) в данном случае условие не поможет. Виртуальная таблица ОстаткиИОбороты с периодичностью по регистратору будет выдавать КоличествоКонечныйОстаток на момент регистратора.
(20) это условие не даст правильный результат. Просто будут исключены записи, где на момент регистратора КоличествоКонечныйОстаток = 0 .
Пример:
Док - регистратор, Ш - штрихкод, К - кол-во.
+ Док1 Ш1 К1
+ Док2 Ш2 К1
- Док3 Ш1 К1 // только этой записи не будет
(20) это условие не даст правильный результат. Просто будут исключены записи, где на момент регистратора КоличествоКонечныйОстаток = 0 .
Пример:
Док - регистратор, Ш - штрихкод, К - кол-во.
+ Док1 Ш1 К1
+ Док2 Ш2 К1
- Док3 Ш1 К1 // только этой записи не будет
Если уж так хочется объединением запросов, то объедините остатки на начальную дату (по виртуальной таблице остатков), обороты за период (по виртуальной таблице Обороты) и остатки на конец периода. Результат можете сгруппировать и упорядочить по дате.
И будет Вам счастье.
И будет Вам счастье.
По идее, в результат запроса ШК1 попадать не должен, так как его остаток = 0.
руководствовался исключительно этим :)
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот