1С 8.3 Расширения - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Расширения

Данные > Примеры кода 1С > 1С 8.3 Расширения
Расширения в 1С 8.3 - это микро конфигурации в формате xml (текст с тегами) которые позволяют дополнить существующую конфигурацию (вклиниться) в виде слоя. Расширения в 1С 8.3 являются одновременно и данными, и метаданными. В одной конфигурации может быть N-е количество и зависимости друг от друга заранее неизвестно. В основном имеет смысл использовать в типовых конфигурациях (на поддержке). Расширение является своеобразным "клином", который можно мигрировать из одной информационной базы в другую.
//* - Работа с механизмом расширения тестировалась на конфигурации 1С 8.3.19.
1. Создание:
Конфигуратор 1С - Меню - Конфигурация - Расширения конфигурации. При применении расширения контролируется порядковый номер версии при одинаковых ID (применяется последняя версия). Имя, синоним, префикс - называем как нам удобно.
Назначение:
  • Исправление - применяются на конфигурацию поставщика (вклинивание в логику поставщика bug fix, инъекция в код).
  • Адаптация - в логику кода не вмешиваемся. Адаптация без изменения логики и зависит от конфигурации поставщика.
  • Дополнение - полностью независимое решение. Автономное решение без связки с конфигурацией поставщика.
Признаки:
  • Активно - расширение используется. Если будет ошибка применения - признак автоматически отключится.
  • Безопасный режим - влияет на работу в клиент-серверной версии. Актуально только для профилей безопасности SQL (разрешения к доступу).
  • Защита от опасных действий - запрещает обращение к серверным модулям, открытие внешних отчетов, работа с интернетом. Аналогично параметрам пользователя
  • Используется в распределенной ИБ - миграция расширения по распределенным узлам
  • Область действия - использование БД целиком или с разделителями для различных технологий (например, для облаков)
  • Использовать основные роли для всех пользователей - Рекомендуется ее отключить т.к. значительно влияет на производительность. Для всех пользователей создастся дополнительная роль (с префиксом) расширения и будет применятся. Роли пользователя в основной конфигурации будут иметь приоритет.
Применение в режиме 1С Предприятие:
  • Применилось ли расширение можно увидеть в Меню - Справка - О программе "Конфигурация"
  • Если расширений много и не конфликтуют друг с другом - они применяются последовательно по имени и/или версии.
  • Отключать расширение (Функции для технического специалиста - Стандартные - Управление расширениями конфигурации) в можно в режиме 1С Предприятие, но при закрытом! конфигураторе. Иначе при попытке отключить признак "Активно" получаем ошибку: Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи не выполнено). Ошибка блокировки объекта. Объект уже заблокирован: ... После отключения расширения необходим перезапуск пользователя.
2. Принцип разработки:
  1. Рекомендуется дробить расширения. Создавать на каждый объект своё, так проще контролировать применение и фиксировать ошибки, т.к. при конфликте в режиме 1С Предприятие расширение автоматически отключается.
  2. Найти пересечения по объектам невозможно. Поэтому расширения должны быть автономны.
  3. Для новой печатной формы или нового отчета/обработки рекомендуется первично использовать БСП так как количество расширение негативно влияет на производительность
  4. При удалении расширения сопутствующие данные удаляются без возможности восстановления
  5. Работать с метаданными основного поставщика не рекомендуется
  6. Система не поддерживает зависимость объектов в конфигурации поставщика. Применяет слои в порядке их очередности (последовательно), по списку (если они друг с другом не конфликтуют). Первыми будут применятся Исправление, потом Адаптация, а самые последние Дополнение. Далее в списке происходит сортировка по Имени и Версии расширения:
    Конфигурация поставщика
    Слой №1
    Слой №2...
  7. Доступно меню для администрирования расширения:
