Разработка и оптимизация запросов в 1С:Предприятие 8.3. Модуль 5. Работа с запросами при помощи встроенного языка
На данной странице задавайте вопросы по материалам пятого модуля курса «Разработка и оптимизация запросов в 1С:Предприятие 8.3».
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (380):
Комментарии закрыты
Добрый день!
Зачем в рекурсивной процедуре (на скриншоте) при вызове выборки рекурсивно мы указываем группировку, причем группировку родительской выборки? Что бы изменилось, если бы это не было сделано? И как в результате выборки появились строки по конкретным товарам, это же не группы справочника, а выборка-то по иерархии?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! Вопрос по модулю 5_13 построение “КроссТаблицы”, когда мы заполняем суммы на пересечение ячеек Товар/Покупатель, используем вложенный цикл:
ВыборкаПокупатель = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент", "ВСЕ");
не могу понять почему именно в таком порядке , а наоборот не работает
ВыборкаНоменклатура = ВыборкаПокупатель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура", "ВСЕ");
это связано с тем, что при заполнении будет использоваться метод “Вывести” вместо “Присоединить”, или логика в другом?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо! логику понял.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, подскажите пожалуйста, у меня при построении “КроссТаблицы” в область строка почему-то первым значением выводится поле с типом значения NULL и общим итогом по всем продажам, т.е. при формировании кросс таблицы после шапки выводится пустая строка, а потом уже таблица с результатом запроса, подскажите пожалуйста в чем может быть причина? И как это исправить?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, разобрался
…
(текст комментария доступен только участникам Мастер-группы)
В pdf-файле сказано: «В одном прикладном решении может быть создано произвольное количество экземпляров менеджера временных таблиц, каждый из которых хранит свой набор временных таблиц». Если в одном запросе будут созданы временные таблицы ВТ1, ВТ2, ВТ3 и три менеджера временных таблиц МВТ1, МВТ2, МВТ3. Не понятно как распределить временные таблицы по менеджерам временных таблиц. Или по-другому, как формируется набор временных таблиц для каждого менеджера?
…
(текст комментария доступен только участникам Мастер-группы)
Правильно поняла, что все временные запросы из одного запроса будут помещены в менеджер временных таблиц этого запроса. А если мы хотим сформировать другой менеджер временных таблиц с другим набором ВТ, то это делается и другим запросом?
…
(текст комментария доступен только участникам Мастер-группы)
Доброго времени суток! В занятии 6-01 было сказано, что менеджер временных таблиц, сформированный в запросе можно использовать в следующем запросе. Пыталась решить задачу: в запросе сформировать перечень контрагентов и положить их во ВТ, а распечатать этот список в Запросе1. Результат плачевный.
Исправьте, пожалуйста, мои ошибки.
&НаСервере
Процедура ВТНаСервере()
МВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТ
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
РезультатЗапроса = Запрос.Выполнить();
Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МВТ;
//РезультатЗапроса = Запрос1.Выполнить();
Таб = РезультатЗапроса.Выбрать().Выгрузить();
ТЗ.Загрузить(Таб);
КонецПроцедуры
…
(текст комментария доступен только участникам Мастер-группы)
Пыталась так сделать, но конструктор запроса не видит в Запросе1 ВТ.
…
(текст комментария доступен только участникам Мастер-группы)
Хотела в кросс-таблице расположить товары и покупателей по алфавиту, указала на закладке Порядок Покупатель и Товар по возрастанию, ничего не получилось. Как расположить по алфавиту?
…
(текст комментария доступен только участникам Мастер-группы)
Указание на закладке “Порядок” Покупатель и Товар по возрастанию не является явной сортировкой?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, поняла.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! При формировании кросс-таблицы конструктор создал такую запись: ТабДок.Вывести(ОбластьПокупатель, ВыборкаПокупатель.Уровень());
По описанию в справке не поняла, что такое ВыборкаПокупатель.Уровень() и как используется этот параметр. Почему она появилась, у преподавателя в примере не было этого параметра.
2-я непонятная запись, которую создал конструктор – это
ВыборкаПокупатель = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Почему в функции Выбрать нет наименования группировки? Как понять какая группировка будет применена программой на данном шаге, у нас могут быть итоги и по покупателю, и товару.
3. При расчёте общего итога в подвале РезультатыЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам).
Зачем надо указывать ОбходРезультатаЗапроса.ПоГруппировкам, если использовать РезультатыЗапроса.Выбрать(), разве мы итог не получим?
4. При повторном обращении к ВыборкаКлиент преподаватель применяет параметр Сбросить().
А можно было вместо Сбросить() повторно обратиться к РезультатамЗапроса по группировке “Покупатель”?
…
(текст комментария доступен только участникам Мастер-группы)
Не поняла что именно указала в запросе, в результате чего появилась запись ВыборкаПокупатель.Уровень()? Следовала алгоритму преподавателя, но на видео об уровнях ничего, а у меня они откуда взялись?
И если можно, ответьте, пожалуйста на 3 и 4 вопрос.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! Не понятна рекурсивная процедура.
1. Правильно понимаю, что по сути любая процедура может быть рекурсивной, если в ней есть обращение к самой себе?
2. Почему не возникает зацикливания? Если бы была проверка на то, что возвращает выборка, поняла бы. Но что заставляет процедуру нормально закончить цикл не понятно.
3. У проц ОбойтиРекурсивно(Выборка) указан 1 параметр – Выборка, а когда идёт обращение к процедуре из тела процедуры, указывается 2 параметра – ОбойтиРекурсивно(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка())). Почему указывается 2-й параметр, вроде, понятно – требования ОбходРезультатаЗапроса.ПоГруппировкамСИерархией. Не понятно как процедура видит 2-й параметр?
…
(текст комментария доступен только участникам Мастер-группы)
1. Правильно ли поняла, что 2-й параметр – Выборка.Группировка() позиционирует выборку на определённой группировке и передаём уже спозиционированную выборку?
2. А если в самой проц указать оба параметра – ОбойтиРекурсивно(Выборка,Группировка), что произойдёт?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
Если функция Группировка не позиционирует выборку, то тогда получается, что процедура видит сколько угодно переданных в неё параметров, которые описываются при обращении к ней, а возвращает только тот, который описан в ней самой?
…
(текст комментария доступен только участникам Мастер-группы)
Кажется поняла свою ошибку. Выборка.Группировка() – это 2-й параметр функции Выбрать(), а не ОбойтиРекурсивно()!
…
(текст комментария доступен только участникам Мастер-группы)
Напомните, пожалуйста, как преподаватель получил перечень возможных функций при замене Следующий() на СледующийПоЗначениюПоля?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! «Текст запроса для конфигуратора» позволяет преобразовать текст в формат конфигуратора. Вопрос: а как текст из конфигуратора вставить в конструктор, т.е. без вертикальных черт?
Зачем вообще используется вертикальная черта. Текст запроса же заключается в кавычки?
…
(текст комментария доступен только участникам Мастер-группы)
Удалить вертикальную черту можно, если текст запроса из нескольких строк, а если захочу разобрать запрос из стандартной 1С, ведь там в тексте запроса может быть и несколько сот строк.
Перефразирую вопрос: как запрос из стандартной 1С посмотреть в конструкторе?
…
(текст комментария доступен только участникам Мастер-группы)
То, что Вы поясняете, поняла. Но в Вашем примере текст запроса берётся из конструктора запроса, а вопрос наоборот: хочу увидеть в конструкторе запроса большой по объёму запрос, прописанный в купленной конфигурации УТП, УТ или любой другой.
…
(текст комментария доступен только участникам Мастер-группы)
Поняла, всё время пыталась обратиться к Конструктору запроса с обработкой результата, а программа сообщала, что запрос не найден и предлагала создать новый запрос.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте , при создании кросс таблицы, когда мы создаем макет, при установке параметров , мы должны брать именно как контрагентпредставление , номенклатурапредставление и тд , просто если взять как контрагент и тд нельзя?
…
(текст комментария доступен только участникам Мастер-группы)
Попробывала вывести кросс таблицу, но система выдает ошибку : Область Шапка не найдена
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Контрагент) КАК КонтрагентПредставление,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Номенклатура) КАК НоменклатураПредставление,
| ПродажиОбороты.СуммаОборот КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
|ИТОГИ
| СУММА(Сумма)
|ПО
| ОБЩИЕ,
| Контрагент,
| Номенклатура" ;
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
ОбластьШапкаТовар = Макет.ПолучитьОбласть("Шапка |Номенклатура");
ОбластьШапкаКонтрагент = Макет.ПолучитьОбласть("Шапка|Контрагент");
ОбластьШапкаИтог = Макет.ПолучитьОбласть("Шапка|Итог");
ОбластьСтрокаТовар = Макет.ПолучитьОбласть("Строка|Номенклатура");
ОбластьСтрокаКонтрагент = Макет.ПолучитьОбласть("Строка|Контрагент");
ОбластьСтрокаИтог = Макет.ПолучитьОбласть("Строка|Итог");
ОбластьПодвалТовар = Макет.ПолучитьОбласть("Подвал|Номенклатура");
ОбластьПодвалКонтрагент = Макет.ПолучитьОбласть("Подвал|Контрагент");
ОбластьПодвалИтог = Макет.ПолучитьОбласть("Подвал|Итог");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаКлиент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам("Контрагент" , "Все" ));
ТабДок.Вывести(ОбластьШапкаТовар);
Пока ВыборкаКлиент.Следующий() Цикл
ОбластьШапкаКонтрагент.Параметры.Заполнить(ВыборкаКлиент);
ТабДок.Присоединить(ОбластьШапкаКонтрагент);
КонецЦикла;
ТабДок.Присоединить(ОбластьШапкаИтог);
ВыборкаТовар = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам("Номенклатура"));
ТабДок.Вывести(ОбластьШапкаТовар);
Пока ВыборкаТовар.Следующий() Цикл
ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаТовар);
ТабДок.Присоединить(ОбластьСтрокаТовар);
КонецЦикла;
ТабДок.Вывести(ОбластьПодвалТовар);
ВыборкаКлиент.Сбросить();
Пока ВыборкаКлиент.Следующий() Цикл
ОбластьПодвалКонтрагент.Параметры.Заполнить(ВыборкаКлиент);
ТабДок.Присоединить(ОбластьПодвалКонтрагент);
КонецЦикла;
ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаОбщийИтог.Следующий() Тогда
ОбластьПодвалИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Присоединить(ОбластьПодвалИтог);
КонецЕсли;
Макет получился у меня такой : в файле скрин
С таблицой значений тоже не могу понять ошибку , в пользовательском режиме сумма заполняется, но вот контрагентов не видно, хотя вроде ссылочный тип данных
Запрос.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПродажиОбороты.СуммаОборот КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты";
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
ТаблицаПродаж.Загрузить(ТЗ);
…
(текст комментария доступен только участникам Мастер-группы)
я там проверила, все типы вроде верно указаны
…
(текст комментария доступен только участникам Мастер-группы)
…
(текст комментария доступен только участникам Мастер-группы)
Хорошо Спасибо, сравню, если явных ошибок не смогу увидеть, тогда скину архив
…
(текст комментария доступен только участникам Мастер-группы)
Подправьте меня, если я неверно поняла. Когда мы используем метод СледующийПоЗначениюПоля в первом цикле, а во внутреннем цикле метод Следующий, то результат будет таким же как и в том случае, если бы мы использовали изначально метод Следующий. В видео №4, в конце мы видим, что ни товар ни номенклатуру одинаковую он не перепрыгнул
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, вроде как все ясно, в уроке 7 пишится такой год
значит лучше так всегда оптимизировать наши те 2 строки
РезультатЗапроса = Запрос.Выполнить();
ВыборкаРезультата = РезультатЗапроса.Выбрать();
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, еще такой вопрос, в видео №13, не рассматривается подробно получение макета кросс таблицы, потому что такого рода отчеты делаются с помощью СКД?
…
(текст комментария доступен только участникам Мастер-группы)
Урок 5, вложенные выборки , мы же вроде в быстром старте выводили без этих вложенных выборок, или я ошибаюсь, не могу найти просто то видео, где мы вроде по кассе выводили иерархию и детальные записи , файл случайно прикрепила , к делу не относится , не смогла удалить))))
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, повторяю все за лектором, но заметила ошибку, что у меня количество везде выдает сумму 26, хотя в консоли совсем другие цифры, с чем это связано никак не могу понять
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваров.Контрагент.Наименование КАК КонтрагентНаименование,
| РеализацияТоваровТовары.Номенклатура.Наименование КАК НоменклатураНаименование,
| РеализацияТоваровТовары.Количество КАК Количество
|ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров КАК РеализацияТоваров
| ПО РеализацияТоваровТовары.Ссылка = РеализацияТоваров.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| КонтрагентНаименование,
| НоменклатураНаименование
|АВТОУПОРЯДОЧИВАНИЕ";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Запрос пустой";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Покупатель " + ВыборкаДетальныеЗаписи.КонтрагентНаименование + " Товар " + ВыборкаДетальныеЗаписи.НоменклатураНаименование + " Количество " + ВыборкаДетальныеЗаписи.Количество();
Сообщение.Сообщить();
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, спасибо не заметила оказ-ся
…
(текст комментария доступен только участникам Мастер-группы)
Еще вопрос:
В программных модулях 1с, при использовании сложных условий с И – например в конструкции ЕСЛИ … КОНЕЦЕСЛИ – если первый операнд условия – ЛОЖЬ, второй уже не будет проверяться.
В условиях запросов – это работает или нет? То есть есть ли разница как располагать операнды в сложных условиях в конструкции ГДЕ
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день.
Вопрос по 3 параметру метода Выбрать: ГруппировкиДляЗначенийГруппировок.
Использование значения “ВСЕ” для этого параметра понятно, пустое значение тоже.
А “Список группировок, разделенных запятыми, из которых будут выбираться значения группировок для обхода” (из описания в синтакс-помощнике) для чего может использоваться? Или это рассматривается далее в курсе?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо за ответ
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
При попытке запустить анимацию диаграммы по видеоуроку “Query-5-Config-11.avi” – получаю плоскую (без объема) гистограмму без какой-либо анимации.
До перевода режима совместимости в “Не использовать”, была объемная гистограмма. Компьютер – не самый слабый.
Искусственное присвоение:
, задает значение “Использовать”, но диаграмма не меняется.
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо!
С заданием определенного типа: “ГистограммаОбъемная”, анимация появилась: столбики вырастают снизу.
Но изменений анимации при каждом запуске команды, как у Вас в видео – нет.
У меня стоит учебная версия: “1С:Предприятие 8.3, учебная версия (8.3.18.1128)”.
Возможно в ней имеются какие-то ограничения.
…
(текст комментария доступен только участникам Мастер-группы)
Да, видимо какая-то оптимизация.
Вторая диаграмма анимируется аналогично. Изменения только при изменениях данных в БД. Вид анимации не меняется.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
В Ваших примерах идёт работа с Документом РасходТовара, однако в последней обновлённой базе для практических заданий такого документа нет, есть Документ РеализацияТоваров. А все обработки написаны для Документа РасходТовара, можно конечно переделать, но не хочется терять время – недоработка с Вашей стороны, или я что-то не досмотрел?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, вопрос не по теме курса, но, возможно, вы знаете как с этим быть.
Какой шрифт по умолчанию используется в синтакс-помощнике и каким образом его можно изменить на другой?
На моей платформе, 8.3.16.1063, в синтакс-помощнике применяется шрифт, отличающийся от более ранних версий платформы, хотел бы сделать шрифт как на платформе, например, 8.3.10.
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо
Здравствуйте, вопрос по Query-5-Config-13.
В данном уроке применяются макеты для выходной таблицы.
Подскажите, пожалуйста, а где можно поподробнее узнать про то, как работать макетами?
Может что-то есть в каких-то других курсах или имеется отдельный курс?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо.
Мне казалось, что в курсах по СКД и по управляемым формам может что-нибудь быть по макетам.
…
(текст комментария доступен только участникам Мастер-группы)
Василий, спасибо за развернутый ответ.
Насколько я понял, макеты широко использовались в разработке до появления СКД.
…
(текст комментария доступен только участникам Мастер-группы)
Query-5-Config-6 – с 4:15 минуты – что не не могу понять что происходит от представления – закипает могз ) можно как то на простой схеме нарисовать пример ?
и если сделать просто такой код
Пока Выборка.Следующий() Цикл
Сообщить("товар: " + Выборка.Товар + " - " + Выборка.Количество +
", тип записи - " + Выборка.ТипЗаписи() + ", уровень - " + Выборка.Уровень() +
", группировка - " + Выборка.Группировка());
КонецЦикла;
то выводит такой же результат ) – вопрос зачем тогда усложнять и делать Рекурсивную процедуру ? )
…
(текст комментария доступен только участникам Мастер-группы)
“ОбойтиРекурсивно(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка()” – а зачем указывать Выборка.Группировка() ? Это для того что бы показывало и итог то группировке ?
и если сделать просто такой код
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Сообщить(“товар: ” + Выборка.Товар + ” – ” + Выборка.Количество +
“, тип записи – ” + Выборка.ТипЗаписи() + “, уровень – ” + Выборка.Уровень() +
“, группировка – ” + Выборка.Группировка());
КонецЦикла;
то выводит такой же результат ) – вопрос зачем тогда усложнять и делать Рекурсивную процедуру ? )
…
(текст комментария доступен только участникам Мастер-группы)
Query-5-Config-5 – я как вариант просто попробовал сделать обход через .Выбрать() – без указания ОбходРезультатаЗапроса.ПоГруппировкам и без вложенного цикла – и результат тот же самый – только уровни группировок по другому немного отображает (скрин прикрепил) – в чем тогда разница и зачем тогда делать цикл в цикле ?
…
(текст комментария доступен только участникам Мастер-группы)
Query-5-Config-4 – 8:25 – не совсем понятна логика как все таки оно работает – если первый цикл СледующийПоЗначениюПоля(“Товар”) а вложенный цикл идет по Следующий() – тоесть сначало у нас в столбике Товар – например есть название товара Стол и 10 раз повторятся и в Покупатель Иванов 10 раз указанно рядом – то как обходит платформа эти строки ? Если она после того как дошла до первой строки Стол и потом начинает в столбике Покупатель перебирать уже методом Следующий() – но она и до конца выборки перебирает методом Следующий() и метод СледующийПоЗначениюПоля() уже не включается ?
или какая здесь логика цикла в цикле ?
– почитал комментарии от 17.05.2020 и другие нашел поиском по слову “СледующийПоЗначениюПоля” – и понял что оно берет повторение по первому столбику и потом перебирает по этому значению повторения по второму столбику. Верно ли я понял что если первый цикл будет СледующийПоЗначениюПоля(“Товар”) и вложенный цикл Следующий() то тогда если в первом столбике Товар 10 раз написано Стол и рядом в столбике Покупатель 10 раз написано Иванов – то оно и выведет 10 строк ?
– если да то чего зачем вообще такая комбинация, как пример, если она ничем не отличатся от просто с одним циклом метода Следующий()
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо большое! Все разжевали как нужно). Думаю теперь любой поймет. Хотелось что бы все такое было по умолчанию в курсе, что бы студенты не рыскали в комментариях.
Из пожеланий, как я уже раньше писал, если есть такие или другие не понятные вопросы у студентов, то что бы как дополнение в курсе делать или ссылки на эти комментарии в курсе вставляйте или как вам нравится информируйте) главное что бы проходил курс и все было понятно. Потому что такие выяснения сути очень много времени занимают.
…
(текст комментария доступен только участникам Мастер-группы)
Query-1Сv8-theory – Страница 126 –
у вас в описании указанно
ВыборкаИзРезультатаЗапроса а в примере ВыборкаДетальныеЗаписи
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день, пытаюсь сформировать кросс таблицу как в видео уроке, не выходит, заполняется только шкаф, что я делаю не так?
Процедура СформироватьНаСервере(ТабДок)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Номенклатура КАК Товар,
| ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Номенклатура) КАК ТоварПредставление,
| ПродажиОбороты.Контрагент КАК Поставщик,
| ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Контрагент) КАК КонтрагентПредставление,
| ПродажиОбороты.СуммаОборот КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиОбороты
|ИТОГИ ПО
| ОБЩИЕ,
| Товар,
| Поставщик";
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
ОбластьШапкаТовар = Макет.ПолучитьОбласть("Шапка|Товар");
ОбластьШапкаПокупатель = Макет.ПолучитьОбласть("Шапка|Поставщик");
ОбластьШапкаИтог = Макет.ПолучитьОбласть ("Шапка|Итог");
ОбластьСтрокаТовар = Макет.ПолучитьОбласть ("Строка|Товар");
ОбластьСтрокаПокупатель = Макет.ПолучитьОбласть ("Строка|Поставщик");
ОбластьСтрокаИтог = Макет.ПолучитьОбласть ("Строка|Итог");
ОбластьПодвалТовар = Макет.ПолучитьОбласть ("Подвал|Товар");
ОбластьПодвалПокупатель = Макет.ПолучитьОбласть ("Подвал|Поставщик");
ОбластьПодвалИтоги = Макет.ПолучитьОбласть ("Подвал|Итог");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаКлиент = РезультатЗапроса.Выбрать (ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик");
ТабДок.Вывести(ОбластьШапкаТовар);
Пока ВыборкаКлиент.Следующий() Цикл
ОбластьШапкаПокупатель.Параметры. Заполнить(ВыборкаКлиент);
ТабДок.Присоединить(ОбластьШапкаПокупатель);
КонецЦикла;
ТабДок.Присоединить (ОбластьШапкаИтог);
ВыборкаТовар = РезультатЗапроса.Выбрать (ОбходРезультатаЗапроса.ПоГруппировкам, "Товар");
Пока ВыборкаТовар.Следующий() Цикл
ОбластьСтрокаТовар.Параметры. Заполнить(ВыборкаТовар);
ТабДок.Вывести(ОбластьСтрокаТовар);
КонецЦикла;
ВыборкаПокупатель = ВыборкаТовар.Выбрать (ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик", "Все");
Пока ВыборкаПокупатель.Следующий() Цикл
ОбластьСтрокаПокупатель.Параметры.Заполнить(ВыборкаПокупатель);
ТабДок.Присоединить(ОбластьСтрокаПокупатель);
КонецЦикла;
ОбластьСтрокаИтог.Параметры.Заполнить (ВыборкаТовар);
ТабДок.Присоединить(ОбластьСтрокаИтог);
…
(текст комментария доступен только участникам Мастер-группы)
в видеоуроке 5-13 вы вывели табличную часть, заполненную товарами и покупателями вот таким кодом (1 фото) – окей, вроде ясно, потом резко переключились в конфигуратор (2 фото)и цикл стал вложенным ( мало того еще и поменялся местами с товаром, который в запросе идет ниже покупателя в иерархии)? – зачем? ( у меня складывается впечатление, что есть еще как-то курс, который надо пройти после быстрого старта, чтобы хотя бы что-то понять из 5ого модуля этого курса. скажите, что посмотреть еще?)
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте. я не понимаю что происходит в уроке 4 пятого модуля.
скрины приложены. 1 – это код, второе- его исполнение. 3- е что было без дополнительных методов следующий по значению и тп. По логике вещей выполняя код на первом скрине. мы должны получить все строки без дублей по покупателям ( товары не учитываются, так как мы все записи перебираем в цикле по покупателю, на втором круге метод следующий уже наткнется на ЛОЖЬ- вы же сами об этом все видео говорили до этого. толи в коде у вас ошибка толи что, но по логике такой отработки быть не может, либо что-то упущено в повествовании.
У вас же почему-то отрабатывает все без дублей по товарам… это раз и вообще не понятно, зачем делать было вложенный цикл- этого я совсем не понимаю. нужно по товарам- сделайте один цикл по полю товары, нужен по покупателю сделайте по покупателю. вот этот вложенный цикл вообще зачем? что я должен понять из урока? (моя логика такая. вот вы во вложенном цикле прощелкиваете все строчки до конца. возвращаетесь к товарам и они должны быть прощелкнуты уже до конца и вернуть ложь, так как запрос один и тот же. вот как я это понимаю. только что заканчивал быстрый старт- там такого не было ).
тоже самое с 5-5 со следующим уроком. что вообще делается можно понятное внятное объяснение пошаговое дать? я не вижу логики в коде от слова совсем (как работают эти вложенные циклы и почему не задваивают вывод вам? хотя по логике вещей они должны ломать весь вывод напрочь, так как выборка. следующий это метод который позиционирует нас на строчку и все, не понимаю, как его можно использовать во вложенном цикле..
…
(текст комментария доступен только участникам Мастер-группы)
так. я не понял, что значит мы перебрали всех покупателей для этого товара? у нас одна строчка в ней один товар, один покупатель и количество. что перебирать? можно схематично по таблице нарисовать как работает отдельно каждый цикл? вы описали подробно в начале очень мне ( достаточно и трех шагов, уже на них не видно логики, надо как-то подробнее это расписать), уверен непонятно не одному мне, просто остальным пофигуЮ так как если я правильно понимаю никто таким выводом и не пользуется, но тем не менее раз речь зашла надо понять логику, а не просто “потому что так”. так же я считаю в последующих уроках про рекурсию надо тоже подробнее рассказывать, например. это не 2+2 все-таки.
и так, я все-таки считаю, надо расписать подробно, как соверщается обход в ваших циклах, не словами а схематично, потому что понять я не могу.
по какой- причине не могу понять не знаю. что -то мне подсказывает, задача чама бесмысленна, по-этому тяжело понять. но тем не менее, вот вы пишите
“1.1. Вызвали метод Выборка.СледующийПоЗначениюПоля(“Покупатель”) – спозиционировались на первом покупателе для текущего (первого) товара.
1.2. Вызвали еще раз метод Выборка.СледующийПоЗначениюПоля(“Покупатель”) – спозиционировались на следующем покупателе для текущего (первого) товара.
1.3. И так, пока не перебрали всех покупателей первого товара.”
1.3 – а каким таким образом выборка будет перебирать покупателей текущего товара, вы хотите сказать, что в метод следующий по значению по полю принимает какой-то параметр от предидущего цикла? – если да, то странно что вы об этом не говорили- это же самое главное
…
(текст комментария доступен только участникам Мастер-группы)
а почему вывелась 4 запись? у нас же там поле товар совпадает с 3м. цикл должен был пропустить все до Veko (6) . что там в это время делает второй цик- вообще не понимаю, да и не суть. с первым бы разобраться
…
(текст комментария доступен только участникам Мастер-группы)
окей, стало лучше ясно. правда остается вопрос- зачем такой “душный” бесмысленный пример? когда не видно четкой цели задачи- понимать ее еще сложнее, учитывая что тут цикл на цикле и циклом погоняет
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день.
Немного не понимаю. Поля запроса
ТаблицаТовары.Товар,
ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Товар),
ТаблицаТовары.Ссылка.Клиент,
ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Ссылка.Клиент),
…..
ИТОГИ
СУММА(Сумма)
ПО
Товар,
Клиент
Поля с функцией ПРЕДСТАВЛЕНИЕ не участвуют в итогах, но присутствуют в итоговый записях причем соответственно своей ссылке.
Это система их так раскидывает или я что-то не понимаю в логике?
И работает ли это для группировок?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
Просьба пояснить (“Пример построения кросс-таблицы”, Query-5-Config-13.avi) – как и где считаются итоги по строкам и колонкам, ведь выходное поле запроса “Сумма” в выборках не используется.
…
(текст комментария доступен только участникам Мастер-группы)
Т.е. сопоставление выводимых данных в макете с данными из выборки происходит по именам? Например в макете определен параметр “Номенклатура”, значит в выборке тоже надо определить выходное поле “Номенклатура”?
…
(текст комментария доступен только участникам Мастер-группы)
Понятно. Спасибо за подробный ответ!
Добрый день!
При выполнении урока “Вывод результата запроса в диаграмму” (Query-5-Config-10.avi) после вывода диаграммы при наведении указателя мыши на столбик (серию) диаграммы всплывающая подсказка не появляется. Как можно ее получить ?
…
(текст комментария доступен только участникам Мастер-группы)
Добры день!
В присланной обработке всплывающая подсказка появляется только при наведении на точки, при наведении на серии подсказки нет. Не могу понять где и как установить свойство “Подсказка”.
Версия платформы – 8.3.14.1779
…
(текст комментария доступен только участникам Мастер-группы)
Не выводится подсказка, фрагмент кода ниже:
Пока ВыборкаТовар.Следующий() Цикл
Серия = Диаграмма.УстановитьСерию(ВыборкаТовар.Товар);
Серия.Текст = ВыборкаТовар.ТоварПредставление;
Серия.Расшифровка = ВыборкаТовар.Товар;
ВыборкаПокупатель = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПокупатель.Следующий() Цикл
Точка = Диаграмма.УстановитьТочку(ВыборкаПокупатель.Покупатель);
Точка.Текст = ВыборкаПокупатель.ПокупательПредставление;
Точка.Расшифровка = ВыборкаПокупатель.Покупатель;
Диаграмма.УстановитьЗначение(Точка, Серия, ВыборкаПокупатель.Сумма,,Строка(Точка)+Строка(Серия)+ Строка(ВыборкаПокупатель.Сумма));
КонецЦикла;
КонецЦикла;
Диаграмма.АвтоТранспонирование = Истина;
Диаграмма.Обновление = Истина;
Не могу понять где ошибся.
…
(текст комментария доступен только участникам Мастер-группы)
Понял в чем проблема – демонстрационная конфигурация версии 8.2 , я это запускаю на 8.3, скорее всего проблема в совместимости. Сделал подобную обработку на вашей базе – “Профессиональная разработка запросов в 1С:Предприятие 8 (1.1)” подсказка выводится сразу, ничего не надо дописывать. Выгрузку прилагаю.
…
(текст комментария доступен только участникам Мастер-группы)
На свежей демобазе выводится нормально, значит дело в режиме совместимости. Архив базы больше 10 Мб, поэтому не прикрепился.
…
(текст комментария доступен только участникам Мастер-группы)
День добрый!
А почему же нет практических заданий по 5-ому модулю? (((
…
(текст комментария доступен только участникам Мастер-группы)
…
(текст комментария доступен только участникам Мастер-группы)
Юлия, добрый день!
Хорошо, спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте!
Поясните, пожалуйста, чем тип записи “Итог по группировке” отличается от типа записи “Итог по иерархии”. Поясню вопрос: например, при следующей структуре справочника «Товары»: Группа «Электротовары»/Группа «Чайники»/ товар VekoNT02 при линейном обходе результата запроса (с отбором по товару VekoNT02)
| РасходТовараТовары.Товар КАК Товар,
| РасходТовараТовары.Количество КАК Количество
|ИЗ
| Документ.РасходТовара.Товары КАК РасходТовараТовары
|ГДЕ
| РасходТовараТовары.Товар В ИЕРАРХИИ(&ГруппаТоваров)
|
|УПОРЯДОЧИТЬ ПО
| Товар ИЕРАРХИЯ
|ИТОГИ
| СУММА(Количество)
|ПО
| Товар";
строка “Товар: Чайники, Количество: 5, Тип записи: Итог по иерархии, Уровень: 1, Группировка: Товар” является итогом по иерархии;
а при типе итогов “только иерархия” строка “Товар: Чайники, Количество: 5, Тип записи: Итог по группировке, Уровень: 1, Группировка: Товар” является уже итогом по группировке?
…
(текст комментария доступен только участникам Мастер-группы)
Василий, добрый день!
Спасибо за такой подробный и развернутый ответ!
…
(текст комментария доступен только участникам Мастер-группы)
Пока ВыборкаТовар.Следующий() Цикл
ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаТовар);
ТабДок.Вывести(ОбластьСтрокаТовар);
ВыборкаПокупательПоТовару = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Покупатель", "ВСЕ");
Пока ВыборкаПокупательПоТовару.Следующий() Цикл
ОбластьСтрокаПокупатель.Параметры.Заполнить(ВыборкаПокупательПоТовару);
ТабДок.Присоединить(ОбластьСтрокаПокупатель);
КонецЦикла;
Вопрос, касаемый метода Выбрать() у Выборки.
В коде, указанном выше, выбираются из результата запроса все Товары и их Итоги
.
После чего для текущего Товара из выборки (ВыборкаТовар.Следующий()) получаем всех Покупателей, даже тех, которые данный товар не приобретали (ключевое слово “ВСЕ”)
Здесь именно такая логика?
…
(текст комментария доступен только участникам Мастер-группы)
Доброго времени суток.
Конструктор запроса создал код:
Макет = ВнешниеОбработки.ЗапросВыводВТабДок.ПолучитьМакет(“Макет”);
Но он не работает, вылезает ошибка: Поле объекта не обнаружено (ЗапросВыводВТабДок)
С чем это связано? Код выполняется на сервере.
…
(текст комментария доступен только участникам Мастер-группы)
я так и сделал в итоге, просто интересно, почему конструктор сформировал код, который не работает.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
Столкнулся с непонятным поведением системы. Рекурсивный перебор из примера в модуле 5 работает нормально до тех пор, пока я не пытаюсь в отладчике проследить шаги рекурсии. Если ставлю точку останова внутри процедуры ОбойтиРекурсивно(Выборка) , программный код перестает отрабатывать. И по сообщениям видно, что выборка перебрала не весь товар (иногда вообще выводится одно сообщение про один конкретный товар, никаких иерархий и группировок), и в отладчике видно, что перебирает неправильно. Убираю точку останова – все в порядке. Что бы это могло означать?
…
(текст комментария доступен только участникам Мастер-группы)
пробовал 8.3.12.1714, 8.3.13.1513 – одинаково…
Однако, почистил кэш – заработало так, как ожидалось.
…
(текст комментария доступен только участникам Мастер-группы)
я вообще с 5 модуля перестал что-либо понимать. хоят быстрый старт весь закончил и запросы это единственное что я понял хорошо. есть какие- то еще курсы по запросам? с выборками в выборке я вообще ничего не понял, как оно работает. на видео это необъясняется
…
(текст комментария доступен только участникам Мастер-группы)
вот как-раз -таки это я более менее понял, кроме, наверное того момента, когда уровней много, а так спасибо, хотя бы чуточку по яснее стало.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! Модуль 5, Видеоурок. Вывод результата запроса в табличный документ, файл Query-5-Config-9, у меня не получается вывести табличный документ, в строках:
Макет = ВнешниеОбработки.Запросы.ПолучитьМакет(“Макет”);
//Макет = РеквизитФормыВЗначение(Объект).ПолучитьМакет(“Макет”);
выдает ошибку, ошибки прикрепила, у меня не работает ни один, ни второй вариант, помогите, пожалуйста, разобраться! Спасибо!
Добрый день! Разобралась, делаю кросс-таблицу и увидела, что в строке
Макет = РеквизитФормыВЗначение(Объект).ПолучитьМакет(“Макет”);
слово Объект не заключено в кавычки! “Ураааааааа, зарррррработало!!!!!!”
МОДУЛЬ К ОШИБКЕ 1
Процедура ТабличныйДокументНаСервере(ТабДок)
Макет = ВнешниеОбработки.Запросы.ПолучитьМакет("Макет");
//Макет = РеквизитФормыВЗначение(Объект).ПолучитьМакет("Макет");
//строка выше позволит пользоваться отчетом не только из внеш.обработки, но и встроить отчет в меню
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходТовараТовары.Товар КАК Товар,
| ПРЕДСТАВЛЕНИЕ(РасходТовараТовары.Товар),
| РасходТовараТовары.Ссылка.Покупатель КАК Покупатель,
| ПРЕДСТАВЛЕНИЕ(РасходТовараТовары.Ссылка.Покупатель),
| РасходТовараТовары.Количество КАК Количество,
| РасходТовараТовары.Сумма КАК Сумма
|ИЗ
| Документ.РасходТовара.Товары КАК РасходТовараТовары
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма)
|ПО
| ОБЩИЕ,
| Покупатель,
| Товар";
РезультатЗапроса = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьПокупатель = Макет.ПолучитьОбласть("Покупатель");
ОбластьТовар = Макет.ПолучитьОбласть("Товар");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаОбщийИтог.Следующий(); // Общий итог
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
ВыборкаПокупатель = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПокупатель.Следующий() Цикл
ОбластьПокупатель.Параметры.Заполнить(ВыборкаПокупатель);
ТабДок.Вывести(ОбластьПокупатель, ВыборкаПокупатель.Уровень());
ВыборкаТовар = ВыборкаПокупатель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаТовар.Следующий() Цикл
ОбластьТовар.Параметры.Заполнить(ВыборкаТовар);
ТабДок.Вывести(ОбластьТовар, ВыборкаТовар.Уровень());
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
&НаКлиенте
Процедура ТабличныйДокумент(Команда)
ТабДок = Новый ТабличныйДокумент;
ТабличныйДокументНаСервере(ТабДок);
ТабДок.Показать();
КонецПроцедуры
МОДУЛЬ К ОШИБКЕ 2
Процедура ТабличныйДокументНаСервере(ТабДок)
//Макет = ВнешниеОбработки.Запросы.ПолучитьМакет("Макет");
Макет = РеквизитФормыВЗначение(Объект).ПолучитьМакет("Макет");
//строка выше позволит пользоваться отчетом не только из внеш.обработки, но и встроить отчет в меню
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходТовараТовары.Товар КАК Товар,
| ПРЕДСТАВЛЕНИЕ(РасходТовараТовары.Товар),
| РасходТовараТовары.Ссылка.Покупатель КАК Покупатель,
| ПРЕДСТАВЛЕНИЕ(РасходТовараТовары.Ссылка.Покупатель),
| РасходТовараТовары.Количество КАК Количество,
| РасходТовараТовары.Сумма КАК Сумма
|ИЗ
| Документ.РасходТовара.Товары КАК РасходТовараТовары
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма)
|ПО
| ОБЩИЕ,
| Покупатель,
| Товар";
РезультатЗапроса = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьПокупатель = Макет.ПолучитьОбласть("Покупатель");
ОбластьТовар = Макет.ПолучитьОбласть("Товар");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаОбщийИтог.Следующий(); // Общий итог
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
ВыборкаПокупатель = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПокупатель.Следующий() Цикл
ОбластьПокупатель.Параметры.Заполнить(ВыборкаПокупатель);
ТабДок.Вывести(ОбластьПокупатель, ВыборкаПокупатель.Уровень());
ВыборкаТовар = ВыборкаПокупатель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаТовар.Следующий() Цикл
ОбластьТовар.Параметры.Заполнить(ВыборкаТовар);
ТабДок.Вывести(ОбластьТовар, ВыборкаТовар.Уровень());
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
&НаКлиенте
Процедура ТабличныйДокумент(Команда)
ТабДок = Новый ТабличныйДокумент;
ТабличныйДокументНаСервере(ТабДок);
ТабДок.Показать();
КонецПроцедуры
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте! По 5 модулю построение кросс таблиц итоговая строка подвала заполнилась значениями только после добавления после строки
строки
До этого момента работло в точности с модулем видеоурока. Прилагаю полный код.
&НаСервере
Процедура СформироватьНаСервере(ТабДок)
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Контрагент) КАК КонтрагентПредставление,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Номенклатура) КАК НоменклатураПредставление,
| ПродажиОбороты.СуммаОборот КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
|ИТОГИ
| СУММА(Сумма)
|ПО
| ОБЩИЕ,
| Контрагент,
| Номенклатура”;
Макет = РеквизитФормыВЗначение(“Объект”).ПолучитьМакет(“Макет”);
ОбластьШапкаТовар = Макет.ПолучитьОбласть(“Шапка|Товар”);
ОбластьШапкаПокупатель = Макет.ПолучитьОбласть(“Шапка|Покупатель”);
ОбластьШапкаИтог = Макет.ПолучитьОбласть(“Шапка|Итог”);
ОбластьСтрокаТовар = Макет.ПолучитьОбласть(“Строка|Товар”);
ОбластьСтрокаПокупатель = Макет.ПолучитьОбласть(“Строка|Покупатель”);
ОбластьСтрокаИтог = Макет.ПолучитьОбласть(“Строка|Итог”);
ОбластьПодвалТовар = Макет.ПолучитьОбласть(“Подвал|Товар”);
ОбластьПодвалПокупатель = Макет.ПолучитьОбласть(“Подвал|Покупатель”);
ОбластьПодвалИтог = Макет.ПолучитьОбласть(“Подвал|Итог”);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, “Контрагент”);
ТабДок.Вывести(ОбластьШапкаТовар);
Пока ВыборкаКонтрагент.Следующий() Цикл
ОбластьШапкаПокупатель.Параметры.Заполнить(ВыборкаКонтрагент);
ТабДок.Присоединить(ОбластьШапкаПокупатель);
КонецЦикла;
ТабДок.Присоединить(ОбластьШапкаИтог);
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, “Номенклатура”);
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьСтрокаТовар);
ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, “Контрагент”, “ВСЕ”);
Пока ВыборкаКонтрагент.Следующий() Цикл
ОбластьСтрокаПокупатель.Параметры.Заполнить(ВыборкаКонтрагент);
ТабДок.Присоединить(ОбластьСтрокаПокупатель);
КонецЦикла;
ОбластьСтрокаИтог.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Присоединить(ОбластьСтрокаИтог);
КонецЦикла;
ТабДок.Вывести(ОбластьПодвалТовар);
ВыборкаКонтрагент.Сбросить();
ВыборкаКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, “Контрагент”);
Пока ВыборкаКонтрагент.Следующий() Цикл
ОбластьПодвалПокупатель.Параметры.Заполнить(ВыборкаКонтрагент);
ТабДок.Присоединить(ОбластьПодвалПокупатель);
КонецЦикла;
ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаОбщийИтог.Следующий() Тогда
ОбластьПодвалИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Присоединить(ОбластьПодвалИтог);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
ТабДок= Новый ТабличныйДокумент;
СформироватьНаСервере(ТабДок);
ТабДок.Показать();
КонецПроцедуры
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, увидела ошибку. Исправила , заработало. База с сайта для выполнения работ отличается от видео.
Может и к лучшему.
ВыборкаКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
ТабДок.Вывести(ОбластьШапкаТовар);
Пока ВыборкаКонтрагент.Следующий() Цикл
ОбластьШапкаПокупатель.Параметры.Заполнить(ВыборкаКонтрагент);
ТабДок.Присоединить(ОбластьШапкаПокупатель);
КонецЦикла;
ТабДок.Присоединить(ОбластьШапкаИтог);
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбластьСтрокаТовар.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьСтрокаТовар);
ВыборкаКонтрагент1 = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент", "ВСЕ");
Пока ВыборкаКонтрагент1.Следующий() Цикл
ОбластьСтрокаПокупатель.Параметры.Заполнить(ВыборкаКонтрагент1);
ТабДок.Присоединить(ОбластьСтрокаПокупатель);
КонецЦикла;
ОбластьСтрокаИтог.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Присоединить(ОбластьСтрокаИтог);
КонецЦикла;
ТабДок.Вывести(ОбластьПодвалТовар);
ВыборкаКонтрагент.Сбросить();
//ВыборкаКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
Пока ВыборкаКонтрагент.Следующий() Цикл
ОбластьПодвалПокупатель.Параметры.Заполнить(ВыборкаКонтрагент);
ТабДок.Присоединить(ОбластьПодвалПокупатель);
КонецЦикла;
ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаОбщийИтог.Следующий() Тогда
ОбластьПодвалИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Присоединить(ОбластьПодвалИтог);
КонецЕсли;
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, не могу понять следующий момент:
Урок 5 часть 5, получаем детальные запись при обходе результата по группировкам.
//ЦИКЛ 1
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товар: "+ Выборка.Номенклатура + ", Количество: " + Выборка.Количество + ", Тип записи: " + Выборка.ТипЗаписи() + ", Уровень: " + Выборка.Уровень() + ", Группировка: " + Выборка.Группировка();
Сообщение.Сообщить();
ВыборкаДетальная = Выборка.Выбрать();
//ЦИКЛ 2
Пока ВыборкаДетальная.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товар: "+ ВыборкаДетальная.Номенклатура + ", Количество: " + ВыборкаДетальная.Количество + ", Тип записи: " + ВыборкаДетальная.ТипЗаписи() + ", Уровень: " + ВыборкаДетальная.Уровень() + ", Группировка: " + ВыборкаДетальная.Группировка();
Сообщение.Сообщить();
КОнецЦикла
КОнецЦикла
По результату работы этого кода мы получаем вывод выборки и группировок и детальных записей. Но не могу понять, почему выводится с уровнями группировок по порядку (0,1,2) т.е. (Итог по иерархии, Итог по группировке, детальная запись.)
В моем понимании в работе кода должно происходить так:
1. Заходим в \\ЦИКЛ 1, вывелся Итог по иерархии
2. Идем дальше
3. Попадаем в \\ЦИКЛ 2, вывелась детальная запись.
4.Выходим из \\ЦИКЛ 2, снова зашли в \\ЦИКЛ 1, вывелся итог по группировке
по факту происходит так:
1.Заходим в \\ЦИКЛ 1, вывелся Итог по иерархии
2. Идем дальше
3. Попадаем в \\ЦИКЛ 2, и сразу выходим, т.е. на первой итерации ВыборкаДетальная.Следующий() = ЛОЖЬ
4.снова зашли в \\ЦИКЛ 1, вывелся итог по группировке
5.Попадаем в \\ЦИКЛ 2, вывелась детальная запись.
Прошу пояснить в чем ошибка, спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Весьма доходчиво, спасибо!