Имя: Пароль:
1C
1С v8
Присоединить() шапку
0 PeaceDeath
 
15.03.13
12:52
Всем привет!!
проблема очередной раз с присоединением
прошу помочь...

ОбластьШапки            = Макет.ПолучитьОбласть("Шапка|ПерваяЧастьДопДеталей");
   ОбластьДеталей            = Макет.ПолучитьОбласть("Детали|ПерваяЧастьДопДеталей");    
   ОбластьДопДеталей      = Макет.ПолучитьОбласть("Детали|ДеталиДоп");
   ОбластьДинШап            = Макет.ПолучитьОбласть("Шапка|ДеталиДоп");

///затем идет запрос

ТабДок.Очистить();                                                    
   ТабДок.НачатьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьШапки);

   
   Пока ВыборкаДетали.Следующий() Цикл
       Для Каждого ЭлементаШапки из РезультатСтатус Цикл    
       ПараметрШапки = Новый Структура;
       ПараметрШапки.Вставить("Статья", ЭлементаШапки.СтатьяЗатрат);
       ПараметрШапки.Вставить("Сотрудник", ЭлементаШапки.Сотрудник);

   Если ПараметрШапки.Сотрудник = ВыборкаДетали.Сотрудник Тогда
       ОбластьДинШап.Параметры.СтатьяЗатрат = СокрЛП(ПараметрШапки.Статья);
       ТабДок.Присоединить(ОбластьДинШап);
////ВОТ ЗДЕСЬ ТАБДОК.ПРИСОЕДИНИТЬ(ОБЛАСТЬДИНШАПКИ)
   Иначе
       КонецЕсли;
   КонецЦикла;    

       
       Н=1;
       ОбластьДеталей.Параметры.Ном                =    Н;
       ОбластьДеталей.Параметры.Сотрудник            =    ВыборкаДетали.Сотрудник;
       ОбластьДеталей.Параметры.МестоНазначения    =    ВыборкаДетали.МестоНазначения;
       ОбластьДеталей.Параметры.Должность            =    ВыборкаДетали.Должность;
       ОбластьДеталей.Параметры.ДатаОтправки        =   Лев(ВыборкаДетали.ДатаОтправки, 10);
       ОбластьДеталей.Параметры.ДатаПрибытия        =   Лев(ВыборкаДетали.ДатаПрибытия, 10);
       ОбластьДеталей.Параметры.КоличествоДней        =    (ВыборкаДетали.ДатаПрибытия - ВыборкаДетали.ДатаОтправки)/60/60/24;
       ОбластьДеталей.Параметры.ЦельПоездки        =    ВыборкаДетали.ЦельПоездки;
       
       
       ТабДок.Вывести(ОбластьДеталей);

Для Каждого Элемент из РезультатСтатус Цикл
         Пар = Новый Структура;
         Пар.Вставить("Сотрудник", Элемент.Сотрудник);
         Пар.Вставить("Статья", Элемент.СтатьяЗатрат);
         Пар.Вставить("Сумма",  Элемент.СуммаФактическаяОборот);
         
        Если Пар.Сотрудник = ВыборкаДетали.Сотрудник Тогда
        ОбластьДопДеталей.Параметры.СтатьяЗатрат = СокрЛП(Пар.Статья.Name);
        ОбластьДинШап.Параметры.СтатьяЗатрат = СокрЛП(Пар.Статья.Name);
        ОбластьДопДеталей.Параметры.Сумма          = Пар.Сумма;
        ТабДок.Присоединить(ОбластьДопДеталей);
        Иначе
       
        КонецЕсли;
    КонецЦикла;
       Н=Н+1;
       КонецЦикла;
   
   ТабДок.ЗакончитьАвтогруппировкуСтрок();
1 PeaceDeath
 
