|   |   | 
| 
 | 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 | 
        Список у меня таблица значений
  Для каждого Строка из Список Цикл смотрю по отладчику Список - таблица значений, в которой есть все данные которые нужны мне далее строка Выборка=мСписок.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); или просто Выборка=Список.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ни к чему не приводят. нет метода у них просто выбрать есть (Удалить(.Сортировать(.СкопироватьКолонки(.Скопировать(.Сдвинуть(.Свернуть(.Получить(.Очистить();.НайтиСтроки(.Найти(.Колонки.Количество().Итог(.Индексы.Индекс(.ЗаполнитьЗначения(.ЗагрузитьКолонку(.Добавить().ВыгрузитьКолонку(.ВыбратьСтроку( ) нет там просто выбрать для обхода по группировкам конфа типовая, нужно свой макет реализовать | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |