Имя: Пароль:
1C
Юмор
Прошу мнения экспертов.
0 Iven777
 
11.07.12
10:45
1. Стоит! Человек реально научился делать отчеты! 58% (7)
2. Немного подождать. 42% (5)
Всего мнений: 12

Добрый день. Есть программист, изучает полгода восьмерку (опыт работы в 7.7 - не менее шесть лет). Недавно сделал отчет: форма КО-3, реестр ПКО и РКО (в УПП такой нет по умолчанию). Вот такой код:

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

   // подготовим строку
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   
   // выполним запросы
   Выборка1 = Запрос1.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам );
   Выборка2 = Запрос2.Выполнить().Выбрать( ОбходРезультатаЗапроса.ПоГруппировкам );


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

Теперь человек просит задание посложнее. Вопрос экспертам -как вы думаете, стоит ли давать?
2 zak555
 
11.07.12
10:47
.

Немного подождать.
5 Error pro
 
11.07.12
10:48
Жестко.

Немного подождать.
13 Агент Инфостарта
 
11.07.12
10:50
(0) Приобщи его к пакетным запросам и купите уже книжки.

Немного подождать.
14 AaNnDdRrEeYy
 
11.07.12
10:52
дело даже не в коде, а в подходе, такие веши на скд делать надо.

Немного подождать.
16 SanGvin
 
11.07.12
10:57
жесть

Немного подождать.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс