Снятся ли 1С-никам абстрактные интерфейсы?

24.02.26

Разработка - EDT

Использование абстрактных интерфейсов в 1С.

ПРЕДУПРЕЖДЕНИЕ. Все ниженаписанное является плодом хронического недосыпания! Не пытайтесь повторить это в конфигураторе здорового человека. Работает только в 1С:EDT с плагином V8 Code Style, в идеале - с типизацией строгого режима @strict-types (но можно и без нее).

 

Приснилось мне как-то раз, что в 1С есть абстрактные интерфейсы.

Во сне мне для чего-то понадобилось хранить пары ключ-значение (кто сказал "Соответствие"? молодец, садись и слушай дальше).

А сколько есть в 1С способов реализации такого хранилища на сервере?

  • Просто в оперативной памяти (объект Соответствие).
  • Во временном хранилище (тот же объект Соответствие, помещенный во временное хранилище).
  • В параметрах сеанса.
  • В хранилище настроек пользователя.
  • В регистре сведений.
  • … (тут еще уйма вариантов)

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

А работал я в EDT. И решил я сделать обработку с именем ИХранилищеЗначений. А в модуле обработки описать программный интерфейс с пустыми методами. Вот такой:

 
 Обработка ИХранилищеЗначений. Модуль объекта.
// @strict-types
// @skip-check module-empty-method

#Если Сервер ИЛИ ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда

#Область ПрограммныйИнтерфейс

#Область ИХранилищеЗначений

// Прочитать значение по ключу.
// 
// Параметры:
//  Ключ - Произвольный
// 
// Возвращаемое значение:
//  Произвольный
//  
Функция Прочитать(Знач Ключ) Экспорт
КонецФункции

// Записать значение по ключу.
// 
// Параметры:
//  Ключ - Произвольный
//  Значение - Произвольный
//  
Процедура Записать(Знач Ключ, Знач Значение) Экспорт
КонецПроцедуры

// Удалить значение по ключу.
// 
// Параметры:
//  Ключ - Произвольный
// 
Процедура Удалить(Знач Ключ) Экспорт
КонецПроцедуры

#КонецОбласти

#КонецОбласти // ПрограммныйИнтерфейс

#Область Инициализация
ВызватьИсключение "Не надо создавать экземпляр абстрактного интерфейса, он вообще не для этого!";
#КонецОбласти

#КонецЕсли

 

 

Получилось у меня описание абстрактного интерфейса и новый тип ОбработкаОбъект.ИХранилищеЗначений.

Почему обработка, спросите вы? Ну, во-1х, это объект, порождающий новый тип (в отличие от общего модуля, например). Во-2х, это самый безобидный из объектов: он не создает никаких таблиц в информационной базе и имеет наименьшее количество собственных предопределенных методов и событий, которые нам в данном случае вообще не нужны, так что чем их меньше - тем лучше. У обработки их всего 5 (4 метода и 1 событие).

А потом я написал уж не помню какую процедуру вот таким образом:

 
 Какая-то процедура...

 

 

Ну и здорово, подумал я: EDT выдает подсказку по всем методам интерфейса. Правда, в списке мельтешат предопределенные методы обработки, но с этим можно мириться. А если ошибиться с именем метода, то подчеркивает красненьким. При этом я еще даже не написал ни одного варианта реализации!

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

И тогда я измыслил абстрактнейший из абстрактных интерфейсов. Так и назвал его: ИАбстрактный. Тоже сделал в виде обработки, но на этот раз описал всё в модуле менеджера, для разнообразия. Он содержит всего один метод.

 
 Обработка ИАбстрактный. Модуль менеджера.
// @strict-types
// @skip-check module-empty-method

#Если Сервер ИЛИ ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда

#Область ПрограммныйИнтерфейс

#Область ИАбстрактный

// Проверяет, реализует ли объект указанный интерфейс.
// 
// Параметры:
//  ИмяИнтерфейса - Строка
// 
// Возвращаемое значение:
//  Булево
// 
Функция РеализуетИнтерфейс(Знач ИмяИнтерфейса) Экспорт
КонецФункции

#КонецОбласти

#КонецОбласти // ПрограммныйИнтерфейс

#КонецЕсли

 

 

Теперь каждый приличный объект должен реализовать интерфейс ИАбстрактный, тогда можно будет, при помощи метода РеализуетИнтерфейс проверить, реализует ли он тот интерфейс, который от него ожидается.

 
 Еще какая-то процедура...
// Еще какая-то процедура.
// 
// Параметры:
//  Объект - ОбработкаМенеджер.ИАбстрактный, ОбработкаОбъект.ИХранилищеЗначений -
// 
Процедура ЕщеКакаяТоПроцедура(Знач Объект)
	
	Если Объект.РеализуетИнтерфейс("ИХранилищеЗначений") Тогда
		//...
	КонецЕсли;
	
КонецПроцедуры

 

 

Ну а если вдруг объект не содержит метода РеализуетИнтерфейс, платформа выдаст исключение. Тоже своего рода ответ на вопрос.

А как же реализовать абстрактный интерфейс, спросите вы? А в виде любого серверного объекта, лишь бы он имел модуль, содержащий определения методов интерфейса. Это может быть модуль объекта, модуль набора записей, модуль менеджера, общий модуль, и даже модуль формы в серверном контексте.

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

Слушайте, что дальше было. Приснилось мне, что в EDT появился объект Интерфейс, специально для описания абстрактных интерфейсов. И что теперь не нужно для этого плодить обработки, которые потом будут мертвым грузом висеть в конфигурации. И что поддерживается наследование одного интерфейса от другого, и плагин V8 Code Style контролирует, что реализация интерфейса в модуле совпадает с его описанием… А потом я проснулся.

КонецСказочки;

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

интерфейс абстрактный EDT CodeStyle

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

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

См. также

EDT Разработчик Бесплатно (free)

Пробелы и табуляции в конце строк незаметны при работе с кодом, но хорошо видны в истории изменений. Если включить автоматическую очистку для всей конфигурации, вместе с полезной правкой можно получить множество изменений форматирования. Для проекта, в котором дорабатывается только часть объектов, это неудобно: хочется поддерживать чистоту своего кода, не затрагивая остальной. Для этой задачи мы разработали небольшой плагин для 1C:EDT. Его главное отличие — фильтрация: очистка выполняется при сохранении только тех файлов, путь которых содержит заданный признак.

09.11.2026    144    kraspila    0    

0

Рефакторинг и качество кода EDT СКД Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Одиннадцать граблей схем компоновки, которые не видно в конструкторе и не ловит EDT, на реальных отчетах БП КОРП. Формат числа задается в двух местах, и условное оформление варианта перебивает формат поля. Ресурс складывает штуки с часами, и помогает выражение «только когда единица одна». Ресурс пуст в детальных записях, параметр не появляется в шапке без userSettingID, valueListAllowed ломает границы периода, Остатки и СрезПоследних с параметром периода падают с «Несоответствием типов», title без xsi:type дает «Исключение XDTO» при загрузке. В конце код проверки схемы из файла до обновления базы, сводная таблица и чеклист.

16.10.2026    502    Konstmax13    2    

2

Технологический журнал Сервера EDT Обновление 1С Системный администратор Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Конфигуратор и агент EDT тихо вылетают на 0 % «Обработки структуры базы данных», EDT пишет «Потеряно соединение с агентом конфигуратора», а модель проекта при этом чистая. Разбор двух аварий на большой серверной базе БП КОРП: какие факты снимать (журнал Windows, техжурнал нужной версии, хвост лога процесса), почему инкрементальная выгрузка EDT ломается после сбоев, как довести обновление пакетно через /UpdateDBCfg -Server, как опознать свои rphost среди нескольких кластеров и снять агент EDT, который сам поднимается и держит базу. Протокол одного дня по минутам и порядок диагностики из восьми шагов.

15.10.2026    442    Konstmax13    0    

0

Групповая разработка (Git, хранилище) EDT Обновление 1С Роли и права Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Загрузка конфигурации в базу висела часами без единой ошибки: ядро на 100 %, SQL не трогается, лог пуст. Одинаково у агента EDT, у /LoadConfigFromFiles и у полной загрузки. Причина нашлась бисектом: блоки прав в Rights.rights, дописанные в конец файла, а EDT и конфигуратор ждут их строго по возрастанию UUID объекта. Рядом еще две грабли: права на перечисления вешают загрузку так же, а право на HTTP-сервис целиком платформа молча выбрасывает. В статье хронология, как найти виновника за минуты, как править права скриптом со вставкой по позиции и скрипт проверки ролей перед обновлением (бесплатно, на GitHub).

15.10.2026    317    Konstmax13    0    

0

Инструментарий разработчика Нейросети Рефакторинг и качество кода EDT Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)

Как ИИ-агент (Claude Code) работает в живом EDT-проекте 1С:Бухгалтерии КОРП 3.0: из чего собрать стенд с MCP-сервером для EDT, как ставить задачи агенту, где он ломает проект и какие проверки это ловят. Реальные случаи: рукописные метаданные, ронявшие конфигуратор; четыре дня зависшего обновления из-за порядка блоков в Rights.rights; ошибки, которые EDT пропускает, а платформа нет; сплошная сверка вместо «вроде работает». В приложении шаблон CLAUDE.md, шаблон правила, чеклист перед обновлением базы и скрипты проверки ролей и схем СКД.

15.10.2026    3435    Konstmax13    11    

11

Нейросети EDT Разработчик 1С:Предприятие 8 Абонемент ($m)

Набор из 17 скилов для агента, который пишет код. Агент пишет и проверяет конфигурацию в формате 1C:EDT по стандартам раздела ИТС «Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8».

3 стартмани

05.10.2026    717    1    burlakov    0    

3

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) EDT Разработчик 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Разобрали, как выстроить CI для 1С 8.3 на EDT и Git: ветки с автослиянием, Jenkins и Pipeline Libraries, подготовка эталонной ИБ на каждый MR, Vanessa и xUnitFor1C в Allure. Материал для инструментальщика, который проектирует проверки до master, а не после релиза.

28.09.2026    845    zolotov7481    0    

0

EDT Разработчик Бесплатно (free)

Баги, недостающие улучшения и специфические потребности инфраструктуры не всегда находят отражение в новых версиях 1C:EDT – и тогда проблему можно решить с помощью собственного плагина. Рассказываем, как подготовить Eclipse, разобраться в архитектуре EDT, исследовать типовой функционал, подключать публичные сервисы и создавать пользовательский интерфейс. Разбираем отладку и сборку плагина, а также типичные сложности, из-за которых новички часто останавливаются на первых шагах. Все этапы показываем на примерах из практики создания плагина для работы с хранилищем 1С.

17.09.2026    1401    ZigRinat85    1    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Asmody 24.02.26 14:05 Сейчас в теме
"Можно, но зачем?"
ef42; bulpi; +2 – Ответить
2. korvintorson 88 24.02.26 14:24 Сейчас в теме
(1) Зачем нужны абстрактные интерфейсы? Почитайте профильную литературу, там написано.
3. Asmody 25.02.26 07:32 Сейчас в теме
(2) вы не улавливаете иронии.
В большей степени она относится не к вам, но к нашему жёлтому вендору
4. korvintorson 88 25.02.26 09:00 Сейчас в теме
5. mip128 04.03.26 11:35 Сейчас в теме
В принципе, все ОбщегоНазначения и созданы как абстрактный интерфейс.
6. korvintorson 88 04.03.26 14:21 Сейчас в теме
(5) Можете более развернуто пояснить вашу мысль?
7. mip128 04.03.26 17:54 Сейчас в теме
(6) Общего назначения создан так, что он ничего не знает о специфике любого прикладного решения, в рамках которого существует. Он в 1С является абстрактным.
8. korvintorson 88 04.03.26 19:15 Сейчас в теме
(7) То, о чем вы пишете - это независимость вызываемой стороны от вызывающей. Появилось в незапамятные времена, с изобретением процедурных языков. Не имеет отношения к понятию "абстрактный интерфейс".

Абстрактный интерфейс решает строго противоположную задачу - обеспечивает независимость вызывающей стороны от вызываемой. Принцип инверсии зависимости (DIP) - направление зависимости противоположно направлению потока управления.
Для отправки сообщения требуется регистрация/авторизация