|
v8: Помогите с выводом | ☑ | ||
---|---|---|---|---|
0
Baf
09.08.11
✎
15:46
|
НУЖНО сделать отчет который выводил бы все перемещения товаров за период. Начал делать.
Вот модуль: Процедура ВыбПериодНажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.УстановитьПериод(ДатаНач, ?(ДатаКон='0001-01-01', ДатаКон, КонецДня(ДатаКон))); НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; НастройкаПериода.Редактировать(); ДатаНач = НастройкаПериода.ПолучитьДатуНачала(); ДатаКон = НастройкаПериода.ПолучитьДатуОкончания(); КонецПроцедуры Процедура КнопкаСформироватьНажатие(Кнопка) ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить(); Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда ТоварКод = "Артикул"; Иначе ТоварКод = "Код"; КонецЕсли; ТекстЗапросаШапка = "ВЫБРАТЬ | Ссылка.Номер КАК НомерДокумента, | Ссылка.Дата КАК ДатаДокумента, | Ссылка.Дата КАК ДатаСоставления, | Ссылка.Организация, | Ссылка.СкладОтправитель КАК Склад, | Ссылка.СкладПолучатель КАК Подразделение | //ПОЛЕ_КорСчет ,ВЫБОР КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НовыйСчетУчетаБУ) = 1 ТОГДА | //ПОЛЕ_КорСчет МИНИМУМ(НовыйСчетУчетаБУ) | //ПОЛЕ_КорСчет ИНАЧЕ """" КОНЕЦ КАК КоррСчет |ИЗ | Документ.ПеремещениеТоваров КАК ПеремещениеТоваров | |ГДЕ | ПеремещениеТоваров.Ссылка = &ТекущийДокумент |//ПОЛЕ_КорСчет СГРУППИРОВАТЬ ПО Ссылка"; ТекстЗапросаТовары = " |ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура КАК Номенклатура, //ПТ-начало | ВложенныйЗапрос.Номенклатура.НомерКарточки КАК НомерКарточки, //ПТ-конец | ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК МатериалНаименование, | ВложенныйЗапрос.Номенклатура." + ТоварКод + " КАК НоменклатурныйНомер, | ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование, | ВложенныйЗапрос.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКод, | ВложенныйЗапрос.Характеристика КАК Характеристика, | ВложенныйЗапрос.Серия КАК Серия, | ВложенныйЗапрос.Количество КАК Количество, | ВложенныйЗапрос.Счет КАК Счет, | ВложенныйЗапрос.НомерСтроки КАК НомерСтроки |ИЗ | ( | ВЫБРАТЬ | Номенклатура, | ЕдиницаИзмерения, | СчетУчетаБУ КАК Счет, | ХарактеристикаНоменклатуры КАК Характеристика, | СерияНоменклатуры КАК Серия, | СУММА(Количество) КАК Количество, | МИНИМУМ(НомерСтроки) КАК НомерСтроки | ИЗ | Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваров | ГДЕ | ПеремещениеТоваров.Ссылка = &ТекущийДокумент | | СГРУППИРОВАТЬ ПО | Номенклатура, | ЕдиницаИзмерения, | ХарактеристикаНоменклатуры, | СерияНоменклатуры, | СчетУчетаБУ | | ) КАК ВложенныйЗапрос | |УПОРЯДОЧИТЬ ПО НомерСтроки ВОЗР |"; ТабДок = Новый ТабличныйДокумент; Макет = ПолучитьМакет("М11"); ТабДок.ОтображатьЗаголовки = Ложь; ТабДок.ОтображатьСетку = Ложь; Область = Макет.ПолучитьОбласть("Шапка"); Область.Параметры.Заголовок = "ТРЕБОВАНИЕ-НАКЛАДНАЯ № "; ТабДок.Вывести(Область); Количество = 0; Для каждого Строка из Список Цикл Если Строка.Флаг = Истина Тогда ПервыйДокумент = Истина; Область = Макет.ПолучитьОбласть("Строка"); Область.Параметры.Номенклатура = СЮДА бы группировку номенклатуры; Область.Параметры.Количество = и общее количество этих группировок; ТабДок.Вывести(Область); Далее должно следовать Область = Макет.ПолучитьОбласть("ДокументыДвижения"); Область.Параметры.ДокументыДвижения = Как сделать? //КонецЦикла; КонецЕсли; КонецЦикла; Область = Макет.ПолучитьОбласть("Подвал"); ТабДок.Вывести(Область); //КонецЦикла; ТабДок.Показать(); КонецПроцедуры Процедура ДействияФормыЗаполнить(Кнопка) Если Не ЗначениеЗаполнено(СкладОтправитель) Тогда Предупреждение("Не выбран склад-отправитель!"); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(ДатаНач) или Не ЗначениеЗаполнено(ДатаКон) или ДатаНач > ДатаКон Тогда Предупреждение("Неправильно задан период!"); Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ИСТИНА КАК Флаг, | ПеремещениеТоваров.СкладПолучатель, | ПеремещениеТоваров.СкладОтправитель, | ПеремещениеТоваров.Ссылка КАК СсылкаНаДокумент, | ПеремещениеТоваров.Номер, | ПеремещениеТоваров.Дата, | ПеремещениеТоваровТовары.Номенклатура, | ПеремещениеТоваровТовары.Количество КАК Количество |ИЗ | Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров | ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка |ГДЕ | ПеремещениеТоваров.Дата МЕЖДУ &ДатаНач И &ДатаКон | И ПеремещениеТоваров.Проведен = ИСТИНА | И ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель"; Если не СкладПолучатель.Пустая() Тогда Запрос.Текст=Запрос.Текст+" | И ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель"; КонецЕсли; Запрос.Текст=Запрос.Текст+" |ИТОГИ |СУММА(Количество) |ПО |Номенклатура "; Запрос.УстановитьПараметр("ДатаНач",ДатаНач); Запрос.УстановитьПараметр("ДатаКон",ДатаКон); Запрос.УстановитьПараметр("СкладОтправитель",СкладОтправитель); Запрос.УстановитьПараметр("СкладПолучатель",СкладПолучатель); Список.Очистить(); Списки = Запрос.Выполнить(); Если Не Списки.Пустой()Тогда Список = Списки.Выгрузить(); Иначе Возврат; КонецЕсли; КонецПроцедуры Подскажите плиз как из процедуры Процедура ДействияФормыЗаполнить(Кнопка)достать группировку номенклатуры, потом вывести все документы движения? Отчет выглядит должен так: Номенклатура 1 ОбщееКоличествоНоменклатуры1 ДокуменДвижения1 КоличествоПоДоку ДокументДвижения2 КоличествоПоДоку Номенклатура 2 ОбщееКоличествоНоменклатуры2 ДокуменДвижения2 КоличествоПоДоку ДокументДвижения2 КоличествоПоДоку Никак не получается сделать такую структуру. Прошу помогите, укажите в чем ошибка? |
|||
1
lubja
09.08.11
✎
15:50
|
сделай на скд, много вопросов отпадет... для скд нужно, в принципе, только верный запрос и пару раз кликнуть мышкой в нужном месте...
|
|||
2
lubja
09.08.11
✎
15:56
|
а по теме:
ВыборкаИтог = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаИтог.Следующий() Цикл Выборка = ВыборкаИтог.Выбрать(); Пока Выборка.Следующий() Цикл ... КонецЦикла; КонецЦикла; |
|||
3
Baf
10.08.11
✎
10:05
|
ну понятно это что нужно сделать с помощью
Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Но куда и как вставить его в процедуру где нет этого запроса? Запрос находится у меня в другой процедуре. ПОмоги!!!! |
|||
4
Wobland
10.08.11
✎
10:07
|
(3) >Запрос находится у меня в другой процедуре
пусть он находится в функции, возвращающей Запрос.Выполнить(), а? |
|||
5
Renat11111
10.08.11
✎
10:09
|
(4) неожиданный поворот событий
|
|||
6
Baf
10.08.11
✎
10:10
|
это как, покажи на моем примере?
|
|||
7
Wobland
10.08.11
✎
10:20
|
(4) писал без чтения простынки. В ДействияФормыЗаполнить() Возврат Список=Запрос.Выполнить() я имел в виду, а не Список=Запрос.Выполнить.Выгрузить(). ну а дальше твой Список можно будет обходить
|
|||
8
Baf
10.08.11
✎
11:06
|
Ты так имел ввиду: Если Не Списки.Пустой()Тогда
Возврат НОМ=Запрос.Выполнить() //Список = Списки.Выгрузить(); Иначе Возврат; КонецЕсли; так не катит, ошибка:{Форма.Форма.Форма(170,2)}: Процедура не может возвращать значение <<?>>Иначе (Проверка: Толстый клиент (обычное приложение)) Смотри, процедура ДействияФормыЗаполнить() выгружает данные из запроса в табличную часть, после чего можно выбрать доки которые нужно распечатать. Нажатием на кнопку "Печать" вызывается процедура КнопкаСформироватьНажатие(Кнопка)в которой нужно вывести печатную форму структура которой была описана выше. Причем данные в макете нужны именно из процедуры ДействияФормыЗаполнить(). Можно ли как то сделать процедуру ДействияФормыЗаполнить(): Запрос.УстановитьПараметр("ДатаНач",ДатаНач); Запрос.УстановитьПараметр("ДатаКон",ДатаКон); Запрос.УстановитьПараметр("СкладОтправитель",СкладОтправитель); Запрос.УстановитьПараметр("СкладПолучатель",СкладПолучатель); Список.Очистить(); Списки = Запрос.Выполнить(); ВыборкаИтог = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Если Не Списки.Пустой()Тогда Возврат Список=Запрос.Выполнить() Список = Списки.Выгрузить(); Иначе Возврат; КонецЕсли; и вызвать ВыборкаИтог в процедуре КнопкаСформироватьНажатие(Кнопка)? |
|||
9
Wobland
10.08.11
✎
11:24
|
в (7) строку "Возврат Список=Запрос.Выполнить()" следует читать как "Список=Запрос.Выполнить()", описался немного
|
|||
10
Baf
10.08.11
✎
11:36
|
Вот этим: Для каждого Строка из Список Цикл у меня получается читать результат нужного мне запроса, он выводит и доки и номенклатуру по этим докам, но как сделать так чтобы выводилась не вся номенклатура (как в проц. КнопкаСформироватьНажатие(Кнопка) реализовать ОбходРезультатаЗапроса.ПоГруппировкам)? как достать группировку по номенклатуре?
|
|||
11
Wobland
10.08.11
✎
11:38
|
честно говоря, лениво длинный код читать. как достать? Список у тебя (у меня) получается типа РезультатЗапроса. в другой процедуре колдуешь на него: Выборка=Список.Выбрать(ПоГруппировкам) и будет тебе счастье
|
|||
12
Baf
10.08.11
✎
11:46
|
я так и делал сначала, но выдает ошибку Метод объекта не обнаружен (Выбрать)
там есть только выгрузить колонку, выбрать строчку, но просто ВЫБРАТЬ нет. потом стал делать методом свернуть: Список.Свернуть("Номенклатура"), да это как вариан, вывелисть мне эти номенклатуры без наименований, но как достать документы? если делать Список.Свернуть("Номенклатура,СсылкаНаДокумент") там СсылкаНаДокумент пустая |
|||
13
Wobland
10.08.11
✎
11:50
|
Список=Запрос.Выполнить(), список имеет тип РезультатЗапроса. метод Выбрать() у него есть. что ты делаешь не так? какого типа Список?
|
|||
14
lubja
10.08.11
✎
11:50
|
я так понимаю, по кнопке Заполнить заполняется таб.часть, и в этой процедуре есть интересующий тебя запрос. почему тебе не вынести запрос в функцию, возвращающую Запрос.Выполнить(), и юзать эту функцию из Заполнить и Сформировать?
|
|||
15
Wobland
10.08.11
✎
11:52
|
(14) опять плохо читаем? см (4) ;)
|
|||
16
lubja
10.08.11
✎
11:53
|
*ну что ты будешь делать...* )))
|
|||
17
Wobland
10.08.11
✎
11:54
|
(16) у него там в переменную модуля всё складывается вместо возврата. только обратится не получается. я код по диагонали пробежал только
|
|||
18
lubja
10.08.11
✎
12:02
|
смотри, в идеале у тебя должно получится что-то типа:
Функция ПолучитьДанные(Параметры запроса) Запрос = Новый Запрос; Запрос.ТекстЗапрос = бла-бла-бла; //устанавливаешь параметры запроса Возврат Запрос.Выполнить(); КонецФункции Процедура ДействиеФормыЗаполнить(Кнопка) //проверка на заполненность склада и периода Список.Очистить(); Список.ПолучитьДанные().Выгрузить(параметры); КонецПроцедуры а из процедуры сформировать там, где тебе это нужно, юзать как в (2), только вместо "Запрос.Выполнить()" используешь ПолучитьДанные(параметры) |
|||
19
Baf
10.08.11
✎
12:06
|
Вот что у меня в интересующей меня проц:
Список.Очистить(); Списки = Запрос.Выполнить(); Если Не Списки.Пустой()Тогда Список = Списки.Выгрузить(); Иначе Возврат; КонецЕсли; Вот что я пишу в КнопкаСформироватьНажатие(Кнопка) Для каждого Строка из Списки Цикл Выборка=Списки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Ведь так ты говорил, но вываливается ошибка {Форма.Форма.Форма(94)}: Метод объекта не обнаружен (Выбрать) Выборка=Список.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Т.к нету выбрать просто у Списки. что я делаю не так? |
|||
20
Wobland
10.08.11
✎
12:08
|
(19) не Список.Выбрать(), а Списки.Выбрать()!
|
|||
21
Wobland
10.08.11
✎
12:08
|
+(20) Список у тебя ТЗ, а Списки - РезультатЗапроса
|
|||
22
Baf
10.08.11
✎
12:14
|
если делаю так:
Для каждого Строка из Списки Цикл Выборка=Списки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); вываливается в ошибку : Переменная не определена (Списки) Для каждого Строка из <<?>>Списки Цикл Переменная не определена (Списки) Выборка=<<?>>Списки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); что еще я пропустил? |
|||
23
Wobland
10.08.11
✎
12:15
|
значит, Списки у тебя не есть переменная модуля. сделай в начале Перем Списки
|
|||
24
Wobland
10.08.11
✎
12:15
|
а лучше мСписки
|
|||
25
Baf
10.08.11
✎
12:15
|
а если Для каждого Строка из Список Цикл
Выборка=Списки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); всеравно Переменная не определена (Списки) Выборка=<<?>>Списки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); |
|||
26
Wobland
10.08.11
✎
12:19
|
>Для каждого Строка из Список
имхается мне, ты какую-то фигню сейчас делаешь. зачем тебе ТЗ по имени Список? (23) хорошо читал? |
|||
27
Baf
10.08.11
✎
12:19
|
делаю:
в начале Перем мСписки; в модуле Для каждого Строка из Список Цикл Выборка=мСписки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); и всеравно ошибка когда натыкается на эту строку Значение не является значением объектного типа (Выбрать) Выборка=мСписки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); может что то не так? |
|||
28
Wobland
10.08.11
✎
12:20
|
тип какой у мСписки? ничего туда, похоже, не присвоилось
|
|||
29
Baf
10.08.11
✎
12:21
|
тип - неопределено
|
|||
30
Wobland
10.08.11
✎
12:22
|
(29) я всё за тебя додумывать буду? не присвоилось туда ничего. ищи, почему
|
|||
31
Wobland
10.08.11
✎
12:23
|
в (0) код таков, что в Списки будет РезультатЗапроса. если конечно, ДействияФормыЗаполнить() вызывается раньше, чем Сформировать()
|
|||
32
SunFox
10.08.11
✎
12:30
|
(0) конфа типовая?, если так то чем отчет "Ведомость по товарам на складах" не устраивает?
|
|||
33
Baf
10.08.11
✎
12:32
|
Список у меня таблица значений
Для каждого Строка из Список Цикл смотрю по отладчику Список - таблица значений, в которой есть все данные которые нужны мне далее строка Выборка=мСписок.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); или просто Выборка=Список.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ни к чему не приводят. нет метода у них просто выбрать есть (Удалить(.Сортировать(.СкопироватьКолонки(.Скопировать(.Сдвинуть(.Свернуть(.Получить(.Очистить();.НайтиСтроки(.Найти(.Колонки.Количество().Итог(.Индексы.Индекс(.ЗаполнитьЗначения(.ЗагрузитьКолонку(.Добавить().ВыгрузитьКолонку(.ВыбратьСтроку( ) нет там просто выбрать для обхода по группировкам конфа типовая, нужно свой макет реализовать |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |