Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 10:45

Помогите оптимизировать обращение к полям

Автор Хитман, 20 июн 2011, 11:46

0 Пользователей и 1 гость просматривают эту тему.

Хитман

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


Если ВыборкаЗапроса.Прочее1 <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = ?(СокрЛП(Константы.кск_Прочее1.Получить()) = "" , "Прочее 1",СокрЛП(Константы.кск_Прочее1.Получить()));
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Прочее1 = Null,0,ВыборкаЗапроса.Прочее1);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;   
      Если ВыборкаЗапроса.Прочее2 <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = ?(СокрЛП(Константы.кск_Прочее2.Получить()) = "" , "Прочее 2",СокрЛП(Константы.кск_Прочее2.Получить()));
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Прочее2 = Null,0,ВыборкаЗапроса.Прочее2);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;   
      Если ВыборкаЗапроса.Прочее3 <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = ?(СокрЛП(Константы.кск_Прочее3.Получить()) = "" , "Прочее 3",СокрЛП(Константы.кск_Прочее3.Получить()));
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Прочее3 = Null,0,ВыборкаЗапроса.Прочее3);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;   
      Если ВыборкаЗапроса.Прочее4 <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = ?(СокрЛП(Константы.кск_Прочее4.Получить()) = "" , "Прочее 4",СокрЛП(Константы.кск_Прочее4.Получить()));
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Прочее4 = Null,0,ВыборкаЗапроса.Прочее4);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;
      Если ВыборкаЗапроса.Прочее5 <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = ?(СокрЛП(Константы.кск_Прочее5.Получить()) = "" , "Прочее 5",СокрЛП(Константы.кск_Прочее5.Получить()));
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Прочее5 = Null,0,ВыборкаЗапроса.Прочее5);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;
      Если ВыборкаЗапроса.Прочее6 <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = ?(СокрЛП(Константы.кск_Прочее6.Получить()) = "" , "Прочее 6",СокрЛП(Константы.кск_Прочее6.Получить()));
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Прочее6 = Null,0,ВыборкаЗапроса.Прочее6);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;
      Если ВыборкаЗапроса.Перерасчет <> 0 Тогда
         ОбластьНачисления.Параметры.Начисления = "Перерасчет";
         ОбластьНачисления.Параметры.Сумма = ?(ВыборкаЗапроса.Перерасчет = Null,0,ВыборкаЗапроса.Перерасчет);
         ТабДокумент.Вывести(ОбластьНачисления);
      КонецЕсли;

Вопрос: как можно оптимизировать этот фрагмент кода, чтобы также просматривал все поля???

Dethmontt

Ну я бы функцию например написал такого вида:
Функция ПолучитьКонстанту(ИмяКонстанты,ВозвращаемыйРезультат = Неопределено)

      Константа = Константы[ИмяКонстанты].Получить();
Если ЗначениеЗаполнено(Константа) Тогда
Возврат Константа;
Иначе
Возврат ВозвращаемыйРезультат;
КонецЕсли;

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

Ну а дальше примерно так:
ОбластьНачисления.Параметры.Начисления = ПолучитьКонстанту("кск_Прочее1","Прочее 1");
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

Ну я бы функцию например написал такого вида:
Функция ПолучитьКонстанту(ИмяКонстанты,ВозвращаемыйРезультат = Неопределено)

      Константа = Константы[ИмяКонстанты].Получить();
Если ЗначениеЗаполнено(Константа) Тогда
Возврат Константа;
Иначе
Возврат ВозвращаемыйРезультат;
КонецЕсли;

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

Ну а дальше примерно так:
ОбластьНачисления.Параметры.Начисления = ПолучитьКонстанту("кск_Прочее1","Прочее 1");

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

Ну я бы функцию например написал такого вида:
Функция ПолучитьКонстанту(ИмяКонстанты,ВозвращаемыйРезультат = Неопределено)

      Константа = Константы[ИмяКонстанты].Получить();
Если ЗначениеЗаполнено(Константа) Тогда
Возврат Константа;
Иначе
Возврат ВозвращаемыйРезультат;
КонецЕсли;

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

Ну а дальше примерно так:
ОбластьНачисления.Параметры.Начисления = ПолучитьКонстанту("кск_Прочее1","Прочее 1");

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

Ну я бы функцию например написал такого вида:
Функция ПолучитьКонстанту(ИмяКонстанты,ВозвращаемыйРезультат = Неопределено)

      Константа = Константы"["ИмяКонстанты"]".Получить();
Если ЗначениеЗаполнено(Константа) Тогда
Возврат Константа;
Иначе
Возврат ВозвращаемыйРезультат;
КонецЕсли;

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

Ну а дальше примерно так:
ОбластьНачисления.Параметры.Начисления = ПолучитьКонстанту("кск_Прочее1","Прочее 1");

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

Только ковычки убери вот тут --- "["ИмяКонстанты"]".
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Хитман

Спасибо за совет! Можно так попробовать, но код то от этого не слишком то уменьшается....

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск