Развитие расширений
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в версии 8.3.20.1549
Мы продолжаем развивать функциональность расширений, чтобы вы могли с их помощью делать всё более сложные и функциональные кастомизации. В версии 8.3.20 мы добавим в расширения ещё несколько новых возможностей.
Поддержка определяемых типов, планов видов характеристик и общих реквизитов
В расширениях будут поддержаны определяемые типы.
Как это можно использовать?
Предположим, у нас есть конфигурация для автоматизации торговли. В ней есть определяемый тип Вес (Число (10,3)), который используется для определения веса продаваемых товаров (т.е. учет ведется с точностью до грамма).
Благодаря поддержке определяемых типов в расширениях мы можем сделать расширение, позволяющее этой конфигурации работать с ювелирными изделиями (где учет веса ведется с точностью до одной сотой грамма). Для этого мы добавляем в расширение определяемый тип Вес из основной конфигурации и переопределяем его как Число (10,5).
В расширениях также будут поддержаны планы видов характеристик – их можно будет добавить из конфигурации в расширение и переопределить в соответствии с решаемой задачей.
Точно так же можно будет добавить из конфигурации в расширение общий реквизит и переопределить его (например, расширив тип). Эта функциональность будет недоступна, если этот общий реквизит используется для разделения данных.
Поддержка наборов типов
В версии 8.3.20 будут добавлены новые возможности использования ссылок на объекты расширений.
Так, например, массив, полученный вызовом метода Справочники.ТипВсеСсылки().Типы(), будет содержать типы справочников как из конфигурации, так и из расширений (аналогично будут себя вести методы Документы.ТипВсеСсылки().Типы() и т.д.). Ранее эти методы возвращали только соответствующие типы, определенные в конфигурации.
Также в реквизит типа ЛюбаяСсылка можно будет помещать ссылки на объекты типов, определенных в расширениях. В реквизиты типа СправочникСсылка, ДокументСсылка и т.д. можно будет помещать ссылки на объекты соответствующих типов из расширений. Ранее после присвоения таким реквизитам ссылок на объекты типов, определенных в расширениях, значение реквизита становилось равным НеОпределено.
Это нововведение, помимо прочего, позволит разработчикам расширений легче встраивать свои расширения в стандартные механизмы БСП, использующие наборы и определяемые типы.
Поддержка предопределенных в справочниках
В версии 8.3.20 можно будет добавлять предопределенные элементы в собственные справочники расширений. Ранее эта возможность была доступна только для планов видов характеристик, планов счетов и планов видов расчета, определенных в расширениях
В расширении справочнику нельзя добавить предопределенные данные.
(2) думаю, что это сделано умышлено и возможность создания предопределенной группы — баг.
Интересно, чем же решили заменить преопределенные элементы справочников?
Полный мрак.
Пытаюсь в режиме приложения открыть справочник:
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка при выполнении операции с информационной базой
Запись не найдена в менеджере имен базы данных.
После удаления предопределенных групп:
Платформа: 1С:Предприятие 8.3 (8.3.11.2867)
Конфигурация: Зарплата и кадры государственного учреждения, редакция 3.1 (3.1.5.65) (http://v8.1c.ru/statehrm/)
Copyright © ООО "1C-Софт", 2014 — 2017. Все права защищены
Расширение конфигурации: Дополнения для ХХХ
Режим: Серверный (сжатие: усиленное)
Приложение: Тонкий клиент
Локализация: Информационная база: русский (Россия), Сеанс: русский
Вариант интерфейса: Такси
Ошибки:
Тип не определен ‘8db5ca43-69d9-46a0-8a77-4c087bbc0bda’
Ну всё, угробил базу.
Со второй попытки снес расширение.
Пытаюсь зайти в один из справочников, которые пробовал расширить:
Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
Ошибка выполнения запроса
по причине:
Работа с таблицей невозможна.
Структура таблицы расширена при выключенном разделении.
Предопределенные элементы справочников 1С 8.3
У любого справочника 1С (кроме подчиненных) можно создавать предопределенный элемент или предопределенную группу этого справочника (если справочник иерархический). Предопределенные элементы справочника это элементы созданные разработчиком в конфигураторе, с которыми пользователь может работать. Пользователю уже не нужно самостоятельно создавать этот элемент справочника, он уже будет создан в базе по умолчанию при установке. Также разработчикам очень удобство работать с предопределенными элементами в том, что разработчик к ним может обращаться напрямую, используя менеджер справочника. В этой статье мы научимся работать с предопределенными элементами.
При разработке справочников, рекомендую, первым делом подумать будут ли предопределенные элементы у этих справочников, и создать их заранее, до того как этот справочник будет внедрен в опытную эксплуатацию.
К примеру, мы в нашей конфигурации для целей учета создали справочник Валюты, поскольку мы живем в Российской федерации, то валюта Рубль всегда будет в нашей конфигурации, которая используется на территории РФ. Поэтому наиболее логичнее её сделать в виде предопределенного элемента. Поэтому создадим для справочника Валюты предопределенный элемент Рубль. Для того, чтобы добавить предопределенный элемент необходимо выделить нужный справочник, вызвать контекстное меню и выбрать в этом меню команду «Открыть предопределенные данные».

Откроется список предопределенных элементов (и групп, если справочник иерархический), в котором можно добавлять новые элементы. Причем заметьте, при добавлении мы можем указать только наименование элемента и его код, если у справочника есть реквизиты, то мы эти реквизиты мы сможем заполнить только в пользовательском режиме.

Обращаю внимание на имя предопределенного элемента. Имя должно быть уникально в пределах этого справочника, и к нему применяются правила установки имен для объектов метаданных (отсутствие пробелов, спецсимволов кроме подчеркивания и т.д.). Пользователь не видит имени предопределенного элемента, он работает только с наименованием. С именем может работать разработчик, получая ссылку на конкретный предопределенный элемент, используя менеджер справочника.
Если справочник иерархический, то можно также создать и предопределенные группы, для этого в командной панели формы списка предопределенных элементов имеется команда «Добавить группу».

Если мы зайдем в форму списка справочника Страны в пользовательском режиме «1С: Предприятия», то обнаружим, что уже имеются группы и элементы с точкой внизу. Так платформа помечает предопределенные элементы и группы.

Замечу, что все реквизиты у предопределенных элементов присутствуют также как и у обычных, и в них можно записывать какие-либо значения.

Получить предопределенный элемент справочника 1С
Используя менеджер справочника, можно обратиться к предопределенному элементу. Делается это следующим образом.
Обращаю Ваше внимание, что получить ссылку на предопределенный элемент можно только в серверном контексте. Чтобы получить ссылку на предопределенный элемент в клиентском контексте управляемой формы необходимо использовать метод ПредопределенноеЗначение, где в кавычках нужно указать путь к этому элементу.
Имейте в виду, что и при помощи метода ПредопределенноеЗначение и при помощи прямого обращения посредством менеджера объекта мы получим ссылку на элемент, с которой можем работать как с обычной ссылкой на элемент справочника: присваивать её какому-нибудь реквизиту, получать объект из этой ссылки и т.д.

Создать предопределенный элемент справочника 1С
Мы уже научились создавать предопределенные элементы справочника в конфигураторе, но можно ли создать предопределенный элемент программно? И да, и нет.
Мы можем из простого элемента сделать предопределенный, и наоборот предопределенный элемент сделать простым.
Для этих целей у справочников имеется стандартный реквизит ИмяПредопределенныхДанных.

Если мы получим ссылку на предопределенный элемент, то этот реквизит заполнен.

Если же мы возьмем какой-то не предопределенный элемент, то этот реквизит будет пустой.

Если мы этому реквизиту присвоим какое-нибудь имя (помня об уникальности имен предопределенных элементов в контексте конкретного справочника), то мы программно «создадим» предопределенный элемент, но только в том случае если это имя уже существует в списке предопределенных элементов справочника, которые были заданы в конфигураторе 1С!
Например, тот же элемент «Тунис» справочника «Страны» у нас простой.

В какой-нибудь обработке напишем код, в котором попробуем сделать из этого элемента предопределенный элемент.
Если мы попытаемся его сейчас выполнить, то у нас возникнет ошибка «Предопределенный элемент не существует».

Такая ошибка возникла потому, что мы пытаемся указать имя предопределенного элемента, которого нет.
Если же мы у предопределенного элемента реквизиту ИмяПредопределенныхДанных присвоим пустую строку, то такой элемент станет простым, если же этому реквизиту обратно присвоим имя предопределенного элемента, то простой элемент станет предопределенным.
Сделаем на обработке две команды. Первая будет снимать предопределенность у элемента справочника с именем «Китай», а вторая устанавливать.
Теперь обратно установим.
Заметьте, что имя предопределенного элемента может быть только из списка имен предопределенных элементов справочника.

У нас до снятия элемент «Китай» был предопределенным.

А после снятия это стал простой элемент.

Удалить предопределенный элемент справочника 1С
Начиная с платформы 1С 8.3 предопределенные элементы можно удалять в пользовательском режиме.


Если сейчас этот элемент удалить через стандартную обработку «Удаление помеченных объектов», то он исчезнет из базы.
Для того, чтобы пользователь мог удалить (поставить пометку на удаление) предопределенный элемент, хотя бы у одной роли, которая есть в профиле пользователя должно быть установлено соответствующее право.

Что делать, если мы ошиблись и хотим опять «вернуть» предопределенный элемент? Есть несколько способов. Но самый простой это создать новый элемент справочника в пользовательском режиме и присвоить ему имя удаленного предопределенного элемента, как мы это уже делали.
Остальные статьи по теме конфигурирования:
Более подробно и основательно работа со справочниками, документами и другими объектами метаданных дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
3 Replies to “Предопределенные элементы справочников 1С 8.3”
У любого справочника 1С можно создавать предопределенный элемент или предопределенную группу — если у справочника есть владелец, то создать предопределенный элемент нельзя.
Как добавить предопределенный элемент в справочник 1с в расширении
В расширении справочнику нельзя добавить предопределенные данные.
(2) думаю, что это сделано умышлено и возможность создания предопределенной группы — баг.
Интересно, чем же решили заменить преопределенные элементы справочников?
Полный мрак.
Пытаюсь в режиме приложения открыть справочник:
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка при выполнении операции с информационной базой
Запись не найдена в менеджере имен базы данных.
После удаления предопределенных групп:
Платформа: 1С:Предприятие 8.3 (8.3.11.2867)
Конфигурация: Зарплата и кадры государственного учреждения, редакция 3.1 (3.1.5.65) (http://v8.1c.ru/statehrm/)
Вариант интерфейса: Такси
Ошибки:
Тип не определен ‘8db5ca43-69d9-46a0-8a77-4c087bbc0bda’
Ну всё, угробил базу.
Со второй попытки снес расширение.
Пытаюсь зайти в один из справочников, которые пробовал расширить:
Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
по причине:
Ошибка при исполнении запроса набора данных
по причине:
Ошибка выполнения запроса
по причине:
Работа с таблицей невозможна.
Структура таблицы расширена при выключенном разделении.
Предопределенные элементы в расширении
В расширении имеется возможность управлять контролируемостью предопределенных элементов. Для этого необходимо установить признак проверки значения при подключении расширения у свойства Предопределенные.
Рис 1. Добавлен в расширение справочник Учетные записи электронной почты
Я добавил в расширение реквизит АдресЭлектроннойПочты справочника “Учетные записи электронной почты”. При этом, автоматически переносятся имя, код и наименование предопределенного элемента. Однако, у данного справочника есть предопределенный элемент с именем СистемнаяУчетнаяЗаписьЭлектроннойПочты в расширяемой конфигурации, но нет в списке предопределенных значений в расширении конфигурации. Следовательно, не доступны предопределенные элементы с помощью менеджера справочника по имени предопределенного элемента, например, не доступно в расширении такое обращение.
Для получения значения реквизита АдресЭлектроннойПочты предопределенного элемента СистемнаяУчетнаяЗаписьЭлектроннойПочты нужно использовать в запрос , например:
Рис 2 Имя, код и наименование предопределенного элемента доступны в расширении
Новые возможности расширений в платформе 8.3.20
В редакции 8.3.19 в части расширений больших изменений не было, но в платформе 8.3.20 механизм расширений получил новые функциональные возможности.
Для справочников, планов счетов, планов видов характеристик и планов видов расчета, созданных в расширении, можно создавать предопределенные элементы. Это позволит повысить надежность кода, поскольку теперь не нужно искать в базе элемент справочника по коду или наименованию (которые пользователь может изменить), а можно создать предопределенный элемент и использовать его имя в коде.
В платформе 8.3.18 появилась возможность расширять типы реквизитов заимствованных объектов. А в платформе 8.3.20 ряд ограничений был снят. И теперь при помощи расширения можно расширять типы следующих объектов:
- Общий реквизит, который не является разделителем
- Тип значения характеристик в плане видов характеристик
- Определяемый тип
Изменения коснулись “обобщенных” типов данных – таких, как ЛюбаяСсылка, СправочникСсылка и т.д. Эти типы теперь включают в себя и ссылки на объекты, созданные в расширении, а не только ссылки из основной конфигурации.
К примеру, если используется тип СправочникСсылка, то подразумевается, что пользователь может выбрать в таком поле любой справочник в системе – независимо от того, где он был создан.
Это изменение очень актуально для универсальных подсистем из состава БСП, где часто используются такие типы данных. Осталось дождаться, когда сама БСП будет поддерживать последнюю версию платформы.
В платформе 8.3.20 изменено поведение платформы при возникновении ошибки компиляции заимствованного модуля расширения. В таком случае формируется оповещение пользователю, но действие не прерывается, а выполняется так, как будто расширения не существует. Это повышает устойчивость расширения, потому что в случае возникновения проблемы выполнится рабочий код из основной конфигурации.
Все указанные новшества рассмотрены подробно в следующих видеоуроках.
Видео 1 – Вступление
Ключевые моменты видео:
00:29 – ограничения на изменение в расширении типа реквизита в платформе 8.3.18
00:40 – снятие ограничения в платформе 8.3.20
Видео 2 – Создание предопределенных элементов
Ключевые моменты видео:
00:40 – демонстрация невозможности добавления предопределенных элементов в добавленный в расширение справочник, платформа 8.3.18
01:10 – демонстрация тех же самых действий в платформе 8.3.20
02:25 – почему стоит использовать добавление предопределенных элементов в расширение и какой эффект это дает на практике.
03:00 – для каких объектов метаданных при помощи расширения конфигурации можно создавать предопределенные элементы.
05:20 – обращение в программном коде к созданным предопределенным элементам в расширении конфигурации.
06:40 – влияние режима совместимости расширения на возможность создавать предопределенные элементы.
Видео 3 – Расширение типа реквизита
Ключевые моменты видео:
00:48 – демонстрация проблемы добавления общего реквизита в расширение на платформе 8.3.18
01:09 – демонстрация тех же действий на платформе 8.3.20
02:26 – проверка возможности изменения типа общего реквизита при помощи расширения конфигурации.
06:54 – показ ситуации, когда нельзя при помощи расширения изменить тип общего реквизита, если он является разделителем.
08:55 – демонстрация невозможности изменения типа значения характеристики для плана вида характеристики в расширении на платформе 8.3.18
10:17 – выполнение тех же действий на платформе 8.3.20
13:02 – показ невозможности редактировать тип для определяемого типа при помощи расширения конфигурации на платформе 8.3.18
14:51 – выполнение тех же действий на платформе 8.3.20
19:09 – создание собственного определяемого типа в расширении
20:40 – можно ли новый функционал расширений использовать в типовых конфигурациях?
Видео 4 – Ссылочные типы данных
Ключевые моменты видео:
01:57 – ограничения по типам данных, которые можно использовать в расширении конфигурации на платформе 8.3.18
04:53 – попытка обхода ограничения по типам данных при помощи программного кода на платформе 8.3.18
06:40 – демонстрация других ограничений для выбора типа данных реквизита справочника, созданного в расширении конфигурации на платформе 8.3.18
07:12 – показ тех же действий на платформе 8.3.20
12:05 – возможность изменения механизмов БСП в расширении на платформе 8.3.20
Видео 5 – Метод ТипВсеСсылки()
Ключевые моменты видео:
00:30 – демонстрация метода ТипВсеСсылки() на платформе 8.3.18
02:55 – демонстрация тех же действий на платформе 8.3.20
Видео 6 – Ошибки компиляции
Ключевые моменты видео:
00:20 – показ ошибки компиляции в расширении конфигурации на платформе 8.3.18
03:05 – демонстрация тех же действий на платформе 8.3.20 в режиме 1С:Предприятие
05:50 – показ работы с ошибкой компиляции в расширении на платформе 8.3.20 под отладкой.