8.х Вопрос на засыпку: Зачем выполнять запрос находясь в документе...

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем alp, 18 май 2010.

  1. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Доброе время суток. Я с 8 работаю недавно, объясните мне пожалуйста зачем в ТИПОВОЙ УТ , находясь в документе выполяется запрос для получения данных этого же документа ?
    С моей точки зрения это полный идеотизм.

    Код:
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |	Номер,
    |	Дата,
    |	ДатаПоступления,
    |	ДоговорКонтрагента,
    |	Контрагент КАК Поставщик,
    |	Организация,
    |	СуммаДокумента,
    |	ВалютаДокумента,
    |	УчитыватьНДС,
    |	СуммаВключаетНДС
    |ИЗ
    |	Документ.ЗаказПоставщику КАК ЗаказПоставщику
    |
    |ГДЕ
    |	ЗаказПоставщику.Ссылка = &ТекущийДокумент";
    
    
    
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    номер релиза скажите и что значит "находясь в документе"? конкретнее пожалуйста
  3. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    "Управление торговлей", редакция 10.3 (10.3.7.8)

    находясь в документе - то есть выполять действия в "модуле объекта"
  4. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    688
    Симпатии:
    8
    Баллы:
    29
    Да действительно - почему? У меня другой релиз (10.2.5.4), но такая же ерунда
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.567
    Симпатии:
    717
    Баллы:
    204
    как вариант: не нужно заморачиваться с передаче параметров.
  6. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    688
    Симпатии:
    8
    Баллы:
    29
    Передачей каких параметров, куда? Ты о чем? Поподробней
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.567
    Симпатии:
    717
    Баллы:
    204
    передачей параметров в процедуру, в которой будет выполнятся этот запрос. Как будем определять какие поля можно выбрать? Каждый раз бегать по реквизитам через метаданные? Писать условие на каждый вид документа? Как будем делать итоги, группировки, если нужно?
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.567
    Симпатии:
    717
    Баллы:
    204
    в типовых конфигурациях все максимально унифицированно. Можно, конечно, на каждое действие свой код писать. Выдернув запрос из контекста модуля объекта, однозначно не скажешь, зачем оно так сделано. Запросом получают значения, хранящиеся в ИБ, если обратится к реквизиту объекта напрямую, получим текущее значение, а оно может и не интересно.....
  9. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    688
    Симпатии:
    8
    Баллы:
    29
    Процедура лежит не в общем модуле и не в модуле приложения, а в модуле объекта.
    Но кажется разобрался:
    Код:
    Функция ПечатьСчетаЗаказа(Тип)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст ="
    |ВЫБРАТЬ
    |    Номер,
    |    Дата,
    |    Организация,
    |    Заказчик    КАК Заказчик,
    |    Организация КАК Руководители,
    |    Организация КАК Поставщик
    |ИЗ
    |    Документ.ВнутреннийЗаказ КАК ЗаказПокупателя
    |
    |ГДЕ
    |    ЗаказПокупателя.Ссылка = &ТекущийДокумент";
    
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    
    ТабДокумент = Новый ТабличныйДокумент;
    ...
    ОбластьМакета.Параметры.Заполнить(Шапка);
    
    
    
    В данном примере, чисто тупо, получаем реквизиты через запрос и заполняем параметры в "ОбластьМакета", чтобы грязно тупо не заполнять параметры по одному.
  10. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Реквизиты можно заполнить и без запроса, а с запросом - это каждый раз выполнение обрашение к "Таблицам". Если у меня 5000 документво этого вида, и делаю например групповую печать , то сколько по времени она будет печататься ?
  11. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    688
    Симпатии:
    8
    Баллы:
    29
    К таблице в данном случае.
    Печать большого количества документов маловероятна и редка, скорее всего документ будет распечатываться так: открыл форму документа, распечатал. Опять же, ну обращение к одной таблице БД, ну возврат нескольких реквизитов, результат - одна запись, пусть даже много раз не очень нагружает, по моему, систему (в данном случае). Я понимаю, если в запросе используются всякие соединения, возвращаются вложенные таблицы - тогда да - долго, а тут....
    И вообще, вот мы спорим, а эту конфу, я так думаю, тоже далеко не дураки писали и они рассматривали, возможность групповой печати.
    Вот еще что, при групповой печати, если мы будем использовать запрос, то из БД в будут получены только нужные нам реквизиты, а если получать из объекта, в КЭШ закачается весь объект целиком. Значит с запросом быстрее.
  12. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Ну и такой код позволяет легче переделать печать для внешней печатной формы.
    Вот например в СФ используются напрямую реквизиты документа. Так чтобы сделать печать внешней, проще об стену убиться от количества однотипных замен.
    А когда все тянется запросом - один параметр поменяли и вот вам внешняя печатная форма.
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.641
    Симпатии:
    948
    Баллы:
    204
    Ну во первых, запросом как уже сказали гораздо быстрее выбирать необходимые данные чем двигаться по методанным, это особо наглядно осущается на Клиент Сервеном варианте при обработке больших документов. Во вторых, то же уже сказано очень удобно для печатных форм и прочего заполнения т.к. можно использовать метод ЗАполнить() и в него передавать выборку из запроса. Еще один момент - это в запросе можно установить конструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ, представьте себе ситуацию когда у Вас есть ограничение по номенклатуре и в списке у вас в документе 1000 позиций... к 2м из которых доступа быть не должно..... Ну и последнее -это уже что вроде приживщегося неписанного правила
  14. TopicStarter Overlay
    alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Я конечно не мега знаток, но я не согласен с тем что это будет быстрее и уверен в этом.
    При открытии документа идет обращение к таблице, и все данные уже как на ладоне, а тут приходится заново выполнять запрос.
  15. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Смею уверить, что тут всего два варианта: или быстрее или также.
    Вы забывайте о таком моменте, как кэширование. Так вот: объект может быть сброшен уже из памяти и произойдет полное его чтение, а запрос не вызовет такого.
    Этот момент описан в документации где-то...
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Как раз на днях читал: 20 минут - объект хранится в локальном кэше (либо до переполнения кэша, что произойдет раньше), при этом 20 секунд - объект считается как там это было сказано, валидным что-ли то есть повторная проверка его значения не происходит, после 20 секунд дополнительно это проверяется. Как-то так.
  17. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А в 8.2 еще наворотили в этом плане :)

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