Объединение запросов, Остатки и Обороты по регистратору

1. qwert werty (request4t) 05.01.17 12:57 Сейчас в теме
Привет!

Есть нетиповой регистр ПодарочныеСертификаты. Нужно получить остатки по нему и движения в разрезе регистраторов. Если я правильно понял, то для этого нужно объединить в запросе виртуальные таблицы Остатки и ОборотыИОстатки. Сделал это по примеру, который нашел в инете. Проблема в том, что пример этот подразумевает использование СКД, с которой я вообще не знаком.

Прошу подсказать как решить задачу максимально простым и быстрым способом. Спасибо)

Ошибки:
1. При открытии отчета: Ошибка в схеме компоновки данных по причине: Ошибка получения информации набора данных по причине: Ошибка в запросе набора данных по причине: {(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
2. При вызове конструктора запроса из модуля: Ожидается имя таблицы <<?>> СГРУППИРОВАТЬ ПО

Запрос.Текст = "ВЫБРАТЬ
	               |	ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
	               |	СУММА(ПодарочныеСертификатыОстатки.КоличествоОстаток) КАК Остаток,
				   |    NULL как Регистратор
				   |
				   |ПОМЕСТИТЬ ОстаткиИОбороты
				   |
				   |ИЗ
	               |	РегистрНакопления.ПодарочныеСертификаты.Остатки(, ) КАК ПодарочныеСертификатыОстатки,
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ПодарочныеСертификатыОстатки.Штрихкод
				   |
				   |ОБЪЕДИНИТЬ ВСЕ
				   |
				   |ВЫБРАТЬ
	               |	ПодарочныеСертификатыОбороты.Штрихкод,
	               |	NULL,
				   |    ПодарочныеСертификатыОбороты.Регистратор
				   |
	               |ИЗ
	               |	РегистрНакопления.ПодарочныеСертификаты.Обороты(НачалоПериода, КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
				   |
   				   |ОБЪЕДИНИТЬ ВСЕ
   				   | 
                   |ВЫБРАТЬ
				   |	ОстаткиИОбороты.Штрихкод КАК Штрихкод,
				   |    СУММА(ОстаткиИОбороты.Остаток) КАК Остаток,
				   |	ОстаткиИОбороты.Регистратор КАК Регистратор
				   |ИЗ
				   |ОстаткиИОбороты КАК ОстаткиИОбороты
				   |
   	               |СГРУППИРОВАТЬ ПО
				   |	ОстаткиИОбороты.Штрихкод,
	               |	ОстаткиИОбороты.Регистратор
	               |
	               |ИТОГИ ПО
	               |	ОстаткиИОбороты.Штрихкод";

...Показать Скрыть
Ответы
2. Артём Шарипов (borodatii) 1 05.01.17 13:56 Сейчас в теме
В первом запросе после синонима таблицы стоит запятая, намекая на то, что там будет указана вторая таблица. А её нет. Убрать запятую надо, видимо.
3. jj_mail jj_mail (jj_mail) 05.01.17 14:54 Сейчас в теме
Вообще не понятно, для чего использовать все эти объединения, когда существует вирт. таблица ОстаткиИОбороты
4. qwert werty (request4t) 05.01.17 15:47 Сейчас в теме
(2) Блииин, точно зпт пропустил) Спасибо. Но работа над отчетом еще не закончена. Если что, будут еще вопросы)
5. qwert werty (request4t) 05.01.17 15:48 Сейчас в теме
(3) Мне, как человеку, только начинающему разбираться с запросами, вообще мало что понятно)
6. qwert werty (request4t) 05.01.17 15:51 Сейчас в теме
Ошибка при открытии обработки:

Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
7. Алексей Ермилов (Alex_E) 1544 05.01.17 15:54 Сейчас в теме
Вообще остатков по регистратору не бывает. Хотите получить - анализируйте обороты от начала времён и до интересующей даты...
Ann.prog1C; +1 Ответить
8. jj_mail jj_mail (jj_mail) 05.01.17 16:02 Сейчас в теме
Настоятельно рекомендую для начала закинуть запрос в консоль запросов. Там отладить, а потом уже можно будет его в СКД прицепить
9. Oleg Space (spacecraft) 05.01.17 16:11 Сейчас в теме
(1) запрос конечно стремный.
Формируете временную таблицу из 3 подзапросов объединением. При этом в 3 подзапросе пытаетесь использовать формируемую временную таблицу. Ее на этот момент еще нет. Она будет доступна только если ее использовать в следующем пакете запроса.
Опишите подробно, что хотите получить в итоге?
Можно в Excel пример набросать и показать.
Пока видится, что нужны колонки Штрихкод, Регистратор, Остаток.
Остаток на момент регистратора, или общий остаток на текущий момент?
Если на момент регистратора, то и объединение не нужно, Все данные есть в виртуальной таблице ОстаткиИОбороты.
Если на текущий момент, то какой смысл в выводе регистраторов без данных на этот момент?
10. jj_mail jj_mail (jj_mail) 05.01.17 17:02 Сейчас в теме
Судя по всему, задача состоит в том, чтобы увидеть отчет вида "подарочный сертификат","остаток на начало периода","расход в разрезе документов", "остаток на конец периода". Так ?
11. qwert werty (request4t) 05.01.17 17:07 Сейчас в теме
(9) Нужен простой отчет по остакам сертификатов с детализацией движений по регистратору. Я в семерке такой сделал бы без проблем) пытался использовать ОстаткиИОбороты по регистратору с обходом результатов по группировкам. первой группировкой являлся штрихкод, второй - регистратор. Так вот я не понял как мне получить конечный остаток по штрихкоду т.к. группировка выдает мне все движения по регистру. Например, есть Приход ШК1 и ШК2 и расход ШК1. По идее, в результат запроса ШК1 попадать не должен, так как его остаток = 0. Но обход по группировке мне выдает его движения.
12. qwert werty (request4t) 05.01.17 17:08 Сейчас в теме
13. jj_mail jj_mail (jj_mail) 05.01.17 17:12 Сейчас в теме
и почему же он не должен попадать, если есть движения за период ? А вот если поставить условие на КонечныйОстаток <> 0, тогда и запрос возвращать его не будет
14. Анна Бондаренко (Ann.prog1C) 05.01.17 17:42 Сейчас в теме
Если уж так хочется объединением запросов, то объедините остатки на начальную дату (по виртуальной таблице остатков), обороты за период (по виртуальной таблице Обороты) и остатки на конец периода. Результат можете сгруппировать и упорядочить по дате.
И будет Вам счастье.
15. Oleg Space (spacecraft) 05.01.17 17:47 Сейчас в теме
(11) как-то так:
ВЫБРАТЬ
    ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
    ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток,
