Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
22 Июл 2017, 11:58
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Запросы в цикле  (Прочитано 1207 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zeed

  • **
  • Сообщений: 56
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2016-04-27
  • Сайт: 
  • Профессия: Ученик 1С
Все знают, что запросы в цикле это плохо. Как в таком случае правильно организовать общий запрос. Допустим, в документе есть табличная часть с номенклатурой. Далее, в самой номенклатуре есть две табличные части (контакты, составные части).
В печатную форму надо вывести каждую номенклатуру, в колонках напротив адреса/телефоны (в одну ячейку) и составные части номенклатуры(в другую ячейку).
В общий запрос можно передать список номенклатуры из документа, это понятно. А как поступать с несколькими табличными частями. Как потом обходить запрос и выводить результат в макет?


Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Re: Запросы в цикле
« Ответ #1: 24 Июн 2016, 09:47 »
В качестве примера
...
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПокупателяЗапасы.Номенклатура,
| СУММА(ЗаказПокупателяЗапасы.Количество) КАК Количество
|ПОМЕСТИТЬ втЗапасыДокумент
|ИЗ
| Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
|ГДЕ
| ЗаказПокупателяЗапасы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ЗаказПокупателяЗапасы.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втЗапасыДокумент.Номенклатура КАК Номенклатура,
| втЗапасыДокумент.Количество КАК Количество,
| НоменклатураДополнительныеРеквизиты.Значение КАК ЗначениеРеквизита,
| СпецификацииСостав.Номенклатура КАК СоставНоменклатура,
| СпецификацииСостав.Количество КАК КоличествоВСоставе
|ИЗ
| втЗапасыДокумент КАК втЗапасыДокумент
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
| ПО втЗапасыДокумент.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.Состав КАК СпецификацииСостав
| ПО втЗапасыДокумент.Номенклатура = СпецификацииСостав.Ссылка.Владелец
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| СоставНоменклатура,
| ЗначениеРеквизита
|ИТОГИ
| МАКСИМУМ(Количество),
| МАКСИМУМ(КоличествоВСоставе)
|ПО
| Номенклатура,
| СоставНоменклатура,
| ЗначениеРеквизита";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Макет=ПолучитьМакет("....");

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл

СтрокаСостав="";

ВыборкаСоставНоменклатура = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"СоставНоменклатура");
Пока ВыборкаСоставНоменклатура.Следующий() Цикл
СтрокаСостав=СтрокаСостав+Строка(ВыборкаСоставНоменклатура.СоставНоменклатура)+":"+Строка(ВыборкаСоставНоменклатура.КоличествоВСоставе);
КонецЦикла;

ПростоСтрока="";
ВыборкаЗначениеРеквизита = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ЗначениеРеквизита");
Пока ВыборкаЗначениеРеквизита.Следующий() Цикл
ПростоСтрока=ПростоСтрока+Строка(ВыборкаЗначениеРеквизита.ЗначениеРеквизита)
КонецЦикла;
...
Область=Макет.ПолучитьОбласть("Строка");
Область.Параметры.Заполнить(ВыборкаНоменклатура);
Область.Параметры.Состав=СтрокаСостав;
Область.Параметры.Описание=ПростоСтрока;
                        ...
ТабДокумент.Вывести(Область);
КонецЦикла;

Оффлайн LexaK

  • *****
  • Сообщений: 1246
  • РЕПУТАЦИЯ: 344
  • КПД: 28%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
Re: Запросы в цикле
« Ответ #2: 24 Июн 2016, 09:52 »
просто не смог удержаться, не ответить.

Все знают что прежде чем что-то делать, этому надо сначала научиться! :befhbt:
Поэтому ноги в руки и на курсы(хорошие/качественные) программистов 1С!
Так как, ни какой форум, не научит вас, как правильно и профессионально программировать.

На форуме, помогут ошибку какую найти, идейку подкинут как ту или иную проблему решить,
но не объяснять/разжевывать прописные истины. :fdbsdfbsd:
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Zeed

  • **
  • Сообщений: 56
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2016-04-27
  • Сайт: 
  • Профессия: Ученик 1С
Re: Запросы в цикле
« Ответ #3: 24 Июн 2016, 09:59 »
В качестве примера
...
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПокупателяЗапасы.Номенклатура,
| СУММА(ЗаказПокупателяЗапасы.Количество) КАК Количество
|ПОМЕСТИТЬ втЗапасыДокумент
|ИЗ
| Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
|ГДЕ
| ЗаказПокупателяЗапасы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ЗаказПокупателяЗапасы.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втЗапасыДокумент.Номенклатура КАК Номенклатура,
| втЗапасыДокумент.Количество КАК Количество,
| НоменклатураДополнительныеРеквизиты.Значение КАК ЗначениеРеквизита,
| СпецификацииСостав.Номенклатура КАК СоставНоменклатура,
| СпецификацииСостав.Количество КАК КоличествоВСоставе
|ИЗ
| втЗапасыДокумент КАК втЗапасыДокумент
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
| ПО втЗапасыДокумент.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.Состав КАК СпецификацииСостав
| ПО втЗапасыДокумент.Номенклатура = СпецификацииСостав.Ссылка.Владелец
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| СоставНоменклатура,
| ЗначениеРеквизита
|ИТОГИ
| МАКСИМУМ(Количество),
| МАКСИМУМ(КоличествоВСоставе)
|ПО
| Номенклатура,
| СоставНоменклатура,
| ЗначениеРеквизита";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Макет=ПолучитьМакет("....");

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл

СтрокаСостав="";

ВыборкаСоставНоменклатура = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"СоставНоменклатура");
Пока ВыборкаСоставНоменклатура.Следующий() Цикл
СтрокаСостав=СтрокаСостав+Строка(ВыборкаСоставНоменклатура.СоставНоменклатура)+":"+Строка(ВыборкаСоставНоменклатура.КоличествоВСоставе);
КонецЦикла;

ПростоСтрока="";
ВыборкаЗначениеРеквизита = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ЗначениеРеквизита");
Пока ВыборкаЗначениеРеквизита.Следующий() Цикл
ПростоСтрока=ПростоСтрока+Строка(ВыборкаЗначениеРеквизита.ЗначениеРеквизита)
КонецЦикла;
...
Область=Макет.ПолучитьОбласть("Строка");
Область.Параметры.Заполнить(ВыборкаНоменклатура);
Область.Параметры.Состав=СтрокаСостав;
Область.Параметры.Описание=ПростоСтрока;
                        ...
ТабДокумент.Вывести(Область);
КонецЦикла;

Спасибо, что-то вроде этого я и искал!

Онлайн temrmal

  • ***
  • Сообщений: 109
  • РЕПУТАЦИЯ: 13
  • КПД: 12%
  • Регистрация: 2011-11-10
  • Сайт: 
  • Профессия: Программист 8.1
Re: Запросы в цикле
« Ответ #4: 26 Июн 2016, 20:02 »
просто не смог удержаться, не ответить.

Все знают что прежде чем что-то делать, этому надо сначала научиться! :befhbt:
Поэтому ноги в руки и на курсы(хорошие/качественные) программистов 1С!
Так как, ни какой форум, не научит вас, как правильно и профессионально программировать.

На форуме, помогут ошибку какую найти, идейку подкинут как ту или иную проблему решить,
но не объяснять/разжевывать прописные истины. :fdbsdfbsd:

+10000


Теги: запросы  
 

Зачем нужна табличная часть справочника, если есть регистр сведений 2.Чем отличаются пакетные запросы от временных таблиц

Автор ktu78Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 579
Последний ответ 02 Авг 2016, 18:36
от ktu78
Запросы. Получить обороты товаров за период только по определённым документам?

Автор DirecTwiXРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 6646
Последний ответ 15 Апр 2012, 17:32
от Dethmontt
Как отлаживать запросы в консоли запросов, в которые нужно передавать массив?

Автор DirecTwiXРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2841
Последний ответ 26 Апр 2012, 10:28
от cska-fanat-kz
Как из 1С слать запросы к MySQL? (нужно чтобы обновилась инфа на сайте)

Автор leklerkРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 601
Последний ответ 07 Авг 2015, 13:50
от leklerk
Здрвствуйте, изучаю запросы пытаюсь из регистра выгрузить в ТЗ не получается

Автор djonboxРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 6235
Последний ответ 13 Мар 2012, 14:27
от cska-fanat-kz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
116 Сообщений
alex0402
102 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
73 Сообщений
AIFrame
51 Сообщений
ilyay ilyay
49 Сообщений
Golickoff Golickoff
49 Сообщений
ab30ru
38 Сообщений
wise wise
34 Сообщений
Амал
30 Сообщений
LexaK
22 Сообщений

* Кто онлайн

  • Точка Гостей: 273
  • Точка Скрытых: 0
  • Точка Пользователей: 9
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal