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