Имя: Пароль:
1C
1С v8
Запрос в 1с торговля 11
0 ТеньПустоты
 
16.04.12
16:04
Такие дела: Нужно вывести так
Дата1 сотрудник1,сотрудник2,сотрудник3
дата2 сотрудник1,сотрудник3, сотрудник6
дата3 сотрудник....

и так далее.
При условии что сотрудники у меня находятся в отдельной табличной части.
Вопрос конкретный: как вывести поле из вложенной таблицы при условии что сгруппировать нужно по дате, а она на форме документа а не в вложенной таблице.
1 МихаилМ
 
16.04.12
16:05
2 ilya_i
 
16.04.12
16:07
Выбрать "Дата1", "сотрудник1" ,"сотрудник2","сотрудник3"
Объединить
Выбрать "Дата2", "сотрудник1" ,"сотрудник3","сотрудник6"
Объединить
Выбрать "Дата3", "сотрудник...." ,"",""
3 ТеньПустоты
 
16.04.12
16:26
трололо идут на юх


В общем делаю так
ВЫБРАТЬ
   документ.Дата КАК Дата,
   документ.Исполнители.(
       Сотрудник
   )
ИЗ
   Документ КАК документ

УПОРЯДОЧИТЬ ПО
   Дата

выдает всё верно, но вот
дата1  сотрудник1
дата1  сотрудник2
дата2 сотрудник3
дата2 сотрудник4

А как подправить чтобы былло так

дата1 сотрудник1, сотрудник2...

вот в этом и вся проблема
4 ТеньПустоты
 
16.04.12
16:26
а да, там ещё не просто дата, а только день месяц год, без времени
5 Buster007
 
16.04.12
16:29
куда вывести?
6 ТеньПустоты
 
16.04.12
16:31
в отчет
7 ТеньПустоты
 
16.04.12
17:18
Задание почти готово, нужно только сделать так чтобы для каждой даты выводились все упомянутые в эту дату сотрудники, в одну строку, а не так чтобы в сколько сотрудников столько и строк...

Есть какие нибудь идеи?
8 МихаилМ
 
16.04.12
17:20
(7)
болезнь одинесника - путаете получение данных с представлением.
пользуйтесь скд.
9 Wobland
 
16.04.12
17:22
(7) итоги по сотруднику, в обходе собираешь строку представления
10 ТеньПустоты
 
17.04.12
02:39
(9) я вас не понял, объясните попроще пожалуста, чтобы прям как для чайника
11 ТеньПустоты
 
17.04.12
03:06
пилю так
ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(документ.Дата, ДЕНЬ) КАК дата,
   пРЕДСТАВЛЕНИЕ(документ.Исполнители.Сотрудник)
ИЗ
   Документ КАК документ
УПОРЯДОЧИТЬ ПО
   дата

проблема всё таже. для каждого сотрудника отдельную строчку требует.
12 perec1982
 
17.04.12
04:58
Делай через СКД. Е.Ю.Хрусталева - Разработка сложных отчетов в 1С_Предприятии 8.
Делаешь ТЗ, добавляешь колонку, обходом по ТЗ заполняешь ее как надо и выводишь данные ТЗ в отчет.
13 ТеньПустоты
 
17.04.12
12:14
По этой книжке и пытюсь делать! только не понимаю что есть обход по ТЗ
14 ТеньПустоты
 
17.04.12
14:13
Господа Уважаемые, объясните пожалуста как мне несколько сотрудников для одной даты засунуть в одну строку?? Ну очень прошу. Без подъ***ок!!!
15 ТеньПустоты
 
17.04.12
14:15
я понимаю что нужно всех сотрудников для одной даты засунуть в строку и вывести эту строку в таблицу. но как это реализовать?
16 ТеньПустоты
 
17.04.12
14:25
+
17 perec1982
 
18.04.12
07:27
Процедура Сформировать(Кнопка)
   
   НастрокаПоУмолчанию = КомпоновщикНастроек.ПолучитьНастройки();
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ...,
        ";
   
   ТЗ = Запрос.Выполнить().Выгрузить();

   Для Каждого СтрокаТЗ Из ТЗ Цикл
       
       СтрокаТЗ.сотрудник = "Сотрудник1, Сотрудник2, ...";
       
   КонецЦикла;
   
   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("тз",тз);
   
   СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
   НастрокаПоУмолчанию);
   
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,
   ВнешниеНаборыДанных);
   
   ТабДок = Новый ТабличныйДокумент;
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
                                   //КомпановкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ТабДок);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
   
   ЭлементыФормы.Результат.Очистить();
   ЭлементыФормы.Результат.Вывести(ТабДок);
   
КонецПроцедуры
18 perec1982
 
18.04.12
07:30
Все как в книге
19 ТеньПустоты
 
18.04.12
17:41
Что такое ТЗ? А вы уверены что будет работать?
20 ТеньПустоты
 
18.04.12
17:43
Да не правильно.

Для Каждого СтрокаТЗ Из ТЗ Цикл
       
       СтрокаТЗ.сотрудник = "Сотрудник1, Сотрудник2, ...";
       
   КонецЦикла;

Мы что же, все фамилии будем вручную присывать что ли? И как в цикле будет определено сколько, и какисе сотрудники должны быть запилины в строку?
21 Undefined
 
18.04.12
17:51
количество сотрудников в одном документе известно заранее? или хотябы максимальное количество?
22 ТеньПустоты
 
18.04.12
18:03
Смотри какая фишка. Есть Документ Заявка клиента. Там есть дата и внизу таблица
1       васяПупкин        сделал тототото
2       пупкаВасин        сделал  вот то и это
3       петявасечкин      сделал всё


Вот в запросе у меня вот так вот

дата1      васяпупкин
дата1      пупкаВасин
дата1      петявасечкин



А я спрашиваю у вас что мне сделат ьчтобы было во так:
дата1    васяпупкин, пупкаВасин,ПетяВасечкин



Только смотри я писал код прямо в скд.

8.2 торговля
23 ТеньПустоты
 
18.04.12
18:26
Господа и дамы, очень ннада сделать
24 GoldenCalf
 
18.04.12
18:44
Для начала, что за документ?
25 ТеньПустоты
 
18.04.12
19:01
Заявка Клиента
26 DrHiHi
 
18.04.12
19:04
Никого не слушай %))
.... как вариант можно в СКД создать таблицу типа

дата  сотрудник    номерпп

Дата1 сотрудник1   1
Дата1 сотрудник2   2
Дата1 сотрудник3   3
дата2 сотрудник1   1
дата2 сотрудник3   2
дата2 сотрудник6   3
дата3 сотрудник8   1

а потом в сделать группировку колонок по колонке "номерпп"
и у тебя в итоге получиться таблица

дата   1            2            3
дата1  сотрудник1   сотрудник2   сотрудник3
дата2  сотрудник1   сотрудник3   сотрудник6
дата3  сотрудник8

если тебе такая таблица нужна ;))
27 ТеньПустоты
 
18.04.12
19:08
дата   1            2            3
дата1  сотрудник1   сотрудник2   сотрудник3
дата2  сотрудник1   сотрудник3   сотрудник6
дата3  сотрудник8
сотрудник1 сотрудник2 сотрудник3 должны быть в одной ячейке.
И главное! сотрудники у меня в вложенной таблице! поэтому группировки быт ьне может
28 DrHiHi
 
18.04.12
19:11
(27) если захочешь, то получиться...
если не получиться, то напишешь в аську... помогу
29 perec1982
 
19.04.12
02:21
(20) Все правильно. То что ты хочешь только так и реализуется. Язык запросов пока не может реализовать такие поля. Дам тебе всю процедуру.

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

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

   КонецЦикла;
   
       //Здесь тупо копи пасти

   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("тз",тз);
   
   СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
   //Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
   НастрокаПоУмолчанию);
   
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,
   ВнешниеНаборыДанных);
   
   ТабДок = Новый ТабличныйДокумент;
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
                                   //КомпановкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ТабДок);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
   
   ЭлементыФормы.Результат.Очистить();
   ЭлементыФормы.Результат.Вывести(ТабДок);
   
КонецПроцедуры

Мог ошибиться с запросами т.к. не видел конфу.
Работает отменно. Но не очень быстро т.к. в цикле выполняем запрос. Но из этой ж... выхода нет.