Переопределяемые процедуры в 1С

01.09.26

Разработка - Механизмы типовых конфигураций

Использование переопределяемых процедур в 1С на управляемых формах.

Файлы

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

Наименование Скачано Купить файл
Переопределение процедур
.zip 10,46Kb
1 2 500 руб. Купить

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

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

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

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

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

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

Я создал простой отчет СКД, который выводит номенклатуру и описание(комментарий), использующий типовую форму отчетов:

 

 

После формирования отчета нам нужно, чтобы при клике на ячейку Описание(Номенклатура.Комментарий) можно было изменить реквизит элемента справочника.

Первым делом нам надо переопределить процедуру отчета ПриСозданииНаСервере. Заходим в модуль объекта нашего отчета и пишем следующий код:

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

	Настройки.События.ПриСозданииНаСервере = Истина;
	
КонецПроцедуры

Теперь, если запустить отчет, то нам выдаст такую ошибку:

 

 

А если мы добавим эту процедуру в модуле объекта, то ошибка исчезнет:

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт 
	
КонецПроцедуры

Нам стала доступна процедура ПриСозданииНаСервере типовой формы для отчетов.

Далее нужно переопределить процедуру ОбработкаРасшифровки. Для этого создадим новую форму в отчете и назовем ее, к примеру, ФормаОтчетаПереопределяемая:

 

 

В нее добавим процедуру ОбработкаРасшифровки:

&НаКлиенте
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
КонецПроцедуры

Теперь вернемся к процедуре ПриСозданииНаСервере и добавим следующий код:

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт 
	
	ДобавляемыеРеквизиты = Новый Массив;
	ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяФормыПереопределенныхСобытий", Новый ОписаниеТипов("Строка")));
	ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПереопределенныеСобытияФормы", Новый ОписаниеТипов("")));
	
	Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
	Форма.ИмяФормыПереопределенныхСобытий = "ФормаОтчетаПереопределяемая";
	
	ПереопределенныеСобытия = Новый Массив;
	ПереопределенныеСобытия.Добавить("ОбработкаРасшифровки");
	
	Форма.ПереопределенныеСобытияФормы = Новый ФиксированныйМассив(ПереопределенныеСобытия);
	
КонецПроцедуры

а в модуле переопределяемой формы напишем обработку нажатия на ячейку и прочие процедуры:

&НаКлиенте
Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт  
	
	Если СтрНайти(Элемент.ТекущаяОбласть.Имя, "C2") > 0 Тогда
		СтандартнаяОбработка = Ложь;
		ОписаниеНоменклатуры = УправлениеНебольшойФирмойОтчетыВызовСервера.ПолучитьЗначениеРасшифровки("Описание", 
		Расшифровка, ФормаОтчета.ОтчетДанныеРасшифровки);
	КонецЕсли;
	
	Если Не ОписаниеНоменклатуры = Неопределено Тогда   
		ПараметрыФормы = Новый Структура;   
		ПараметрыФормы.Вставить("Расшифровка", Расшифровка);   
		ПараметрыФормы.Вставить("АдресВХранилище", ФормаОтчета.ОтчетДанныеРасшифровки);     
		НачатьРедактированиеДанных(ФормаОтчета, ПараметрыФормы);
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура НачатьРедактированиеДанных(ФормаОтчета, ПараметрыФормы)         
	
	СправочникСсылка = ПолучитьРедактируемыеДанные(ПараметрыФормы);
	ПараметрыФормы.Вставить("ФормаОтчета", ФормаОтчета); 
	Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтаФорма, ПараметрыФормы);   
	СтрокаОписание = УправлениеНебольшойФирмойВызовСервера.ЗначениеРеквизитаОбъекта(СправочникСсылка, "Комментарий");
	ПоказатьВводСтроки(Оповещение, СтрокаОписание, "Введите строку", 0, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаСтроки(Результат, Параметры) Экспорт 
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыСервер = Новый Структура; 
	ПараметрыСервер.Вставить("Расшифровка", Параметры.Расшифровка);
	ПараметрыСервер.Вставить("АдресВХранилище", Параметры.АдресВХранилище);
	
	Если ЗаписатьДанные(Результат, ПараметрыСервер) Тогда
		Параметры.ФормаОтчета.ОтчетТабличныйДокумент.ТекущаяОбласть.Текст = Результат;	
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьРедактируемыеДанные(ПараметрыФормы)
	
	Перем СправочникСсылка;
	
	Данные = ПолучитьИзВременногоХранилища(ПараметрыФормы.АдресВХранилище);  
	
	Если ТипЗнч(ПараметрыФормы.Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда  
		СправочникСсылка = Данные.Элементы[ПараметрыФормы.Расшифровка - 1].ПолучитьПоля()[0].Значение; 
	Иначе
		СправочникСсылка = Справочники.Номенклатура.ПустаяСсылка();
	КонецЕсли;
	
	Возврат СправочникСсылка;
	
КонецФункции

&НаСервере
Функция ЗаписатьДанные(ПолученныеДанные, Параметры)
	
	Перем Результат;
	
	Результат = Ложь;
	СправочникСсылка = ПолучитьРедактируемыеДанные(Параметры);
	
	Если СправочникСсылка = Справочники.Номенклатура.ПустаяСсылка() Тогда
		Результат = Ложь;
		Возврат Результат;
	КонецЕсли;
	
	СправочникОбъект = СправочникСсылка.ПолучитьОбъект();
	СправочникОбъект["Комментарий"] = ПолученныеДанные;
	
	Попытка 
		СправочникОбъект.Записать();  
		Результат = Истина;
	Исключение       
		Результат = Ложь;
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции

В данном тексте использовалась функция УправлениеНебольшойФирмойОтчетыВызовСервера, потому как отчет писался для конфигурации УНФ. Если вы используете другую конфигурацию, нужно будет эту функцию соответственно переименовать.

Почти все готово. Осталось внести немного кода в общий модуль ОтчетыКлиентПереопределяемый. Находим функцию ОбработкаРасшифровки - ее мы будем править через расширение:

&После("ОбработкаРасшифровки")
Процедура Переопределение_ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка)
	
	//++ Переопределение
	Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФормаОтчета, "ИмяФормыПереопределенныхСобытий")
И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФормаОтчета, "ПереопределенныеСобытияФормы")
И ТипЗнч(ФормаОтчета.ПереопределенныеСобытияФормы) = Тип("ФиксированныйМассив")
И ФормаОтчета.ПереопределенныеСобытияФормы.Найти("ОбработкаРасшифровки") <> Неопределено Тогда

     ПереопределеннаяФорма = ПолучитьФорму(ФормаОтчета.ИмяФормы + "." + ФормаОтчета.ИмяФормыПереопределенныхСобытий);
     ПереопределеннаяФорма.ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);

КонецЕсли;
	//-- Переопределение
	
КонецПроцедуры

Все готово, можно пользоваться!!!

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

Обработка расширение переопределение

См. также

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

1 стартмани

20.03.2026    4195    InFlach    0    

5

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    5814    AlexeyPROSTO_1C    5    

21

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    3695    YA_1100893639    1    

9

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

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

11.08.2025    11813    user1988284    0    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 102 02.09.26 13:27 Сейчас в теме
Название неудачное, всё-таки это переопределение расшифровки отчета.
Sam.; skyadmin; chrnv; +3 Ответить
Для отправки сообщения требуется регистрация/авторизация