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