Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
1 | |
Помогите написать запрос21.09.2009, 16:29. Просмотров 19248. Ответов 13
Метки нет Все метки)
(
Слабоват я в запросах :(
Даже не знаю можно ли такое сделать Есть регистр остатков Надо выбрать движения регистра с условием, что "Рег.ТекущийДокумент().Склад" равен определенному значению
0
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
21.09.2009, 16:29 |
Ответы с готовыми решениями:
13
Помогите написать запрос на 8.0 Запрос Помогите Сделать Помогите составить запрос Помогите Пожалуйста Исправить Запрос Помогите правильно составить запрос |
kyr
0 / 0 / 0
Регистрация: 04.12.2005
Сообщений: 1,588
|
|
21.09.2009, 16:41 | 2 |
конструктором запросов не пытался воспользоваться?
0
|
puh14
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
21.09.2009, 16:42 | 3 |
Условие (Док.Склад в СписокСкладов);
Док - это объявленый раньше Регистр.Остатки.ТекущийДокумент; СписокСкладов - либо список значений, либо одно из значений заполненых в модле
0
|
Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
21.09.2009, 17:24 | 4 |
Пытался и конструктором и примеры искать
С условием вроде разобрался, но никак не пойму как запросом выбрать движения регистра Изначально запрос был простейший Код
ТекстЗапроса = "//{{ЗАПРОС(Зап) |Участник = Справочник.УчастникиПрограммы.ТекущийЭлемент; |ДК = Справочник.УчастникиПрограммы.ДК; |ДатаЗ = Справочник.УчастникиПрограммы.ДатаЗаполнения; |Группировка ДК; |Группировка Участник; |Группировка ДатаЗ; |Условие((ДатаЗ>=НачДата) И (ДатаЗ<=КонДата)); |Условие(Участник в СписокУч); |";//}}ЗАПРОС Код
Рег.УстановитьЗначениеФильтра("Дк",СписДк,2); Рег.ВыбратьДвижения(); Пока Рег.ПолучитьДвижение() = 1 Цикл СписДк - все ДК из запроса При обходе регистра получается ТЗ в которой на каждый ДК (Дисконтная карта - справочник) по несколько строк После этого надо вывести таблицу с группировкой - ДК1 - Склад1 - Движение11 .... - Движение1N - ДК2 - Склад2 - Движение21 .... - Движение2N Кроме того надо еще и фильтр по складу сделать Возможно ли в одном запросе?
0
|
puh14
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
21.09.2009, 17:36 | 5 |
ТекстЗапроса = "//{{ЗАПРОС(Зап)
|Период с ДатаНачала По датаКонца; |Участник = Справочник.УчастникиПрограммы.ТекущийЭлемент; |ДК = Справочник.УчастникиПрограммы.ДК, Регистр.КакЕгоТам.ДК; |ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент; |ДатаЗ = Справочник.УчастникиПрограммы.ДатаЗаполнения; |Группировка ДК; |Группировка Участник; |Группировка ДатаЗ; |Группировка ДокРегистра; |Условие((ДатаЗ>=НачДата) И (ДатаЗ<=КонДата)); |Условие(Участник в СписокУч); примерно так можно вытащить документы, которые вызвали движение по регистру с использованием ДК. Если тебе нужно отобрать по складу- то скажи где этот склад живет. Если нужны приход, расход, остатки регистра, скажи как называются соответствующие ресурсы.
0
|
Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
21.09.2009, 17:42 | 6 |
puh14
Я правильно понял, что благодаря |ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент; |Группировка ДокРегистра; получатся все движения по регистру? Остальное я сам доделаю
0
|
puh14
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
21.09.2009, 17:52 | 7 |
Это не движения! В зависимости от регистра движения вычисляются функциями. Если бы у тебя был ресурс сумма в этом регистре
ТекстЗапроса = "//{{ЗАПРОС(Зап) |Период с ДатаНачала По датаКонца; |Участник = Справочник.УчастникиПрограммы.ТекущийЭлемент; |ДК = Справочник.УчастникиПрограммы.ДК, Регистр.КакЕгоТам.ДК; |Сумм = Регистр.КакЕгоТам.Сумма; |ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент; |ДатаЗ = Справочник.УчастникиПрограммы.ДатаЗаполнения; |Группировка ДК; |Группировка Участник; |Группировка ДатаЗ; |Группировка ДокРегистра; |Функция НачСум = НачОст(Сумм); |Функция КонСум = КонОст(Сумм); |Функция прихСум = приход(Сумм); |Функция РасхСум = расход(Сумм); |Условие((ДатаЗ>=НачДата) И (ДатаЗ<=КонДата)); |Условие(Участник в СписокУч); Это пример для регистра остатков - в оборотах функция только одна - типа Сумма(Сумм)
0
|
Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
21.09.2009, 18:05 | 8 |
Фишка в том, что мне не надо приход/расход за период, а надо получить каждое движение по регистру
Или подойдет выбрать все доки, которые двигали регистр
0
|
puh14
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
21.09.2009, 18:25 | 9 |
0
|
Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
21.09.2009, 18:26 | 10 |
Упростил запрос до предела
ТекстЗапроса = "//{{ЗАПРОС(Зап) |Период с НачДата По КонДата; |ДокРегистра = Регистр.Дисконт.ТекущийДокумент; |СвободныеБаллы = Регистр.Дисконт.СвободныеБаллы; |Функция СвободныеБаллыКонОст = КонОст(СвободныеБаллы); |Группировка ДокРегистра; |";//}}ЗАПРОС Ни одной строки нет :(
0
|
puh14
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
21.09.2009, 18:32 | 11 |
А регистр у тебя точно остатков?
Движения по нему точно были? Проверь посмотрев движения документа, который должен был их вызывать. НачДату и КонДату поставь побольше. Запрос написан правильно - были бы движения, обязательно показал-бы.
0
|
Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
21.09.2009, 18:52 | 12 |
Пишу следом
Код
ТзДк = СоздатьОбъект("ТаблицаЗначений"); ТзДк.НоваяКолонка("Док"); Рег = СоздатьОбъект("Регистр.Дисконт"); Рег.ВыбратьДвижения(НачДата, КонДата); Пока Рег.ПолучитьДвижение() = 1 Цикл ТзДк.НоваяСтрока(); ТзДк.Док = Рег.ТекущийДокумент(); КонецЦикла; Переделал запрос на Код
ТекстЗапроса = "//{{ЗАПРОС(Зап) |Период с НачДата По КонДата; |ДК = Регистр.Дисконт.ДК; |СвободныеБаллы = Регистр.Дисконт.СвободныеБаллы; |Функция СвободныеБаллыКонОст = КонОст(СвободныеБаллы); |Группировка ДК; |";//}}ЗАПРОС Не работает именно по документу :(
0
|
puh14
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
|
|
21.09.2009, 23:51 | 13 |
Блин -ступил. Конечный остаток не зависит от документа вызвавшего движение (он зависит от измерений) - от документа зависит приход и расход.
|Функция СвободныеБаллыПриход = Приход(СвободныеБаллы); |Функция СвободныеБаллыРасход = Расход(СвободныеБаллы); так попробуй
0
|
Hryv
0 / 0 / 0
Регистрация: 24.07.2008
Сообщений: 658
|
|
22.09.2009, 19:02 | 14 |
Сегодня почти весь день форум не работал, но я сам разобрался (в книжке нашел), что если делать
|ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент; |Группировка ДокРегистра; то нельзя получить остатки, а можно только движения в итоге написал запрос Код
"//{{ЗАПРОС(Запр) |Период с НачДата по КонДата; |ДокРегистра = Регистр.Дисконт.ТекущийДокумент; |Склад = Регистр.Дисконт.ТекущийДокумент.РеализацияРозницаРБ.Склад, Регистр.Дисконт.ТекущийДокумент.ОтчетПоПодключениям.Склад; |ДК = Регистр.Дисконт.ДК; |Товар = Регистр.Дисконт.Номенклатура; |СвободныеБаллы = Регистр.Дисконт.СвободныеБаллы; |БаллыНаСкидках = Регистр.Дисконт.БаллыНаСкидках; |БаллыНаПодарках = Регистр.Дисконт.БаллыНаПодарках; |Количество = Регистр.Дисконт.Количество; |Сумма = Регистр.Дисконт.Сумма; |Группировка Склад; |Группировка ДокРегистра; |Группировка ДК; |Группировка Товар Без Групп; |Функция СвБаллыПриход = Приход(СвободныеБаллы); |Функция БаллыСкПриход = Приход(БаллыНаСкидках); |Функция БаллыПодПриход = Приход(БаллыНаПодарках); |Функция КолвоПриход = Приход(Количество); |Функция СуммаПриход = Приход(Сумма); |Условие(Склад в СписокСк); |Условие(ДК в СписокДК); |";//}}ЗАПРОС И по ходу выяснилось, что Справочник.УчастникиПрограммы можно вообще не использовать Спасибо за помощь, пока делал этот отчет узнал много нового хотел "+" нажать, но получил ответ
0
|
22.09.2009, 19:02 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
22.09.2009, 19:02 |
помогите ламмеру: запрос УТ 8.1 + безналичная оплата УТ 8.1 Написать запрос Помогите написать диплом по 1С! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |