Имя: Пароль:
1C
1С v8
Таблица Значений в Запросе.
,
0 PeaceDeath
 
13.03.13
16:57
Доброго времени суток.
Прошу помочь, не понимаю как решить задачку. Новичек.

Есть простой макет который формирует данные по командировкам.                                                           ДинТабДоп
                                                                                                             СтатьяЗатрат     СтатьяЗатрат
Шапка |----№ | Traveler | Destination  | Position    | Duration of visit (days) |    Purpose of visit  | Оплата Труда     Командировочные расходы
ДинТаб|----1 |Петров Н.Н| Канада       | командировка|  колво дней 375          |   тест                  | 1,200,000        700,000

Здесь понятное дело что путешественник строка динамичная. СтатьяЗатрат тоже.
Проблема заключается в том что у каждого будут свои статьи затрат и разные данные.

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

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


Пока РезультатСтатей.Следующий() Цикл
       

       Статья        = РезультатСтатей.СтатьяЗатрат.Name;
       НоваяСтатья = СокрП(Статья);                              
       РЗ.Колонки.Добавить(СтрЗаменить(НоваяСтатья," ","_"), Новый ОписаниеТипов("Число"));

       
   КонецЦикла;

Для каждого стр из РЗПолный Цикл
       Для Каждого стр2 из РЗ Цикл
           Для к = 1 по РЗ.Колонки.Количество() цикл
               Если стр.Сотрудник.Наименование = стр2.Сотрудник.Наименование и стр.ЦельПоездки = стр2.ЦельПоездки  Тогда
                    Сообщить("Совпадает");


////Здесь я незнаю как быть
                   Если к > РЗ.Колонки.Количество() Тогда
                       
////Здесь я незнаю как быть    
               Сообщить("Записей больше");
                       
                   КонецЕсли;
                   
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   
   ОбластьЗаголовок        = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал            = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы    = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы    = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
   ОбластьДопДеталей        = Макет.ПолучитьОбласть("ШапкаТаблицы | ДеталиДоп");
   
   ТабДок.Очистить();
       
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.Вывести(ОбластьШапкаТаблицы);
   ТабДок.НачатьАвтогруппировкуСтрок();

н = 1;
   Пока ВыборкаДетали.Следующий() Цикл
       
       
       
       ОбластьДетальныхЗаписей.Параметры.Ном = н;
       н = н +1;
       ОбластьДетальныхЗаписей.Параметры.ДатаОтправки        =   Лев(ВыборкаДетали.ДатаОтправки, 10);
       ОбластьДетальныхЗаписей.Параметры.ДатаПрибытия        =   Лев(ВыборкаДетали.ДатаПрибытия, 10);
       
       
       ОбластьДетальныхЗаписей.Параметры.Сотрудник            =   ВыборкаДетали.Сотрудник;
       ОбластьДетальныхЗаписей.Параметры.Должность            =   ВыборкаДетали.Должность;
       ОбластьДетальныхЗаписей.Параметры.МестоНазначения   =   ВыборкаДетали.МестоНазначения;
       
       ОбластьДетальныхЗаписей.Параметры.КоличествоДней    =    (ВыборкаДетали.ДатаПрибытия - ВыборкаДетали.ДатаОтправки)/60/60/24;
       
       ОбластьДетальныхЗаписей.Параметры.ЦельПоездки        =    ВыборкаДетали.ЦельПоездки;
       
       //ОбластьДетальныхЗаписей.Параметры.Сумма                =   ВыборкаДетали.СуммаФактическаяОборот;
       //ОбластьШапкаТаблицы.Параметры.СтатьяЗатрат            =   ВыборкаДетали.СтатьяЗатрат;
       ОбластьДопДеталей.Присоединить(ОбластьШапкаТаблицы);
       
       ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
       
       
   КонецЦикла;
   
   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);
3 Господин ПЖ
 
13.03.13
16:59
>Здесь понятное дело что путешественник строка динамичная

очень понятное...
4 PeaceDeath
 
13.03.13
16:59
Это вот такое у меня тестовое задание!!
какое поле и с чем сравнивать.. подскажите
5 elCust
 
13.03.13
17:01
Подумайте, оно Вам надо?
6 Лефмихалыч
 
13.03.13
17:01
7 samozvanec
 
13.03.13
17:23
феерично

Результат = Запрос.Выполнить();
РЗ = Запрос.Выполнить().Выгрузить();
ВыборкаДетали = Результат.Выбрать();
8 samozvanec
 
13.03.13
17:24
млин да там все феерично)
9 Maxus43
 
13.03.13
17:26
(0) задачу опиши понятней, тогда помогут...
10 samozvanec
 
13.03.13
17:27
(0) для начинающих есть хорошая практика - понять, что делает каждая строчка, которую ты написал. после этого хорошо бы понять, зачем ты строчку написал. вот так построчно попробуй разбери свой код, многое выяснится
11 PeaceDeath
 
14.03.13
08:22
распишу все что тут есть.
Заполняется макет, так как я описал выше.
1ый запрос - выводит все необходимые поля кроме "СтатьиЗатрат"
Далее создается новая Таблица значений который заполняется в цикле 2ым запросом.

Далее код: Для каждого стр из РЗПолный Цикл
       Для Каждого стр2 из РЗ Цикл
           Для к = 1 по РЗ.Колонки.Количество() цикл
               Если стр.Сотрудник.Наименование = стр2.Сотрудник.Наименование и стр.ЦельПоездки = стр2.ЦельПоездки  Тогда
                    Сообщить("Совпадает");


////Здесь я незнаю как быть

                   Если к > РЗ.Колонки.Количество() Тогда
                       
////Здесь я незнаю как быть    

               Сообщить("Записей больше");
                       
                   КонецЕсли;
                   
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

Который должен будет сравнить первый запрос со вторым и если  условия совпадают то табЗначений заполнится уже дополнительными параметром - суммаЗатрат. Остальное вывод в макет.
12 PeaceDeath
 
14.03.13
08:23
(5) Надо!
13 PeaceDeath
 
14.03.13
08:24
(7) Выборкой гоняю по циклю и заполняю ТЗ
А выгрузкой я этот запрос заполняю полученными колонками.
14 cw014
 
14.03.13
08:27
А можно я не буду этот код смотреть? А то с утра валерьянки не купил
15 YHVVH
 
14.03.13
08:28
(0) грустно все это , мне кажется ты тестовое задания провалил.
16 PeaceDeath
 
14.03.13
08:31
Пока что кроме помощи я вижу как вы тут Умничаете!
17 PeaceDeath
 
14.03.13
08:48
Неважно как я написал код.
Просто помогите с условием.
18 vicof
 
14.03.13
08:54
(17) Напиши свою задачу как для бабы Дуни.
Типа: У меня есть мешок картошки. Я хочу расфасовать картошку из него на разные полки холодильника и увидеть в отчете, сколько у меня картошки на каждой полке. Но есть проблема: я не могу пропихнуть картошину на четвертую полку, в чем может быть проблема?
19 YHVVH
 
14.03.13
08:58
(17) попробуй убрать комменты в коде, должно заработать
20 olegves
 
14.03.13
09:06
(2) Первый запрос убрать. В о втором используй Итоги с группировкой первого запроса.
Выборка по иерархии.
Дальше сам включай свою голову
21 PeaceDeath
 
14.03.13
11:13
Таким методом я конечно понимаю что изобрел колесо, но
в первом запросе у меня теперь есть "Статьи" но еще с пустым значением..
как мне сравнить его со вторым запросом и вбить в него значения?
22 PeaceDeath
 
14.03.13
11:16
23 pessok
 
14.03.13
11:18
почему использовать левое соединение?
з.ы. код не осилил
24 pessok
 
14.03.13
11:18
+(23) почему БЫ НЕ использовать
25 PeaceDeath
 
14.03.13
11:51
(19) и ты себя прогером зовешь?
26 PeaceDeath
 
14.03.13
11:52
Тему закрыть!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.