В процессе обучения на курсах по запросам 1С и механизму СКД Вы обязательно познакомитесь с интересными вспомогательными инструментами (от консоли запросов до редактора хранилищ настроек), которые значительно облегчат ваш нелегкий труд разработчика 1С :)
Вопрос №1: Почему при использовании консоли запросов с сайта ИТС может возникать ошибка “Метод объекта не обнаружен”?
Ответ
Это ошибка в консоли запросов с сайта ИТС. Когда в запросе используются итоги, эта консоль выдает ошибку, как на Вашем скриншоте. Чтобы найти строку с ошибкой, можно в конфигураторе включить остановку по ошибке. Ошибка возникает в функции ВывестиРезультатОдногоЗапроса, которая расположена в модуле обработки.
Проблемная строка: КоличествоСтрок = РезультатЗапроса.Количество();
Переменная РезультатЗапроса имеет тип ДеревоЗначений, у которого нет метода Количество, поэтому и возникает ошибка.
Обработаем эту ситуацию и изменим строку:
Если ТипЗнч(РезультатЗапроса) = Тип("ДеревоЗначений") Тогда КоличествоСтрок = РезультатЗапроса.Строки.Количество(); Иначе КоличествоСтрок = РезультатЗапроса.Количество(); КонецЕсли;
После этого консоль не будет выдавать ошибки при работе с запросами, содержащими итоги.
Вопрос №2: Почему в управляемом конструкторе запросов не всегда можно открыть отдельный конструктор для написания текста вложенного запроса?
Ответ
Дело в том, что на скриншоте приведен управляемый конструктор запроса, который теперь используется в указанных консолях. Если Вы попробуете открыть конструктор запроса в конфигураторе, то приемом с пробелом получится воспользоваться, так как в конфигураторе используется обычный (не управляемый) конструктор запроса. Таким образом, в управляемом конструкторе запроса недоступен прием, возможный в конфигураторе или в обычном (не управляемом) конструкторе запроса, когда выделяем пробел и при помощи контекстного меню открываем вложенный конструктор запроса.
Также не получится вот в такой ситуации открыть вложенный конструктор запроса:
Возникнет ошибка:
А вот в таком случае (без выделения пробела/текста) вложенный конструктор откроется:
P.S.
Понимать, как работают запросы и уметь их строить - обязательный навык для всех, кто дорабатывает и внедряет 1С.
После курса Вы сможете:
- Строить сложные запросы с несколькими источниками данных
- Уверенно задействовать вложенные запросы и временные таблицы
- Использовать встроенный язык для обработки результатов запроса
- Учитывать особенности соединений и объединений нескольких таблиц.
- Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.
Вопрос №3: В чем смысл параметра формы КлючНазначенияИспользования?
Для примера добавил в вызов отчета соответствующий ключ структуры:
ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, Отбор, КлючНазначенияИспользования ", Истина, Отбор, "ИзСписка");
Затем в быстрых настройках установил значение отбора. Однако, вопреки моим ожиданиям, это же значение отбора восстанавливается и в случае открытия отчета не из формы справочника товаров, когда значение ключа назначения пустое. То есть разделения не произошло. Почему?
Также прошу прояснить момент: КлючНазначенияИспользования – это параметр или свойство?
Ответ
- Сделал пример – КлючНазначенияИспользования.zip.
Это конфигурация, созданная с нуля. В ней добавлен документ, в пользовательском режиме созданы 2 документа. Также в конфигурации реализован отчет по этим документам. В настройках компоновки отчета отбор вынесен в быстрые настройки:
Для документа реализованы две команды, открываемые из панели навигации формы документа.
Команда1:
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормыОтчета = Новый Структура; ПараметрыФормыОтчета.Вставить("КлючВарианта", "Основной"); ПараметрыФормыОтчета.Вставить("КлючНазначенияИспользования", "Документ1"); ПараметрыФормыОтчета.Вставить("СформироватьПриОткрытии", Истина); ОткрытьФорму("Отчет.Отчет1.Форма", ПараметрыФормыОтчета, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры
Команда2:
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормыОтчета = Новый Структура; ПараметрыФормыОтчета.Вставить("КлючВарианта", "Основной"); ПараметрыФормыОтчета.Вставить("КлючНазначенияИспользования", "Документ2"); ПараметрыФормыОтчета.Вставить("СформироватьПриОткрытии", Истина); ОткрытьФорму("Отчет.Отчет1.Форма", ПараметрыФормыОтчета, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры
Команды отличаются только значением параметра КлючНазначенияИспользования.
В пользовательском режиме воспользуемся сначала Командой1, в быстрых пользовательских настройках установим отбор по Документу с номером 000000001, сформируем отчет, закроем форму. При повторном обращении к команде сохраненные пользовательские настройки восстанавливаются.
Затем воспользуемся Командой2, в быстрых пользовательских настройках установим отбор по Документу с номером 000000002, сформируем отчет, закроем форму. И здесь при повторном обращении к команде сохраненные пользовательские настройки восстанавливаются.
Если попробуем открыть отчет из командного интерфейса, то отбор не заполнен. Всё корректно.
Теперь посмотрим, что сохранено в системном хранилище настроек. Воспользуемся механизмом ИР – Редактор хранилищ настроек. К нашему отчету относятся следующие сохраненные настройки:
Строка имеет формат:
Отчет.ИмяОтчета/КлючВарианта/КлючНазначенияИспользования/ТекущиеПользовательскиеНастройки
Тип сохраняемого значения – ПользовательскиеНастройкиКомпоновкиДанных.
Так что здесь платформа ведет себя ожидаемо.
- Есть и свойство формы КлючНазначенияИспользования, и параметр формы КлючНазначенияИспользования. В программном коде выше мы передаем значение в параметр открываемой формы. Согласно Синтакс-помощнику при создании формы свойство формы КлючНазначенияИспользования заполняется на основе одноименного параметра формы.
Профессиональная разработка отчетов в 1С 8.3 на СКД.