Инъекции в программный код (вклинивание):
1. Создаем расширение (Адаптация)
2. Заимствуем форму документа (родительского объекта)
3. Вклиниваемся в событие и переопределяем его - добавляем в расширение Alt+Shift+F2
4. Выбираем Тип вызова:
  • Вызывать перед
  • Вызывать после
  • Вызывать вместо
  • Вызывать вместо (с контролем)
! Порядок кода должен быть именно таким (иначе работать не будет) !
&ИзменениеИКонтроль("ПересчетТаблицы")
&НаКлиенте
Функция Расш1_ПересчетТаблицы(Табл)
FAQ при разработке объектов и их форм в расширениях:
  • При изменении существующего или добавлении нового реквизита основной конфигурации через заимствование в расширение. Система создаст новую таблицу чтение которой будет производится через основную таблицу. Поэтому при переопределении свойств реквизита (например: увеличение длины цены с 10 до 12 символов) не рекомендуется использовать заимствование объекта, а создать автономный, новый (в расширении) и работать с ним для исключения конфликтов (как заимствованные объекты). В этом случаем система создаст новую независимую таблицу. Например, также можно реализовывать через Регистр сведений или подчиненный справочник с нужными реквизитами. К баг фиксам данная рекомендация не относится!
  • Для переноса данных из основной конфигурации в расширение нужно писать обработку (через внешний источник (*.xml, *.bdf и т.п.) или дежурный регистр).
  • При добавлении в расширение из осн.конфигурации реквизита составного типа система заимствует все объекты
  • Если объект контролируемый (установлен признак). Система не применит расширение если основной поставщик изменит значение объекта.

В режиме 1С получим ошибку: "Ошибка применения расширения конфигурации. Имя: *****
Критичная: Значение контролируемого свойства Тип у объекта ***** не совпадает со значением в расширяемой конфигурации"
Также можно установить у объекта свойство: Проверять значение при подключении расширения, не запрещать подключение расширения:
  • Просмотреть работает ли расширение в пользовательском режиме 1С: Меню - Сервис и настройки - О программе (Расширения конфигурации:).
  • Отключить расширения в пользовательском режиме 1С (с правами Администратора): Меню - Сервис и настройки - Функции для технического специалиста - Стандартные - Управление расширениями конфигурации - Снять галки с ненужного расширения (Делать это нужно при закрытом конфигураторе и для применения нужен перезапуск сеанса).

Частичное изменение метода с помощью аннотации ИзменениеИКонтроль в 1С 8.3:
Функция ПересчетТабличнойЧасти(КолСтрок) // Исходная функция (с ошибкой)
   
Для Индекс = 1 По КолСтрок Цикл
       
Сумма = Цена / Количество;
    КонецЦикла;

    Возврат
Сумма;
КонецФункции

&ИзменениеИКонтроль("ПересчетТабличнойЧасти")
Функция Расш1_ПересчетТабличнойЧасти(КолСтрок) // Исправляющая функция

   
Результат = 1;
    Для
Индекс = 1 По КолСтрок Цикл
       
// с помощью директив препроцессора #Вставка … #КонецВставки и #Удаление … #КонецУдаления
        // выделяются части кода, которые необходимо добавить и удалить
       
#Удаление
       
Сумма = Цена / Количество;
       
#КонецУдаления

        #Вставка
       
Сумма = Цена * Количество;
       
#КонецВставки
   
КонецЦикла;

    Возврат
Сумма;
КонецФункции
Изменение метода с помощью аннотации Вместо в 1С 8.3:
&Вместо("РассчитатьСумму")
Процедура Расш1_РассчитатьСумму(СтрокаТЧ)

   
//Введена сумма строки, нужно пересчитать цену с сумму скидки
   
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;

    Если
СтрокаТЧ.Свойство("СуммаСкидки") Тогда
       
СтрокаТЧ.СуммаСкидки = СтрокаТЧ.СуммаСкидкиНаценки;
    КонецЕсли;
   
