Свой функционал в типовой 1С без потери обновлений: шесть рабочих способов
Содержание
Добавить функции в 1С 8.3 проще всего через расширение конфигурации
(Конфигурация → Расширения конфигурации в Конфигураторе): типовая конфигурация остаётся на поддержке и обновляется как раньше. Для разовой задачи хватит внешней обработки .epf, а для кнопки в форме документа — дополнительной обработки, подключённой в режиме Предприятия.
Типовая 1С редко закрывает всё: не хватает печатной формы, проверки при проведении, загрузки из Excel, кнопки «заполнить по шаблону». Ниже шесть способов расширить программу — от безопасных до радикальных, с примерами кода и границами каждого.
Какой способ расширения 1С выбрать
Главный вопрос — что будет с обновлениями. Чем глубже правка, тем дороже каждое следующее обновление релиза.
| Способ | Когда подходит | Влияние на обновления | Нужен Конфигуратор |
|---|---|---|---|
Расширение конфигурации (.cfe) | Новые кнопки, реквизиты, проверки, изменение поведения типовых объектов | Минимальное, расширение живёт отдельно | Для разработки — да, для подключения — нет |
Внешняя обработка или отчёт (.epf, .erf) | Разовые задачи, выгрузки, исправление данных | Никакого | Только для разработки |
| Дополнительные отчёты и обработки | Печатные формы, заполнение, команды в списках и документах | Никакого | Только для разработки |
| Правка конфигурации | Глубокая переработка, которую нельзя сделать расширением | Высокое: каждое обновление — сравнение и объединение | Да |
| Общие модули | Повторно используемый код для любых из способов выше | Зависит от того, где модуль лежит | Да |
| COM, командная строка, HTTP | Связь с внешними программами, автоматический запуск | Никакого | Нет, кроме подготовки |
Правило практика: всё, что можно сделать расширением или дополнительной обработкой, делайте ими. Снимать конфигурацию с поддержки стоит в последнюю очередь.
Расширение конфигурации: функции без снятия с поддержки
Расширения появились в платформе 8.3.6 и с тех пор стали основным способом дорабатывать типовые решения. Расширение — отдельный набор объектов, который платформа «накладывает» на основную конфигурацию при запуске.
Что умеет расширение
- ➕ добавлять новые справочники, документы, регистры, отчёты, обработки, общие модули, роли;
- 🧩 добавлять реквизиты и табличные части к типовым объектам;
- 🖱 добавлять элементы и команды на типовые формы;
- 🔁 менять поведение типовых процедур через аннотации;
- 🔐 давать права на новые объекты через собственные роли.
Как создать расширение пошагово
- Сделайте резервную копию:
Администрирование → Выгрузить информационную базув Конфигураторе, файл.dt. - Откройте
Конфигурация → Расширения конфигурациии нажмите «Добавить». - Задайте имя, префикс (например,
мр_) и назначение: «Исправление», «Адаптация» или «Дополнение». - Откройте дерево расширения. Чтобы изменить типовой объект, найдите его в основной конфигурации и через контекстное меню выберите «Добавить в расширение» — объект станет заимствованным.
- Добавьте реквизиты, элементы формы, код.
- Выполните «Обновить конфигурацию
базы данных» для расширения (
F7в окне расширения). - Запустите Предприятие и проверьте результат.
Аннотации для изменения типового кода
В модуле заимствованного объекта процедуру не переписывают целиком, а перехватывают:
| Аннотация | Что делает |
|---|---|
&Перед("Имя") | Ваш код выполняется до типового |
&После("Имя") | Ваш код выполняется после типового |
&Вместо("Имя") | Ваш код заменяет типовой; вызвать исходный можно через ПродолжитьВызов() |
&ИзменениеИКонтроль("Имя") | Копия типовой процедуры с пометками вставок и удалений; при обновлении платформа сообщит, если исходник изменился |
Пример: запретить проведение реализации без комментария.
&После("ОбработкаПроверкиЗаполнения")
Процедура мр_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ПустаяСтрока(Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Заполните комментарий: без него документ не проводится.", ЭтотОбъект, "Комментарий", , Отказ);
КонецЕсли;
КонецПроцедуры
ОбщегоНазначения.СообщитьПользователю есть в конфигурациях на БСП: БП 3.0, ЗУП 3.1, УТ 11. В нетиповых решениях используйте Сообщение = Новый СообщениеПользователю.
Подключение готового расширения без Конфигуратора
Если расширение пришло файлом .cfe, в конфигурациях на БСП его можно загрузить из режима Предприятия: Администрирование → Печатные формы, отчеты и обработки → Расширения. Там же расширение включают и отключают.
Расширение работает с правами пользователя и может менять данные. Подключайте файлы .cfe только из проверенных источников и сначала на копии базы. Оставьте включённым безопасный режим, если расширению не нужен доступ к файлам и внешним ресурсам.
Внешние обработки и отчёты: самый быстрый путь
Внешняя обработка — файл .epf (отчёт — .erf), который хранится вне базы. Его пишут в Конфигураторе через Файл → Новый → Внешняя обработка, сохраняют на диск и открывают в Предприятии.
Когда это лучший выбор:
- 📥 загрузка справочника из Excel один раз;
- 🧹 массовое исправление реквизитов после ошибки обмена;
- 📊 отчёт для аудитора, который больше не понадобится;
- 🧪 проверка гипотезы перед тем, как оформлять её расширением.
Открыть файл в Предприятии: главное меню (кнопка с тремя полосками в левом верхнем углу) → Файл → Открыть.
Если вместо формы появляется сообщение о нарушении прав или предупреждение о безопасности, причин обычно две:
- У пользователя нет права «Интерактивное открытие внешних обработок» (или «…отчетов»). Его дают в профиле групп доступа — поручите это администратору базы.
- В типовой конфигурации включена защита от опасных действий: программа спросит подтверждение или запретит открытие произвольных файлов. Тогда регистрируйте файл как дополнительную обработку — об этом следующий раздел.
Внешнюю обработку удобно отлаживать: правите модуль в Конфигураторе, сохраняете файл и открываете его в Предприятии заново. Базу обновлять не нужно.
Дополнительные отчёты и обработки в режиме Предприятия
Это механизм Библиотеки стандартных подсистем. Тот же файл .epf регистрируется в базе и превращается в команду: кнопку в документе, пункт меню «Печать», команду в разделе.
Включение механизма
Администрирование → Печатные формы, отчеты и обработки.- Установите флажок «Дополнительные отчеты и обработки».
- Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
Что должно быть в файле
Обычная внешняя обработка не зарегистрируется: в модуле объекта нужна экспортная функция СведенияОВнешнейОбработке(). Она сообщает программе вид обработки и список команд.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Проверить контрагентов";
Команда.Идентификатор = "ПроверитьКонтрагентов";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Команда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Виды и где они появляются
| Вид | Где появится команда |
|---|---|
| Дополнительная обработка | В разделе программы, в группе дополнительных обработок |
| Дополнительный отчёт | В разделе программы, среди дополнительных отчётов |
| Печатная форма | В меню «Печать» выбранных документов или справочников |
| Заполнение объекта | В форме объекта, команда заполнения |
| Отчёт (связанный) | В форме объекта, в группе отчётов |
| Создание связанных объектов | В форме объекта, команда «Создать на основании» |
После загрузки откройте карточку обработки, на вкладке «Размещение» укажите разделы или объекты, а в табличной части команд — пользователей, которым команда доступна. Без этого кнопку никто не увидит.
Обновить обработку можно без удаления: в карточке выберите загрузку из файла и укажите новую версию. Настройки размещения сохранятся.
Правка конфигурации в Конфигураторе
Прямое изменение — самый мощный и самый дорогой способ. Им пользуются, когда расширение не справляется: например, нужно изменить состав типовых регистров или переписать большую часть типовой логики.
Как включить изменение типовой конфигурации
- Выгрузите базу в
.dtи сохраните файл конфигурации.cf(Конфигурация → Сохранить конфигурацию в файл). - Откройте
Конфигурация → Поддержка → Настройка поддержки. - Нажмите «Включить возможность изменения» и подтвердите.
- Для объектов, которые будете менять, задайте правило «Объект поставщика редактируется с сохранением поддержки».
- Внесите изменения и выполните
Конфигурация → Обновить конфигурацию базы данных(F7).
Если изменения затрагивают структуру данных, обновление потребует монопольного доступа. Пользователей нужно заранее вывести из базы, иначе платформа предложит динамическое обновление или откажет.
Цена такого пути
- 🔄 каждое обновление релиза идёт через сравнение и объединение конфигураций, вручную;
- 👨💻 нужен программист, который помнит, что и зачем меняли;
- 🧾 изменения надо документировать: комментарии с датой и автором прямо в коде.
Объекты, снятые с поддержки полностью, перестают обновляться вообще. Через год такая база отстаёт от регламентированной отчётности, и её приходится переводить на типовую заново.
Общие модули и глобальные функции
Общий модуль — контейнер для процедур, которые вызываются из разных мест: форм, документов, обработок. Его можно создать и в основной конфигурации, и в расширении, второй вариант предпочтительнее.
Флажки свойств, которые решают всё
| Свойство | Что даёт |
|---|---|
| Сервер | Код выполняется на сервере 1С |
| Клиент (управляемое приложение) | Код выполняется на клиенте |
| Вызов сервера | Экспортные функции можно вызывать с клиента |
| Внешнее соединение | Модуль доступен при COM-подключении |
| Глобальный | Процедуры вызываются без имени модуля |
| Привилегированный | Код выполняется без проверки прав |
| Повторное использование возвращаемых значений | Результат функции кешируется на время вызова или сеанса |
Пример серверного модуля мр_Сервисные с функцией, доступной из любой обработки:
Функция ОстатокПоСчету(Счет, НаДату) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Остатки.СуммаОстатокДт - Остатки.СуммаОстатокКт), 0) КАК Сальдо
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&НаДату, Счет = &Счет, , ) КАК Остатки";
Запрос.УстановитьПараметр("Счет", Счет);
Запрос.УстановитьПараметр("НаДату", НаДату);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.Сальдо;
КонецФункции
Вызов из другого места: Сальдо = мр_Сервисные.ОстатокПоСчету(Счет, ТекущаяДатаСеанса());. Пример написан под регистр Хозрасчетный в БП 3.0.
Флажок «Глобальный» ставьте редко. Глобальные клиентские модули компилируются при старте программы и замедляют запуск, а имена их процедур легко пересекаются с типовыми.
Автоматизация: COM-соединение, командная строка, HTTP
Когда функцию нужно вызвать не из 1С, а из внешней программы или по расписанию Windows, используют внешние интерфейсы.
COM-соединение
Компонента V83.COMConnector даёт внешней программе доступ к объектам базы. Перед использованием её регистрируют от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\comcntr.dll"
Путь подставьте свой, номер платформы — ваш установленный. Разрядность скрипта и comcntr.dll должна совпадать.
Пример на PowerShell для файловой базы:
$connector = New-Object -ComObject "V83.COMConnector"
$base = $connector.Connect('File="C:\Bases\Buh";Usr="Робот";Pwd="пароль"')
$version = $base.Метаданные.Версия
Write-Output "Версия конфигурации: $version"
Свою функцию вызывают так же, через имя модуля: $base.мр_Сервисные.ИмяФункции(). Через COM доступны только общие модули с флажком «Внешнее соединение». Для клиент-серверной базы строка подключения выглядит как Srvr="server1c";Ref="buh";Usr=...;Pwd=....
Командная строка
Платформа запускает внешнюю обработку сразу при входе:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" ENTERPRISE /F"C:\Bases\Buh" /N"Робот" /P"пароль" /Execute"C:\Scripts\obmen.epf"
Такую строку ставят в планировщик заданий Windows для ночных выгрузок. В пакетном режиме Конфигуратора (DESIGNER) так же загружают расширения и обновляют базу, полный список параметров — в справке платформы.
HTTP-сервисы и OData
Для обмена с сайтом или мобильным приложением COM неудобен. В расширении можно создать HTTP-сервис и опубликовать его на веб-сервере, а для чтения данных без программирования включить стандартный интерфейс OData.