Принципы ООП в 1С (GoF pattern visitor)

04.07.18

Разработка - Рефакторинг и качество кода

Шаблон проектирования visitor, по моему мнению весьма полезен для 1С.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Принципы ООП в 1С (GoF pattern visitor): пример реализации
.zip 10,87Kb
3 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

visitor или посетитель, данный шаблон решает задачу выноса бизнес логики из класса наружу. Приведу аналогию с принципом которому придерживаются разработчики БСП (да в принципе типовых конфигураций), если разработчик разрабатывая какой-то функционал предполагает, что какая-то чать может быть переопределена прикладными разработчиками, он выносит такие методы в переопределяемые общие модули. Переопределяемый общий модуль, это тот же модуль как и все остальные, просто в имени у него  есть слово "Переопределяемый", т.е. у него так же нужно включать возможность изменения если захотим что-то переопределить. По большому счету, все это держится на чистых договоренностях. Шаблон проектирования visitor решает данную задачу тем, что бизнес логика (ту которую в дальнейшем будет переопределяться или вообще отдаваться полностью на откуп прикладных программистов) описывается в самом посетителе.

На объектах 1С схема получается такая:

в предыдущих статьях подробнее рассматривалось как реализовывать квазии-ООП в 1С

В данном случаи обработка ОбработкаСодержащаяСложныеМетоды, некий контейнер методов какого-то бизнес функционала, она на поддержке, в нем метод КакойтоМетод2() переопределяемый из вне. Вот его содержимое:

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Посетитель.Посетить(Неопределено);
КонецПроцедуры

 

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

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
// базовый алгоритм
	Посетитель.Посетить(Неопределено);
// базовый алгоритм
КонецПроцедуры

 

или например сделать что бы значение какой-то переменной для дальнейшего использования определялось внешним алгоритмом

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	

	Переменная = Посетитель.Посетить(Неопределено);
// базовый алгоритм с использованием Переменная 
КонецПроцедуры

 

или сделать так

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		// Алгоритм по умолчанию.
    Иначе
       Посетитель.Посетить(Неопределено);
	КонецЕсли;
КонецПроцедуры

 

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

Пример использования:

	ОбработкаОбъект = Обработки.ОбработкаСодержащаяСложныеМетоды.Создать();
	ОбработкаОбъект.КакойтоМетод(); // Это вызов типового метода
	
	Посетитель = Обработки.Посититель1.Создать().Имплементация("ПосетительИнтерфейс");
	ОбработкаОбъект.КакойтоМетод2(Посетитель); // Вызов переопределяемого метода
	
	Посетитель = Обработки.Посититель2.Создать().Имплементация("ПосетительИнтерфейс");
	ОбработкаОбъект.КакойтоМетод2(Посетитель); // Вызов переопределяемого метода, но уже с другим алгоритмом.

 

 

Вступайте в нашу телеграмм-группу Инфостарт

ООП pattern visitor visitor GoF pattern ООП в 1С

См. также

Рефакторинг и качество кода Программист Бесплатно (free)

Почему рефакторинг, призванный улучшать код, иногда приводит к сбоям, потерям времени и новым ошибкам? Показываем типичные ситуации, когда рефакторинг становится токсичным: работа с legacy-кодом, изменения перед релизом, рефакторинг про запас и без тестирования. Объясняем, как универсальные мегаметоды, преждевременные абстракции и отсутствие понимания бизнес-логики ухудшают систему. А также рассказываем, когда рефакторинг действительно нужен, и какие принципы помогают делать его безопасно и осознанно.

29.04.2026    253    _apelsin4ik    0    

1

Рефакторинг и качество кода Программист Стажер 1С 8.3 Бесплатно (free)

Код в 1С редко начинает тормозить сразу. Намного чаще он долго выглядит нормальным, а проблемы проявляются позже — когда растут данные, пользователи и количество доработок. В статье разбираю типичные причины такой деградации: запросы в цикле, лишние ПолучитьОбъект(), тяжёлые формы и обработку “по одному”. Статья практическая: с примерами, типичными ошибками и понятными признаками того, что код уже плохо масштабируется.

21.04.2026    1384    YA_2060655612    6    

11

Инструментарий разработчика Рефакторинг и качество кода Программист 1С:Предприятие 8 Бесплатно (free)

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    7393    763    KHoroshulinAV    48    

67

Рефакторинг и качество кода Программист 1С 8.3 Россия Бесплатно (free)

Как быстро разобраться в чужом коде? Как не забыть через полгода алгоритм работы своего собственного кода? Как наглядно проектировать? Ответам на эти вопросы посвящена данная публикация.

17.04.2026    508    chuprina_as    4    

4

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

Создадим скрипт на Пайтон, предназначенный для автоматизированного подбора чанков (фрагментов требований к коду) при разработке на 1С. Она помогает разработчику формировать качественные промпты для ИИ, включающие все необходимые требования безопасности, производительности и стандартов кодирования. Кому интересно, покритикуйте и предложите улучшения. Результаты опубликуем.

20.03.2026    1212    ksnik    4    

5

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

ИИ действительно помогает команде ускориться: быстрее разбирать код, быстрее входить в сложные участки, быстрее запускать доработки. Проблема в том, что вместе со скоростью он может ускорять и другое — накопление скрытой сложности, рост цены изменений и потерю управляемости. В статье разбираю, почему первые успехи с ИИ так легко опьяняют, когда система начинает выставлять счёт и что нужно сделать, чтобы ускорение не превратилось в новый виток технического долга.

17.03.2026    1789    IgorVasilyev    52    

27

Рефакторинг и качество кода Программист 1С:Предприятие 8 1С:Комплексная автоматизация 2.х 1C:ERP Бесплатно (free)

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

09.02.2026    1887    Eugen-S    10    

5

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

В статье рассказываю, как писать код 1С в VS Code с помощью бесплатных AI-моделей 🤖 Используем GLM-4.7 через Roocode + Cerebras (до 1 миллион токенов в день). Подключаем бесплатные MCP. Генерируем новый код и смотрим, как AI справляется с задачами.

06.02.2026    16036    Ibrogim    83    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. MaCCapAkIII 31.07.24 13:14 Сейчас в теме
А чем данная реализация отличается, скажем, от использования расширений конфигурации? Ведь, насколько я понимаю, используя расширения мы также ничего не меняем в заимствованных объектах метаданных и расширяемых методах, все реализуется в расширении...
И еще. Правильно понимаю, что для применимости паттерна Посетитель необходимо, чтобы поддержка этого паттерна была реализована в самом посещаемом объекте? То есть если мы собираемся посетить КакойтоМетод2, то необходимо в коде этого метода прописать возможность обращения к методам посетителя? Это считается "без изменения основного класса"? Или я неправильно понимаю?
Для отправки сообщения требуется регистрация/авторизация