Запрос в 1С

Тема в разделе "1C и всё что с ней связано", создана пользователем mpoltav, 4 авг 2011.

  1. mpoltav

    mpoltav New Member

    Регистрация:
    4 авг 2011
    Сообщения:
    4
    Симпатии:
    0
    При выполнении ругается на выделенную красным строку (поле портфель имеется в наличии).

    //{{ЗАПРОС(Обороты)
    Период с ДатаС по ДатаПо;
    Фирмы = Регистр.Обороты.Фирма,Регистр.Остатки.Фирма;
    ВУ = Регистр.Обороты.ВидУчета,Регистр.Остатки.ВидУчета;
    ТМЦ = Регистр.Обороты.ТМЦ,Регистр.Остатки.ТМЦ;
    ЧейТовар = Регистр.Обороты.ТМЦ.ЧейТовар,Регистр.Остатки.ТМЦ.ЧейТовар;
    Док = Регистр.Обороты.ТекущийДокумент;
    ВидТМЦ = Регистр.Обороты.ТМЦ.Вид,Регистр.Остатки.ТМЦ.Вид;
    ПриходКво = Регистр.Обороты.ПриходКво;
    ПриходГРН = Регистр.Обороты.ПриходГРН;
    РасходКво = Регистр.Обороты.РасходКво;
    РасходГРН = Регистр.Обороты.РасходГРН;
    КвоОст = Регистр.Остатки.Кво;
    СуммаОст = Регистр.Остатки.СуммаГрн;
    ДоходГРН = Регистр.Обороты.ДоходГРН;
    Условие ((ВидТМЦ = Перечисление.ВидыТМЦ.Товар) или (ВидТМЦ = Перечисление.ВидыТМЦ.Продукция));
    Условие((Док.Вид()="РасходнаяНакладная") и (Док.Портфель=ВыбПортфель));
    Условие (ВУ = Перечисление.ВидыУчета.Торговля);
    Условие (НайтиФирм(Фирмы)=1);
    Функция ПрхКво = Сумма(ПриходКво);
    Функция ПрхВес = Сумма(ПриходКво*ТМЦ.Вес);
    Функция ПрхОбъем = Сумма(ПриходКво*ТМЦ.Емкость);
    Функция ПрхГРН = Сумма(ПриходГРН);
    Функция РсхКво = Сумма(РасходКво);
    Функция РсхВес = Сумма(РасходКво*ТМЦ.Вес);
    Функция РсхОбъем = Сумма(РасходКво*ТМЦ.Емкость);
    Функция РсхГРН = Сумма(РасходГРН);
    Функция остКво = КонОст(КвоОст);
    Функция остСумма = КонОст(СуммаОст);
    Функция ДохГРН = Сумма(ДоходГРН);
    Группировка Фирмы Без Упорядочивания Без Групп;
    Группировка Док Без Упорядочивания Без Групп;
     
  2. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    Условие((Док.Вид()="РасходнаяНакладная") и (Док.Портфель=&ВыбПортфель));
    вот так она должна выглядеть. (& - перед ВыбПортфель). дальше сам сообразишь.
     
  3. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Нельзя вызвать непосредственно метод Вид() в запросе.
    Можно вызывать свою функцию,например, в которой определять вид.
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Можно и в запросе
    см http://codeby.net/forum/threads/31983.html
     
  5. Andruha

    Andruha Гость

    товарищ, это 7.7 - какой & :)
    Код (Text):
    ДокРН = Регистр.Обороты.ТекущийДокумент.РасходнаяНакладная.ТекущийДокумент;
    ПортфельРН = Регистр.Обороты.ТекущийДокумент.РасходнаяНакладная.Портфель;
    ...
    Условие((Док = ДокРн) и (ПортфельРН =ВыбПортфель));
     
  6. mpoltav

    mpoltav New Member

    Регистрация:
    4 авг 2011
    Сообщения:
    4
    Симпатии:
    0
    Спасибо, разобрался уже. & - не надо )
     
  7. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Почему никто не спросит: "А как ругается?" А то так говорят мои клиенты: "Не работает, и что-то там пишет". Для первого раза спрашиваешь: "А как не работает?"

    А причина вот в чем. В регистр "Обороты" запись может делать документ любого вида. Значит "Док" может содержать поле "Портфель", а может и нет. Запрос по такому условию не может отработать. Вот если "Портфель" сделать общим реквизитам, тогда - пожалуйста.
    Второй вариант применения условия вида "Док.Реквизит=" можно сделать, если запрос выбран только по конкретному виду документов.
     
  8. mpoltav

    mpoltav New Member

    Регистрация:
    4 авг 2011
    Сообщения:
    4
    Симпатии:
    0
    Да, ругалось на вид() и Портфель(). Вставил:

    Код ( (Unknown Language)):
    ДокРН = Регистр.Обороты.ТекущийДокумент.РасходнаяНакладная.ТекущийДокумент;
    ПортфельРН = Регистр.Обороты.ТекущийДокумент.РасходнаяНакладная.Портфель;
    ...
    Условие((Док = ДокРн) и (ПортфельРН =ВыбПортфель));
    Все заработало. Без вас было бы трудно. Спасибо!
     
Загрузка...

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