РассчитатьСуммуНДСИВсего(СтрокаТЧ); //Далее
    // текст метода

КонецПроцедуры
Метод ПродолжитьВызов() в 1С 8.3:
&Вместо("РассчитатьСумму")
Функция Расш1_РассчитатьСумму(СтрокаТЧ)

   
// Выполним код типовой функции.
   
Результат = ПродолжитьВызов(СтрокаТЧ);

    Если
Результат=0 Тогда // Сумма не расчитана, выполняем расчет здесь

        //Введена сумма строки, нужно пересчитать цену с сумму скидки
       
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
        Если
СтрокаТЧ.Свойство("СуммаСкидки") Тогда
           
СтрокаТЧ.СуммаСкидки = СтрокаТЧ.СуммаСкидкиНаценки;
        КонецЕсли;

    КонецЕсли;

    Возврат
Результат;

КонецФункции
Конструктор запроса в расширении в 1С 8.3 (лайфхак от канала Желтый чайник 1С):
В модулях расширения конструктор запроса видит только те метаданные, которые есть в этом расширении.
Но часто приходится делать залипушку, которое просто подменит пару методов конфигурации. И добавлять в расширение все объекты и их поля не очень удобно. Что же делать? 🤔

1. Использовать внешнюю обработку.
Просто создаем внешнюю обработку, копируем в неё модуль\метод\кусок кода и открываем конструктор запроса. Потом переносим обратно.

2. Использовать шаблон текста
Интересно, что если открывать конструктор запроса из шаблона текста, то он работает в контексте основной конфигурации. А значит и видит метаданные конфигурации.
Простой шаблон текста:
"<?"", ТекстЗапроса>"
Его так же можно включить в контекстное меню.

3. Редактировать запрос в режиме Предприятия
Оба метода выше видят только те метаданные, что есть в конфигурации.
Но если запустить конструктор в режиме Предприятия, то сможем писать запрос, обращаясь ко всем существующим в ИБ данным.
Вот только придётся либо открывать в обычных формах, либо пользоваться так не полюбившимся 1Сникам "тонким конструктором".
Ну или пользоваться альтернативами (например, IS Toolkit).
Официальная документация по расширениям (при наличии подписки ИТС) https://its.1c.ru/db/v8318doc#bookmark:dev:TI000001513
📰 Актуальные новости Шаблоны (готовые модели) кода 1С 8.3 с тегом #Расширения:
    В версии 8.3.26
    • реализована поддержка журналов документов и XDTO-пакетов в расширениях.
    В версии 8.3.24
    • реализована поддержка внешних источников данных.
    • добавлен функционал тестирования и исправления логической целостности расширений конфигурации.
    • улучшена производительность расширения макетов табличного документа
    В версии 8.3.23
    • появилась возможность создавать регламентные задания в расширениях конфигурации.
    • реализована доступность в редакторе запросов расширения объектов основной конфигурации.
    • анонсирована возможность по файлу расширения конфигурации программно получить основные параметры расширения, которое будет из него установлено.
    В версии 8.3.22
    • сокращение объема памяти, потребляемого подсистемой XDTO в инфобазе с расширениями. Дедупликация объектов, не модифицированных расширенной фабрикой.
    • анонсирована возможность по файлу расширения конфигурации программно получить основные параметры расширения, которое будет из него установлено.
    • анонсирована возможность изменения параметров номеров и кодов объектов в расширениях конфигурации.
    1
    комментарий
    Геннадий
    13 окт 2022
    ДД, в очередной раз пользуюсь Вашими "примерами" (это, по-моему, больше чем примеры) и хочу выразить огромную благодарность: всё всегда по-существу, четко, грамотно!
    ____________________
    Copyright©, «Программист 1С в г.Минске», 12.01.2021
    Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
    Яндекс.Метрика
    Защищенное соединение ssl
    visa
    mastercard
    Maestro
    Яндекс деньги
    Назад к содержимому