1. request4t 05.01.17 12:57 Сейчас в теме

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

Привет!

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

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

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

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

Показать
Ответы
Избранное Подписка Сортировка: Древо
9. spacecraft 05.01.17 16:11 Сейчас в теме
(1) запрос конечно стремный.
Формируете временную таблицу из 3 подзапросов объединением. При этом в 3 подзапросе пытаетесь использовать формируемую временную таблицу. Ее на этот момент еще нет. Она будет доступна только если ее использовать в следующем пакете запроса.
Опишите подробно, что хотите получить в итоге?
Можно в Excel пример набросать и показать.
Пока видится, что нужны колонки Штрихкод, Регистратор, Остаток.
Остаток на момент регистратора, или общий остаток на текущий момент?
Если на момент регистратора, то и объединение не нужно, Все данные есть в виртуальной таблице ОстаткиИОбороты.
Если на текущий момент, то какой смысл в выводе регистраторов без данных на этот момент?
11. request4t 05.01.17 17:07 Сейчас в теме
(9) Нужен простой отчет по остакам сертификатов с детализацией движений по регистратору. Я в семерке такой сделал бы без проблем) пытался использовать ОстаткиИОбороты по регистратору с обходом результатов по группировкам. первой группировкой являлся штрихкод, второй - регистратор. Так вот я не понял как мне получить конечный остаток по штрихкоду т.к. группировка выдает мне все движения по регистру. Например, есть Приход ШК1 и ШК2 и расход ШК1. По идее, в результат запроса ШК1 попадать не должен, так как его остаток = 0. Но обход по группировке мне выдает его движения.
15. spacecraft 05.01.17 17:47 Сейчас в теме
(11) как-то так:
ВЫБРАТЬ
    ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
    ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток,
ПОМЕСТИТЬ ОстаткиИОбороты
ИЗ
    РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки,
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ОстаткиСертификатов.Штрихкод
    ОстаткиСертификатов.Остаток,
    ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
    ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
    ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
ИЗ
	ОстаткиСертификатов КАК ОстаткиСертификатов
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
		ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )
 
Показать
itriot11; request4t; +2 Ответить
17. request4t 05.01.17 19:07 Сейчас в теме
(15) Уже в понедельник опробую, спасибо)
26. jj_mail 06.01.17 12:59 Сейчас в теме
27. spacecraft 06.01.17 13:09 Сейчас в теме
(26) под каждым сообщением есть кнопка "Ответить". Так будет понятно, к какому сообщение пишите.
По вопросу из (24): зачем там полное соединение?
Запрос в (15) должен правильно выводить.
28. jj_mail 06.01.17 13:17 Сейчас в теме
прошу прощения. Я не часто пишу на форуме. По поводу соединения - это я заработался уже :(. Да, запрос в (15) все правильно покажет
29. request4t 10.01.17 13:19 Сейчас в теме
(15)
наверное последний вопрос. как мне правильно оформить этот код? сделал так: выдает ошибку...

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

Показать
30. spacecraft 10.01.17 13:44 Сейчас в теме
(29) у меня нет вашей конфигурации. писал прямо тут.
Вот так попробуйте:
Запрос.Текст = "ВЫБРАТЬ
|ПодарочныеСертификатыОстатки.Штрихкод КАК Штрихкод,
|ПодарочныеСертификатыОстатки.КоличествоОстаток КАК Остаток
|ПОМЕСТИТЬ ОстаткиСертификатов
|ИЗ
|РегистрНакопления.ПодарочныеСертификаты.Остатки(&КонецПериода, ) КАК ПодарочныеСертификатыОстатки
|;
|////////////////////////////////////////////////////////////­//////////////////////
|ВЫБРАТЬ
|ОстаткиСертификатов.Штрихкод
|ОстаткиСертификатов.Остаток,
|ПодарочныеСертификатыОбороты.Регистратор КАК Регистратор,
|ПодарочныеСертификатыОбороты.КоличествоПриход КАК КоличествоПриход,
|ПодарочныеСертификатыОбороты.КоличествоРасход КАК КоличествоРасход
|ИЗ
|ОстаткиСертификатов КАК ОстаткиСертификатов
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПодарочныеСертификаты.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПодарочныеСертификатыОбороты
|ПО (ОстаткиСертификатов.Штрихкод = ПодарочныеСертификатыОбороты.Штрихкод )";
Показать
request4t; +1 Ответить
2. borodatii 2 05.01.17 13:56 Сейчас в теме
В первом запросе после синонима таблицы стоит запятая, намекая на то, что там будет указана вторая таблица. А её нет. Убрать запятую надо, видимо.
request4t; +1 Ответить
4. request4t 05.01.17 15:47 Сейчас в теме
(2) Блииин, точно зпт пропустил) Спасибо. Но работа над отчетом еще не закончена. Если что, будут еще вопросы)
3. jj_mail 05.01.17 14:54 Сейчас в теме
Вообще не понятно, для чего использовать все эти объединения, когда существует вирт. таблица ОстаткиИОбороты
5. request4t 05.01.17 15:48 Сейчас в теме
(3) Мне, как человеку, только начинающему разбираться с запросами, вообще мало что понятно)
6. request4t 05.01.17 15:51 Сейчас в теме
Ошибка при открытии обработки:

Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
7. Alex_E 1958 05.01.17 15:54 Сейчас в теме
Вообще остатков по регистратору не бывает. Хотите получить - анализируйте обороты от начала времён и до интересующей даты...
Ann.prog1C; +1 Ответить
8. jj_mail 05.01.17 16:02 Сейчас в теме
Настоятельно рекомендую для начала закинуть запрос в консоль запросов. Там отладить, а потом уже можно будет его в СКД прицепить
10. jj_mail 05.01.17 17:02 Сейчас в теме
Судя по всему, задача состоит в том, чтобы увидеть отчет вида "подарочный сертификат","остаток на начало периода","расход в разрезе документов", "остаток на конец периода". Так ?
12. request4t 05.01.17 17:08 Сейчас в теме
13. jj_mail 05.01.17 17:12 Сейчас в теме
и почему же он не должен попадать, если есть движения за период ? А вот если поставить условие на КонечныйОстаток <> 0, тогда и запрос возвращать его не будет
18. request4t 05.01.17 19:08 Сейчас в теме
(13) научите, плз, как правильно проставить условие.

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

request4t; +1 Ответить
14. Ann.prog1C 05.01.17 17:42 Сейчас в теме
Если уж так хочется объединением запросов, то объедините остатки на начальную дату (по виртуальной таблице остатков), обороты за период (по виртуальной таблице Обороты) и остатки на конец периода. Результат можете сгруппировать и упорядочить по дате.
И будет Вам счастье.
16. request4t 05.01.17 19:06 Сейчас в теме
(14) хочется как можно проще)
20. jj_mail 06.01.17 11:33 Сейчас в теме
ГДЕ
      НЕ ПодарочныеСертификатыОстаткиИОбороты.КоличествоКонечныйОстаток = 0
request4t; +1 Ответить
22. jj_mail 06.01.17 12:24 Сейчас в теме
По идее, в результат запроса ШК1 попадать не должен, так как его остаток = 0.


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

А должна остаться только одна запись:
Док2 Ш2 К1
24. jj_mail 06.01.17 12:53 Сейчас в теме
Если заменить левое соединение на полное и добавить условие на остаток > 0, правильно будет выводить результат ?
25. spacecraft 06.01.17 12:55 Сейчас в теме
(24) и где в (18) нашли соединение?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день