Параметры размещения источники 1с
В платформе 8.3.18 произошли значительные изменения, связанные с механизмом расширений. Например, теперь при помощи расширений можно изменять типы реквизитов из основной конфигурации!
Этот функционал давно ожидался всеми разработчиками, использующими расширения при внедрениях.
Этот функционал давно ожидался всеми разработчиками, использующими расширения при внедрениях, так как он сильно увеличивает их возможности при доработках.
Раньше можно было только менять логику дорабатываемой конфигурации, корректировать программный код в модулях, добавлять новые объекты (справочники, документы) в расширении. А вот изменять существующие реквизиты – нельзя. Теперь такая возможность появилась.
Какие преимущества это дает?
- К примеру, когда не хватает типовой длины строкового поля, ее можно можно увеличить с помощью расширения – то есть, не снимая конфигурацию с поддержки.
- Можно увеличить длину числового реквизита в документе, когда разработчики типовой задали недостаточную длину для хранения данных конкретного предприятия.
- Также можно в реквизит составного типа добавить еще один тип данных при помощи расширения. Например, разработчик типовой предполагает, что в реквизите можно указывать только документы «Заказ клиента» и «Реализация». А на проекте для реализации требований заказчика нужно добавить в этот реквизит еще «Заказ поставщику». Это можно теперь сделать при помощи расширения, что очень удобно.
Работа с расширением типов реквизитов детально рассмотрена в этой серии видеоуроков — с практическими примерами и описаниями ограничений.
Кроме того, разобраны и другие полезные возможности расширений:
- Объединение расширений с cfe-файлом из командной строки
- Работа платформы при отключенных расширениях — когда при старте сеанса были подключены не все расширения, изменяющие структуру хранения данных
- Новая логика проверки применимости расширения, использующего аннотацию ИзменениеИКонтроль
- И другие полезные «фишки»…
Общая длительность видео – полтора часа. Приятного просмотра! :)
Видео 1 – Вступление
Ключевые моменты видео:
00:00 – Узнаем, какие темы разбираются в занятии.
Видео 2 – Объединение расширений
Ключевые моменты видео:
00:00 – При помощи какой команды пакетного режима запуска конфигуратора можно выполнять сравнение расширения с файлом на диске?
00:45 – Где на сайте ИТС найти описание параметров командной строки
04:05 – Как вручную в конфигураторе выполнить объединение расширения с файлом на диске
05:10 – Какие параметры нужно указывать в командной строке
06:40 – Почему при объединении расширения из командной строки возникает ошибка “Каталог не обнаружен”
07:50 – Как работает сохранение настроек объединения в файл
12:50 – В каких случаях на практике можно применять объединение расширения с файлом на диске
Видео 3 – Расширение типов реквизитов
Ключевые моменты видео:
00:00 – Как убедиться, что в платформе 8.3.17 и ранее нельзя изменить тип реквизита при помощи расширения
01:20 – Как установить признак контролируемого или проверяемого свойства в расширении
Видео 4 – Расширение строковых реквизитов
Ключевые моменты видео:
00:00 – Как в платформе 8.3.18 увеличить длину строкового реквизита при помощи расширения
01:20 – Какие изменения произошли в панели свойств объекта расширения
03:20 – Можно ли уменьшить длину строкового реквизита при помощи расширения
04:20 – Происходит ли потеря данных при уменьшении длины строкового реквизита с помощью расширения
Видео 5 – Расширение числовых реквизитов
Ключевые моменты видео:
00:00 – Как в платформе 8.3.18 изменить длину и точность числового реквизита при помощи расширения
01:50 – Можно ли уменьшить длину и точность числового реквизита при помощи расширения
Видео 6 – Изменение длины кода
Ключевые моменты видео:
00:00 – Можно ли изменить длину кода и наименования справочника при помощи расширения
01:20 – Как в расширении установить признак контролируемого или проверяемого свойства для длины кода и наименования справочника
02:20 – Можно ли изменить длину номера документа при помощи расширения
Видео 7 – Формирование результирующего типа
Ключевые моменты видео:
00:00 – Почему нельзя уменьшить длину строкового реквизита при помощи расширения
00:50 – Каким образом при расширении типа реквизитов получается составной тип данных
03:20 – Как при помощи расширения добавить дополнительные типы в тип данных реквизита из основной конфигурации
04:20 – Как платформа обеспечивает сохранность данных при расширении типов реквизитов
Видео 8 – Примеры расширения типа
Ключевые моменты видео:
00:00 – Какой тип данных в результате будет иметь реквизит, если его тип изменяет одновременно несколько расширений
02:15 – Как ведет себя платформа при отключении расширения, изменяющего тип данных реквизита основной конфигурации
04:30 – Как при помощи консоли запросов проверить результирующую длину строки реквизита
06:00 – Как воспроизвести пример потери данных при изменении типа данных в расширении
Видео 9 – Свойство Тип
Ключевые моменты видео:
00:00 – Как сделать в расширении свойство Тип одновременно и контролируемым, и модифицируемым
01:30 – Что означает признак контролируемости свойства при расширении типа данных реквизита
02:50 – Каким образом формируется всплывающая подсказка для свойства Тип
Видео 10 – Ограничения составного типа
Ключевые моменты видео:
00:00 – Какие типы данных нельзя включать в составной тип
02:00 – Почему при помощи расширения нельзя изменить тип строкового реквизита на ХранилищеЗначения
Видео 11 – Ограничения расширений
Ключевые моменты видео:
00:00 – Можно ли расширить тип данных для общего реквизита
00:50 – Можно ли при помощи расширения изменить тип реквизита, ссылающегося на внешний источник данных
02:50 – Можно ли расширить тип данных определяемого типа
04:30 – Какие ограничения существуют при работе с планом видов характеристик
Видео 12 – Типовые конфигурации
Ключевые моменты видео:
00:00 – Можно ли в типовой конфигурации УТ 11 воспользоваться расширением типов данных
01:20 – Какой режим совместимости необходим для расширения типов данных
02:20 – Как использование определяемых типов усложняет использование расширения типов
Видео 13 – Отключенные расширения
Ключевые моменты видео:
00:00 – Как ведет себя система, когда при старте сеанса подключены не все расширения, изменяющие структуру хранения данных
01:00 – Как работают предыдущие версии платформы в таком случае
03:40 – Какие изменения произошли в платформе 8.3.18
04:10 – Какие особенности существуют при работе со справочниками, документами, планами обмена
10:40 – Какие особенности существуют при работе с табличными частями
15:50 – Какие особенности существуют при работе с регистрами
Видео 14 – Изменение и контроль
Ключевые моменты видео:
В прошлой статье речь шла об использовании BULK-операций для ускорения массовой загрузки / обновления данных в базе. В одном из примеров использовались внешние источники данных платформы 1С. Там было сказано о серьезных ограничениях этого механизма при работе с базой данных, а именно:
- Отсутствует возможность вызова хранимых процедур с возвратом значений для OUTPUT-параметров.
- Также нет возможности получить возвращаемый набор данных из хранимой процедуры.
- Недоступно выполнение произвольных SQL-скриптов
- И другие специфические ограничения.
В комментариях и в некоторых темах форума есть интерес к этому вопросу, поэтому ниже будет описание обходных путей для таких случаев.
Внимание! Все, что Вы увидите дальше - это воистину костыли, которых еще поискать! Не рекомендую использовать их на рабочем окружении, только если ну очень сильно нужно. В остальных случаях лучше использовать ADO.
Ниже не будет описания механизма источника данных, для этого обратитесь к официальной документации или другим статьям.
Полигон для испытаний
Все дальнейшие действия будут выполняться на простой базе данных, развернутой на SQL Server. Вот скрипт, если захотите создать ее у себя.
Также для примера будет использоваться конфигурация, исходный код которой можно будет найти на GitHub. Используемая версия платформы 8.3.13.1690, но думаю описанные подходы будут работать и на других версиях.
Просто напиши запрос
И так. у Вас есть внешняя база данных, которая тесно интегрирована в некоторые решение на платформе 1С. Для интеграции используются внешние источники данных. Исходные метаданные выглядят таким образом.
Источник включает в себя несколько таблиц и функцию. Не будем останавливаться на назначении каждого объекта, сейчас это добавлено только для примера. Позже Вы сами все увидите.
Для начала решим простую задачу - добавить таблицу, которая будет показывать текущие активные соединения и текст выполняемого запроса. Для SQL Server запрос может выглядеть так.
Запрос получения информации об активных соединениях, а также тексты SQL-запросов для них.
Для этих целей используются несколько системных таблиц (DMV).
Для этого добавим новую таблицу в источник, но в качестве вида таблицы указать "Выражение". В само выражение вставим SQL-запрос (см. под спойлером выше). Что же в таком простейшем примере может пойти не так? А вот что!
Идем в конфигуратор и видим странную картину.
Окей! Смирились, простили, сделали запрос одной строкой без переносов. Да, неудобно, но что поделать. Пробуем еще раз получить данные.
Что это опять за магия? Все дело в том, что платформа преобразует выражение таблицы к следующему виду.
Попробуем еще раз обратиться к таблице.
И, ура! Все получилось. Обратите внимание - мы поймали запрос, который сами и выполняем. Просто в тестовой базе больше никого нет :).
Вот такие особенности при использовании произвольных выражений в таблицах внешних источников данных. Наверняка многие с этим сталкивались и успешно обходили. Но по сравнению с остальными ограничениями и проблемами это лишь небольшая фича.
Где же возвращаемые параметры
Следующей интересной задачей будет вызов хранимой процедуры. Вроде все просто - добавляем функцию во внешний источник данных, определяем ее параметры, и она уже готова к вызову. Но хранимая процедура у нас не простая (по крайней мере для платформы 1С)! Она содержит выходные параметры, которые заполняются внутри самой процедуры при выполнении, а после возвращаются вызывающему коду.
В тестовой базе создана процедура с таким определением.
Вызвать эту процедуру без выходных параметров просто - нужно добавить функцию внешнего источника и определить выражение "dbo.ProcWithOutputParams(&1)".
Но нам это не подходит, т. к. не позволяет получить назад выходные параметры. Даже если попытаться определить их в выражении "dbo.ProcWithOutputParams(&1, &2, &3)", то при вызове платформа просто не вернет значения в переменные.
Как же быть и есть ли выход? Выход есть! К сожалению, он не такой элегантный и интуитивно понятный как использование ADO, но позволяет возвращать любые значений назад в код 1С из внешнего источника данных. Для начала нам понадобиться добавить в базу данных хранимую процедуру для произвольного выполнения команд.
Маленькая процедура для SQL Server.
Но большая процедура для внешних источников данных!
Эта процедура позволит выполнять произвольные TSQL-команды. Но это еще не все. Мы до сих пор не можем возвращать данные. Возьмем самый доступный в этой ситуации способ - будем использовать глобальную временную таблицу. в которую будем вставлять результаты команд и считывать их отдельным SELECT'ом. Вот так будет выглядеть эта таблица.
Скрипт создания глобальной временной таблицы для сохранения результатов SQL-команд.
Костыль, не отрицаю!
Для доступа к значению в этой таблице нужно знать идентификатор вызова. Чтобы упростить доступ можно добавить таблицу во внешний источник данных со следующим выражением.
После получения значения лучше всего его удалять из таблицы. Также есть нюанс - если попытаться обратиться к таблице до ее создания, то конечно же мы получим ошибку. Для корректной работы необходимо обрабатывать подобные исключения в конфигурации. Вернемся к примеру. Вот так теперь можно вызвать хранимую процедуру и получить результат.
Так выглядит сквозной пример вызова хранимой процедуры с получением результата.
Общий принцип работы алгоритма следующий:
- Инициализируем идентификатор вызова, по которому потом можно будет получить результат. Также подготавливаем все необходимые параметры для процедуры (в нашем случае это один входной параметр "@inputParam" с типом INT).
- Проводим инициализацию глобальной временной таблицы, если она еще не создана.
- Выполняем SQL-команду для вызова хранимой процедуры с последующим преобразованием результата в XML, и сохранением в промежуточную таблицу.
- Получаем значение XML из промежуточной таблицы и удаляем из нее полученное значение.
- Выводим результат.
Вот некоторые пояснения к SQL-команде вызова процедуры.
Как итог, на стороне 1С у нас есть текст XML, который мы разобрали и получили выходные параметры хранимой процедуры. Остается только продолжить с ними работу (преобразовать к нужному типу, сохранить куда-либо и т.д.).
Код получился достаточно объемным. Можно инкапсулировать некоторую функциональность в общем модуле таким способом.
В общем модуле оставляем только один экспортный метод "ВыполнитьПроизвольныйСкрипт", остальное только для служебного использования.
В процедуру передается текст SQL-команды для выполнения, при этом в скрипте должен быть указан параметр "&ИдентификаторВызова", чтобы его можно было явно подменить перед выполнением. Если такого параметра в скрипте нет, то получить возвращаемое значение будет нельзя.
Алгоритмы можно еще улучшить, но для примера этого должно быть достаточно.
Теперь код вызова будет выглядеть более лаконично.
Теперь вызов хранимой процедуры выглядит проще.
Но работать через ADO все равно будет эффективней!
Вот и все. Мы добавили немного костылей и палок, теперь внешние источники данных можно использовать для более широкого спектра задач.
Вернуть набор из процедуры
С получением выходных параметров хранимых процедур мы разобрались, но есть и более сложный случай - получить набор записей, который эта процедура вернула. Например, есть служебная процедура "sp_who", которая возвращает текущую активность на сервере.
Как же нам получить этот набор данных через внешний источник на стороне 1С? Сделать SELECT к хранимой процедуре нельзя, нужен альтернативный вариант.
На самом деле все просто - модифицируем предыдущий пример и получим такую SQL-команду.
Самое важное - это передача результатирующего набора процедуры в табличную переменную, который потом можно преобразовать к XML.
Сам по себе способ преобразования значений к XML очень универсален, но имеет некоторые накладные расходы как на сериализацию, так и на десериализацию. Вот более подробная информация по инструкции "FOR XML".
Тут ничего нового не увидите, все аналогично предыдущему примеру.
Парсинг результата опустим, он не имеет для примера большого значения.
Теперь у Вас должно быть представление, что работать с хранимыми процедурами через внешний источник данных можно, хоть и выглядит это мягко говоря странно.
Выполнение любого скрипта
На самом деле мы получили возможность работать не только с хранимыми процедурами, но выполнять абсолютно любой SQL-скрипт и получать результат любого вида. Главное чтоб его можно было преобразовать в XML. В новых редакциях SQL Server результат можно возвращать также и в JSON-формате.
Например, с помощью внешнего источника данных теперь можно делать то, что раньше казалось недоступным!
Обновление статистики
Удаление таблицы
Удаление базы данных
Опасность
Подобный подход работы с базой имеет ряд существенных недостатков:
- Сложность сопровождения, ведь вместо обычных SQL-скриптов приходиться предусматривать маневры для возврата значений на сторону 1С.
- Множество избыточных действий могут влиять на производительность (использование временных таблиц, преобразование результатов запросов в XML и обратно и др.).
- Большой удар по безопасности, т.к. теперь из кода 1С можно выполнить любую SQL-команду. Конечно, правами учетной записи SQL-сервера можно себя обезопасить, но для этого также потребуется время и ресурсы на настройку и сопровождение.
- Также неграмотное составление SQL-команд может привести к неоптимальной работе SQL Server. Например, если вместо передачи значений в запрос использовать не параметры, а явное указание значения. В этом случае кэширование планов запросов не будет эффективно работать. Вот интересный материал про динамические SQL-запросы.
Вот и все
Может быть кому-нибудь это будет полезно, но используйте это только когда больше нет выхода. Вместо этих костылей лучше использовать ADO. Судите сами, вот так будет выглядеть вызов хранимой процедуры с выходными параметрами.
Так стоит ли усложнять? После этого все то, что мы делали выше, кажется бессмысленным. Но решать конечно же только Вам!
Состав языка запросов и системы компоновки данных предоставляет широкие возможности по обработки данных, но не включает в себя специфические возможности различных СУБД, к которым можно отнести функции, последовательности, хранимые процедуры и различные специфические конструкции СУБД. В тоже время, применение специфических возможностей СУБД может оказаться критически важным при работе с внешними источниками данных. В качестве примера можно привести объектную таблицу СУБД, ключ которой получается из последовательности. Функции и процедуры могут ничего не возвращать (процедура), а также возвращать одиночное значение или таблицу.
Для работы с такими объектами СУБД в «1С:Предприятии» существует понятие функции внешнего источника данных. Функции в «1С:Предприятии» могут быть следующих видов:
- Таблица вида выражение в реляционном источнике данных;
- Функция, которая не возвращает значения (процедура);
- Функция, которая возвращает какое-либо значение.
Любая из вышеописанных функций может принимать параметры, количество параметров может быть как фиксированным, так и переменным.
Функция внешнего источника данных может выступать как прослойкой между реальной функцией (или сохраненной процедурой) СУБД, так и явным образом описывать некоторую конструкцию, которая будет подставлена в выполняемый запрос.
Функции могут использоваться во встроенном языке, языке запросов и системе компоновки данных. Для функций можно указывать права доступа, регламентирующие использование этих функций.
3.2. Общая схема использования
Для того чтобы использовать функции внешних источников данных в системе на базе «1С:Предприятия», следует придерживаться следующей общей схемы:
● Изучить структуру внешнего источника данных и понять, какие функции, процедуры или конструкции на языке СУБД необходимы для работы алгоритмов или отчетов в 1С:Предприятии».
● Создать объект Внешние источники данных в конфигураторе и для него создать подчиненные функции. Это можно сделать с помощью специального помощника.
● Реализовать использование созданных объектов в прикладном решении.
● Выполнить настройку параметров подключения к внешнему источнику данных в той сети, где будет использоваться прикладное решение. Эти параметры могут отличаться от тех, которые использовались при загрузке структуры внешнего источника данных.
ПРИМЕЧАНИЕ. Параметры доступа к внешнему источнику данных, которые были заданы в конфигураторе, не будут использованы системой в режиме 1С:Предприятие.
3.3. Редактирование функций
3.3.1. Общая информация
Для работы с функциями внешних источников данных предназначена ветвь с именем соответствующего внешнего источника данных ветви Внешние источники данных – – Функции дерева конфигурации. Определение внешнего источника данных состоит из следующих шагов:
1. Определение собственно внешнего источника данных;
2. Определение функций источника данных;
3. Если во внешнем источнике данных существуют процедуры, возвращающие таблицы, то необходимо также определить таблицы внешнего источника данных вида выражение.
При этом в конфигурации может быть описано меньшее количество функций и процедур, чем есть в реальной базе данных. Также можно написать некоторую функцию (на языке используемой СУБД), которая отсутствует в реальной базе данных. При этом надо учитывать следующие особенности:
● Если для функции (как объекта конфигурации) указано, что выражение возвращает значение, то:
● При использовании во встроенном языке – выражение подставляется в конструкцию select .
● При использовании в языке запросов (и системе компоновки данных) – происходит замена вызова функции на собственно выражение.
● Если для функции (как объекта конфигурации) указано, что она не возвращает значение, то:
● При использовании во встроенном языке – в зависимости от СУБД, может использоваться либо вызов с использованием конструкции select , либо будет использована управляющая последовательность ODBC call . В силу этого, не рекомендуется использование произвольного выражения для функции, не возвращающей значение, с целью максимальной совместимости с различными СУБД.
● При использовании в языке запросов (или системе компоновки данных) – не поддерживается.
Создание структуры внешнего источника данных возможно как в ручном режиме, так и при загрузке этой структуры с помощью специального конструктора.
3.3.2. Внешний источник данных
При создании внешнего источника данных следует указать его имя. Этот объект предназначен для идентификации функций при обращении.
Источник данных состоит из одной или нескольких функций, также возможна ситуация, когда во внешнем источнике данных располагаются таблицы-выражения.
Если объект внешнего источника данных служит исключительно для обращений к процедурам и функциям, то значение свойства Режим управления блокировкой данных не имеет смысла. Если для внешнего источника данных режим управления блокировок установлен в значение Автоматический и управляемый , то для каждой таблицы режим блокировок определяется значением соответствующего свойства таблицы. Если для
внешнего источника данных выбран определенный конкретный режим управления блокировками, то одноименное свойство таблицы внешнего источника данных игнорируется.
3.3.3. Функция внешнего источника данных
При создании новой функции открывается окно конструктора функции внешнего источника данных. Если выбран ручной режим создания – будет открыта палитра свойств созданной функции внешнего источника данных .
Свойство функции Имя служит для идентификации функции при обращении к ней. Свойство Выражение в источнике данных будет содержать в себе выражение, которое будет использоваться в реальном запросе в базе данных при использовании функции. В данном свойстве можно указать не только обращение к реальной функции или сохраненной процедуры базы данных, но и написать выражение на языке СУБД внешнего источника данных.
Свойство Возвращает значение фактически указывает, что описывается в объекте конфигурации:
● Истина – описывается функция или выражение, возвращающее значение. В этом случае также необходимо указать, какого типа значение
будет возвращаться данным выражением.
● Ложь – процедура или выражение, не возвращающее значение.
Процедура или функция может принимать параметры. Функцией может выступать выражение на языке СУБД, например функция, которое получает следующее значение последовательности ( SimpleSequence ), будет иметь следующий вид:
NEXT VALUE FOR dbo.SimpleSequence
Если нужно получить следующее значение последовательности из встроенного языка, то это будет выглядеть следующим образом:
ЗначениеКлюча = ВнешниеИсточникиДанных.ВнешниеДанные.СледующееЗначениеКлюча();
В данном примере ВнешниеДанные – имя внешнего источника данных, в котором описана функция СледующееЗначениеКлюча (). Также функция может быть написана на языке используемой СУБД. При этом рекомендуется выражение заключать в круглые скобки, чтобы избежать различных побочных эффектов во время исполнения реального запроса. Следует помнить, что при трансформации запроса из языка запросов платформы «1С:Предприятие», в диалект SQL конкретной СУБД, функции подставляются непосредственно в текст получающегося запроса (с автоматической подстановкой параметров функций).
3.3.4. Таблица вида выражение внешнего источника данных
Функции могут возвращать не только значения, но и таблицы. В этом случае функцию необходимо создавать как таблицу вида выражение.
Действия, которые необходимо выполнить при создании таблицы внешнего источника данных. Также необходимо описать поля возвращаемых данных, аналогично обычным полям таблицы внешнего источника данных
3.3.5. Загрузка функций из внешнего источника данных
Существует возможность загрузки структуры таблиц из внешнего источника данных, который доступен для разработчика (например, копии реальной базы данных).
Для выполнения этой операции следует при создании таблицы указать пункт Выбрать из списка функций внешнего источника данных в конструкторе функции внешнего источника данных. Затем нужно указать строку соединения с внешней базой данных, воспользовавшись окном Подключение к источнику данных . При формировании строки подключения можно воспользоваться конструктором строки соединения с внешним
источником данных. Для этого следует нажать кнопку «…» справа от поля Строка соединения .
После того как подключение к внешней базе успешно выполнено, будет открыт список с перечнем процедур, функций и последовательностей подключенного источника данных. Затем следует выбрать те объекты, которые будут использованы конфигуратором для создания структуры объектов, описывающих текущий источник данных.
Рис. 7. Конструктор функций внешнего источника данных
Имеется возможность указать, под каким именем функция будет создана в конфигурации «1С:Предприятия».
Если флажок Удалять из конфигурации функции , отсутствующие во внешнем источнике данных установлен, то при завершении работы конструктора функций из конфигурации будут удалены те функции, которые отсутствуют во внешнем источнике (например, во внешнем источнике функции были удалены) данных.
После нажатия кнопки Готово произойдет загрузка структуры функций внешнего источника данных.
3.3.6. Параметры функций внешнего источника данных
Формальные параметры функций внешнего источника данных описываются как &n , где n – номер параметра. Нумерация параметров начинается с 1. Если параметры являются необязательными, то параметры заключается в фигурные скобки ( <> ). Наличие необязательных параметров определяется каждый раз при фактическом вызове процедуры или функции. На место отсутствующих в необязательном блоке фактических параметров при вызове подставляется NULL (для каждого необязательного параметра).
Если процедура или функция может принимать переменное число параметров, то такая конструкция описывается как &n[] . В этом случае фактические параметры будут подставлены в выражение на место конструкции &n[] через запятую. Указание на возможность передачи переменного числа параметров может быть только последним в списке формальных параметров.
В данной статье мы рассмотрим практически все возможности и множество нюансов, которые относятся к параметрам в Системе Компоновки Данных 1С (в сокращении — СКД). Параметры в запросе СКД, фигурные скобочки в запросе СКД — оно же Расширение языка запросов для СКД, особенности настройки страницы “Параметры” СКД, вывод параметров на форму, программная установка параметров, мягкие и жесткие параметры.
Параметры могут использоваться практически в любом месте запроса и выполнять самые различные функции.
Параметры обозначаются знаком & после которого следует имя параметра.
Параметр может быть полем запроса, частью произвольного выражения поля запроса, условием для виртуальной таблицы, частью выражения в отборе запроса и так далее:
При построении запроса конструктором на вкладке “Условия” если не стоит галочка “Произвольное”, то конструктор считает что в правом значении параметр и он записывается без символа &.
Таким образом этот блок настраивается в конструкторе.
Если значение параметра не задано, то построение СКД будет невозможно и будет выдана ошибка, поэтому такие параметры называют “обязательными” или “жесткими”.
Выбрать.
Этот блок располагается в запросе типа выборка данных пакета запросов СКД в первом запросе объединения между перечнем полей и “ИЗ” и заключается в фигурные скобки.
В этом блоке мы перечисляем поля, которые пользователь может выбирать для вывода, группировки и упорядочивания. Конструкция «.*» в параметре “Марка.*” позволяет выбирать для вывода, группировки и упорядочивания дочерние поля значения, например, Марка.Код. Слово “КАК” позволяет задать псевдоним, например, “Ссылка КАК Машина”. Поля в этом блоке попадают в перечень полей набора, даже если отключено автозаполнение. Если автозаполнение включено, то упомянутые поля попадают в соответствии с тем, как они настроены расширением кода, то есть если ссылочное поле без конструкции “.*” дочерние поля доступны не будут, если указан псевдоним — именно он попадет в перечень полей набора.
Таким образом этот блок настраивается в конструкторе.
При автоматическом заполнении полей набора данных, для не включенных в блок расширения “ВЫБРАТЬ”, добавляются все поля списка выборки и их дочерние поля. Они становятся доступными для выбора, упорядочивания, группировки, отбора. Также добавляются поля, которые упомянуты в параметре “Условия” виртуальных таблиц как доступные для отбора.
Отбор, установленный в пользовательских настройках, будет действовать не только на основной запрос, но и на все запросы в пакете. Но это не всегда соответствует логике отчета, к примеру, если помимо отобранной номенклатуры и сумм по ней нужно выводить общую сумму продаж для сравнения. В таких случаях нам нужны специфические отборы в каждом запросе пакета.
Блок расширения “ГДЕ” может быть расположен после или вместо обычного блока “ГДЕ” в любом запросе, подзапросе, запросах объединения и заключается в фигурные скобки. Для присвоения отбору псевдонима используется конструкция “КАК”. Псевдоним нужно использовать чтобы отбор производился конструкцией расширения языка запросов, но не происходил автоматически по наименованию поля.
Если автозаполнение полей набора отключено, поля из этого блока попадают в перечень полей набора доступными только для отбора, использование дочерних полей зависит от наличия конструкции “.*”.
Если автозаполнение включено, и это поле включено в блок расширения “ВЫБРАТЬ” тогда настройки обоих блоков объединяются. Если не включено в “ВЫБРАТЬ” то поля попадают доступными для вывода, группировки, отбора и упорядочивания.
В случае если нужно дополнительно установить какое то ограничение полю, то можно вручную установить галочку в соответствующее поле перечня полей набора данных СКД.
Параметры в блоке «ГДЕ» не обязательны для заполнения, поэтому эти параметры называют “необязательными” или “мягкими”.
Также в блоке “ГДЕ” вместо параметра может быть произвольное выражение с использованием конструкции ВЫБОР или параметров со страницы “Параметры” СКД. Правда в последнем случае вид сравнения необходимо указывать конкретно.
Нужно с осторожностью использовать вид сравнения МЕЖДУ поскольку:
Если параметры НачалоПериода и КонецПериода не будут заданы, то система получит документы за весь период.
Если параметры НачалоПериода и КонецПериода будут заданы, то система получит документы за указанный период.
Если какой-то один из параметров не будет задан, то система выдаст ошибку.
Один из вариантов решения это разбить МЕЖДУ на два условия чтобы система не выдавала ошибку в случае одного незаполненного параметра.
Это же замечание относится к любым выражением с использованием нескольких параметров.
Параметры виртуальных таблиц.
В параметрах виртуальных таблиц в отличие от предыдущих блоков, каждый параметр заключается в фигурные скобки. В полях относящихся к периоду название параметра ставится с &. Пример &ДатаНачала. В поле “Условие” параметры оформляются аналогично блоку “ГДЕ”.
Поведение параметров из поля “Условие” при снятии или установке галочки “Автозаполнение” также аналогично блоку «ГДЕ».
Параметры из полей периода попадают на страницу “Параметры” СКД. Если автозаполнение включено и в поле периода параметр не вписан, параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД.
Таким образом, эти параметры заполняются в конструкторе запроса. Для открытия формы “Параметры виртуальной таблицы” нужно выбрать виртуальную таблицу в списке таблиц и нажать выделенную синим кнопку. Также тут у таблиц есть булевый реквизит “Обязательная” и числовой реквизит “Номер группы”. Если признак обязательности таблицы не установлен, то она будет добавляться в результирующий запрос только в случае, когда хотя бы одно поле из нее задействовано в компоновке. Номер группы заполняется для необязательных таблиц и обозначает группу таблиц, которые будут добавлены в результирующий запрос только, когда из этой группы таблиц задействовано хотя бы одно поле.
В параметрах виртуальных таблиц возможно совместное использование “жестких” параметров запросов и “мягких” параметров компоновки данных.
В этом примере если в настройках установлено значение параметра &НачалоПериода, то будет использоваться его значение. В противном случае в качестве значения параметра виртуальной таблицы будет использоваться значение “жесткого” параметра “&Начало”.
Если автозаполнение включено и в поля периода не вписаны “мягкие” параметры компоновки данных то параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД и текст запроса:
будет соответствовать следующему:
В этом случае “мягкие” параметры также будут иметь приоритет над “жесткими”.
Обзорный вид страницы.
На эту страницу автоматически добавляются все параметры из запроса. Можно добавлять свой параметр в для использования его в вычисляемых полях например.
Строка параметра имеет следующие реквизиты:
Имя — это имя параметра, с помощью которого к его значению можно обращаться в тексте запроса, в вычисляемых полях и других местах где доступны выражения.
Заголовок — название, выводимое пользователю.
Тип — определяет тип параметра. Иногда при выборе дат периода, пользователю не нужно указывать время. Тогда нажав на “…” можно указать состав даты — Дата.
Таким же образом можно указать формат числа для численного параметра и длину строки для строкового.
А для того чтобы введенные значения интерпретировались в отчете как начало и конец дня следует в запросе использовать функции НачалоПериода() и КонецПериода() .
Доступные значения — определяет перечень доступных значений. Представляет собой список значений со стандартными полями — значение и представление, где значение типа параметра. Для ссылочного типа доступны для выбора только предопределенные данные.
Доступен список значений — определяет доступность параметру принимать значение “список значения”.
Значение — предустановленное значение параметра. Типа параметра. Для ссылочного типа доступны для выбора только предопределенные данные.
Выражение — выражение, значение которого примет параметр. Что примечательно здесь могут использоваться как функции встроенного языка запросов, так и функции встроенного языка программирования и даже функции из общих модулей. К примеру, параметру ТекДата присваивается значение функции встроенного языка программирования ТекущаяДата().
Также в примере к реквизиту “Тип” можно было в выражениях использовать функции встроенного языка запросов, особенность применения этих функций в данном месте такова, что строковые параметры функций надо брать в кавычки.
и в запросе можно было бы писать проще поскольку в параметрах уже будет содержаться начало и конец периода:
Иногда, для повышения удобства пользователю для выбора периода лучше дать не два поля с типом Дата, а одно поле с типом Стандартный Период. Тогда, к примеру, создаем три параметра: “Период” с типом СтандартныйПериод, “ПериодНачало” и “ПериодОкончание” с типом Дата. Первый параметр без ограничения доступности. Вторые с ним. В выражение “ПериодНачало” пишем “&Период.ДатаНачала”, в “ПериодОкончания” — “&Период.ДатаОкончания”.
Даты начала и конца стандартного периода также содержат и время. ДатаНачала имеет время 00:00:00, а ДатаОкончания 23:59:59. Получится что пользователь выберет стандартный период в “Период” а разработчик будет использовать корректные “ПериодНачало” и “ПериодОкончание”.
Параметр функциональной опции — используется в механизме функциональных опций.
Включать в доступные поля — включает параметр в доступные поля для выбора в настройках.
Ограничение доступности — ограничивает возможность изменения значения параметра пользователем.
Запрещать незаполненные значения — если установлено и значение параметра не заполнено — отчет не сформируется и выдаст ошибку.
Использование — устанавливает использование параметра. Если установлено Авто и параметр используется в запросе или выражениях, а пользователь перед формированием не установит галочку около параметра — отчет при формировании выдаст ошибку. Пользователь может установить эту галочку непосредственно, или она установится автоматически при изменении значения параметра. Если установлено Всегда, то этой проверки на то, что пользователь заполнил этот параметр — не будет.
Параметры редактирования — содержит настройки редактирования как у поля формы.
В настройках варианта мы можем установить галочку “Отображать недоступные параметры”, это можно использовать если для разных вариантов мы хотим использовать разный набор параметров.
У параметров в табличной части мы можем установить значение по умолчанию для варианта, включить использование по умолчанию установив галочку слева. Нажав на кнопку, расположенную справа внизу, мы открываем окно пользовательских настроек параметра.
В пользовательских настройках мы можем включить параметр в пользовательские настройки. Установим режим редактирования обычный. Тогда он будет доступен в форме, вызываемой кнопкой “Настройки…”.
Если Режим редактирования установить Быстрый доступ, то параметр появится на форме.
Если у параметра “Период” представление заполнить строкой “ПеРиОд”, то вместо название будет показано содержания поля представление.
Если у отчета СКД нет формы, то платформа создаст автоматическую, на которой будут табличный документ результата, кнопки управления и быстрые пользовательские настройки.
Можно создать свою форму для отчета и вывести на нее табличное поле со всеми пользовательскими настройками. Вот так:
Для этого в созданной форме в конфигураторе вытаскиваем на форму Пользовательские настройки из Компоновщика отчета.
В некоторых случаях параметр не прост, и для его расчета нужен некий алгоритм с циклом или ветвлениями. К примеру если отчет формируем в понедельник то в отчете сравниваются продажи по дням позапрошлой и прошлой недели, а в остальные дни недели сравниваются продажи по дням прошлой и текущей недели. Получается у нас от значения дня недели текущего дня зависит сразу четыре параметра: &НачалоПрошлойНедели, &КонецПрошлойНедели, &НачалоТекущейНедели и &КонецТекущейНедели. А еще нам надо дать возможность пользователю формировать отчет как будто он сформирован вчера или неделю назад. В таком случае мы создаем реквизит формы ТекДата типа Дата. Выводим его на форму. В событии ПриИзменении() пишем.
Таким образом можно программно менять параметры из формы.
Параметры это ключевой инструмент для управления отчетом. Использование параметров дает возможность решить множество прикладных задач, таких как калькуляция на основе информации в базе и значений введенных интерактивно для конкретной калькуляции и многих других. В данной статье рассмотрены практически все относящиеся к параметрам механизмы и особенности. Рамках статьи не рассмотрен блок “Характеристики” Расширения языка запросов для СКД поскольку он не касается параметров. Не рассмотрена настройка параметра “Параметр функциональной опции” поскольку ее описание лучше включить в статью по функциональным опциям.
Данная обработка предназначена для переноса данных из конфигурации на платформе 1С8 в другую конфигурацию на платформе 1С8, по правилам обмена. Для конфигураций, которые используют управляемые формы. Сделана на базе типовой обработки Универсальный обмен данными XML (2.1.8). Добавлена возможность отбора объектов при выгрузке.
Обработка Универсальный обмен данными в формате XML с отбором в управляемых формах для 1С: Предприятие 8.3
При тестировании использовалась платформа 1С: Предприятие 8.3 (8.3.13.1690). Тестировалось на конфигурациях 1С: Управление Нашей Фирмой 1.6 и 1С: Управление Торговлей 11.
Специальные предложения
Правила рабочие, в стандартном обмене (без отбора) работают без ошибок
(2) Конфигурация не типовая от АСТОРА, отключил обмен по реквизиту активность всё заработало, но правила простые по переносу одного РС, универсальный обмен взятый из УТ как-то по другому обрабатывает этот реквизит, в нём ошибки нет. (отбора по этому реквизиту не было)
(2)На типовом ЗУПе тоже самое, без отбора выгружается, с отбором ошибка. Собственно и в списке фильтров тоже далеко не все ресурсы доступны(в моем случае "должность" там нет
Ошибка:
Несоответствие типов (параметр номер '3')
: НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,Нстр("ru = 'Файл правил обмена'"),, УникальныйИдентификатор);
по причине:
Несоответствие типов (параметр номер '3')
Ошибка при попытке прочитать файл правил на клиенте
Несоответствие типов (параметр номер '3')
: НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,Нстр("ru = 'Файл правил обмена'"),, УникальныйИдентификатор);
по причине:
Несоответствие типов (параметр номер '3')
1С:Предприятие 8.3 (8.3.18.1208)
Бухгалтерия предприятия, редакция 3.0 (3.0.89.43)
При выборе файла в режиме На сервере пишет - Указанный файл не существует.
(10) В режиме "На сервере" файл не найден, потому что файл ищется на сервере, а Вы файл подставляете с клиента.
Чтобы обработка "читала" на клиенте, замените строку с ошибкой на
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище,ИмяФайлаЗагрузки,Ложь, УникальныйИдентификатор);
только перед загрузкой укажите имя файла (поставить переключатель на "Из файла на сервере", указать файл, затем переключиться на "С клиентского компьютера" и нажать "Загрузить данные".
(12) Обновили? Можно качать? А то отбор нужен позарез, а самому писать неохота.
И, ещё вопрос - я верно понимаю, что вы прикрутили нормальный отбор СКД?
Не работает. При попытке нажатия кнопки "Прочитать правила" (работа в режиме клиента) появляется ошибка "Несоответствие типов (параметр номер 3)".
Добрый день.
При открытии файла выдает ошибку основная таблица динамического списка задана неверно. 1С 8.3 BAS Бухгалтерия для Украины
На клиенте не дает выбрать файл загрузки
по причине:
Несоответствие типов (параметр номер '3')
При ошибке: Несоответствие типов (параметр номер '3')
Попробуйте в коде 3-й параметр удалить:
//НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,Нстр("ru = 'Файл обмена'"),, УникальныйИдентификатор);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла. УникальныйИдентификатор);
Скачал обработку, режим на клиенте, нажимаю: Прочитать правила обмена, получаю окно с ошибкой: Несоответствие типов (параметр номер '3').
Просмотры 19579
Загрузки 377
Рейтинг 9
Создание 15.03.19 20:32
Обновление 02.04.22 03:02
№ Публикации 1021748
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
Главное отличие онлайн-тренажера - отработка теории в группах с последующим разбором, сразу, никаких автовебинаров.
См. также
Загрузка данных из файла выгрузки в формате XML, выгруженного по правилам обмена. С возможностью выбора документов Промо
Обработка для загрузки из файла выгрузки с возможностью выбора документов для загрузки.
2 стартмани
24.05.2021 2916 19 unknown181538 4
Загрузка выписок из АЦК в формате XLT файлов для БГУ 2.0
Обработка позволяет загружать из выписки лицевого счета в формате XLT (АЦК) в 1С: Бухгалтерию государственного учреждения 2.0 документы Кассовое поступление/выбытие.
1 стартмани
11.02.2022 2957 8 kirill1c 0
Пульт управления телевизором LG Smart TV
Пульт LG телевизором smart TV (2014 года). Цель - управлять телевизором из 1С. Может быть полезна тем, кто потерял и не может найти пульт ДУ, кто смотрит телевизор и сидит за ноутбуком одновременно, для изучения обмена xml с внешними устройствами, в данном случае телевизором.
1 стартмани
Защита объектов от изменения обменом
Расширение позволяет пользователю заблокировать объект 1С (документ, справочник) от изменения последующими загрузками данных или обменами.
3 стартмани
05.01.2022 6144 22 sapervodichka 43
Выгрузка зарплаты из ЗУП 3 в БП 3 по принципу обмена ЗУП 2.5 в БП 3 Промо
Выгрузка отражения зарплаты из ЗУП 3 в Бухгалтерию 3 без настройки типового обмена! т.е. по принципу, как было в ЗУП 2.5.
10 стартмани
13.05.2020 5733 53 boobzx 26
Создание стартовой базы
Часто требуется создать «Новую базу» почти пустую, но совпадающую с «Исходной базой» по необходимым обязательным настройкам: константам, регистрам сведений, справочникам, видам субконто и планами счетов и т.п., при этом уникальные идентификаторы объектов должны совпадать.
1 стартмани
11.10.2021 8064 13 sapervodichka 48
Настройка обмена с любой устаревшей конфигурацией на базе 8.2 через обработку "Универсальный обмен данными в формате XML" и "Конвертацию данных 2.0"
Разберем кейс, как настроить простенький обмен с любой устаревшей конфигурацией на базе 8.2 через обработку "Универсальный обмен данными в формате XML" и Конвертацию данных 2.0 с возможностью настройки гибких отборов по периоду, организации и списку документов.
1 стартмани
23.11.2020 16919 12 orfos 14
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).
1 стартмани
23.06.2020 16110 170 Lem0n 1
Перенос объектов 1С Промо
Простой и наглядный перенос объектов между любыми базами 1С 8 с предварительным анализом на возможные различия в данных (через файл, через интернет, через буфер обмена, через Com). Интерактивная настройка правил обмена на стороне источника и получателя. В обработке есть удобный обзор по подсистемам, поиск и обработка данных по заданному фильтру. Сравнение объектов, поиск ссылок, регистрация в плане обмена. Конструктор кода по созданию объектов, написание скриптов и отладка мини-функций в УФ. Отключение/включение регламентных заданий. Отчеты по наполнению базы и разные проверки. Всевозможные инструменты администратора или программиста в одной обработке.
1 стартмани
16.03.2015 110143 2241 moolex 281
Универсальный обмен данными между похожими конфигурациями, версия 2020.3.1
Обработка «Универсальная выгрузка и загрузка» предназначена для оперативного переноса объектов между двумя идентичными или похожими конфигурациями. Быстрая, надежная и очень простая в использовании обработка.
1 стартмани
29.01.2020 28616 452 vladnet 58
Односторонний файловый обмен с сайтом по ftp (1C 2 Web)
Подходит под любую конфигурацию на управляемом интерфейсе на базе БСП 2.4.4 и выше. Позволяет гибко настроить выгрузку, практически любых, данных по расписанию на сервер ftp вашего ресурса. Ведение лога процесса выгрузки также предусмотрено.
3 стартмани
09.12.2019 15667 20 LamerSoft 0
Документы и Справочники в JSON
Пример выгрузки всех данных Документа или Справочника в JSON
1 стартмани
20.06.2019 27502 33 Teut_Vlad 22
Мастер XML-обмена Промо
Функциональный аналог конвертации данных в кармане - комплекс обработок предназначенный для быстрой и удобной разработки обмена данными между информационными базами 1С.
5 стартмани
02.09.2015 38578 13 Lancelot-2M 18
Универсальный обмен данными XML (с гибкими отборами и сохранением вариантов настроек)
Читайте также: