Помогите написать запрос

Тема в разделе "1C и всё что с ней связано", создана пользователем Hryv, 22 сен 2009.

  1. Hryv

    Hryv Гость

    Слабоват я в запросах :(

    Даже не знаю можно ли такое сделать

    Есть регистр остатков
    Надо выбрать движения регистра с условием, что "Рег.ТекущийДокумент().Склад" равен определенному значению
     
  2. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    конструктором запросов не пытался воспользоваться?
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Условие (Док.Склад в СписокСкладов);

    Док - это объявленый раньше Регистр.Остатки.ТекущийДокумент;
    СписокСкладов - либо список значений, либо одно из значений заполненых в модле
     
  4. Hryv

    Hryv Гость

    Пытался и конструктором и примеры искать
    С условием вроде разобрался, но никак не пойму как запросом выбрать движения регистра

    Изначально запрос был простейший

    Код (Text):
        ТекстЗапроса =
    "//{{ЗАПРОС(Зап)
    |Участник = Справочник.УчастникиПрограммы.ТекущийЭлемент;
    |ДК = Справочник.УчастникиПрограммы.ДК;
    |ДатаЗ = Справочник.УчастникиПрограммы.ДатаЗаполнения;
    |Группировка ДК;
    |Группировка Участник;
    |Группировка ДатаЗ;                              
    |Условие((ДатаЗ>=НачДата) И (ДатаЗ<=КонДата));
    |Условие(Участник в СписокУч);
    |";//}}ЗАПРОС
    Далее выполнялся выбор движений по регистру

    Код (Text):
        Рег.УстановитьЗначениеФильтра("Дк",СписДк,2);
    Рег.ВыбратьДвижения();
    Пока Рег.ПолучитьДвижение() = 1 Цикл
    "Дк" - измерение регистра
    СписДк - все ДК из запроса

    При обходе регистра получается ТЗ в которой на каждый ДК (Дисконтная карта - справочник) по несколько строк
    После этого надо вывести таблицу с группировкой
    - ДК1
    - Склад1
    - Движение11
    ....
    - Движение1N
    - ДК2
    - Склад2
    - Движение21
    ....
    - Движение2N

    Кроме того надо еще и фильтр по складу сделать

    Возможно ли в одном запросе?
     
  5. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ТекстЗапроса = "//{{ЗАПРОС(Зап)
    |Период с ДатаНачала По датаКонца;
    |Участник = Справочник.УчастникиПрограммы.ТекущийЭлемент;
    |ДК = Справочник.УчастникиПрограммы.ДК, Регистр.КакЕгоТам.ДК;
    |ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент;
    |ДатаЗ = Справочник.УчастникиПрограммы.ДатаЗаполнения;
    |Группировка ДК;
    |Группировка Участник;
    |Группировка ДатаЗ;
    |Группировка ДокРегистра;
    |Условие((ДатаЗ>=НачДата) И (ДатаЗ<=КонДата));
    |Условие(Участник в СписокУч);

    примерно так можно вытащить документы, которые вызвали движение по регистру с использованием ДК. Если тебе нужно отобрать по складу- то скажи где этот склад живет. Если нужны приход, расход, остатки регистра, скажи как называются соответствующие ресурсы.
     
  6. Hryv

    Hryv Гость

    puh14

    Я правильно понял, что благодаря

    |ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент;
    |Группировка ДокРегистра;

    получатся все движения по регистру?

    Остальное я сам доделаю
     
  7. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Это не движения! В зависимости от регистра движения вычисляются функциями. Если бы у тебя был ресурс сумма в этом регистре

    ТекстЗапроса = "//{{ЗАПРОС(Зап)
    |Период с ДатаНачала По датаКонца;
    |Участник = Справочник.УчастникиПрограммы.ТекущийЭлемент;
    |ДК = Справочник.УчастникиПрограммы.ДК, Регистр.КакЕгоТам.ДК;
    |Сумм = Регистр.КакЕгоТам.Сумма;
    |ДокРегистра = Регистр.какЕгоТам.ТекущийДокумент;
    |ДатаЗ = Справочник.УчастникиПрограммы.ДатаЗаполнения;
    |Группировка ДК;
    |Группировка Участник;
    |Группировка ДатаЗ;
    |Группировка ДокРегистра;
    |Функция НачСум = НачОст(Сумм);
    |Функция КонСум = КонОст(Сумм);
    |Функция прихСум = приход(Сумм);
    |Функция РасхСум = расход(Сумм);
    |Условие((ДатаЗ>=НачДата) И (ДатаЗ<=КонДата));
    |Условие(Участник в СписокУч);


    Это пример для регистра остатков - в оборотах функция только одна - типа Сумма(Сумм)
     
  8. Hryv

    Hryv Гость

    Фишка в том, что мне не надо приход/расход за период, а надо получить каждое движение по регистру

    Или подойдет выбрать все доки, которые двигали регистр
     
  9. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    тогда так- получатся все документы изменявшие регистр
     
  10. Hryv

    Hryv Гость

    Упростил запрос до предела

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

    Ни одной строки нет :(
     
  11. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    А регистр у тебя точно остатков?
    Движения по нему точно были?
    Проверь посмотрев движения документа, который должен был их вызывать.
    НачДату и КонДату поставь побольше.

    Запрос написан правильно - были бы движения, обязательно показал-бы.
     
  12. Hryv

    Hryv Гость

    Пишу следом

    Код (Text):
        ТзДк = СоздатьОбъект("ТаблицаЗначений");
    ТзДк.НоваяКолонка("Док");
    Рег = СоздатьОбъект("Регистр.Дисконт");
    Рег.ВыбратьДвижения(НачДата, КонДата);
    Пока Рег.ПолучитьДвижение() = 1 Цикл
    ТзДк.НоваяСтрока();
    ТзДк.Док = Рег.ТекущийДокумент();
    КонецЦикла;
    Получаю тучу строк

    Переделал запрос на
    Код (Text):
        ТекстЗапроса =
    "//{{ЗАПРОС(Зап)
    |Период с НачДата По КонДата;
    |ДК = Регистр.Дисконт.ДК;
    |СвободныеБаллы = Регистр.Дисконт.СвободныеБаллы;
    |Функция СвободныеБаллыКонОст = КонОст(СвободныеБаллы);
    |Группировка ДК;
    |";//}}ЗАПРОС
    Так работает

    Не работает именно по документу :(
     
  13. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Блин -ступил. Конечный остаток не зависит от документа вызвавшего движение (он зависит от измерений) - от документа зависит приход и расход.

    |Функция СвободныеБаллыПриход = Приход(СвободныеБаллы);
    |Функция СвободныеБаллыРасход = Расход(СвободныеБаллы);

    так попробуй
     
  14. Hryv

    Hryv Гость

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

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

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

    хотел "+" нажать, но получил ответ
    :(
     
Загрузка...
Похожие Темы - Помогите написать запрос
  1. sanch
    Ответов:
    0
    Просмотров:
    2.036
  2. m2x9
    Ответов:
    3
    Просмотров:
    1.078
  3. 888Senya
    Ответов:
    1
    Просмотров:
    1.325
  4. alex10
    Ответов:
    2
    Просмотров:
    1.352
  5. elena1991
    Ответов:
    0
    Просмотров:
    867

Поделиться этой страницей