Page tree
Skip to end of metadata
Go to start of metadata

Контекст

Адаптер должен содержать возможность простой доработки без потери поддержки:

  • со стороны пользователей, при встраивании в свои конфигурации
  • со стороны разработчиков адаптера, при добавлении в адаптер поддержки типовых конфигураций

Ограничения

В адаптере 2:

  • Переопределяемые процедуры находятся в ОМ адаптер_ОбработчикиСобытийПереопределяемый. Проблема в том, что состав этих процедур жестко фиксирован и если мы решим в адаптере добавить еще одну, нам придется вносить изменения в этот модуль (и он будет дважды изменённым).

Порядок решение

Для решения проблемы

  1. Из всех мест в алгоритмах, где есть логика, которую нужно переопределять вызываются функции ОМ адаптер_ОбработчикиСобытийОбщий
  2. В ОМ адаптер_ОбработчикиСобытийОбщий функции представляют собой просто обертки, из которых вызываются соответствующие процедуры и функции из общих модулей ОМ адаптер_ОбработчикиСобытийПереопределяемый и адаптер_ОбработчикиСобытийСтандартный 
  3. В ОМ адаптер_ОбработчикиСобытийПереопределяемый поставляются заготовки процедур и функций, любую из которых можно переопределить.
    1. В ОМ адаптер_ОбработчикиСобытийПереопределяемый поставляются заготовки процедур и функций, именно в этом модуле при необходимости разработчиком выполнятся переопределение процедур и функций- обработчиков событий адаптера.
    2. В ОМ адаптер_ОбработчикиСобытийСтандартный выполняется стандартная обработка. Если при переопределении процедуры в ОМ адаптер_ОбработчикиСобытийПереопределяемый установить переменной СтандартнаяОбработка значение Ложь, то стандартный обработчик выполняться не будет.
    3. При переопределении функций стандартный код вычисления значения функции будет вызван, если при вызове функции из переопределяемого модуля было возвращено значение - Неопределено.  
  4. В типовых и отраслевых конфигурациях рекомендуется создать отдельный ОМ с переопределяемыми процедурами и функциями, и вызывать эти функции из ОМ адаптер_ОбработчикиСобытийПереопределяемый. Например, битмдт_ОбработчикиСобытийАдаптерПереопределяемый.  


Примеры:

Пример кода ОМ адаптер_ОбработчикиСобытийОбщий, вызов переопределяемой процедуры:

Процедура ЗаполнитьВыгружаемыеОбъекты(ПараметрыПодключения, НастройкиВыгрузки) Экспорт
	
	СтандартнаяОбработка = Истина;
	адаптер_ОбработчикиСобытийПереопределяемый.ЗаполнитьВыгружаемыеОбъекты(ПараметрыПодключения, НастройкиВыгрузки, СтандартнаяОбработка);
	
	Если СтандартнаяОбработка Тогда
		адаптер_ОбработчикиСобытийСтандартный.ЗаполнитьВыгружаемыеОбъекты(ПараметрыПодключения, НастройкиВыгрузки);
	КонецЕсли;
	
КонецПроцедуры

Пример кода ОМ адаптер_ОбработчикиСобытийПереопределяемый, переопределение стандартной процедуры:

Процедура ЗаполнитьВыгружаемыеОбъекты(ПараметрыПодключения, НастройкиВыгрузки, СтандартнаяОбработка) Экспорт
	
	МассивВыгружаемыхОбъектов = ПолучитьМассивВыгружаемыхОбъектов();
	Для Каждого ВыгружаемыйОбъект из МассивВыгружаемыхОбъектов Цикл
		 
		адаптер_НастройкиОбмена.ДобавитьНастройку(  НастройкиВыгрузки, 
													ВыгружаемыйОбъект,
													,
													Перечисления.адаптер_ФорматыСообщений.JSONMobile);	
	КонецЦИкла;
	
	СтандартнаяОбработка = Ложь; // В случае, если полностью переопределили процедуру и стандартный обработчик вызывать не надо.
	
КонецПроцедуры

Функция ПолучитьМассивВыгружаемыхОбъектов()
	
	МассивВыгружаемыхОбъектов = Новый Массив;
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.РегистрыСведений.БИТ_ШтрихкодыФизическихЛиц);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.РегистрыСведений.битмдт_ТоварыВЯчейкахОстатки);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.РегистрыСведений.битмдт_ТоварыНаСкладахОстатки);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.РегистрыСведений.ШтрихкодыНоменклатуры);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.РегистрыСведений.битмдт_ЗначенияДополнительныхКонстант);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.РегистрыСведений.битмдт_СоставПаллеты);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.Номенклатура);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.ХарактеристикиНоменклатуры);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.СерииНоменклатуры);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.Назначения);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.ВидыНоменклатуры);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.ОбластиХранения);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.ПолитикиУчетаСерий);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.Партнеры);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.СкладскиеЯчейки);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.Склады);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.СтруктураПредприятия);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.СкладскиеГруппыУпаковок);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.УпаковкиЕдиницыИзмерения);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.ФизическиеЛица);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.Пользователи);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.битмдт_НастройкиОтборовБезРаспоряжений);	
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.ШтрихкодыУпаковокТоваров);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.НаборыУпаковок);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.битмдт_ДополнительныеКонстанты);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Документы.РасходныйОрдерНаТовары);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Документы.ОтборРазмещениеТоваров);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Документы.ПриходныйОрдерНаТовары);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Документы.битмдт_ПриемкаТоваровПоПаллетам);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Документы.ПересчетТоваров);	
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Документы.битмдт_ИзменениеСоставаПаллеты);
	МассивВыгружаемыхОбъектов.Добавить(Метаданные.Справочники.битмдт_МобильныеУстройства);
	Возврат МассивВыгружаемыхОбъектов;
	
КонецФункции


Пример кода ОМ адаптер_ОбработчикиСобытийОбщий, вызов переопределяемой функции:

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

Пример кода ОМ адаптер_ОбработчикиСобытийПереопределяемый, переопределение стандартной функции:

Функция НайтиСсылкуПоЗагружаемымДанным(СтруктураОбъекта) Экспорт
	
	Если СтруктураОбъекта.ПолноеИмяИсточник = "Справочник.битмдт_МобильныеУстройства" Тогда
		Результат = Справочники.битмдт_МобильныеУстройства.НайтиПоРеквизиту("ИдентификаторУстройства", СтруктураОбъекта.ИдентификаторУстройства);
	ИначеЕсли СтруктураОбъекта.ПолноеИмяИсточник = "Документ.ОтборРазмещениеТоваров" 
		И СтруктураОбъекта.битмдт_БезРаспоряжения
		И СтруктураОбъекта.Свойство("битмдт_ВидРасхода") Тогда
				
		ВидНакладнойПоВидуРасхода = битмдт_СкладскиеОперации.ВидНакладнойПоВидуРасхода(
			ПредопределенноеЗначение("Перечисление.битмдт_ВидыРасходаТМЦСоСклада." + СтруктураОбъекта.битмдт_ВидРасхода.ЗначениеПеречисления)
			);
			
		Если ВидНакладнойПоВидуРасхода = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПеремещениеТоваров") Тогда
			
			Результат = РегистрыСведений.адаптер_ТаблицаКлючей.ПолучитьСсылку("Документ.ПеремещениеТоваров", СтруктураОбъекта.Идентификатор); 
			
		ИначеЕсли ВидНакладнойПоВидуРасхода = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеТоваровПоТребованию") Тогда
			
			Результат = РегистрыСведений.адаптер_ТаблицаКлючей.ПолучитьСсылку("Документ.ВнутреннееПотреблениеТоваров", СтруктураОбъекта.Идентификатор); 
		Иначе
			ВызватьИсключение НСтр("ru='Неизвестный вид расхода'");
		КонецЕсли;
	 
	Иначе
		Результат = адаптер_РаботаСДаннымиИБ.НайтиСсылкуПоЗагружаемымДанным(СтруктураОбъекта);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции
  • No labels