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




