8.х Работа с запросами

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

  1. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Каким образом можно получить данные из табличной части открытого документа с помощью запроса?
    Пробовал таким образом:
    Код:
    ЗапДок = Новый Запрос;
    ЗапДок.Текст = 
    "ВЫБРАТЬ
    |	РасчетДок.Расчет.
    |                           (Абонент.Договор.Номер КАК ДоговорНомер,
    |		Абонент.Договор.Дата КАК ДоговорДата,
    |		Абонент.ФизическоеЛицо КАК ФизическоеЛицо,
    |		Абонент.НаименованиеДляСчета КАК НаименованиеДляСчета,
    |		Абонент.Код КАК Код,
    |		Абонент.КоличествоЧеловек КАК КоличествоЧеловек,
    |		Абонент.СтепеньБлагоустройства КАК СтепеньБлагоустройства,
    |		Абонент.ЗемельныйУчасток КАК ЗемельныйУчасток,
    |		Абонент.Участок КАК Участок)
    |ИЗ
    |	Документ.Расчет КАК РасчетДок
    |ГДЕ
    |	РасчетДок.Расчет.Абонент.Участок = &Участок
    |	И РасчетДок.Ссылка = &Ссылка
    |	И РасчетДок.Расчет.Абонент.Магазин = &Магазин
    |	И РасчетДок.Расчет.Абонент.Пустующая = &Пустующая
    |	И РасчетДок.Расчет.Абонент.УчетИзЗарплатыВодоканал =                       &УчетИзЗарплатыВодоканал
    |	И РасчетДок.Расчет.Абонент.УчетИзЗарплатыТеплоцентраль = &УчетИзЗарплатыТеплоцентраль
    |	И РасчетДок.Расчет.Абонент.УчетИзЗарплатыКазцинк = &УчетИзЗарплатыКазцинк";
    ЗапДок.УстановитьПараметр("Участок",Участок);
    ЗапДок.УстановитьПараметр("Ссылка",Ссылка);
    ЗапДок.УстановитьПараметр("Магазин",Ложь);
    ЗапДок.УстановитьПараметр("Пустующая",Ложь); 
    ЗапДок.УстановитьПараметр("УчетИзЗарплатыВодоканал",Ложь);
    ЗапДок.УстановитьПараметр("УчетИзЗарплатыТеплоцентраль",Ложь);
    ЗапДок.УстановитьПараметр("УчетИзЗарплатыКазцинк",Ложь);
    ВыпЗапДок = ЗапДок.Выполнить().Выбрать();
    Пока ВыпЗапДок.Следующий() <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл				</span>
    Секция.Параметры.ДогН = ВыпЗапДок.ДоговорНомер;
    Секция.Параметры.ДДата = ВыпЗапДок.ДоговорДата;
    
    РасчетДок - название документа, Расчет - название таб части.Но в этом случае при выполнении запроса 1сина матюгается что значение ВыпЗапДок.ДоговорНомер не определено... Как правильно написать запрос из таб части? Скинте плиз небольшой пример...
  2. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    При использовании запроса в открытом документе есть одна тонкость: запрос извлекает не те данные, которые у вас отображены в документе, а записанные данные. То есть, перед выполнением запроса, документ просто необходимо записать, иначе вы, в лучшем случае, получите ошибку (если документ новый), а в худшем - выдаст вам левые данные (если документ не новый). Если не хотите перезаписывать документ каждый раз при выполнении запроса, передавайте в запрос не ссылку, а объект.

    И ещё: тег "
    Код:
    " очень облегчает понимание.
  3. Stepa86
    Offline

    Stepa86

    Регистрация:
    13 окт 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    видимо запрос используется для печатной формы. Рекомендую выставить проверку на проведенность и не модифицированность...

    Попробуй вот так изменить запрос:
    Код:
    
    ЗапДок.Текст = 
    "ВЫБРАТЬ
    |	Абонент.Договор.Номер КАК ДоговорНомер,
    |	 Абонент.Договор.Дата КАК ДоговорДата,
    |	 Абонент.ФизическоеЛицо КАК ФизическоеЛицо,
    |	 Абонент.НаименованиеДляСчета КАК НаименованиеДляСчета,
    |	 Абонент.Код КАК Код,
    |	 Абонент.КоличествоЧеловек КАК КоличествоЧеловек,
    |	 Абонент.СтепеньБлагоустройства КАК СтепеньБлагоустройства,
    |	 Абонент.ЗемельныйУчасток КАК ЗемельныйУчасток,
    |	 Абонент.Участок КАК Участок
    |ИЗ
    |	Документ.Расчет.Абонент КАК Абонент
    |..."
    ...
    
    
    Если использование данных подразумевает работу с объектом без записи в БД, то или стоит получать данные через Абонент.Выгрузить( СтруктураОтбора ) или в запрос передавать таблицу
  4. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Согласен.

    Согласен.

    Не согласен. Как в запрос можно передать объект? Запрос то получает данные из таблиц ИБ, т.е. из "записанных" данных. А если объект не записан, то и данных этих нет. Таким образом с незаписанным объектом возможна работа только напрямую (без запросов), через "Объект". Если не прав, поправьте.

  5. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Создайте новый документ, и в конфигураторе посмотрите на данные объекта и ссылки, а после поговорим. В объекте у нас оперативные данные, которые ещё надо записать. Передаётся объект в запрос простым
    Код:
    Запрос.УстановитьПараметр("Объект", ЭтотОбъект());
    
    
    Но есть проблема: запрос придётся писать вручную, так как конструктор не опознает этот фокус.

    Благодарю за беспокойство. Как видите, вернулся.
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Попробовал.
    Код:
    Запрос.УстановитьПараметр("Объект", ЭтотОбъект.Товары);
    
    Да, действительно, признаю: по крайней мере табличную часть получилось передать. Никогда не задумывался над таким способом.
  7. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    а нафига писать "ЭтотОбъект.Товары" ? Просто "Товары" не прёт ? вы же модуле объекта, верно?
  8. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Исключительно для наглядности. Естественно можно не писать.
  9. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    я б вообще вот так написал
    Код:
    "ВЫБРАТЬ
    |	Абонент.Договор.Номер КАК ДоговорНомер,
    |	 Абонент.Договор.Дата КАК ДоговорДата,
    |	 Абонент.ФизическоеЛицо КАК ФизическоеЛицо,
    |	 Абонент.НаименованиеДляСчета КАК НаименованиеДляСчета,
    |	 Абонент.Код КАК Код,
    |	 Абонент.КоличествоЧеловек КАК КоличествоЧеловек,
    |	 Абонент.СтепеньБлагоустройства КАК СтепеньБлагоустройства,
    |	 Абонент.ЗемельныйУчасток КАК ЗемельныйУчасток,
    |	 Абонент.Участок КАК Участок
    |ИЗ
    |	&Таблица КАК Абонент"
    Запрос.УстановитьПараметр("&Таблица", Товары); 
    
    :angry:
  10. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    gosn1ck, ну дык это и имелось ввиду. :angry:
  11. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вопрос на форумах рассматривался неоднократно.

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