ПОМЕСТИТЬ ОстаткиИОбороты
ИЗ
    РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки,
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ОстаткиСертификатов.Штрихкод
    ОстаткиСертификатов.Остаток,
    ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
    ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
    ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
ИЗ
	ОстаткиСертификатов КАК ОстаткиСертификатов
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
		ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )
 
...Показать Скрыть
16. qwert werty (request4t) 05.01.17 19:06 Сейчас в теме
(14) хочется как можно проще)
17. qwert werty (request4t) 05.01.17 19:07 Сейчас в теме
(15) Уже в понедельник опробую, спасибо)
18. qwert werty (request4t) 05.01.17 19:08 Сейчас в теме
(13) научите, плз, как правильно проставить условие.

Запрос.Текст = "ВЫБРАТЬ
| ПодарочныеСертификатыОстаткиИОбороты.Штрихкод КАК Штрихкод,
| ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК ПодарочныеСертификатыОстаткиИОбороты
|
|СГРУППИРОВАТЬ ПО
| ПодарочныеСертификатыОстаткиИОбороты.Штрихкод,
| ПодарочныеСертификатыОстаткиИОбороты.Регистратор,
| ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток
|
|УПОРЯДОЧИТЬ ПО
| ПодарочныеСертификатыОстаткиИОбороты.Регистратор
|ИТОГИ ПО
| Штрихкод";
19. lefthander lefthander (lefthander) 05.01.17 19:40 Сейчас в теме
(18)если в консоли запросов, то на закладке условия
20. jj_mail jj_mail (jj_mail) 06.01.17 11:33 Сейчас в теме
ГДЕ
      НЕ ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток = 0
21. Oleg Space (spacecraft) 06.01.17 12:21 Сейчас в теме
(18) в данном случае условие не поможет. Виртуальная таблица ОстаткиИОбороты с периодичностью по регистратору будет выдавать КоличествоКонечныйОстаток на момент регистратора.
(20) это условие не даст правильный результат. Просто будут исключены записи, где на момент регистратора КоличествоКонечныйОстаток = 0 .
Пример:
Док - регистратор, Ш - штрихкод, К - кол-во.
+ Док1 Ш1 К1
+ Док2 Ш2 К1
- Док3 Ш1 К1 // только этой записи не будет

22. jj_mail jj_mail (jj_mail) 06.01.17 12:24 Сейчас в теме
По идее, в результат запроса ШК1 попадать не должен, так как его остаток = 0.


руководствовался исключительно этим :)
23. Oleg Space (spacecraft) 06.01.17 12:27 Сейчас в теме
(22) еще раз. Не попадут только записи на момент регистратора КоличествоКонечныйОстаток = 0.
Из примера в (21) останутся записи:
Док1 Ш1 К1
Док2 Ш2 К1

А должна остаться только одна запись:
Док2 Ш2 К1
24. jj_mail jj_mail (jj_mail) 06.01.17 12:53 Сейчас в теме
Если заменить левое соединение на полное и добавить условие на остаток > 0, правильно будет выводить результат ?
25. Oleg Space (spacecraft) 06.01.17 12:55 Сейчас в теме
(24) и где в (18) нашли соединение?
26. jj_mail jj_mail (jj_mail) 06.01.17 12:59 Сейчас в теме
27. Oleg Space (spacecraft) 06.01.17 13:09 Сейчас в теме
(26) под каждым сообщением есть кнопка "Ответить". Так будет понятно, к какому сообщение пишите.
По вопросу из (24): зачем там полное соединение?
Запрос в (15) должен правильно выводить.
28. jj_mail jj_mail (jj_mail) 06.01.17 13:17 Сейчас в теме
прошу прощения. Я не часто пишу на форуме. По поводу соединения - это я заработался уже :(. Да, запрос в (15) все правильно покажет
29. qwert werty (request4t) 10.01.17 13:19 Сейчас в теме
(15)
наверное последний вопрос. как мне правильно оформить этот код? сделал так: выдает ошибку...

Запрос.Текст = "ВЫБРАТЬ
	|ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
	|ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток,
	|ПОМЕСТИТЬ ОстаткиИОбороты
	|ИЗ
	|РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки,
	|;
	|////////////////////////////////////////////////////////////­//////////////////////
	|ВЫБРАТЬ
	|ОстаткиСертификатов.Штрихкод
	|ОстаткиСертификатов.Остаток,
	|ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
	|ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
	|ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
	|ИЗ
	|ОстаткиСертификатов КАК ОстаткиСертификатов
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
	|ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )";

...Показать Скрыть
30. Oleg Space (spacecraft) 10.01.17 13:44 Сейчас в теме
(29) у меня нет вашей конфигурации. писал прямо тут.
Вот так попробуйте:
Запрос.Текст = "ВЫБРАТЬ
|ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
|ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток
|ПОМЕСТИТЬ ОстаткиСертификатов
|ИЗ
|РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки
|;
|////////////////////////////////////////////////////////////­//////////////////////
|ВЫБРАТЬ
|ОстаткиСертификатов.Штрихкод
|ОстаткиСертификатов.Остаток,
|ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
|ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
|ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
|ИЗ
|ОстаткиСертификатов КАК ОстаткиСертификатов
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
|ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )";
...Показать Скрыть
request4t; +1 Ответить
Оставьте свое сообщение