Содержание:
1. Как пользоваться аннотацией #ИзменениеИКонтроль
2. Как пользоваться аннотацией #Вставка и #КонецВставки
3. Использование аннотации #Удаление и #КонецУдаления
4. Когда в служебных сообщениях появляются ошибки
5. Полезный инструмент при работе с ИзменениеИКонтроль
В технологической платформе есть механизм расширения конфигурации. Этот механизм помогает добавлять функционал, которого нет в конфигурации без изменения её самой. Например: программное добавление элементов на форму, изменение текста запроса, разработка своих алгоритмов которых нет в основной конфигурации и многое другое. Работа с расширением заключается либо в добавлении из основной конфигурации процедур, функций, реквизитов, табличных частей, документов, справочников и так далее, и их последующим изменением, либо созданием всего вышеперечисленного в расширении. Предполагается, что читатель уже имеет опыт создания расширений конфигурации, знает про основные типы вызова, но не понимает, что такое «Вызывать вместо (с контролем)» и для чего он используется.
При добавлении процедуры/функции (далее, вместо того чтобы писать так каждый раз, будет писаться процедура, но важно понимать, что всё что будет описано ниже, может так же применяться и к функциям) в расширение, появляется следующее окно:
Диалоговое окно при добавлении процедуры в расширение
Здесь система спрашивает какой будет использоваться тип вызова у процедуры, которую мы добавляем в наше расширение.
В этой статье будет представлен детальный разбор типа вызова «Вызывать вместо (с контролем). Может возникнуть вопрос, что такое «Вызывать вместо (с контролем)»? Данный тип вызова появился в версии 8.3.15.1489 технологической платформы 1С. Может возникнуть такая ситуация, что нужно заменить всю процедуру из основной конфигурации на свою. Можно использовать тип вызова «Вызывать вместо» но тогда никто не гарантирует работоспособность изменённой процедуры в следующем обновлении. Именно для таких ситуаций существует «Вызывать вместо (с контролем)». Такой тип вызова позволяет делать точечные изменения в тексте процедуры.
1. Как пользоваться аннотацией #ИзменениеИКонтроль
Сейчас мы рассмотрим, как правильно использовать #ИзменениеИКонтроль.
Для примера была взята процедура «ПриСозданииНаСервере» из модуля формы документа, которая отвечает за программное создание поля формы в документе.
Текст процедуры ПриСозданииНаСервере
Добавляем её в расширение и выбираем тип вызова «Вызывать вместо (с контролем)».
Добавление процедуры в расширение
Диалоговое окно при добавлении процедуры в расширение
Для того чтобы использовать «ИзменениеИКонтроль» следует нажать на кнопку «Нет», т.к при нажатии на кнопку «Да», будут доступны только «Перед», «После» и «Вместо».
Выбор типа вызова «Вызывать вместо (с контролем)
После того как была нажата кнопка «ОК», процедура добавится в расширение и её текст будет идентичен тексту из основной конфигурации. Чтобы внести какие-то изменения, нужно знать несколько правил, которые позволят правильно использовать аннотацию #ИзменениеИКонтроль.
Текст процедуры ПриСозданииНаСервере в расширении
Неизменённая форма из основной конфигурации
2. Как пользоваться аннотацией #Вставка и #КонецВставки
Эти аннотации используются для изменения кода процедуры. Если попробовать вставить новый код без этих аннотаций, процедура просто не будет работать и выдаст ошибку.
Создадим примерную ситуацию. Заказчик попросил вас создать новый реквизит формы и новый элемент формы, но не через редактор управляемых форм, а программно. Первое, что вы сделали это, создали расширение, добавили туда необходимую процедуру и теперь у вас возник вопрос: «А как в процедуру, у которой тип вызова «ИзменениеИКонтроль» вставлять какие-то изменения?». Решение такой задачи при помощи аннотаций #Вставка и #КонецВставки изображено ниже.
Текст изменённой процедуры ПриСозданииНаСервере
Как видно на изображении выше, были использованы аннотации #Вставка и #КонецВставки для создания новых строк в тексте процедуры.
Для того чтобы проверить будет ли работать расширение нужно сделать следующие шаги:
1. Нажать на кнопку «Конфигурация» в конфигураторе;
2. В отображаемом списке нажать на «Расширения конфигурации»;
3. Откроется список всех расширений, которые есть;
4. Выбрать нужно расширение и нажать на него правой кнопкой мыши;
5. В окне, которое появилось навестись мышкой на «Конфигурация» и во всплывшем меню выбрать «Проверка возможности применения».
После нажатия на эту кнопку, в нижнем окне «Служебные сообщения» если всё правильно появится сообщение «Проблем применения не обнаружено.»
Случай, когда у вас другое сообщение и система выдаёт ошибку применения расширения будет рассмотрен дальше.
После этой проверки можно запустить приложение и убедится, что изменения в процедуре применились.
Новый элемент формы «Комментарий»
Как видно на изображении, в форме документа появился новый элемент формы. Это значит, что процедура из расширения используется вместо процедуры из основной конфигурации и всё работает как надо.
3. Использование аннотации #Удаление и #КонецУдаления
Эти аннотации используются для выделения тех блоков, которые должны игнорироваться при компилировании модуля. Иными словами, эти вставки используются, чтобы указать системе, какой код должен игнорироваться и не использоваться.
Создадим ещё одну примерную ситуацию. Заказчик попросил вас убрать элемент формы, который создаётся программно в тексте процедуры ПриСозданииНаСервере в основной конфигурации. Для этого мы и используем аннотации #Удаление и #КонецУдаления.
Текст процедуры ПриСозданииНаСервере с использованием аннотаций #Удаление и #КонецУдаления
Как видно на изображении, все строки, которые связаны с созданием элемента формы «Почта», были обрамлены аннотациями #Удаление и #КонецУдаления. Таким образом, система будет игнорировать создание этого элемента и в итоге его не будет на форме. Теперь можно запустить приложение и убедится, что элемента нет.
Форма документа с отсутствующим элементом «Контактная почта»
4. Когда в служебных сообщениях появляются ошибки
Ошибка при проверке применения расширения
В случае, когда в служебных сообщениях вместо «Проблем применения не обнаружено.» появляется что-то похожее на то что на изображении, в 99% случаев проблема заключается в том, что текст процедуры из расширения не идентичен тексту из основной конфигурации. Один из минусов использования «ИзменениеИКонтроль» заключается в том, что при использовании нужно строго соблюдать пробелы, отступы в тексте процедуры. То есть весь текст, который не обрамлён вставками #Вставка и #КонецВставки, #Удаление и #КонецУдаления должен быть идентичен тексту из основной конфигурации.
Приведём пример рабочего случая и не рабочего:
Правильное применение ИзменениеИКонтроль
Процедура из расширения
Процедура из основной конфигурации
Текст процедуры, который изображён на изображении «Процедура из расширения», будет работать правильно, так как строки с созданием нового элемента формы идентичны таким же строкам из основной конфигурации.
Не правильное применение ИзменениеИКонтроль
Процедура из расширения
Процедура из основной конфигурации
В данном случае система будет выдавать ошибку из-за текста процедуры из расширения, по причине того, что в строках «НовоеПолеФормы.Заголовок» и «НовоеПолеФормы.ПутьКДанным» слишком много отступов.
5. Полезный инструмент при работе с ИзменениеИКонтроль
Зачастую придётся сталкиваться с очень большими процедурами, которые используют ИзменениеИКонтроль. И скорее всего они будут работать неправильно из-за того, что где-то новые строки не обрамлены во вставки #Вставка и #КонецВставки или строка из расширения не соответствует строке из основной конфигурации. Собственно, для таких случаев можно воспользоваться текстовым редактором Notepad++ и плагином Compare. Этот плагин позволяет сравнивать два текста и находить в них отличия.
Интерфейс Notepad++
В правое окно вставляется оригинальный текст, а в левое текст с которым будет происходить сравнение.
Процедура
Зелёным знаком «+» помечаются строки, которые есть в оригинальном тексте, но нет в тексте, с которым сравниваем.
Красным знаком «-» помечаются строки, которые есть в сравниваемом тексте, но нет в оригинальном либо они как-то различаются.
КонецУдаления
Подводя итоги, можно сказать, что после прочтения данной статьи, у читателя, который ранее был не знаком с «Вызывать вместо (с контролем)» теперь есть основные понятия, что это такое и как этим пользоваться. На первых порах все равно будут ошибки так как нужен опыт работы с этим типом вызова, но они будут быстро решаться так как есть понятие как бороться с ними. Автор очень надеется, что эта статья была полезной для читателя и он сможет применить те знания, которые получил после прочтения статьи, а также желает успехов в карьерном пути.
Специалист компании "Кодерлайн"
Егор Винников