0. signum2009 566 30.05.17 09:29 Сейчас в теме

Расширения конфигураций 1С: учимся перехватывать методы

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Yashazz 2323 01.06.17 13:15 Сейчас в теме
Коллеги, хотите добрый совет? Никогда не связывайтесь с этой дрянью под названием "расширения". Непредсказуемо, нестабильно, глючно. Проще покурочить конфу, нежели тратить время на попытки добиться проку от этой кривой поделки.
Rain88; Irwin; +2 4 Ответить
2. vaxhab 10 01.06.17 14:15 Сейчас в теме
(1) Неужели все так плохо ? Собираюсь переходить на расширения .
6. Yashazz 2323 01.06.17 20:57 Сейчас в теме
(2) Ну как сказать... Если у вас парочка безобидных изменений в дизайне формы или перегрузка скромного события элемента формы, то ещё прокатит. А вот замахнётесь на большее - ждёт вас дорога, вымощенная жёлтыми граблями.

После того, как несколько релизов 8.3.9 кряду вообще падали при попытке сохранить изменения в расширении, мне всё стало окончательно ясно.

(3) Ну хватит уже пиариться на ровном месте, а?
7. signum2009 566 02.06.17 09:26 Сейчас в теме
(6) Лично я и вижу расширения, как возможность делать мелкие допилы клиентам, которые не хотят снимать конфигурацию с поддержки...которые касаются больше удобства работы...
16. Anchoret 33 31.10.17 17:03 Сейчас в теме
(1)
Перенес на расширение изменения типовых ролей, которые раньше были изменены в основной конфигурации. Теперь, при следующем обновлении, мне не нужно будет корячиться с ролями, чтобы перенести все изменения.
24. creatermc 1 15.10.18 17:39 Сейчас в теме
(1) ставлю минус, так как именно с помощью расширений можно не теряя полный типовой функционал основного поставщика производить изменения или расширения имеющийся конфигурации
Monte Carlo; +1 1 Ответить
26. Yashazz 2323 16.10.18 23:40 Сейчас в теме
(24) с их помощью можно очень "здорово" нарываться на проблемы в неожиданных местах и заваливать проекты
29. creatermc 1 17.10.18 13:10 Сейчас в теме
(26) Конечно многое зависти от версии платформы и бсп, но курс 1С явно прослеживается в разработке возможностей расширения как независимого изменения типовой конфигурации
3. mrXoxot 1942 01.06.17 14:30 Сейчас в теме
Полезные советы для разработки расширения можно посмотреть тут:
http://infostart.ru/public/442003/
4. splxgf 01.06.17 14:45 Сейчас в теме
Да все нормально с расширениями, единственное придется переделывать обработчики УстановитьВыполнениеПослеОбработчиковСобытия у старых расширений, которые под 8.3.7 писались. Иначе система вылетает.
А так расширение пережило три платформы и обновление УТ с 11.1 по ERP 2.2.
kwazi; smartem; +2 Ответить
5. rozer 224 01.06.17 15:21 Сейчас в теме
(4)
Иначе система вылетает.


да, но не всегда - на когда запустил ДО 2.1 на 8.3.9 после 8.3.8 переделывал только в формах записей регистров сведений ибо ,да,вылетало... в формах же доков и в справочниках - все ок
8. Новиков 290 02.06.17 09:37 Сейчас в теме
Спасибо, хорошая статья!
9. decdmb 02.06.17 10:04 Сейчас в теме
Кто-нибудь пробовал убирать у ERP 2.2 режим совместимости? Как себя ведет база, есть ли глюки?
Получается, что в типовых все равно надо включать изменения в конфу, и некоторые изменения можно сделать без расширений, а через переопределяемые модули модификации конфигураций.
10. Vladimir Litvinenko 02.06.17 15:23 Сейчас в теме
Главная проблема работы с расширениями - необъективная оценка количества предстоящих доработок разработчиками/внедренцами. Исходя из посыла "да нам же всего несколько кнопочек изменить на форме" начинается работа с расширениями. Количество доработок растет, расширения продолжают использоваться исходя из посыла "мы же уже используем расширения, давайте уже через них продолжать".

Потом появляется необходимость добавить новые сущности в базу данных, расширить структуру существующих. Или изменить принцип работы какой-либо типовой подсистемы. Работать с расширениями становится все сложнее или вообще невозможно. В конфигурации включается возможность изменения и начинается "мягкая" или "жесткая" доработка типовой конфигурации, в зависимости от квалификации разработчиков.

Этот тот момент, в который в зоопарке технологий прибывает. Гетерогенность, уже живущая в корпоративной системе, радостно потирает руки, понимая, что отвоевала у понятности и простоты хороший такой плацдарм.

Конечно в этот момент можно избавиться от одного из животных в зоопарке технологий и грамотно перенести все изменения в конфигурацию. Ведь дальше придется "ухаживать" за двумя зверями - и расширениями и доработками в самой типовой конфигурации. Убирать за ними, кормить, как-то мирить друг с другом, чтобы они ничего не сломали в процессе совместной работы, добавлять в вакансии на Хэдхантере еще одну строчку в список требований к разработчикам.

По хорошему так и нужно сделать. Но Гетерогенность знает, что люди ленивые, боятся трогать то, что хоть как-то работает, у них всегда "нет времени", а начальство не способно оценить необходимость рефакторинга в этот критичный для отказа от лишней технологии момент времени. Доработки изменений, произведенных через расширения, продолжают делаться через расширения. Доработки выполненные в конфигурации - продолжают делаться в конфигурации. Главный враг архитектуры корпоративного ПО прочно закрепляется на захваченном плацдарме.


В общем лучше хорошо подумать, прежде чем начинать использовать узкоспециализированную технологию. Если есть риск того, что структуру объектов придется менять или добавлять новые объекты БД, есть необходимость часто и без проблем запускать отладку, есть люди, понимающие как изначально менять конфигурацию без проблем для последующего обновления, то лучше сразу принять решение не плодить зоопарк. Переопределяемые модули, программную модификацию форм и подписки на события никто у нас не забирал. Если компания небольшая и сотрудникам важно чтобы конфигурация обновлялась одной кнопкой и сейчас и всегда в будущем, серьезных изменений точно не будет (действительно уверены?), то зоопарка не будет и с расширениями.

И конечно для небольших плагинов расширения хороши. Есть на ИС примеры хорошего применения, когда вместо cf-файла с инструкцией по сравнению-объединению публикуются расширения. Но это опять же специфичная область и для удобного постоянного использования лучше функционал в конфигурацию переносить, чтобы запуск в режиме предприятия не замедляли.
xavi; lmnlmn; neo-ti; e.kogan; Rain88; kivals; RustRR; Bazil; kwazi; Anchoret; fuser; Prikum; Alister; Трофимов_Николай; Svasily; Peltzer; Yashazz; rayastar; Krechet17; +19 Ответить
11. splxgf 02.06.17 16:11 Сейчас в теме
С расширениями конечно зоопарк получается, но у них большой плюс это легкая отделимость от конфигурации.
И также независимость, к примеру фрач месяцами пилит документ, а собственный спец по итогам тестдрайва пилит расширение. К завершению проекта получается полностью обкатанный документ со всеми пожеланиями пользователей.
13. signum2009 566 07.06.17 08:28 Сейчас в теме
(12) У меня есть сценарии к этим видео, если кому интересно, могу выложить в виде отдельного поста...
14. lavrov.online 07.10.17 11:59 Сейчас в теме
Платформа 8.3.10.2580. Почему-то не работает подобный функционал.
В модуле формы при создании на сервере есть процедура ОбновитьИтоги()

В расширении формы в модуле формы пытаюсь "врезаться" в нее и пишу

&Перед("ОбновитьИтоги")
Процедура Тест()
а=1;
КонецПроцедуры


Но не заходит. Аналогичное происходит при попытке врезаться в типовые методы объекта. Я что-то делаю не так?
17. lavrov.online 01.11.17 10:32 Сейчас в теме
(15) Дело было в галочке "Безопасный режим" в настройках расширения.
18. avk72 70 01.11.17 16:52 Сейчас в теме
Хорошая статья!
Только, по моему, перехват методов работает при совместимости 8.3.9 и выше
Margo462; +1 Ответить
19. sonGodv 41 18.06.18 09:16 Сейчас в теме
Можно как-то быстро проверить последствия отключения режима совместимости?
Пользуюсь расширением уже 2 года. Отлично подходит для мелких доработок, а также при обновлении экономит кучу времени, но не хватает возможности перехватывать все события формы.
УТ11.3
20. EugeneSemyonov 13.07.18 11:10 Сейчас в теме
Добрый день. А кто-нибудь перехватывал методы когда нужно параметр добавить? Сейчас в режиме совметимости 8.3.10 получил следующее сообщение от предприятия:
Ошибка применения модуля "РасшИнфСообщенияСАртикулом ОбщийМодуль.НоменклатураКлиентСервер.Модуль". Список параметров метода "РасшИнфСообАрт_ПредставлениеНоменклатуры" не соответствует методу "ПредставлениеНоменклатуры".
в ERP 2.4.
Кто знает как правильно расширять методы, если нужно добавить параметров?
Поделитесь, пожалуйста, опытом.
21. kivals 5 23.07.18 08:43 Сейчас в теме
(20) ИМХО что-то не то с постановкой задачи - зачем Вам добавлять параметры?
Механизм, прописанный в модуле/форме, о Ваших дополнительный параметрах ничего не знает, значит - использовать их не будет, т.е. всегда должно использоваться значение параметра по умолчанию.
Таким образом пишите себе свою процедуру с дополнительным параметром:
Процедура МоеВнутреннее_ПредставлениеНоменклатуры(..., МойНовыйПараметр = Неопределено)
...
КонецПроцедуры

и вызываете его из перехваченного метода - без параметра или с каким-то предопределенным значением:
&Вместо(ПредставлениеНоменклатуры)
Процедура РасшИнфСообАрт_ПредставлениеНоменклатуры(...)
	МоеВнутреннее_ПредставлениеНоменклатуры(..., "ХХХ");
КонецПроцедуры

А в своем коде - обращайтесь к своей процедуре, где этот параметр присутсвует:
МоеВнутреннее_ПредставлениеНоменклатуры(..., "ААА");
22. kivals 5 24.07.18 13:50 Сейчас в теме
(21) Вчера ответил - сегодня столкнулся.
При переходе в режим совместимости 8.3.7 или выше (если конфигурация была ниже) - сталкиваемся с изменением реквизитов у методов ПередЗакрытием (формы) и ПередЗавершениемРаботыСистемы (модуль упр. приложения) в связи вот с этим: https://xn----1-bedvffifm4g.xn--p1ai/news/2017-03-21-how2-correctly-close-forms-and-applications/

Таки действительно вопрос остается открытым...
23. Rain88 127 03.08.18 19:38 Сейчас в теме
Внесу свои пять копеек по поводу использования расширений. Расширения отлично подходят, если нужно добавить новые объекты, либо добавить свои куски кода перед или после выполнения основного кода в процедурах и функциях, однако, если требуется вносить изменения в форму или менять код модулей, используя аннотацию &Вместо, возникают проблемы.
Во-первых, при каждом обновлении приходится проверять, не изменился ли код или форма в основной конфигурации (была такая интересная ситуация, после обновления ошибка в формировании отчета появилась только спустя месяц).
Во-вторых, это проблематичность нахождения изменений в основной конфигурации по отношению к расширению, так как сравнить\объединить cf файл с файлом cfe нельзя (по крайней мере, я не нашла адекватного способа это сделать).
По поводу статьи, все хорошо и доступно изложено, отлично подойдет для ознакомления с расширениями.
user774630; +1 Ответить
25. Yashazz 2323 16.10.18 23:37 Сейчас в теме
Из последних новостей: решил я после энного перерыва посмотреть - может, случилось чудо и 1С хоть что-то сделало нормально ранее чем через 5 лет после анонса.

И что? И получаю такие чудеса с разделением областей, что словами не описать. Режим разделения по расширению изменить не даёт, обновить не даёт, на реальное наполнение базы (используется ли разделение или нет) плюёт. Глючит всеми мыслимыми способами.
Решил, у меня руки кривые - но нет, в сети звучат вопросы на эту и сходные темы. И все без ответов, что характерно. Один из попавших под руку пруфлинков: https://www.forum.mista.ru/topic.php?id=817891
Релиз был 8.3.12 из последних

Так что несогласных с моим первым утверждением милости просим набивать шишки)))
27. sonGodv 41 17.10.18 12:08 Сейчас в теме
(25) Главное задекларировать возможность, чтобы привлечь внимание. А работает это или нет, вопрос уже третий
28. VmvLer 17.10.18 12:25 Сейчас в теме
При работе с расширениями использую принцип "не использовать в них самые новые возможности минимум полгода".

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

что касается описанной в этой статье технологии расширения печати, то я считаю, что для таких ситуаций проще и понятнее
использовать механизмы БСП (дополнительные печатные формы) - они дадут тот же результат с меньшими затратами.
30. sonGodv 41 17.10.18 13:27 Сейчас в теме
(28) В 2007 году появилось динамическое обновление. Прошло 11 лет. недавно обновил динамически думал достаточно ждать. В итоге вылез косяк с формой списка справочника номенклатура)
31. VmvLer 17.10.18 13:33 Сейчас в теме
(30) в чем он выражался?

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

динамическое обновление использую часто и густо лет 5 - риски, конечно, есть всегда. Но ведь их можно минимизировать, если включать мозг. тьху тьху тьху
32. sonGodv 41 17.10.18 13:42 Сейчас в теме
(31) Выражался в том, что дерево папок номенклатуры выглядело некорректно, двоилось, троилось, размножалось. Из всего помогало, только удаление папки из профиля пользователя. Через время появлялось снова
33. sonGodv 41 17.10.18 13:44 Сейчас в теме
(31) В составе обновления был только один общий модуль. Как еще тут включить мозг?
34. asdfgcom 272 01.12.18 17:10 Сейчас в теме
Фиг знает что делать с переходом на 8.3.13. В расширении были справочники и регистры. Получился заколдованный круг.
Область действия расширения встала в Разделение данных. Конфигурация пишет, что использовать Разделение данных нельзя. Изменить область действия в режиме совместимости с 8.3.11 нельзя. Снимаю совместимость - "нельзя установить область действия расширения конфигурации в значение РазделениеДанных в иинформационной базе, не используещей разделение данных".
Удалось как-то запустить включив режим совместимости 8.3.11 в расширении и в конфигурации. Получаю потерю таблиц.
Накуролесили с расширениями, короче! Придется писать выгрузку накопленных данных и загрузку.
simgo83; anatolysurkov; +2 Ответить
35. simgo83 63 25.12.18 18:39 Сейчас в теме
(34) Я вышел так из положения. Создал новое расширение с Областью действия Информационная база, и объединил со старой, за исключением свойств.
axl007; asdfgcom; +2 Ответить
36. asdfgcom 272 25.12.18 18:51 Сейчас в теме
(35) Объединял, но не посмотрел на свойства... Спасибо за подсказку. Буду смотреть.
37. axl007 11.01.19 12:51 Сейчас в теме
(35)А можно подробнее про объединение? Тоже столкнулся с такой проблемой - в расширении есть данные и надо как-то изменить область действия без их потери.
38. simgo83 63 11.01.19 16:44 Сейчас в теме
(37) все просто, также как и с конфигурацией, нужное расширение сохраняешь на диск, добавляешь новое и объединяешь как и конфигурацию из внешнего файла, сняв галку только со свойств.
39. axl007 11.01.19 18:06 Сейчас в теме
(38)Я так и делал. При удалении старого расширения, данные пропадают.
40. simgo83 63 12.01.19 06:53 Сейчас в теме
(39) мои расширения не имеют регистров, реквизитов и т.д., поэтому мне проще. Как вариант можно попробовать исправить расширение через редактор XML, "но это не точно".
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
зарплата до 120 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Программист 1С
Москва
Полный день

Программист 1С
Видное
Полный день