Подстановка своих функций в запрос 7.7

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

  1. puh14

    puh14 Well-Known Member
    1C Team

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

    Пример как может
    Функция ВозвратСуммы(Док);
    Возврат Док.Итог("Всего");
    КонецФункции

    ТекстЗапроса = "
    |Док = Регистр.Деньги.ТекущийДокумент;
    |Группировка Док;
    |Условие (ВозвратСуммы(док) > 1000);

    Это работает

    А если

    ТекстЗапроса = "
    |Док = Регистр.Деньги.ТекущийДокумент;
    |Группировка Док;
    |Функция суммаДок = ВозвратСуммы(док);

    то не работает, хотя ограничений по вычисленю я не вижу - может ведь как в предыдущем примере!
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ну вот так работает интерпретатор запросов в 1С.
    Переходите на прямые запросы к базе и будет вам счастье.
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Эхх - а в рекордсете обход группировок есть?
     
  4. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    В результате выполнения запроса получаем плоскую таблицу. Как такового метода обхода группировок нет, но есть возможность получения итогов по необходимым группировкам с указанием, что данная запись является именно группировкой.
    В примерах запросов в документации к 1С++ как раз есть такой запрос.
     
  5. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Нашел таки как может -

    Функция ВозвратСуммы(Док);
    Возврат Док.Итог("Всего");
    КонецФункции

    ТекстЗапроса = "
    |Док = Регистр.Деньги.ТекущийДокумент;
    |Группировка Док;
    |Функция суммаДок = Сумма(ВозвратСуммы(док));

    при таком раскладе хоть и медленно, но работает
     
  6. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ради прикола, приведите полный текст запроса, перекину его на прямой - посмотрите результат.
     
  7. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Да знаю я что быстрее - мне сильно лень переделывать выводную таблицу, она в основном на группировках. И сильно много расшифровки используются ( как кстати с этим у рекордсета? Он объекты выдает или только поля?).
     
  8. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Но ведь работает ? Значит, фантазию нужно приветствовать
     
  9. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    А с каких пор он начал возвращать поля? Тем более из НЕ объектно-ориентированной СУБД? :(
     
Загрузка...

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