Каталог решений - Пример доработки типового отчета в БП 3.0 (Ограничение доступности поля в отборе, группировке) без снятия с поддержки

Пример доработки типового отчета в БП 3.0 (Ограничение доступности поля в отборе, группировке) без снятия с поддержки

Пример доработки типового отчета в БП 3.0 (Ограничение доступности поля в отборе, группировке) без снятия с поддержки

В наличии

Доработка типового отчета в БП 3.0.
Пример, как можно внести изменения в типовой отчет «Бухгалтерии предприятия» 3.0 без снятия конфигурации с поддержки.
Снять ограничение доступности нужного поля в отборе, группировке.

Категория:

Описание

Доработка типового отчета в БП 30
1С:Предприятие 8.3 (8.3.10.2561)
Бухгалтерия предприятия, редакция 3.0 (3.0.64.29)

Пример, как можно внести изменения в типовой отчет Бухгалтерии предприятия 30 без снятия конфигурации с поддержки

Задача: Добавить возможность отбора, группировки по Регистратору(Документу) в типовой отчет "Регистры налогового учета"
1. Добавляем расширение в конфигурацию 1с

Меню -Конфигурация — Расширение конфигурации 

Расш_1

Добавим расширение

Расш_2

Снимем признак "Безопасный режим в расширение"

Расш_3

2. Добавил форму отчета в расширение

Находим требуемый отчет в конфигурации , щелкам правой кнопкой мышки по форме отчета, выполняем команду "Добавить в расширение"

ФормаОтчета_1

3. Определяем место инициализации компоновщика и его настроек.

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

4. Добавляем процедуру  в расширение 

Выделяем процедуру в основной форме отчета, щелкаем правой кнопкой мыши  и выполняем команду "Добавить в расширение"

Процедура_1
Выбираем в какой момент времени она будет вызвана. В нашем случаи после выполнения изначальной до изменений.
Процедура_2
Так отображается добавленная процедура в коде формы отчета расширения.
Процедура_3
5. Определяем по данным отчета, что нам нужно изменить, что бы можно было наложить отбор по требуемому полю

В данном случаи, нужно изменить "Ограничение использования реквизитов" в схеме компоновки данных
ОграничениеРеквизитов_1
6. Снимаем ограничение использования реквизитов для условия и группировки

В процедуре "ИзменениеСхемыКомпоновкиДанныхНаСервере" добавляем программный код:
 

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

7. Поле "Регистратор" все равно не доступно ?
Проводим отладку и выясняем, что дополнительно при открытии формы настройки отчета отрабатывает ограничение по доступности некоторых полей в процедуре "ПолучитьЗапрещенныеПоля". Для других типовых отчетов не обязательно наличие данной процедуры.
Процедура  "ПолучитьЗапрещенныеПоля"
Выдержка из типовой процедуры 

&НаКлиенте
Функция ПолучитьЗапрещенныеПоля(Режим = "") Экспорт
	
	СписокПолей = Новый Массив;
	
	//Если список субконто задан
	Если Отчет.СписокВидовСубконто.Количество() > 0 Тогда
		СписокПолей.Добавить("Субконто1");
		СписокПолей.Добавить("Субконто2");
		СписокПолей.Добавить("Субконто3");
	КонецЕсли;
	
	Для Каждого Субконто Из Отчет.СписокВидовСубконто Цикл
		СписокПолей.Удалить(0);			
	КонецЦикла;
	
	СписокПолей.Добавить("UserFields");
	СписокПолей.Добавить("DataParameters");
	СписокПолей.Добавить("SystemFields");
	СписокПолей.Добавить("Показатели");
	СписокПолей.Добавить("Период");
	СписокПолей.Добавить("БухТипРесурса");
	СписокПолей.Добавить("ДатаОперации");
	СписокПолей.Добавить("ДоляЕНВД");
	СписокПолей.Добавить("Содержание");
	СписокПолей.Добавить("Организация");
	СписокПолей.Добавить("ОстатокБУ");
	СписокПолей.Добавить("ОстатокНУ");
	СписокПолей.Добавить("Регистратор");
.....

Добавляем ее по аналогу в расширение, внесем изменения для исключения поля "Регистратор" из списка ограничений.

&НаКлиенте
&Вместо("ПолучитьЗапрещенныеПоля")
Функция Расшир_ПолучитьЗапрещенныеПоля(Режим)
	
     // Результат - это поле табличного документа, заменяем на свое значение
	МассивСписокПолейФикс = ПродолжитьВызов(Режим);
	 
    // Сформируем новый фиксированный массив без ограничения на поле "Регистратор"
    СписокПолей= новый Массив;

	Для Каждого Эл из  МассивСписокПолейФикс цикл
		Если    Эл = "Регистратор" тогда
			Продолжить;
		КонецЕсли;
		СписокПолей.Добавить(Эл);
	КонецЦикла;
	// Вернем новый фикс. массив
	Возврат Новый ФиксированныйМассив(СписокПолей);

КонецФункции

8. Проверяем результат
Поле и реквизиты доступны для группировки

Регистратор_Группировка
Поле и реквизиты доступны для отбора

Регистратор_Отбор

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