Каталог решений - Конструктор разнесения статей ДДС в банковских документах

Конструктор разнесения статей ДДС в банковских документах

Конструктор разнесения статей ДДС в банковских документах

В наличии

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

Категория:

Описание

"ИИИИИИИИИИгорь, у нас на новый год новые статьи ДДС, надо настроить разнесение при загрузке банка", слышу я  частенько, и доблестно и с важным видом иду в модуль объекта,  в событие "Перед записью" документа. Чувствуя свое высшее предназначение писать код, в сотый раз переписываю конструкции "НайтиПоКоду" и многоуровневые "Если".

Хватит это терпеть скажете вы, и я тоже так подумал и решил создать гибкий пользовательский интерфейс для разнесения статей ДДС в банковских реквизитов, который бы учитывал любые комбинации условий и реквизитов.

Теперь пару слов о реализации:

1. За основу был взят механизм отбора компоновки данных, с помощью которого можно настраивать любые отборы по реквизитам объекта (привычный всем инструмент настройки отбора в отчетах или динамических списках), ниже пример создаваемого условия

 

 

2. Был создан регистр сведений с измерениями: СтатьяДДС, ИмяМетаданных, и ресурсами: "ВариантОтбора", "Приоритет". Приоритет служит чтоб не создавать взаимоисключающие условия, а выставить их в приоритете (При попадании в первый отбор, дальше условия не смотрятся). Ниже форма списка данного регистра, где непосредственно идет настройка условий.

 

 

3. Доработан "МенеджерОбменаЧерезУниверсальныйФормат", "ОтложеннаяОбработка" документов списание и поступление на р/с. Ниже пример кода инициализации отбора СКД, и определения необходимой статьи ДДС.

&После("ОтложеннаяОбработка_ПБДС")
Процедура РДДС_ОтложеннаяОбработка_ПБДС(Объект)
	//получим варианты отбора на дату
	//получим первую подходящую статью
	СтатьяНайдена = Ложь;
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	РДДС_НастройкиРазнесенияДДС.ВариантОтбора КАК ВариантОтбора,
	|	РДДС_НастройкиРазнесенияДДС.СтатьяДДС КАК СтатьяДДС
	|ИЗ
	|	РегистрСведений.РДДС_НастройкиРазнесенияДДС КАК РДДС_НастройкиРазнесенияДДС
	|ГДЕ
	|	РДДС_НастройкиРазнесенияДДС.ПолноеИмяМетаданных = &ИмяМетаданныхДокумента
	|
	|УПОРЯДОЧИТЬ ПО
	|	РДДС_НастройкиРазнесенияДДС.Приоритет";
	ИмяМетаданныхДокумента =  Объект.Метаданные().имя;
	Запрос.УстановитьПараметр("ИмяМетаданныхДокумента",	ИмяМетаданныхДокумента);	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ОтборСКД = ВыборкаДетальныеЗаписи.ВариантОтбора;
		ОтборСКД =  ОтборСКД.Получить();
		ДокументПоОтбору= ПолучитьДокументПоОтборуСКД(ИмяМетаданныхДокумента, Объект.ссылка, ОтборСКД);
		Если ДокументПоОтбору <> 0 Тогда
			Объект.Статья = ВыборкаДетальныеЗаписи.СтатьяДДС;
			СтатьяНайдена = Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Функция ПолучитьДокументПоОтборуСКД(ИмяМетаданныхДокумента,СсылкаНаДокумент, ОтборСКД)   экспорт
	ТекстЗапроса = "ВЫБРАТЬ Разрешенные _.* ИЗ Документ."+ИмяМетаданныхДокумента+" КАК _ ";
	Схема = ПолучитьОбщийМакет("РДДС_СхемаОтбораДокумента");
	Схема.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса;
	// восстановим настройки и добавим отбор по ссылке 
	РДДС_ОбщегоНазначения.СкопироватьЭлементы(Схема.НастройкиПоУмолчанию.Отбор, ОтборСКД);
	
	ЭлементОтбора = Схема.НастройкиПоУмолчанию.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = СсылкаНаДокумент;
	ЭлементОтбора.Использование = Истина;
	
	Настройки = Схема.НастройкиПоУмолчанию;
	//
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема,Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	Возврат Результат.Количество();
КонецФункции 

4. Расширение создавалось для конфигурации УНФ 1.6.26.191, но привязка к объектам конфигурации минимальная, Единственное, может быть расхождения по имени метаданных документов по банку и по версии Менеджера обмена, в данной конфигурации используется 1.8.

P.S В ответ музыкантам, баянистам) скажу, что под свою задачу похожих разработок не нашел, и поэтому выкладываю свою. 

has been added to your cart:
Оформление заказа