15.03.13
12:56
Если закоментировать это

   //    Для Каждого ЭлементаШапки из РезультатСтатус Цикл    
   //    ПараметрШапки = Новый Структура;
   //    ПараметрШапки.Вставить("Статья", ЭлементаШапки.СтатьяЗатрат);
   //    ПараметрШапки.Вставить("Сотрудник", ЭлементаШапки.Сотрудник);

   //Если ПараметрШапки.Сотрудник = ВыборкаДетали.Сотрудник Тогда
   //    ОбластьДинШап.Параметры.СтатьяЗатрат = СокрЛП(ПараметрШапки.Статья);
   //    ТабДок.Присоединить(ОбластьДинШап);
   //Иначе
   //    КонецЕсли;
   //КонецЦикла;    

то получится след.
http://img13.imageshost.ru/img/2013/03/15/image_5142e3c5a5852.png

То есть в коде ниже проблем быть не должно.
а после того как я снимаю коммент  получаю это

http://img13.imageshost.ru/img/2013/03/15/image_5142e4a7f3e2e.png
2 Chikko
 
15.03.13
12:58
Потому что:
Синтаксис:

Присоединить(<Таблица>, <Уровень>, <ИмяГруппы>, <Открыта>)

Описание:

Присоединяет табличный документ к результирующему табличному документу, помещая его в следующей колонке правее самой правой выведенной колонки, начиная со строки, с которой выводился предыдущий табличный документ.

Используй "вывести".
3 PeaceDeath
 
15.03.13
13:00
4 PeaceDeath
 
15.03.13
13:03
http://img13.imageshost.ru/img/2013/03/15/image_5142e64595683.png

Вот так с методом Вывести((
5 Chikko
 
15.03.13
13:08
ой сори, не обратил внимание что там пересечение. ну так он и подцепляет к последней строке.
а что вообще получить планируется? длинный док со всеми статьями затрат?
6 cw014
 
15.03.13
13:10
Пипец структурированность кода
7 PeaceDeath
 
15.03.13
13:14
(5) Да
и если нет такой статьиЗатрат у данного сотрудника то просто empty@ то есть пустую строку.
8 cw014
 
15.03.13
13:16
(0) ///затем идет запрос

Где млин этот запрос?
9 PeaceDeath
 
15.03.13
13:16
(8)
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    ДанныеПоКомандировкамОбороты.Организация,
   |    ДанныеПоКомандировкамОбороты.Сотрудник,
   |    ДанныеПоКомандировкамОбороты.ДатаОтправки,
   |    ДанныеПоКомандировкамОбороты.ДатаПрибытия,
   |    ДанныеПоКомандировкамОбороты.МестоНазначения,
   |    ДанныеПоКомандировкамОбороты.Позиция КАК Должность,
   |    ДанныеПоКомандировкамОбороты.ЦельПоездки,
   |    СУММА(ДанныеПоКомандировкамОбороты.СуммаФактическаяОборот) КАК СуммаФактическаяОборот
   |ИЗ
   |    РегистрНакопления.ДанныеПоКомандировкам.Обороты(&НачПериод, &КонПериод, , ) КАК ДанныеПоКомандировкамОбороты
   |
   |СГРУППИРОВАТЬ ПО
   |    ДанныеПоКомандировкамОбороты.Сотрудник,
   |    ДанныеПоКомандировкамОбороты.Организация,
   |    ДанныеПоКомандировкамОбороты.ДатаОтправки,
   |    ДанныеПоКомандировкамОбороты.ДатаПрибытия,
   |    ДанныеПоКомандировкамОбороты.МестоНазначения,
   |    ДанныеПоКомандировкамОбороты.Позиция,
   |    ДанныеПоКомандировкамОбороты.ЦельПоездки";
   
   Запрос.УстановитьПараметр("НачПериод", ЭлементыФормы.НачПериод.Значение);
   Запрос.УстановитьПараметр("КонПериод", ЭлементыФормы.КонПериод.Значение);
   Результат = Запрос.Выполнить();
   
   РЗ = Результат.Выгрузить();
   ВыборкаДетали = Результат.Выбрать();
   
   
   Статья = Новый Запрос;
   Статья.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    СУММА(ДанныеПоКомандировкамОбороты.СуммаФактическаяОборот) КАК СуммаФактическаяОборот,
   |    ДанныеПоКомандировкамОбороты.СтатьяЗатрат,
   |    ДанныеПоКомандировкамОбороты.Сотрудник,
   |    ДанныеПоКомандировкамОбороты.Организация,
   |    ДанныеПоКомандировкамОбороты.ДатаОтправки,
   |    ДанныеПоКомандировкамОбороты.ДатаПрибытия,
   |    ДанныеПоКомандировкамОбороты.МестоНазначения
   |ИЗ
   |    РегистрНакопления.ДанныеПоКомандировкам.Обороты(&НачПериод, &КонПериод, , ) КАК ДанныеПоКомандировкамОбороты
   |
   |СГРУППИРОВАТЬ ПО
   |    ДанныеПоКомандировкамОбороты.Сотрудник,
   |    ДанныеПоКомандировкамОбороты.СтатьяЗатрат,
   |    ДанныеПоКомандировкамОбороты.Организация,
   |    ДанныеПоКомандировкамОбороты.ДатаПрибытия,
   |    ДанныеПоКомандировкамОбороты.ДатаОтправки,
   |    ДанныеПоКомандировкамОбороты.МестоНазначения";
   
   Статья.УстановитьПараметр("НачПериод", ЭлементыФормы.НачПериод.Значение);
   Статья.УстановитьПараметр("КонПериод", ЭлементыФормы.КонПериод.Значение);
   
   СтатьяРез = Статья.Выполнить().Выбрать();
   РезультатСтатус = Статья.Выполнить().Выгрузить();
10 cw014
 
15.03.13
13:16
И что такое РезультатСтатус?
11 cw014
 
15.03.13
13:17
??? А нафига два запроса?
12 PeaceDeath
 
15.03.13
13:17
Статьи по твоему для чего! (11)
13 PeaceDeath
 
15.03.13
13:18
ну ты сам понимаешь че говоришь?
в одном значение Статьи нет, во втором нужно все кроме Статьи
14 Chikko
 
15.03.13
13:24
О, де-то вчера была эта тема с запросами=)
15 PeaceDeath
 
15.03.13
13:25
(14) Да и благодаря  del123 Все суммы выходят как положено!
16 cw014
 
15.03.13
13:32
(15) Самое быстрое решение - разбить на два табличных поля, по оконцове приткнуть детали к основному общим чохом
17 PeaceDeath
 
15.03.13
13:32
ну так как быть с присоединением?
Может все статьи вытащить, а потом их заполнить??
18 Chikko
 
15.03.13
13:33
Ну так эта... Сначала надо шапку прицеплять, а потом под ней троки. Тока вот могут перепутаться=)
А строка "детали" одна походу будет. Переделай знач, сразу всю область деталидоп заполняй и присоединяй.
19 PeaceDeath
 
15.03.13
13:33
(16) ТОесть в коде что убирать??
или все в одной структуре сделать вы имели ввиду?
20 PeaceDeath
 
15.03.13
13:33
щаз попробую!! :)
21 cw014
 
15.03.13
13:37
(19) Я имею ввиду создай переменную
ТабДокДетали = Новый ТабличныйДокумент;

Заполняй паралельно с ТабДок, только в ТабДок присоединяй статьи, которых не было, а в ТабДокДетали выводи по строкам и статьям

В оконцове делай

ТабДок.Вывести(ТабДокДетали);
22 cw014
 
15.03.13
13:37
Только контролируй, что у тебя значение совпадает с положением этой статьи затрат в шапке
23 cw014
 
15.03.13
13:37
А вообще возьми построитель отчета или СКД - там все это элементарно
24 PeaceDeath
 
15.03.13
13:38
(21) Круто!! Благодарю =)