|
Таблица Значений в Запросе. | ☑ | ||
---|---|---|---|---|
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
|
Тему закрыть!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |