Имя: Пароль:
1C
1С v8
помощь оптимизация кода
0 BujiMuji
 
04.11.12
08:20
Привет всем подскажите как можно оптимизировать этот код

&НаКлиенте
Процедура Сформировать(Команда)
   ТабДок = Новый ТабличныйДокумент;
   ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
   Отчет(ТабДок, Дата);
   //Состояние("1 - месяц");
   Оформления(ТабДок, Дата);
   
   ТабДок.ОтображатьСетку=Ложь;
   ТабДок.Показать();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура Отчет(ТабДок, Дата)
   Макет = ПолучитьОбщийМакет("РАТС");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   Шапка.Параметры.Йил = Год(Дата);
   //Шапка.Параметры
   ТабДок.Вывести(Шапка);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура Оформления(ТабДок, Дата)
   Макет = ПолучитьОбщийМакет("РАТС");
   Элемент = Макет.ПолучитьОбласть("Элемент");
   Тел = 0;
   Мин = 0;
   Тел = Телефон(Дата,"05");
   Мин = МинутОбщ(Дата, "05");
   Элемент.Параметры.Ой = Формат(Дата,"ДФ=""ММММ""");
   
   Элемент.Параметры.АпАх = Тел;
   Элемент.Параметры.АхМин = Мин;
   Попытка
       Элемент.Параметры.УрМинАх = Формат(Мин/Тел, "ЧДЦ=2");
   Исключение
   КонецПопытки;
   
   Тел = 0;
   Мин = 0;
   Тел = Телефон(Дата,"04");
   Мин = МинутОбщ(Дата, "04");
   
   Элемент.Параметры.АпХоз = Тел;
   Элемент.Параметры.ХозМин = Мин;
   Попытка
       Элемент.Параметры.УрМинХоз = Формат(Мин/Тел, "ЧДЦ=2");
   Исключение
   КонецПопытки;
   
   Тел = 0;
   Мин = 0;    
   Тел = Телефон(Дата,"07");
   Мин = МинутОбщ(Дата, "07");
   
   Элемент.Параметры.АпТак = Тел;
   Элемент.Параметры.ТакМин = Мин;
   Попытка
       Элемент.Параметры.УрМинТак = Формат(Мин/Тел, "ЧДЦ=2");
   Исключение
   КонецПопытки;
   
   Тел = 0;
   Мин = 0;
   Тел = ТелефонБюд(Дата);
   Мин = МинутОбщБюд(Дата);
   
   Элемент.Параметры.АпБюд = Тел;
   Элемент.Параметры.БюдМин = Мин;
   Попытка
       Элемент.Параметры.УрМинБюд = Формат(Мин/Тел, "ЧДЦ=2");
   Исключение
   КонецПопытки;
   
   Элемент.Параметры.А60 = ЭлементТип(Дата, 1, 60, "05");
   Элемент.Параметры.Х60 = ЭлементТип(Дата, 1, 60, "04");
   Элемент.Параметры.Б60 = ЭлементБюд(Дата, 1, 60);
   Элемент.Параметры.Т60 = ЭлементТип(Дата, 1, 60, "07");

   Элемент.Параметры.А120 = ЭлементТип(Дата, 60, 120, "05");
   Элемент.Параметры.Х120 = ЭлементТип(Дата, 60, 120, "04");
   Элемент.Параметры.Б120 = ЭлементБюд(Дата, 60, 120);
   Элемент.Параметры.Т120 = ЭлементТип(Дата, 60, 120, "07");
   
   Элемент.Параметры.А180 = ЭлементТип(Дата, 120, 180, "05");
   Элемент.Параметры.Х180 = ЭлементТип(Дата, 120, 180, "04");
   Элемент.Параметры.Б180 = ЭлементБюд(Дата, 120, 180);
   Элемент.Параметры.Т180 = ЭлементТип(Дата, 120, 180, "07");
   
   Элемент.Параметры.А240 = ЭлементТип(Дата, 180, 240, "05");
   Элемент.Параметры.Х240 = ЭлементТип(Дата, 180, 240, "04");
   Элемент.Параметры.Б240 = ЭлементБюд(Дата, 180, 240);
   Элемент.Параметры.Т240 = ЭлементТип(Дата, 180, 240, "07");
   
   Элемент.Параметры.А300 = ЭлементТип(Дата, 240, 300, "05");
   Элемент.Параметры.Х300 = ЭлементТип(Дата, 240, 300, "04");
   Элемент.Параметры.Б300 = ЭлементБюд(Дата, 240, 300);
   Элемент.Параметры.Т300 = ЭлементТип(Дата, 240, 300, "07");
   
   Элемент.Параметры.А360 = ЭлементТип(Дата, 300, 360, "05");
   Элемент.Параметры.Х360 = ЭлементТип(Дата, 300, 360, "04");
   Элемент.Параметры.Б360 = ЭлементБюд(Дата, 300, 360);
   Элемент.Параметры.Т360 = ЭлементТип(Дата, 300, 360, "07");
   
   Элемент.Параметры.А420 = ЭлементТип(Дата, 360, 420, "05");
   Элемент.Параметры.Х420 = ЭлементТип(Дата, 360, 420, "04");
   Элемент.Параметры.Б420 = ЭлементБюд(Дата, 360, 420);
   Элемент.Параметры.Т420 = ЭлементТип(Дата, 360, 420, "07");
   
   Элемент.Параметры.А480 = ЭлементТип(Дата, 420, 480, "05");
   Элемент.Параметры.Х480 = ЭлементТип(Дата, 420, 480, "04");
   Элемент.Параметры.Б480 = ЭлементБюд(Дата, 420, 480);
   Элемент.Параметры.Т480 = ЭлементТип(Дата, 420, 480, "07");
   
   Элемент.Параметры.А540 = ЭлементТип(Дата, 480, 540, "05");
   Элемент.Параметры.Х540 = ЭлементТип(Дата, 480, 540, "04");
   Элемент.Параметры.Б540 = ЭлементБюд(Дата, 480, 540);
   Элемент.Параметры.Т540 = ЭлементТип(Дата, 480, 540, "07");
   
   Элемент.Параметры.А600 = ЭлементТип(Дата, 540, 600, "05");
   Элемент.Параметры.Х600 = ЭлементТип(Дата, 540, 600, "04");
   Элемент.Параметры.Б600 = ЭлементБюд(Дата, 540, 600);
   Элемент.Параметры.Т600 = ЭлементТип(Дата, 540, 600, "07");
   
   Элемент.Параметры.А660 = ЭлементТип(Дата, 600, 660, "05");
   Элемент.Параметры.Х660 = ЭлементТип(Дата, 600, 660, "04");
   Элемент.Параметры.Б660 = ЭлементБюд(Дата, 600, 660);
   Элемент.Параметры.Т660 = ЭлементТип(Дата, 600, 660, "07");
   
   Элемент.Параметры.А720 = ЭлементТип(Дата, 660, 720, "05");
   Элемент.Параметры.Х720 = ЭлементТип(Дата, 660, 720, "04");
   Элемент.Параметры.Б720 = ЭлементБюд(Дата, 660, 720);
   Элемент.Параметры.Т720 = ЭлементТип(Дата, 660, 720, "07");

   Элемент.Параметры.А780 = ЭлементТип(Дата, 720, 780, "05");
   Элемент.Параметры.Х780 = ЭлементТип(Дата, 720, 780, "04");
   Элемент.Параметры.Б780 = ЭлементБюд(Дата, 720, 780);
   Элемент.Параметры.Т780 = ЭлементТип(Дата, 720, 780, "07");
   
   Элемент.Параметры.А840 = ЭлементТип(Дата, 780, 840, "05");
   Элемент.Параметры.Х840 = ЭлементТип(Дата, 780, 840, "04");
   Элемент.Параметры.Б840 = ЭлементБюд(Дата, 780, 840);
   Элемент.Параметры.Т840 = ЭлементТип(Дата, 780, 840, "07");
   
   Элемент.Параметры.А900 = ЭлементТип(Дата, 840, 900, "05");
   Элемент.Параметры.Х900 = ЭлементТип(Дата, 840, 900, "04");
   Элемент.Параметры.Б900 = ЭлементБюд(Дата, 840, 900);
   Элемент.Параметры.Т900 = ЭлементТип(Дата, 840, 900, "07");
   
   Элемент.Параметры.А960 = ЭлементТип(Дата, 900, 960, "05");
   Элемент.Параметры.Х960 = ЭлементТип(Дата, 900, 960, "04");
   Элемент.Параметры.Б960 = ЭлементБюд(Дата, 900, 960);
   Элемент.Параметры.Т960 = ЭлементТип(Дата, 900, 960, "07");
   
   Элемент.Параметры.А1020 = ЭлементТип(Дата, 960, 1020, "05");
   Элемент.Параметры.Х1020 = ЭлементТип(Дата, 960, 1020, "04");
   Элемент.Параметры.Б1020 = ЭлементБюд(Дата, 960, 1020);
   Элемент.Параметры.Т1020 = ЭлементТип(Дата, 960, 1020, "07");
   
   Элемент.Параметры.А1080 = ЭлементТип(Дата, 1020, 1080, "05");
   Элемент.Параметры.Х1080 = ЭлементТип(Дата, 1020, 1080, "04");
   Элемент.Параметры.Б1080 = ЭлементБюд(Дата, 1020, 1080);
   Элемент.Параметры.Т1080 = ЭлементТип(Дата, 1020, 1080, "07");
   
   Элемент.Параметры.А1140 = ЭлементТип(Дата, 1080, 1140, "05");
   Элемент.Параметры.Х1140 = ЭлементТип(Дата, 1080, 1140, "04");
   Элемент.Параметры.Б1140 = ЭлементБюд(Дата, 1080, 1140);
   Элемент.Параметры.Т1140 = ЭлементТип(Дата, 1080, 1140, "07");
   
   Элемент.Параметры.А1200 = ЭлементТип(Дата, 1140, 1200, "05");
   Элемент.Параметры.Х1200 = ЭлементТип(Дата, 1140, 1200, "04");
   Элемент.Параметры.Б1200 = ЭлементБюд(Дата, 1140, 1200);
   Элемент.Параметры.Т1200 = ЭлементТип(Дата, 1140, 1200, "07");
   
   Элемент.Параметры.А1260 = ЭлементТип(Дата, 1120, 1260, "05");
   Элемент.Параметры.Х1260 = ЭлементТип(Дата, 1120, 1260, "04");
   Элемент.Параметры.Б1260 = ЭлементБюд(Дата, 1120, 1260);
   Элемент.Параметры.Т1260 = ЭлементТип(Дата, 1120, 1260, "07");
   
   Элемент.Параметры.А1320 = ЭлементТип(Дата, 1260, 1320, "05");
   Элемент.Параметры.Х1320 = ЭлементТип(Дата, 1260, 1320, "04");
   Элемент.Параметры.Б1320 = ЭлементБюд(Дата, 1260, 1320);
   Элемент.Параметры.Т1320 = ЭлементТип(Дата, 1260, 1320, "07");
   
   Элемент.Параметры.А1380 = ЭлементТип(Дата, 1320, 1380, "05");
   Элемент.Параметры.Х1380 = ЭлементТип(Дата, 1320, 1380, "04");
   Элемент.Параметры.Б1380 = ЭлементБюд(Дата, 1320, 1380);
   Элемент.Параметры.Т1380 = ЭлементТип(Дата, 1320, 1380, "07");
   
   Элемент.Параметры.А1440 = ЭлементТип(Дата, 1380, 1440, "05");
   Элемент.Параметры.Х1440 = ЭлементТип(Дата, 1380, 1440, "04");
   Элемент.Параметры.Б1440 = ЭлементБюд(Дата, 1380, 1440);
   Элемент.Параметры.Т1440 = ЭлементТип(Дата, 1380, 1440, "07");
   
   Элемент.Параметры.А1500 = ЭлементТип(Дата, 1400, 1500, "05");
   Элемент.Параметры.Х1500 = ЭлементТип(Дата, 1400, 1500, "04");
   Элемент.Параметры.Б1500 = ЭлементБюд(Дата, 1400, 1500);
   Элемент.Параметры.Т1500 = ЭлементТип(Дата, 1400, 1500, "07");
   
   Элемент.Параметры.А1560 = ЭлементТип(Дата, 1500, 1560, "05");
   Элемент.Параметры.Х1560 = ЭлементТип(Дата, 1500, 1560, "04");
   Элемент.Параметры.Б1560 = ЭлементБюд(Дата, 1500, 1560);
   Элемент.Параметры.Т1560 = ЭлементТип(Дата, 1500, 1560, "07");
   
   Элемент.Параметры.А1561 = ЭлементТип(Дата, 1560, 9000, "05");
   Элемент.Параметры.Х1561 = ЭлементТип(Дата, 1560, 9000, "04");
   Элемент.Параметры.Б1561 = ЭлементБюд(Дата, 1560, 9000);
   Элемент.Параметры.Т1561 = ЭлементТип(Дата, 1560, 9000, "07");
   
   ТабДок.Вывести(Элемент);
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ЭлементБюд(Дата, От, До)
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Дата1", НачалоМесяца(Дата));
   Запрос.УстановитьПараметр("Дата2", КонецМесяца(Дата));
   Запрос.УстановитьПараметр("От", От);
   Запрос.УстановитьПараметр("До", До);
   
   ТекстЗапроса = "
                   |ВЫБРАТЬ
                   |    КОЛИЧЕСТВО(Итог.НомерАбонента) КАК Сумма,
                   |    СУММА(Итог.Минут) КАК Минут
                   |ИЗ
                   |(
                   |ВЫБРАТЬ
                   |    АбонентА КАК НомерАбонента,
                   |    СУММА(Минут) КАК Минут    
                   |ИЗ
                   |    РегистрНакопления.УстановкаСчетчик
                   |ГДЕ
                   |    АбонентА.Тип.Код=""02"" ИЛИ АбонентА.Тип.Код=""03"" ИЛИ АбонентА.Тип.Код=""01""
                   |    И Период МЕЖДУ &Дата1 И &Дата2
                   |СГРУППИРОВАТЬ ПО
                   |    АбонентА) КАК Итог
                   |ГДЕ
                   |    Итог.Минут >= &От И Итог.Минут < &До";
   
   Запрос.Текст = ТекстЗапроса;
   
   РезультатЗапроса = Запрос.Выполнить();
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий()>0 Цикл
       Возврат Выборка.Сумма;
   КонецЦикла;
КонецФункции

&НаСервереБезКонтекста
Функция МинутОбщ(Дата, Тип)
       
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Тип", Тип);
   Запрос.УстановитьПараметр("Дата1", НачалоМесяца(Дата));
   Запрос.УстановитьПараметр("Дата2", КонецМесяца(Дата));
   
   ТекстЗапроса = "
                   |ВЫБРАТЬ
                   |    КОЛИЧЕСТВО(Итог.НомерАбонента) КАК Сумма,
                   |    СУММА(Итог.Минут) КАК Минут
                   |ИЗ
                   |(
                   |ВЫБРАТЬ
                   |    АбонентА КАК НомерАбонента,
                   |    СУММА(Минут) КАК Минут    
                   |ИЗ
                   |    РегистрНакопления.УстановкаСчетчик
                   |ГДЕ
                   |    АбонентА.Тип.Код=&Тип
                   |    И Период МЕЖДУ &Дата1 И &Дата2
                   |СГРУППИРОВАТЬ ПО
                   |    АбонентА) КАК Итог";
   
   Запрос.Текст = ТекстЗапроса;
   
   РезультатЗапроса = Запрос.Выполнить();
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий()>0 Цикл
       Возврат Выборка.Минут;
   КонецЦикла;
   
КонецФункции

&НаСервереБезКонтекста
Функция МинутОбщБюд(Дата)
       
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Дата1", НачалоМесяца(Дата));
   Запрос.УстановитьПараметр("Дата2", КонецМесяца(Дата));
   
   ТекстЗапроса = "
                   |ВЫБРАТЬ
                   |    КОЛИЧЕСТВО(Итог.НомерАбонента) КАК Сумма,
                   |    СУММА(Итог.Минут) КАК Минут
                   |ИЗ
                   |(
                   |ВЫБРАТЬ
                   |    АбонентА КАК НомерАбонента,
                   |    СУММА(Минут) КАК Минут    
                   |ИЗ
                   |    РегистрНакопления.УстановкаСчетчик
                   |ГДЕ
                   |    АбонентА.Тип.Код=""01"" ИЛИ АбонентА.Тип.Код=""02"" ИЛИ АбонентА.Тип.Код=""03""
                   |    И Период МЕЖДУ &Дата1 И &Дата2
                   |СГРУППИРОВАТЬ ПО
                   |    АбонентА) КАК Итог";
   
   Запрос.Текст = ТекстЗапроса;
   
   РезультатЗапроса = Запрос.Выполнить();
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий()>0 Цикл
       Возврат Выборка.Минут;
   КонецЦикла;
   
КонецФункции


&НаСервереБезКонтекста
Функция ТелефонБюд(Дата)
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Дата1", НачалоМесяца(Дата));
   Запрос.УстановитьПараметр("Дата2", КонецМесяца(Дата));
   
   ТекстЗапроса = "
                   |ВЫБРАТЬ
                   |    КОЛИЧЕСТВО(Итог.НомерАбонента) КАК Сумма,
                   |    СУММА(Итог.Минут) КАК Минут
                   |ИЗ
                   |(
                   |ВЫБРАТЬ
                   |    АбонентА КАК НомерАбонента,
                   |    СУММА(Минут) КАК Минут    
                   |ИЗ
                   |    РегистрНакопления.УстановкаСчетчик
                   |ГДЕ
                   |    АбонентА.Тип.Код=""01"" ИЛИ АбонентА.Тип.Код=""02"" ИЛИ АбонентА.Тип.Код=""03""
                   |    И Период МЕЖДУ &Дата1 И &Дата2
                   |СГРУППИРОВАТЬ ПО
                   |    АбонентА) КАК Итог";
   
   Запрос.Текст = ТекстЗапроса;
   
   РезультатЗапроса = Запрос.Выполнить();
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий()>0 Цикл
       Возврат Выборка.Сумма;
   КонецЦикла;
КонецФункции


&НаСервереБезКонтекста
Функция Телефон(Дата, Тип)
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Тип", Тип);
   Запрос.УстановитьПараметр("Дата1", НачалоМесяца(Дата));
   Запрос.УстановитьПараметр("Дата2", КонецМесяца(Дата));
   
   ТекстЗапроса = "
                   |ВЫБРАТЬ
                   |    КОЛИЧЕСТВО(Итог.НомерАбонента) КАК Сумма,
                   |    СУММА(Итог.Минут) КАК Минут
                   |ИЗ
                   |(
                   |ВЫБРАТЬ
                   |    АбонентА КАК НомерАбонента,
                   |    СУММА(Минут) КАК Минут    
                   |ИЗ
                   |    РегистрНакопления.УстановкаСчетчик
                   |ГДЕ
                   |    АбонентА.Тип.Код=&Тип
                   |    И Период МЕЖДУ &Дата1 И &Дата2
                   |СГРУППИРОВАТЬ ПО
                   |    АбонентА) КАК Итог";
   
   Запрос.Текст = ТекстЗапроса;
   
   РезультатЗапроса = Запрос.Выполнить();
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий()>0 Цикл
       Возврат Выборка.Сумма;
   КонецЦикла;
КонецФункции
1 Wobland
 
04.11.12
08:26
Пока Выборка.Следующий()>0 Цикл
       Возврат Выборка.Сумма;
   КонецЦикла;

чур меня
2 osa1C
 
04.11.12
08:27
(0) Сколько?
3 Wobland
 
04.11.12
08:28
не, я это не осилю, уж извини. тут не код, тут голову нужно на место ставить
4 МихаилМ
 
04.11.12
10:07
обругать можно любой код.
поэтому я на форум и не привожу код.

но давненько я не видел живого "индусского" кода.

как Вам не лень было писать
"
  Элемент.Параметры.А60 =
  ...
  Элемент.Параметры.Т1561 =
"

.
Или это Ваше первое "творение" в области программирования?

про отимизацию говорить рано.
в коде куча несуразиц, грозящих ошибками.

Репетитора наймите.
5 Wobland
 
04.11.12
10:16
(4) это ещё что..
http://code-wtf.livejournal.com/160720.html
6 H A D G E H O G s
 
04.11.12
11:15
(4) Скажу больше - на форуме ты не привел пока ни одного дельного совета. Сама скромность.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс