1С бухгалтерия

Как это было в начале можно прочитать здесь:
http://allexx.info/redaktirovanie-obrabotok-zapolneniya-form-reglamentir...

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

Задача у меня была такая же как и раньше, чтобы можно было сформировать 737-ю форму с отбором по Направлениям деятельности. Данный вид субконто был добавлен к забаланосовым счетам 17 и 18. И т.к. сейчас опять можно заполнять формы по этим забаланосовым счетам, то я подумал, что может быть можно малой кровью донастроить отбор в вышеприведенных справочниках.

Первая проблема. В справочнике правил на закладке общие параметры нельзя указать параметр любого типа(хотя тип данных стоит Любая ссылка). Он фильтрует возможны типы данных и в частности справочника Направления деятельности там не оказалось. Поэтому пришлось написать небольшую обработку (Настройка правил заполнения в приложении), чтобы для элемента Правило 737 (2015) установить принудительно параметр НД, чтобы потом в отчете можно было выбирать направления деятельности.

Немножко поковырявшись в запросах из схем справочника "Области заполнения" я увидел, что там фигурируют поля Субконто1, Субконто2 и т.д. Поэтому решил, что можно добавить отбор по этим полям и в качестве значения отбора подставить новоиспеченный параметр НД. А т.к. всяких там областей получается много, то я подумал, что будет проще в дальнейшем жить, если я на лету будут подцеплять эти отборы в момент вывода этих областей.
Так и сделал. За вывод областей отвечает обработка ОбработкаДанныхОтчетности.
В ней есть функция:

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

Немного слов о том, что я тут наворотил. Сначала я ищу, есть ли в текущей схеме отбор по счетам, у которых есть субконто Направления деятельности. (В типовых правилах как раз таки заданы такие отборы по 17 и 18 счетам). Попутно нахожу номер субконто для напр. деятельности. Если такое субконто найдено, то устанавливаю дополнительный отбор по этому полю. Все вроде логично, но отбора не происходит. Стал внимательнее смотреть, что же там такое.

Дело в том, что основная схема, по которой идет выборка и отборы хранится в реквизите СхемаКомпоновки для каждого элемента справочника "Области заполнения". В свою очередь в каждой такой схеме идет объединение нескольких таблиц(которые в принципе видны по кнопке "Задать источник данных" в спр. "Области заполнения") и называются типа "Обороты180103_290".

Те отборы, которые заложены в справочниках стандартно прописаны в параметрах виртуальных таблиц (конструкции с фигурными скобками) и имеют имена типа УсловиеОбороты180103_290Счет (т.е. в данном случае отбор по счету для таблицы Обороты180103_290). В общем для того, чтобы вытащит эту схему и посмотреть на нее собственными глазами прикрепляю обработку для сохранения схемы в файл.

В итоге поглядев на все это хозяйство и на то, что нужные мне субконто все таки не присутствуют в схемах, понял, что дело пахнет перелопачиванием всех запросов, подзапросов помноженных на количество Областей заполнения.

Вот поэтому я и приостановил на этом мое знакомство с механизмом заполнения форм регламентированной отчетности в конфигурации БГУ. И возвращаться туда обратно что-то не хочется, особенно учитывая то, как часто эти формы меняют. И тем более, что пока что работает еще старый механизм (см. ссылку выше), достаточно просто в справочнике "Правила заполнения" отключить признак "Основное правило" у основного правила.

Прикрепленный файлРазмерХитыПоследнее скачивание
Eksport_SKD.erf6.41 кб59613 часов 29 минут назад
NastroykaPravilZapolneniyaReglOtchetov.epf6.35 кб5888 часов 36 минут назад

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

А не проще бы было создать в Своде отчетов свою форму 387, на основе стандартной. Со своими алгоритмами?

admin аватар

Свод отчетов - в смысле конфигурацию такую? Честно говоря, никогда ей не пользовался и не знаю как там чего делается. Туда полностью данные перекачиваются из БГУ? Со всеми доп. аналитиками к забалансовым счетам? Если так, то, возможно... Хотя бухгалтера не работают с этой конфигурацией и начинать ей пользоваться только из-за одного отчета они я думаю не будут, да и у меня нет особого желания туда окунаться.

В этой конфигурации можно подготовить свой комплект отчетности, бухгалтерам потом только останется его установить. Загружаем стандартный от 1С, вносим свои коррективы - генерируем НовыйКомплект.repx и все. Может полезно будет.

*737

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".