![]() |
|
v7: Запрос и вывод остатков на период времени с разбиением по дням | ☑ | ||
---|---|---|---|---|
0
san4ez1008
22.08.16
✎
06:41
|
Здравствуйте,форумчане! Написал обработку для вывода остатков из регистра с группировкой по наименованию и дням. Теперь нужно дни разместить в разных столбцах и вывести остатки соответственно в каждый столбик. Помогите,пожалуйста, что я тут не так делаю(( Уже всю голову сломал с методами ПрисоединитьСекцию и ВывестиСекцию(
//******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Склад = Регистр.ОстаткиТМЦ.Склад; |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод; |Количество = Регистр.ОстаткиТМЦ.Количество; |Фирмы = Справочник.Фирмы.ТекущийЭлемент; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура упорядочить по Номенклатура.Наименование; |Группировка День; |Условие(Номенклатура в ВыбНоменклатура); |Условие(Склад в ВыбСклад); |Условие(Фирмы в ВыбФирмы); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Номенклатура Таб.ВывестиСекцию("Номенклатура"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей День Таб.ВывестиСекцию("День"); КонецЦикла; КонецЦикла; // Заполнение полей "Итого" Таб.ВывестиСекцию("Итого"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
1
kosts
22.08.16
✎
07:08
|
(0) Для группировки по дате , насколько помню, надо использовать ключевое слово ВСЕ. Что бы запрос вернул равное количество дат для разной номенклатуры и можно было простым образом вывести горизонтально.
Лучше поищи готовые примеры, по теме Кросс таблицы |
|||
2
Злопчинский
22.08.16
✎
10:23
|
сформируй по запросу плоскую ТЗ и подсунь сюда - само выведеткак надо
http://catalog.mista.ru/public/14794/ |
|||
3
san4ez1008
23.08.16
✎
02:02
|
Мне вообще сказали, что одним запросом тут не обойтись, нужно два одинаковых, но группировку сначала по наименованию, а затем по дням, и проще это вывести в таблицу значений.. Как это реализовать?
|
|||
4
Это_mike
23.08.16
✎
07:40
|
(3) тебя обманули
|
|||
5
san4ez1008
23.08.16
✎
09:55
|
(4) а если так?
//******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Склад = Регистр.ОстаткиТМЦ.Склад; |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод; |Количество = Регистр.ОстаткиТМЦ.Количество; |Фирмы = Справочник.Фирмы.ТекущийЭлемент; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура упорядочить по Номенклатура.Наименование; |Группировка День; |Условие(Номенклатура в ВыбНоменклатура); |Условие(Склад в ВыбСклад); |Условие(Фирмы в ВыбФирмы); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТЗ); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица1"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); //ТЗ.ВыбратьСтроку(); Ном=""; Для N = 1 По ТЗ.КоличествоСтрок() Цикл //Ном = ТЗ.ПолучитьСтрокуПоНомеру(N); Номенклатура = ТЗ.ПолучитьЗначение(N,"Номенклатура"); Остаток = ТЗ.ПолучитьЗначение(N,"КоличествоКонОст"); //Если Ном <> Таб.ПолучитьСекцию("Номенклатура") тогда Если Ном <> Номенклатура тогда Таб.ВывестиСекцию("Номенклатура|Лев"); Таб.ПрисоединитьСекцию("Номенклатура|День"); Ном = Номенклатура; иначе Таб.ПрисоединитьСекцию("Номенклатура|День"); КонецЕсли; КонецЦикла; Таб.Показать(); КонецПроцедуры |
|||
6
Это_mike
23.08.16
✎
10:05
|
(5) даже смотреть лень. Предлагаю три варианта на выбор:
1.написать как надо 2.выгрузить в ТЗ, и (2) 3.позвать программиста. выбирай... |
|||
7
san4ez1008
23.08.16
✎
10:19
|
(6) В тз я уже выгрузил, даже выгрузил из ТЗ в ТД..и наконец получилось разбить даты по колонкам!
|
|||
8
san4ez1008
23.08.16
✎
10:28
|
как в шапке вывести даты? я не понимаю(
|
|||
9
Это_mike
23.08.16
✎
10:32
|
(8) присоединять секции.
|
|||
10
san4ez1008
23.08.16
✎
10:40
|
(9) секции я УЖЕ присоединил, если в коде не видно. А если лень смотреть-так уж лучше молчите.
|
|||
11
Это_mike
23.08.16
✎
10:42
|
(10) в коде присоединения секций в шапке - нет.
позовите программиста |
|||
12
san4ez1008
23.08.16
✎
10:59
|
(11) где это прописать?
|
|||
13
Ёпрст
гуру
23.08.16
✎
11:02
|
(12) в коде, вестимо
|
|||
14
Ёпрст
гуру
23.08.16
✎
11:03
|
Если че, выгрузка в ТЗ там не нужна, она только вредит
|
|||
15
Злопчинский
23.08.16
✎
11:04
|
(8) автор дятел? - возьми из (2) - и все выведет само.
если надо -стучись в скайп Zlopun (я сейчас сисадмином ничего не делаю - помогу по факту, покажу, расскажу, объясню). Предложение действительно 20 минут |
|||
16
san4ez1008
23.08.16
✎
11:04
|
(13) оно и понятно, что в коде... все такие умные, а исправленный кусочек кода с указанием ошибки никто не может, помочь начинающему не хотят..
|
|||
17
Ёпрст
гуру
23.08.16
✎
11:06
|
(16) Дык учись, кто мешает ?
Всего то надо обойти первую группировку,вывести шапку, потом сбросить её, и начинать обходить по-новой для вывода всего остального |
|||
18
Ёпрст
гуру
23.08.16
✎
11:06
|
Ну и см. в сторону (1)
|
|||
19
san4ez1008
23.08.16
✎
11:19
|
В общем, все ясно, всем спасибо.
|
|||
20
Злопчинский
23.08.16
✎
11:20
|
(17) это не укладывается в идеологию коротких твитов...
|
|||
21
san4ez1008
23.08.16
✎
11:46
|
Просто. Исправьте. Код. Для вывода гребаной шапки. ПОЖАЛУЙСТА.
|
|||
22
Злопчинский
23.08.16
✎
11:49
|
Да. Мы здесь. Наблюдаем. Переживаем.
|
|||
23
Злопчинский
23.08.16
✎
11:50
|
Подсунь свою ТЗ в (2) - выведет все само.
из программирования для подсовывания - написать четыре строки. примеры - по ссылке. |
|||
24
Maniac
23.08.16
✎
11:56
|
Для семерки на отчет
http://subsystems.ru/catalog/program=139/ сделаешь сам что хочешь. там с группировками |
|||
25
Злопчинский
23.08.16
✎
11:58
|
(24) не за чет! в(2) - даже переделывать ничего ненадо.. ;-)
|
|||
26
san4ez1008
23.08.16
✎
12:04
|
(24) (25) Да НЕ НАДО готовых отчетов, мне нужно доработать СВОЙ! Просто не понимаю, как мне зациклить перебор ТЗ, чтобы вывести в шапку даты из периода, выбранного в запросе.
|
|||
27
Ёпрст
гуру
23.08.16
✎
12:08
|
(26) выкинуть ТЗ, добавить ключевое слово Все в группировку по дням, наслаждаться
|
|||
28
Злопчинский
23.08.16
✎
12:09
|
(26)
а) если надо сделать быстро чтобы работало - то 2, далее пункт б) б) если надо доработать свой несрочно - трудись! в ветке все разжевали |
|||
29
Maniac
23.08.16
✎
12:11
|
Тогда выкинуть семерку нафиг и перейти на восьмерку
|
|||
30
Это_mike
23.08.16
✎
12:12
|
(29) будет тупить в снеговике. какая разница?
|
|||
31
san4ez1008
23.08.16
✎
12:19
|
Данный код выводит мне таблицу с общими остатками и еще остатки по дням.
//******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Склад = Регистр.ОстаткиТМЦ.Склад; |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод; |Количество = Регистр.ОстаткиТМЦ.Количество; |Фирмы = Справочник.Фирмы.ТекущийЭлемент; |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура упорядочить по Номенклатура.Наименование; |Группировка День; |Условие(Номенклатура в ВыбНоменклатура); |Условие(Склад в ВыбСклад); |Условие(Фирмы в ВыбФирмы); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТЗ); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица1"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Ном=""; Для N = 1 По ТЗ.КоличествоСтрок() Цикл //Ном = ТЗ.ПолучитьСтрокуПоНомеру(N); Номенклатура = ТЗ.ПолучитьЗначение(N,"Номенклатура"); Остаток = ТЗ.ПолучитьЗначение(N,"КоличествоКонОст"); День = ТЗ.ПолучитьЗначение(N,"День"); //Если ПустоеЗначение(День)=1 тогда // ТЗ.УдалитьСтроку(N); // N=N-1; //КонецЕсли; //День = ТЗ.ПолучитьЗначение(N,"День"); //Если Ном <> Таб.ПолучитьСекцию("Номенклатура") тогда Если Ном <> Номенклатура тогда Таб.ВывестиСекцию("Номенклатура|Лев"); Таб.ПрисоединитьСекцию("Номенклатура|День"); Ном = Номенклатура; иначе Таб.ПрисоединитьСекцию("Номенклатура|День"); КонецЕсли; КонецЦикла; Таб.Показать(); Теперь в шапке над столбцами с остатками по дням надо вывести сами даты. Что исправить в коде? |
|||
32
Ёпрст
гуру
23.08.16
✎
14:16
|
||||
33
Злопчинский
23.08.16
✎
15:42
|
(32) штрейкбрехер! ;-)
|
|||
34
san4ez1008
24.08.16
✎
02:11
|
Закрывайте тему,вчера сам все сделал
|
|||
35
Ёпрст
гуру
24.08.16
✎
09:59
|
(34) показывай, как решил.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |