1с получить представление документа
Функция Представление()
Функция представление предназначена для получения текстового представления любого значения, которое может быть получено при помощи языка запросов. Функция Представление() работает как для ссылочных, так и для примитивных типов. Для ссылочных типов результат функции полностью аналогичен получению поля "Представление" от ссылки, переданной в качестве параметра функции. Для примитивных типов, результатом работы функции является строка, в которую было преобразовано значение, переданное в качестве параметра. Особенностью данной функции является то, что ее результат не может быть использован в выражении. Такая особенность связана с тем фактом, что преобразование значений в строку осуществляется уже при получении данных из результата запроса, т.к. преобразование произвольного значения в строку при исполнении запроса на сервере, не осуществляется, в силу того, что при преобразовании значений в строку необходимо учитывать локальные настройки.
Использование функции Представление() имеет ряд преимуществ по сравнению с использованием поля "Представление". Например, в случае если поле, от которого получается представление, может содержать как ссылочные, так и примитивные типы, получение поля "Представление" через точку от такого поля приведет к тому, что представления для значений примитивного типа не будут получены. Если же, для такого поля применить функцию Представление(), то строковое представление будет получено вне зависимости от типа значения, содержащегося в поле. Кроме того, в случае если функция Представление() применяется к полю, которое является ссылкой более чем на три таблицы, язык запросов получает из базы данных только ссылочные значения, а значения представлений получает одним или несколькими дополнительными запросами. Такое поведение позволяет более эффективно получать представления для полей, которые ссылаются на большое количество таблиц (например, на любой справочник), за счет того, что в исполняемый запрос не будет помещаться большое количество соединений, которые необходимы для получения полей из которых состоит представление.
Применение функции Представление() также может быть полезным при получении представления поля - перечисления, в случае исполнения запроса через COM-соединение
Поле Представление
Каждая объектная таблица в информационной базе имеет виртуальное поле - "Представление". Это поле содержит текстовое представление объекта. В запросе возможно получать данное поле точно также как и другие поля таблиц, однако никакие операции с данным полем выполнять нельзя. Данная особенность связана с тем, что это поле является виртуальным, и, на самом деле, при получении данного поля из базы данных, запрос получает несколько полей, а при получении значения поля из результата запроса преобразовывает полученные значения в строку. Таким образом, единственное, что можно сделать с полем "Представление", это получить его в результат запроса.
Как следствие, результат запроса не рекомендуется упорядочивать по полю "Представление", т.к. это не приведет к желаемому результату - результат запроса будет упорядочен в порядке возрастания ссылок объектов. Подробнее об этом можно прочитать в разделе "Особенности упорядочивания по ссылочным полям".
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 3
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 0
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же Веб браузер в 1С используя поле HTML документа 3
Настраивал клиенту CRM, он захотел - чтобы панель управления сайтом была в 1С. Хочет - делаем: Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода: Код команд: НаКлиенте Процедура Команда1(Команда) Объект.HTML = Посмотреть все результаты поиска похожих
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Что такое менеджер временных таблиц и как с ним работать? 11
В 1С есть такая замечательная вещь, как МенеджерВременныхТаблиц . Этот объект позволяет передавать временные таблицы из одного запроса в другой. То есть, мы можем создать временную таблицу в запросе, прерваться, выполнить какой-нибудь код, и продо Объектная модель схемы запроса 5
Периодически во встроенном языке возникает необходимость изменения текста запроса в зависимости от разных алгоритмических условий. Раньше подобная задача решалась путем непосредственного формирования нужного текста запроса в виде строки. А это не вс Как в запросе объединить несколько значений в один столбец отобрав по условию? 1
Бывают ситуации, особенно когда формируешь отчеты по проводкам, где надо вывести отчет по одному типу значений и эти значения могут быть в разных колонках регистра. В примере ниже, необходимо собрать отчет в разбивке по Номенклатурным группам. Про Курс по разработке и оптимизации запросов в 1С (Часть 1) 0
Часть 1. Основные конструкции языка запросов и их назначение • Назначение языка запросов • Структура запроса • Основные секции запроса и их назначение • Группировка результатов запроса • Фильтрация результатов запроса • Объединения и соединени Посмотреть все в категории Запросы
Здравствуйте, коллеги.
Не могу найти вопрос по теме, как лучше получить строковое представление ссылки справочника. Точнее правильно и оптимально. Есть пара вариантов:
1. Получить запросом наименование, если представление по наименованию.
2. Через Строка(Ссылка) или СокрЛП(Ссылка)
Что правильнее, и, если возможно, с описанием, как внутри платформы работает конструкция Строка(Ссылка). Заранее спасибо
так нужно "Представление" или "Наименование"? Представление это отдельное поле.
В любом случае будет запрос. Строка(Ссылка) сделает неявный запрос.
Если предварительно Ссылка получается запросом, а тем более если не одна ссылка, а несколько, то логично и представление получать в этом же запросе, если предполагается вывод пользователю представления ссылки.
Поясню. Есть ссылка на ПВХ с наименованием "СуперПуперПВХ". Перед записью документа мне нужно получить наименование этого ПВХ и обработать. Вот и вопрос, как лучше это сделать, оптимальнее, и правильней, согласно стандартов разработки
Точно наименование самого ПВХ? Оно будет постоянным "СуперПуперПВХ" :)
В любом случае запросом будет правильно.
(6) я чувствую, что правильнее, но все-таки, почему? Если я знаю, как работает запрос и как работает выборка на всех этапах, то как будет получено представление ссылки этого ПВХ было бы интересно. Есть момент, в момент добавления в документ ссылки, она может быть помещена в оперативную память и жить там, при обращении к представлению через Строка(Ссылка) будет ли а) считаны все реквизиты ссылки; б) будет ли повторный запрос к БД;
(7) начните с того, как получаете первоначально эту ссылку?
И дальше остальные вопросы должны отпасть сами с собой.
Не думаю, что ссылку получаете объектной моделью и сразу анализируете Наименование. И определитесь точно что нужно, Наименование или Представление?
В остальных случаях всегда будет отдельный запрос. Явный или неявный.
В чем разница, если представление в виде наименования?
Ссылка у меня изначально получается запросом.
Вопросы дальше не отпали. Ссылка получается в общем модуле заполнения заказа, представление(оно же наименование) нужно в Событии ПередЗаписью, так что сразу предложение получать в запросе отпадает.
Вопросы не ушли. Как работает получение представление на уровне платформы. Без абстракций, типа неявного запроса. Точно запроса? Не считывания из оперативной памяти всех реквизитов ссылки? И запрос к чему? К кэшу, к БД?
Вот это говорит о том, что Представление не будет считано.
Откуда оно дальше то возьмется? Только из базы. Запросом.
(1) Оба варианта (запросом и в коде) правильные. Используются в зависимости от контекста.
В запросе: ПРЕДСТАВЛЕНИЕ(Ссылка)
В коде: Строка(Ссылка)
Результат идентичный.
Для оптимального получения представления в коде на сервере приложений работает специальный кэш, чтобы не лазить в БД дважды за представлением каждой ссылки. Получение представления по ссылке очень часто отрабатывает неявно (ведь чтобы просто показать на форме ссылку платформе тоже нужно получить ее представление). В последних версиях платформы можно настраивать собственные представления.
- Через программный интерфейс (общий модуль КадровыйУчет.КадровыеДанныеСотрудников), например:
Важно: Дата приема в регистрах имеет смещение на 20 сек., а через функцию вернется на начало дня, нужно это учитывать если будут какие-то условия.
- Через механизм представлений:
Список полей, которые можно получить через механизм представлений, можно посмотреть на примере типового отчета СостоянияСотрудников.
Список сотрудников можно передавать в любом виде, можно выбрать весь справочник Сотрудники, зависит от задачи.
Чтобы посмотреть содержимое временной таблицы, необходимо установить менеджер временных таблиц Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
далее необходимо выгрузить вт в таблицу значений с помощью следующей строки: Запрос.МенеджерВременныхТаблиц.Таблицы[0].ПолучитьДанные().Выгрузить();
- Выгруженный запрос, который формируется через механизм Представлений, это таблица Представления_СрезПоследних_КадроваяИсторияСотрудников, только в другом виде:
Запрос можно проверить через консоль запросов.
Обязательно нужно создать временную таблицу ВТИзмеренияДатыДляНабораЗаписей, это основа для работы с таблицей среза кадровой истории. В примере анализируется полный справочник сотрудников, можно собрать таблицу основываясь на своей задаче.
Можно указать организацию и подразделение, а можно отключить отборы, тогда будут выбраны все работающие сотрудники. Период тоже можно убрать из параметров.
Можно узнать кто за указанный период отсутствует, не работает.
1. Создаем таблицу втСотрудники (заполнить таблицу можно через таблицу значений, либо другим способом, зависит от задачи).
2. Заполняем параметры для ВТДанныеУчетаВремениИСостоянийСотрудников:
3. Выполняем запрос:
1. В модуле объекта необходимо прописать следующую процедуру:
2. В окне текста запроса разместить нужный запрос, который строится через механизм Представлений, например, текст из типового отчета "СправкаПоОтпускам":
В ЗУП ред. 3 появился полезный механизм выборки данных и основанный на нём механизм помещения этих данных в СКД, называемый (условно) механизм представлений. В основном, но необязательно, этим механизмом выбираются данные периодических регистров сведений. Суть его сводится к тому, что вы не пишите запросы к объектам ИБ (всё равно мало кто умеет это делать), а это за вас делают процедуры, написанные программистами 1С. Вы же должны правильно вызвать эти процедуры или описать обращение к представлению запроса в СКД.
Главное достоинство этого механизма, конечно, не то, что не надо писать запросы. Главное в нём то, что ваш код отвязан от структуры конфигурации - об этом заботится 1С. Если в типовой конфигурации что-то изменится в структуре, то ваш код не надо будет менять. Также это функционально правильно, так как данные зачастую данные хранятся в нескольких объектах. То есть просто выбрать данные из некого регистра некорректно, а "механизм" собирает данные со всех причастных регистров. Также не надо помнить о событиях с датой окончания или то, что кадровая история хранится со сдвигом в секундах и т.п. Предполагается, что механизм обойдет все эти подводные камни.
Например, чтобы с "т.з. учета в ЗУП" получить правильные данные о плановых начислениях, надо сделать выборку не только из РС.ПлановыеНачисления, но также из РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников и РС.ПлановыйФОТ. А чтобы получить кадровые данные сотрудников, механизмом извлекаются данные из более чем дюжины регистров.
Для иллюстрации работы "механизма" рассмотрим срез последних из периодического регистра сведений, этому посвящены несколько общих модулей ЗарплатаКадрыПериодическиеРегистры. Наверно, вы знаете, что виртуальную таблицу периодического регистра сведений СрезПоследних
платформа заменяет на запрос вида
Этот запрос точно не будет эффективным при наличии в регистре 1 млн записей. Быстрее выполнится запрос с выделением максимальных периодов во временную таблицу
И механизм сформирует примерно такой же запрос. Еще раз обращаю внимание: платформа генерирует заведомо неэффективный запрос, программисты 1С используют обходной манёвр (хех, на тему обходных маневров можете поискать как собираются базы начислений и удержаний). Для получения запроса понадобится временная таблица-фильтр по физическим лицам. Она должна обязательно содержать два поля: ФизическоеЛицо и Период. Причем поле Период может быть заполнено разными значениями. Для примера сделаем фильтр из таблицы значений
В менеджере временных таблиц мы получим искомый срез в ВТВоинскийУчет. Если поковыряться в параметрах процедур, то вы обнаружите, что, например, поля ФизическоеЛицо и Период можно переобозначить (описывая эти и другие подробности, я никогда не закончу писать статью).
Но опять о преимуществах механизма. 1С придумали т.н. "интервальные" регистры сведений. Это своего рода программно реализуемая "виртуальная таблица", в которую помещаются периоды действия регистрируемых событий. Получение среза последних при наличии такого регистра сводится к одному соединению фильтра с таблицей регистра, то есть выполняется заведомо быстрее. Для РС.ГрафикРаботыСотрудников, у которого уже есть интервальный регистр, результат вызова ЗапросВТИмяРегистраСрез вернет следующий запрос
То есть вызывая процедуру получения запроса для среза последних и т.п. мы получим функционально правильный и эффективный (будем надеяться) запрос.
Можно вместо запроса получить сразу ВТ. Соответственно, в параметре-менеджере временных таблиц уже должна быть готова ВТСотрудники
Приведу еще один полезный пример для регистра, у которого два измерения, причем одно из них все еще называется ФизЛицо вместо принятого ныне ФизическоеЛицо, а в ВТ-фильтре поле называется как раз ФизическоеЛицо. Также в этом примере описывается дополнительный отбор, накладываемый на второе измерение
Также можно получить записи регистра. Это делается при помощи функций в общем модуле ЗарплатаКадрыПериодическиеРегистры: ЗапросВТИмяРегистра, СоздатьВТИмяРегистра.
Помимо срезов регистров сведений существует целый перечень готовых запросов/временных таблиц. С этим перечнем можно ознакомиться в функциях:
Каждое из представлений, описанных в этих функциях, пожалуй, заслуживает отдельной темы. В этих функциях можно почерпнуть сведения о том, как получить соответствующие запросы и ВТ. Также можно глобальным поиском найти места, где это делают сами разработчики 1С.
Приведу ещё примеры использования некоторых из них. Например, данные учета времени и состояний сотрудников - таким образом вы получите ВТ с видом рабочего времени сотрудников на каждый день периода. Здесь при в сборе данных помимо регистров сведений участвуют и регистры накопления. Опять же, идейный смысл такого получения данных в том, что будут учтены отклонения, табели, индивидуальные графики и т.п.
Пример "двухступенчатой" выборки данных: сначала получаем кадровые данные, затем на их основании данные штатного расписания (ВТСотрудники должны быть подготовлены в МенеджерВременныхТаблиц). При этом, например, вам не надо думать, используется ли история изменения штатного расписания или нет. (Пример исправлен для 3.1.6.54)
Ну а причем здесь представления? Начнем с того, что представления запросов используются в СКД. Вы указываете в запросе, что надо выбрать из таблицы-представления, в событие ПриКомпоновкеДанных вставляете процедуру ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект) и, вуаля, вместо представления запроса появляются несколько ВТ, помещенные в ваш запрос, правильно собирающие данные из базы. Пример для среза последних - получение графика работы на дату для штатных сотрудников
Пример для "предопределенного" представления я бы привел для специфической таблицы Периоды
Не забудьте прописать процедуру в ПриКомпоновкеДанных, установить тип Дата в параметрах, добавить в структуру ДетальныеЗаписи, а в выбранные поля добавить Период. И получите таблицу дат с начала по конец периода.
Об использовании представлений в СКД больше расскажет конфигурация. Так что смотрите в ПолучитьЗапросПоПредставлению и пользуйтесь глобальным поиском, не забывая ставить флажок в Макеты. Стоит также отметить, что Представления охватывают лишь небольшую часть функций .СоздатьВТ.
Функция Представление()
Функция представление предназначена для получения текстового представления любого значения, которое может быть получено при помощи языка запросов. Функция Представление() работает как для ссылочных, так и для примитивных типов. Для ссылочных типов результат функции полностью аналогичен получению поля "Представление" от ссылки, переданной в качестве параметра функции. Для примитивных типов, результатом работы функции является строка, в которую было преобразовано значение, переданное в качестве параметра. Особенностью данной функции является то, что ее результат не может быть использован в выражении. Такая особенность связана с тем фактом, что преобразование значений в строку осуществляется уже при получении данных из результата запроса, т.к. преобразование произвольного значения в строку при исполнении запроса на сервере, не осуществляется, в силу того, что при преобразовании значений в строку необходимо учитывать локальные настройки.
Использование функции Представление() имеет ряд преимуществ по сравнению с использованием поля "Представление". Например, в случае если поле, от которого получается представление, может содержать как ссылочные, так и примитивные типы, получение поля "Представление" через точку от такого поля приведет к тому, что представления для значений примитивного типа не будут получены. Если же, для такого поля применить функцию Представление(), то строковое представление будет получено вне зависимости от типа значения, содержащегося в поле. Кроме того, в случае если функция Представление() применяется к полю, которое является ссылкой более чем на три таблицы, язык запросов получает из базы данных только ссылочные значения, а значения представлений получает одним или несколькими дополнительными запросами. Такое поведение позволяет более эффективно получать представления для полей, которые ссылаются на большое количество таблиц (например, на любой справочник), за счет того, что в исполняемый запрос не будет помещаться большое количество соединений, которые необходимы для получения полей из которых состоит представление.
Применение функции Представление() также может быть полезным при получении представления поля - перечисления, в случае исполнения запроса через COM-соединение
Поле Представление
Каждая объектная таблица в информационной базе имеет виртуальное поле - "Представление". Это поле содержит текстовое представление объекта. В запросе возможно получать данное поле точно также как и другие поля таблиц, однако никакие операции с данным полем выполнять нельзя. Данная особенность связана с тем, что это поле является виртуальным, и, на самом деле, при получении данного поля из базы данных, запрос получает несколько полей, а при получении значения поля из результата запроса преобразовывает полученные значения в строку. Таким образом, единственное, что можно сделать с полем "Представление", это получить его в результат запроса.
Как следствие, результат запроса не рекомендуется упорядочивать по полю "Представление", т.к. это не приведет к желаемому результату - результат запроса будет упорядочен в порядке возрастания ссылок объектов. Подробнее об этом можно прочитать в разделе "Особенности упорядочивания по ссылочным полям".
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . https://helpf.pro/uploads/img Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Авто добавление обработки в справочник Внешних обработок 0
Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автома Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Читайте также: