Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/107: Рейтинг темы: голосов - 107, средняя оценка - 4.88
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
Ответы с готовыми решениями:

Помогите написать запрос на 8.0
Помогите пожалуйста! Написала функцию для определения д*цензура*а счета на...

Запрос Помогите Сделать
Хочу выбрать из спр-ка Клиентов элементы, НЕ участвовавшие в документах. Код...

Помогите составить запрос
Есть ЖурналРасчетов.Зарплата, в нем есть атрибуты: Объект - сотрудник,...

Помогите Пожалуйста Исправить Запрос
Код ( (Unknown Language)): Функция ВыполнитьЗапросПоТЧ(Шапка) ...

Помогите правильно составить запрос
Доброе время суток. Не могу сделать запрос. Заранее спасибо В документе...

13
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
Сегодня почти весь день форум не работал, но я сам разобрался (в книжке нашел), что если делать
|ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент;
|Группировка ДокРегистра;
то нельзя получить остатки, а можно только движения

в итоге написал запрос

Код
    "//{{ЗАПРОС(Запр)
|Период с НачДата по КонДата;
|ДокРегистра = Регистр.Дисконт.ТекущийДокумент;
|Склад = Регистр.Дисконт.ТекущийДокумент.РеализацияРозницаРБ.Склад, Регистр.Дисконт.ТекущийДокумент.ОтчетПоПодключениям.Склад;
|ДК = Регистр.Дисконт.ДК;
|Товар = Регистр.Дисконт.Номенклатура;
|СвободныеБаллы = Регистр.Дисконт.СвободныеБаллы;
|БаллыНаСкидках = Регистр.Дисконт.БаллыНаСкидках;
|БаллыНаПодарках = Регистр.Дисконт.БаллыНаПодарках;
|Количество = Регистр.Дисконт.Количество;
|Сумма = Регистр.Дисконт.Сумма;
|Группировка Склад;
|Группировка ДокРегистра;
|Группировка ДК;
|Группировка Товар Без Групп;
|Функция СвБаллыПриход = Приход(СвободныеБаллы);
|Функция БаллыСкПриход = Приход(БаллыНаСкидках);
|Функция БаллыПодПриход = Приход(БаллыНаПодарках);
|Функция КолвоПриход = Приход(Количество);
|Функция СуммаПриход = Приход(Сумма);
|Условие(Склад в СписокСк);
|Условие(ДК в СписокДК);
|";//}}ЗАПРОС
А во время формирования печатной формы для каждого ДК рассчитывал остаток по СвободныеБаллы
И по ходу выяснилось, что Справочник.УчастникиПрограммы можно вообще не использовать

Спасибо за помощь, пока делал этот отчет узнал много нового

хотел "+" нажать, но получил ответ


Вы не можете изменять репутацию одного и того же пользователя чаще один раз за 7 дней!
:(
0
22.09.2009, 19:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2009, 19:02

помогите ламмеру: запрос УТ 8.1 + безналичная оплата УТ 8.1
Коллеги, два вопроса по 8.1: 1) Для простейшего отчета нужен запрос к...

Написать запрос
Я новичок в 1с и языка так то не знаю. Ну жно переделать функцию, вот такая...

Помогите написать диплом по 1С!
Здравствуйте, уважаемые программисты! У меня через пару недель защита...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru