Увеличение количества дополнительных аналитик в БИТ.Финанс

25.01.24

Задачи пользователя - Адаптация типовых решений

Статья описывает опыт изменения конфигурации БИТ.Финанс с целью увеличения количества дополнительных аналитик (измерений).

Добрый день!

По умолчанию в БИТ.Финанс возможно использовать 7 аналитик по своему усмотрению, то есть задать им произвольный тип. Собственно, этого количества может оказаться мало. В данной статье опишу мой опыт увеличения количества дополнительных аналитик в БИТ.Финанс. Было принято решение добавить сразу 3 аналитики, так как жадным быть плохо.

Я изменил конфигурацию только по тем объектам/фрагментам кода, которые задействуются в контурах автоматизации нашей организации. Плюс этого в том, что при обновлении не придется делать лишние объединения. Минус в том, что часть программы остается как бы недоработанной. Если позже понадобится использовать какой-то вид документа, который ранее не использовали, то придется возвращаться к этой задаче и делать доработку.

Во-первых, изменения касаются реквизитов объектов. Необходимо добавить реквизиты во все объекты, которые вы используете. Можно это сделать копированием существующих реквизитов и не тратить время на типизацию. Вот некоторые из примеров:



 

 

Вот список объектов, куда я добавил новые аналитики:

Регистры накопления:

  • бит_ПланируемыйРасходДенежныхСредств
  • бит_ОборотыПоБюджетам
  • бит_КонтрольныеЗначенияБюджетов
  • бит_ПричиныРасхожденийБюджета
  • бит_ПланируемыеЗатраты
  • бит_ПланируемоеПоступлениеДенежныхСредств
  • бит_НезапланированныеРасходы
  • бит_мто_ПотребностиНоменклатурыАналитика
  • бит_мто_ПланируемаяЗакупкаНоменклатурыАналитика
  • бит_мто_НезапланированныеЗакупки
  • бит_ДвиженияДенежныхСредств
  • бит_ГрафикиДоговоров

 

Регистры сведений:

  • бит_ЗависимыеОбороты
  • бит_СрокиКонтроляПоБюджету
  • бит_ФормаВводаБюджетаЗависимыеОбороты
  • бит_ФормаВводаБюджетаБДДС
  • бит_НастройкиЗаполненияАналитикПоНазначениюПлатежа
  • бит_ДанныеПроизвольныхОтчетов

 

Документы:

  • бит_БюджетнаяОперация
  • бит_ЗаявкаНаРасходованиеСредств
  • бит_УстановкаКонтрольныхЗначений
  • бит_ФормаВводаБюджета
  • бит_УстановкаЗависимыхОборотов
  • бит_КорректировкаКонтрольныхЗначений
  • бит_КорректировкаБюджета
  • СписаниеСРасчетногоСчета
  • РасходныйКассовыйОрдер
  • ПриходныйКассовыйОрдер
  • ПоступлениеНаРасчетныйСчет

 

Обработки:

  • бит_СозданиеФормВводаБюджета
  • бит_ПодборДанныхБюджета

 

Кстати, список выбора доп.аналитик в назначении доп.аналитик определяется программно составом доп. аналитик в регистре накопления “бит_ОборотыПоБюджетам”.

Далее нужно дорабатывать код. Главный девиз: сделать по аналогии с имеющимися доп. аналитиками. По большей изменения в текстах запросов, где нужно опять же копипастом добавить новые аналитики. Обращайте внимание на группировки, соединения и т.п. в запросах по доп. аналитикам, чтобы ничего не сломать.

Самый обыкновенный пример:

 

 

Изменений было действительно много, вот некоторые места, где изменен код:

 

Общие модули:

бит_Казначейство

бит_КонтрольИсполненияБюджета

 

Общие формы:

бит_РедактированиеДополнительныхАналитик

 

Документы:

бит_БюджетнаяОперация - модуль менеджера

бит_ЗаявкаНаРасходованиеСредств - модуль объекта + модуль менеджера

бит_УстановкаКонтрольныхЗначений - модуль менеджера

бит_КорректировкаКонтрольныхЗначений - модуль менеджера

бит_ФормаВводаБюджета - модуль объекта + модуль менеджера


Также в коде много где содержится “магическое число” 7, несмотря на то что в самом БИТ.Финансе есть функция, возвращающая количество доп измерений. Таких мест я нашел 15. Исправляется довольно просто:

 

// Неправильно:
//Для Индекс = 1 По 7 Цикл
// Правильно:
Для Индекс = 1 По бит_МеханизмДопИзмерений.ПолучитьМаксимальноеКоличествоДополнительныхИзмерений() Цикл
	Если НЕ ЗначениеЗаполнено(СтрокаРаспределения["Аналитика_" + Индекс]) Тогда
		СтрокаРаспределения["Аналитика_" + Индекс] = Неопределено;				
	КонецЕсли; 
КонецЦикла; 

 

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

Следующий шаг это доработка форм. В некоторых формах элементы и реквизиты доп. аналитик добавляются программно, так что не придется добавлять их на форму самостоятельно. Это, например, в “Форма ввода бюджета”.

А в “Заявка на расходование ДС” нужно будет прописать добавление реквизитов и элементов вручную. Не забыть повесить обработчики. При этом, могут быть реквизиты формы которые в конфигураторе не заданы, а добавляются программно в коде бит финанса, затем как-то используются. Фрагмент кода, который я добавил в заявку:

// При чтении документа вызывается эта процедура и определяет доступность элементов раньше,  
// чем выполняется обработчик "ПриСозданииНаСервере". Поэтому элементы добавляем здесь.
// Кроме этого вызывается после записи.
&НаСервере
&Перед("ПодготовитьФормуНаСервере")
Процедура пари_ПодготовитьФормуНаСервере()
	
	МассивРеквизитов = ПолучитьРеквизиты("Объект.Распределение");
	ДобавляемыеРеквизитыУжеЕсть = Ложь;
	Для Каждого Реквизит Из МассивРеквизитов Цикл
		Если Реквизит.Имя = "Аналитика_8Доступность" Тогда
			ДобавляемыеРеквизитыУжеЕсть = Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;              
	Если НЕ ДобавляемыеРеквизитыУжеЕсть Тогда

		Тип = Новый ОписаниеТипов("Булево");
		Путь = "Объект.Распределение";
		ДобавляемыеРеквизиты = Новый Массив;
		ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Аналитика_8Доступность", 	Тип, Путь));
		ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Аналитика_9Доступность", 	Тип, Путь));
		ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Аналитика_10Доступность", 	Тип, Путь));
		ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Аналитика_8Проверять", 		Тип, Путь));
		ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Аналитика_9Проверять", 		Тип, Путь));
		ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Аналитика_10Проверять", 		Тип, Путь)); 
		ИзменитьРеквизиты(ДобавляемыеРеквизиты); 
				
		НовыйЭлемент = Элементы.Добавить("Аналитика_8", Тип("ПолеФормы"), Элементы.ГруппаЗаявкаПравоОднострочныйДокумент);
		НовыйЭлемент.Вид 				= ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным 		= "Объект.Аналитика_8";
		НовыйЭлемент.УстановитьДействие("ПриИзменении",	"Аналитика_8ПриИзменении"); 
		НовыйЭлемент.УстановитьДействие("НачалоВыбора",	"АналитикаНачалоВыбора"); 
		НовыйЭлемент.УстановитьДействие("Очистка", 		"АналитикаОчистка"); 
		НовыйЭлемент.УстановитьДействие("АвтоПодбор", 	"АналитикаАвтоПодбор"); 
		
		НовыйЭлемент = Элементы.Добавить("Аналитика_9", Тип("ПолеФормы"), Элементы.ГруппаЗаявкаПравоОднострочныйДокумент);
		НовыйЭлемент.Вид 				= ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным 		= "Объект.Аналитика_9";
		НовыйЭлемент.УстановитьДействие("ПриИзменении",	"Аналитика_9ПриИзменении"); 
		НовыйЭлемент.УстановитьДействие("НачалоВыбора",	"АналитикаНачалоВыбора"); 
		НовыйЭлемент.УстановитьДействие("Очистка", 		"АналитикаОчистка"); 
		НовыйЭлемент.УстановитьДействие("АвтоПодбор", 	"АналитикаАвтоПодбор"); 
		
		НовыйЭлемент = Элементы.Добавить("Аналитика_10", Тип("ПолеФормы"), Элементы.ГруппаЗаявкаПравоОднострочныйДокумент);
		НовыйЭлемент.Вид 				= ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным 		= "Объект.Аналитика_10";
		НовыйЭлемент.УстановитьДействие("ПриИзменении",	"Аналитика_10ПриИзменении"); 
		НовыйЭлемент.УстановитьДействие("НачалоВыбора",	"АналитикаНачалоВыбора"); 
		НовыйЭлемент.УстановитьДействие("Очистка", 		"АналитикаОчистка"); 
		НовыйЭлемент.УстановитьДействие("АвтоПодбор", 	"АналитикаАвтоПодбор"); 
		
		НовыйЭлемент = Элементы.Добавить("РаспределениеАналитика_8", Тип("ПолеФормы"), Элементы.Распределение);
		НовыйЭлемент.Вид 				= ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным 		= "Объект.Распределение.Аналитика_8";
		НовыйЭлемент.УстановитьДействие("ПриИзменении",	"РаспределениеАналитикаПриИзменении"); 
		НовыйЭлемент.УстановитьДействие("НачалоВыбора",	"РаспределениеАналитикаНачалоВыбора"); 
		НовыйЭлемент.УстановитьДействие("Очистка", 		"РаспределениеАналитикаОчистка"); 
		НовыйЭлемент.УстановитьДействие("АвтоПодбор", 	"РаспределениеАналитикаАвтоПодбор"); 
		
		НовыйЭлемент = Элементы.Добавить("РаспределениеАналитика_9", Тип("ПолеФормы"), Элементы.Распределение);
		НовыйЭлемент.Вид 				= ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным 		= "Объект.Распределение.Аналитика_9";
		НовыйЭлемент.УстановитьДействие("ПриИзменении",	"РаспределениеАналитикаПриИзменении"); 
		НовыйЭлемент.УстановитьДействие("НачалоВыбора",	"РаспределениеАналитикаНачалоВыбора"); 
		НовыйЭлемент.УстановитьДействие("Очистка", 		"РаспределениеАналитикаОчистка"); 
		НовыйЭлемент.УстановитьДействие("АвтоПодбор", 	"РаспределениеАналитикаАвтоПодбор"); 
		
		НовыйЭлемент = Элементы.Добавить("РаспределениеАналитика_10", Тип("ПолеФормы"), Элементы.Распределение);
		НовыйЭлемент.Вид 				= ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным 		= "Объект.Распределение.Аналитика_10";
		НовыйЭлемент.УстановитьДействие("ПриИзменении",	"РаспределениеАналитикаПриИзменении"); 
		НовыйЭлемент.УстановитьДействие("НачалоВыбора",	"РаспределениеАналитикаНачалоВыбора"); 
		НовыйЭлемент.УстановитьДействие("Очистка", 		"РаспределениеАналитикаОчистка"); 
		НовыйЭлемент.УстановитьДействие("АвтоПодбор", 	"РаспределениеАналитикаАвтоПодбор"); 
	КонецЕсли;
КонецПроцедуры


// Обработчики:
&НаКлиенте
Процедура Аналитика_8ПриИзменении(Элемент)
	
	СинхронизироватьРеквизитыИОтобразитьБюджетСПаузой();
	
КонецПроцедуры

&НаКлиенте
Процедура Аналитика_9ПриИзменении(Элемент)
	
	СинхронизироватьРеквизитыИОтобразитьБюджетСПаузой();
	
КонецПроцедуры

&НаКлиенте
Процедура Аналитика_10ПриИзменении(Элемент)
	
	СинхронизироватьРеквизитыИОтобразитьБюджетСПаузой();
	
КонецПроцедуры


В отчетах добавление простое. В схему компоновки добавить поля, настроить по аналогии с имеющимися аналитиками. Не забудьте добавить настройки компоновщика данных, так как в примере ниже в СКД выключено автозаполнение.

 


 


 

 

Таким образом аналитики будут добавлены, в том числе их корректные заголовки в пользовательском режиме будут формироваться программно.

Есть изменения и в таких местах:


 

С помощью этой схемы осуществляется подбор лимитов в корректировку контрольных значений.

После всех изменений необходимо тщательно протестировать основные сценарии использования программы, дабы не сильно упасть лицом в грязь после переноса на прод. Вероятней всего в первое время вы всё же столкнетесь с багами разной критичности. Однако после их устранения всё будет работать как часы)

Всем удачи!

БИТ.Финанс битфинанс доп дополнительные аналитики назначение измерения разрезы

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5681    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3929    12    0    

29

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5113    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5581    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Бубузяка 62 30.01.24 10:57 Сейчас в теме
Если вы зарегистрированный пользователь, напишите в поддержку и предоставьте список мест с магическим числом "7". Думаю, вам пойдут на встречу и поставят вызов функции. Так у вас уменьшится количество правок.
Оставьте свое сообщение