Имя: Пароль:
1C
1С v8
Цикл со второй строки таблицы....
0 Darhon
 
03.11.11
12:42
Здравствуйте. Подскажите почему перебор начинает выполняться со второй строки таблицы?

   Запрос = Новый Запрос;
   
   ТекстУсловия = "";  
   ТекущаяСтрока.НомерСтроки
   Для Каждого ТекущаяСтрока Из ПереченьНоменклатуры Цикл  
                   
           Запрос.УстановитьПараметр("Номенклатура", ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки).Номенклатура);
       
           
           ТекстУсловия = ТекстУсловия + "
           |ГДЕ
           |    (ПродажиОбороты.Номенклатура = &Номенклатура
           |     ИЛИ ПродажиОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура))";
       КонецЕсли;
1 Darhon
 
03.11.11
12:42
КонецЕсли там нету.... :)
2 ДенисЧ
 
03.11.11
12:43
что-то ты сильно порезал...
3 lubja
 
03.11.11
12:44
мне тоже так кажется...
4 Darhon
 
03.11.11
12:44
Угу...код большой...в общем суть такова: есть Табличное поле. в него добавляют номенклатуру и потом в запрос подставляют по одной строчке, я тестил на 2 строчках в ТП...начинает со второй :(((
5 Darhon
 
03.11.11
12:46
Запрос = Новый Запрос;
   
   ТекстУсловия = "";  
   Для Каждого ТекущаяСтрока Из ПереченьНоменклатуры Цикл  
           Запрос.УстановитьПараметр("Номенклатура", ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки).Номенклатура);
           ТекстУсловия = ТекстУсловия + "
           |ГДЕ
           |    (ПродажиОбороты.Номенклатура = &Номенклатура
           |     ИЛИ ПродажиОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура))";
           
       Запрос.Текст = "ВЫБРАТЬ
       |    ПродажиОбороты.Номенклатура КАК Номенклатура,
       |    ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       |    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
       |    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
       |    ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот,
       |    ПродажиОбороты.Период КАК Период
       |ИЗ
       |    РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, Месяц, ) КАК ПродажиОбороты
       |    
       |"+ТекстУсловия+"    
       |
       |ИТОГИ
       |    СУММА(КоличествоОборот),
       |    СУММА(СтоимостьОборот),
       |    СУММА(СтоимостьБезСкидокОборот)
       |ПО
       |    Номенклатура,
       |    ХарактеристикаНоменклатуры,
       |    Период
       |    
       |АВТОУПОРЯДОЧИВАНИЕ";
                 
   Запрос.УстановитьПараметр("ДатаНачала",         ДатаНачала);
   Запрос.УстановитьПараметр("ДатаКонца",         КонецДня(ДатаКонца));
   Запрос.УстановитьПараметр("Номенклатура",     Номенклатура);
   
   РезультатЗапроса = Запрос.Выполнить();
6 Mort
 
03.11.11
12:48
Какой-то кошмар, даже теряюсь с чего начать.
7 hhhh
 
03.11.11
12:49
(6) а чего начинать? Просто чел номера строк с индексами перепутал. Ветка пятничная.
8 lubja
 
03.11.11
12:49
а зачем ты делаешь так???
ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки).Номенклатура
нельзя просто ПереченьНоменклатуры.Номенклатура ?
9 izekia
 
03.11.11
12:49
(6) предложи сменить род деятельности
10 ХочуВойти
 
03.11.11
12:50
ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки).Номенклатура - Почему именно так? Мож проще ТекущаяСтрока.Номенклатура?
11 lubja
 
03.11.11
12:51
и вообще, это условие можно по-другому оформить...
12 aleks-id
 
03.11.11
12:52
за запросы в цикле надо бить по рукам.
13 ХочуВойти
 
03.11.11
12:53
Запрос в цикле и условие не в параметрах виртуальной таблицы... надо переделывать...
14 Darhon
 
03.11.11
12:53
(8) Пишет поле объекта не найдено...
15 lubja
 
03.11.11
12:54
(14) по отладчику посмотри, что у тебя есть в ТекущейСтроке.

зы: сорри, имела в виду ТекущаяСтрока.Номенклатура
16 Darhon
 
03.11.11
12:54
(13) Я бы с радостью :)
17 ХочуВойти
 
03.11.11
12:55
(16) ну выкладывай всю процедуру будем искать остальные косяки
18 Darhon
 
03.11.11
12:56
Я просто не знаю как в запросе использовать таблицу. Сам понимаю, что запрос в цикле - это моветон...
19 Ткачев
 
03.11.11
12:56
Я бы через ВЫБРАТЬ * ПОМЕСТИТЬ ПереченьНоменклатуры ИЗ &ПереченьНоменклатуры КАК ПК; делал
20 hhhh
 
03.11.11
12:56
(18) Запрос.УстановитьПараметр("Номенклатура", ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки - 1).Номенклатура);
21 Buster007
 
03.11.11
12:58
с 0 начинается счет )
да и код на помойку. делай нормально сразу.
22 Darhon
 
03.11.11
12:59
(17) Он очень большой....

И еще до конца не доделан. В нем сначала номенклатура выбиралась по одной позиции. Попросили переделать для нескольких позиций, вот и изголяюсь....
ПолеТабДокумента.Очистить();
   Макет  = ПолучитьМакет("Динамика");
   Запрос = Новый Запрос;
   
   ТекстУсловия = "";  
   Для Каждого ТекущаяСтрока Из ПереченьНоменклатуры Цикл  
           Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
           ТекстУсловия = ТекстУсловия + "
           |ГДЕ
           |    (ПродажиОбороты.Номенклатура = &Номенклатура
           |     ИЛИ ПродажиОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура))";
           
       Запрос.Текст = "ВЫБРАТЬ
       |    ПродажиОбороты.Номенклатура КАК Номенклатура,
       |    ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       |    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
       |    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
       |    ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот,
       |    ПродажиОбороты.Период КАК Период
       |ИЗ
       |    РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, Месяц, ) КАК ПродажиОбороты
       |    
       |"+ТекстУсловия+"    
       |
       |ИТОГИ
       |    СУММА(КоличествоОборот),
       |    СУММА(СтоимостьОборот),
       |    СУММА(СтоимостьБезСкидокОборот)
       |ПО
       |    Номенклатура,
       |    ХарактеристикаНоменклатуры,
       |    Период
       |    
       |АВТОУПОРЯДОЧИВАНИЕ";
                 
   Запрос.УстановитьПараметр("ДатаНачала",         ДатаНачала);
   Запрос.УстановитьПараметр("ДатаКонца",         КонецДня(ДатаКонца));
   Запрос.УстановитьПараметр("Номенклатура",     Номенклатура);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   //теперь остатки
   ЗапросПоОстаткам = Новый Запрос;
   
   ТекстУсловия = "";
   Если НЕ ЗначениеНеЗаполнено(Номенклатура) Тогда
   Номенкл = ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки).Номенклатура;
   Запрос.УстановитьПараметр("Номенклатура", Номенкл);    
       
       ТекстУсловия = ТекстУсловия + "
                    |    (ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура
                    |     ИЛИ ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура))";
   КонецЕсли;
   Если НЕ ЗначениеНеЗаполнено(Склад) Тогда
       ТекстУсловия = ТекстУсловия + "
                    |    И ТоварыНаСкладахОстатки.Склад = &Склад";
   КонецЕсли;
   ТекстУсловия = ?(ТекстУсловия = "", "", " ГДЕ ")+ ТекстУсловия;


   ЗапросПоОстаткам.Текст = "ВЫБРАТЬ
                            |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                            |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                            |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
                            |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК КоличествоРезерв
                            |ИЗ
                            |    РегистрНакопления.ТоварыНаСкладах.Остатки(&ГраницаОстатков, ) КАК ТоварыНаСкладахОстатки
                            |
                            |  ЛЕВОЕ СОЕДИНЕНИЕ
                            |        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ГраницаОстатков, ) КАК ТоварыВРезервеНаСкладахОстатки
                            |      ПО ТоварыВРезервеНаСкладахОстатки.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                            |         И ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
                            |    
                            |"+ТекстУсловия+"    
                            |
                            |ИТОГИ
                            |    СУММА(КоличествоОстаток),
                            |    СУММА(КоличествоРезерв)
                            |ПО
                            |    Номенклатура,
                            |    ХарактеристикаНоменклатуры";
                 
   ЗапросПоОстаткам.УстановитьПараметр("ГраницаОстатков",     Новый Граница(КонецДня(ДатаКонца), ВидГраницы.Включая));
   ЗапросПоОстаткам.УстановитьПараметр("Номенклатура",         Номенклатура);
   ЗапросПоОстаткам.УстановитьПараметр("Склад",             Склад);
   ВыборкаПоОстаткам = ЗапросПоОстаткам.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
   
   ТаблицаОстатков = Новый ТаблицаЗначений;
   ТаблицаОстатков.Колонки.Добавить("Номенклатура");
   ТаблицаОстатков.Колонки.Добавить("КодНоменклатуры");
   ТаблицаОстатков.Колонки.Добавить("ХарактеристикаНоменклатуры");
   ТаблицаОстатков.Колонки.Добавить("Остаток");
   ТаблицаОстатков.Колонки.Добавить("Резерв");
   
   Пока ВыборкаПоОстаткам.Следующий() Цикл
       СтрокаОстатков = ТаблицаОстатков.Добавить();
       СтрокаОстатков.Номенклатура                     = ВыборкаПоОстаткам.Номенклатура;
       СтрокаОстатков.КодНоменклатуры                 = ВыборкаПоОстаткам.Номенклатура.Код;
       СтрокаОстатков.ХарактеристикаНоменклатуры     = "Номенклатура";
       СтрокаОстатков.Остаток                         = ?(ВыборкаПоОстаткам.КоличествоОстаток = Null, 0, ВыборкаПоОстаткам.КоличествоОстаток);
       СтрокаОстатков.Резерв                         = ?(ВыборкаПоОстаткам.КоличествоРезерв = Null, 0, ВыборкаПоОстаткам.КоличествоРезерв);
       
       ВыборкаОстатковПоХарактеристикам = ВыборкаПоОстаткам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ХарактеристикаНоменклатуры");
       Пока ВыборкаОстатковПоХарактеристикам.Следующий() Цикл
           СтрокаОстатков = ТаблицаОстатков.Добавить();
           СтрокаОстатков.Номенклатура                     = ВыборкаПоОстаткам.Номенклатура;
           СтрокаОстатков.КодНоменклатуры                 = ВыборкаПоОстаткам.Номенклатура.Код;
           СтрокаОстатков.ХарактеристикаНоменклатуры     = ВыборкаОстатковПоХарактеристикам.ХарактеристикаНоменклатуры;
           СтрокаОстатков.Остаток                         = ?(ВыборкаОстатковПоХарактеристикам.КоличествоОстаток = Null, 0, ВыборкаОстатковПоХарактеристикам.КоличествоОстаток);
           СтрокаОстатков.Резерв                         = ?(ВыборкаОстатковПоХарактеристикам.КоличествоРезерв = Null, 0, ВыборкаОстатковПоХарактеристикам.КоличествоРезерв);
       КонецЦикла;
   КонецЦикла;
   
   
   
   
   ТаблицаОтчета = Новый ТаблицаЗначений;
   ТаблицаОтчета.Колонки.Добавить("Номенклатура");
   ТаблицаОтчета.Колонки.Добавить("ХарактеристикаНоменклатуры");
   
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ПолеТабДокумента.Вывести(Шапка);
   
   ЗаголовокТаблицыЗаголовок     = Макет.ПолучитьОбласть("ЗаголовокТаблицы|ГорЗаголовок");
   ЗаголовокТаблицыЦена         = Макет.ПолучитьОбласть("ЗаголовокТаблицы|Цена");
   ЗаголовокТаблицыПериод         = Макет.ПолучитьОбласть("ЗаголовокТаблицы|Период");
   ЗаголовокТаблицыИтог         = Макет.ПолучитьОбласть("ЗаголовокТаблицы|ГорИтог");
   
   ПолеТабДокумента.Вывести(ЗаголовокТаблицыЗаголовок);
   Если НЕ ЗначениеНеЗаполнено(ТипЦены) Тогда
       ПолеТабДокумента.Присоединить(ЗаголовокТаблицыЦена);
   КонецЕсли;
   ВыборкаПериодов = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
   НомПП = 0;
   Пока ВыборкаПериодов.Следующий() Цикл
       НомПП = НомПП + 1;
       ТаблицаОтчета.Колонки.Добавить("Количество" + НомПП);
       ТаблицаОтчета.Колонки.Добавить("Сумма" + НомПП);
       
       ЗаголовокТаблицыПериод.Параметры.Период = ПредставлениеПериода(НачалоМесяца(ВыборкаПериодов.Период), КонецМесяца(ВыборкаПериодов.Период));
           
       ПолеТабДокумента.Присоединить(ЗаголовокТаблицыПериод);
   КонецЦикла;
   КоличествоПериодовОтчета = НомПП;
   
   ТаблицаОтчета.Колонки.Добавить("Остаток");
   ТаблицаОтчета.Колонки.Добавить("Резерв");
   ТаблицаОтчета.Колонки.Добавить("ПриоритетСортировки");
   ТаблицаОтчета.Колонки.Добавить("КодНоменклатуры");
   ПолеТабДокумента.Присоединить(ЗаголовокТаблицыИтог);
   
   
   
   Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
   
   //заполнение таблицы отчета
   Пока Выборка.Следующий() Цикл
       //
       СтрокаТаблицыОтчета = ТаблицаОтчета.Добавить();
       СтрокаТаблицыОтчета.Номенклатура                 = Выборка.Номенклатура;
       СтрокаТаблицыОтчета.КодНоменклатуры                 = Выборка.Номенклатура.Код;
       СтрокаТаблицыОтчета.ХарактеристикаНоменклатуры     = "Номенклатура";
       СтрокаТаблицыОтчета.ПриоритетСортировки             = 0;
       
       ВыборкаПериодов = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");
       НомПП = 2;
       Пока ВыборкаПериодов.Следующий() Цикл
           СтрокаТаблицыОтчета[НомПП]     = ?(ВыборкаПериодов.КоличествоОборот = Null, 0, ВыборкаПериодов.КоличествоОборот);
           СтрокаТаблицыОтчета[НомПП+1] = ?(ВыборкаПериодов.СтоимостьОборот = Null, 0, ВыборкаПериодов.СтоимостьОборот);
           НомПП = НомПП + 2;
       КонецЦикла;
       
       СтруктураПоиска = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры", Выборка.Номенклатура, "Номенклатура");
       РезультатПоиска = ТаблицаОстатков.НайтиСтроки(СтруктураПоиска);
       Если РезультатПоиска.Количество() > 0 Тогда
           Остаток     = РезультатПоиска[0].Остаток;
           Резерв     = РезультатПоиска[0].Резерв;
       Иначе
           Остаток     = 0;
           Резерв     = 0;
       КонецЕсли;
       СтрокаТаблицыОтчета.Остаток     = Остаток;
       СтрокаТаблицыОтчета.Резерв     = Резерв;
       
       //теперь характеристики
       ВыборкаХарактеристик = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ХарактеристикаНоменклатуры");
       Пока ВыборкаХарактеристик.Следующий() Цикл
           СтрокаТаблицыОтчета = ТаблицаОтчета.Добавить();
           СтрокаТаблицыОтчета.Номенклатура                 = Выборка.Номенклатура;
           СтрокаТаблицыОтчета.КодНоменклатуры                 = Выборка.Номенклатура.Код;
           СтрокаТаблицыОтчета.ХарактеристикаНоменклатуры     = ВыборкаХарактеристик.ХарактеристикаНоменклатуры;
           СтрокаТаблицыОтчета.ПриоритетСортировки             = 1;
           
           ВыборкаПериодов = ВыборкаХарактеристик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");
           НомПП = 2;
           Пока ВыборкаПериодов.Следующий() Цикл
               СтрокаТаблицыОтчета[НомПП]     = ?(ВыборкаПериодов.КоличествоОборот = Null, 0, ВыборкаПериодов.КоличествоОборот);
               СтрокаТаблицыОтчета[НомПП+1] = ?(ВыборкаПериодов.СтоимостьОборот = Null, 0, ВыборкаПериодов.СтоимостьОборот);
               НомПП = НомПП + 2;
           КонецЦикла;
           
           СтруктураПоиска = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры", Выборка.Номенклатура, ВыборкаХарактеристик.ХарактеристикаНоменклатуры);
           РезультатПоиска = ТаблицаОстатков.НайтиСтроки(СтруктураПоиска);
           Если РезультатПоиска.Количество() > 0 Тогда
               Остаток     = РезультатПоиска[0].Остаток;
               Резерв     = РезультатПоиска[0].Резерв;
           Иначе
               Остаток     = 0;
               Резерв     = 0;
           КонецЕсли;
           СтрокаТаблицыОтчета.Остаток     = Остаток;
           СтрокаТаблицыОтчета.Резерв     = Резерв;
           
       КонецЦикла;
       
   КонецЦикла;
   
   
   Если ПоказыватьВсеОстатки Тогда
       //закинем в таблицу отчета те остатки, которых не было в продажах
       Для Каждого СтрокаОстатков Из ТаблицаОстатков Цикл
           СтруктураПоиска = Новый Структура("Номенклатура, КодНоменклатуры, ХарактеристикаНоменклатуры", СтрокаОстатков.Номенклатура, СтрокаОстатков.КодНоменклатуры, СтрокаОстатков.ХарактеристикаНоменклатуры);
           РезультатПоиска = ТаблицаОтчета.НайтиСтроки(СтруктураПоиска);
           Если РезультатПоиска.Количество() = 0 Тогда
               СтрокаТаблицыОтчета = ТаблицаОтчета.Добавить();
               СтрокаТаблицыОтчета.Номенклатура                 = СтрокаОстатков.Номенклатура;
               СтрокаТаблицыОтчета.КодНоменклатуры                 = СтрокаОстатков.КодНоменклатуры;
               СтрокаТаблицыОтчета.ХарактеристикаНоменклатуры     = СтрокаОстатков.ХарактеристикаНоменклатуры;
               
               СтрокаТаблицыОтчета.Остаток                         = СтрокаОстатков.Остаток;
               СтрокаТаблицыОтчета.Резерв                         = СтрокаОстатков.Резерв;
               
               СтрокаТаблицыОтчета.ПриоритетСортировки             = ?(СтрокаОстатков.ХарактеристикаНоменклатуры = "Номенклатура", 0, 1);
               
               НомКолонки = 2;
               Для Ном = 1 По КоличествоПериодовОтчета Цикл
                   СтрокаТаблицыОтчета[НомКолонки]         = 0;
                   СтрокаТаблицыОтчета[НомКолонки + 1]     = 0;
                   НомКолонки = НомКолонки + 2;
               КонецЦикла;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
   
   ТаблицаОтчета.Сортировать("Номенклатура Возр, КодНоменклатуры Возр, ПриоритетСортировки Возр, ХарактеристикаНоменклатуры Возр");
   
   Если НЕ ЗначениеНеЗаполнено(ТипЦены) Тогда
       //выдернем запросом цены номенклатуры
       ТипЦеныЗапроса = ?(ТипЦены.Рассчитывается, ТипЦены.БазовыйТипЦен, ТипЦены);
       МассивНоменклатуры                 = ТаблицаОтчета.ВыгрузитьКолонку("Номенклатура");
       МассивХарактеристикаНоменклатуры = ТаблицаОтчета.ВыгрузитьКолонку("ХарактеристикаНоменклатуры");
       ЗапросПоЦенам = Новый Запрос;
       ЗапросПоЦенам.Текст = "ВЫБРАТЬ
                             |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
                             |    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры,
                             //|    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
                             |    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
                             |ИЗ
                             |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                             |ГДЕ
                             |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
                             |    И ЦеныНоменклатурыСрезПоследних.Номенклатура В(&Номенклатура)
                             |    И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры В(&ХарактеристикаНоменклатуры)
                             |
                             //|СГРУППИРОВАТЬ ПО
                             //|    ЦеныНоменклатурыСрезПоследних.Номенклатура,
                             //|    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
                             |";
       ЗапросПоЦенам.УстановитьПараметр("Номенклатура",                 МассивНоменклатуры);
       ЗапросПоЦенам.УстановитьПараметр("ХарактеристикаНоменклатуры",     МассивХарактеристикаНоменклатуры);
       ЗапросПоЦенам.УстановитьПараметр("ТипЦен",                         ТипЦеныЗапроса);
       
       ТаблицаЦен = ЗапросПоЦенам.Выполнить().Выгрузить();
       Если ТипЦены.Рассчитывается Тогда
           Для Каждого СтрокаЦен Из ТаблицаЦен Цикл
               СтрокаЦен.Цена = Ценообразование.ОкруглитьЦену(СтрокаЦен.Цена*(100 + ТипЦены.ПроцентСкидкиНаценки),
                                               ТипЦены.ПорядокОкругления,
                                               ТипЦены.ОкруглятьВБольшуюСторону);
           КонецЦикла;
       КонецЕсли;
   КонецЕсли;
   
   ПолеТабДокумента.НачатьАвтогруппировкуСтрок();
   //формирование печатной формы отчета
   Для Каждого СтрокаОтчета Из ТаблицаОтчета Цикл
       
       Если СтрокаОтчета.ХарактеристикаНоменклатуры = "Номенклатура" Тогда
           ИмяСтрокиМакета = "Номенклатура";
           Уровень = 0;
       Иначе
           Если НЕ ПоказыватьХарактеристикиНоменклатуры Тогда
               Продолжить;
           КонецЕсли;
           
           ИмяСтрокиМакета = "Характеристика";
           Уровень = 1;
       КонецЕсли;
       НоменклатураЗаголовок     = Макет.ПолучитьОбласть(ИмяСтрокиМакета+"|ГорЗаголовок");
       НоменклатураЦена         = Макет.ПолучитьОбласть(ИмяСтрокиМакета+"|Цена");
       НоменклатураПериод         = Макет.ПолучитьОбласть(ИмяСтрокиМакета+"|Период");
       НоменклатураИтог         = Макет.ПолучитьОбласть(ИмяСтрокиМакета+"|ГорИтог");
       
       Если ИмяСтрокиМакета = "Номенклатура" Тогда
           НоменклатураЗаголовок.Параметры.Номенклатура     = СтрокаОтчета.Номенклатура;
       Иначе
           НоменклатураЗаголовок.Параметры.Характеристика     = СтрокаОтчета.ХарактеристикаНоменклатуры;
       КонецЕсли;

       НоменклатураЗаголовок.Параметры.КодОракл         = Формат(СтрокаОтчета.Номенклатура.КодОракл, "ЧГ=0");
       НоменклатураЗаголовок.Параметры.Артикул             = СтрокаОтчета.Номенклатура.Артикул;
       
       ПолеТабДокумента.Вывести(НоменклатураЗаголовок, Уровень);
       ИтПродажи             = 0;
       МесяцевПродажи         = 0;
       ВсегоМесяцевПродажи     = 0;
       Если НЕ ЗначениеНеЗаполнено(ТипЦены) Тогда
           //найдем цену в таблице цен
           Если ИмяСтрокиМакета = "Номенклатура" Тогда
               ХарактеристикаНоменклатурыДляПоиска     = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
           Иначе
               ХарактеристикаНоменклатурыДляПоиска     = СтрокаОтчета.ХарактеристикаНоменклатуры;
           КонецЕсли;
           СтруктураПоиска = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры", СтрокаОтчета.Номенклатура, ХарактеристикаНоменклатурыДляПоиска);
           РезультатПоиска = ТаблицаЦен.НайтиСтроки(СтруктураПоиска);
           Если РезультатПоиска.Количество() <> 0 Тогда
               Цена = РезультатПоиска[0].Цена;
           Иначе
               Цена = 0;
           КонецЕсли;
           НоменклатураЦена.Параметры.Цена = Цена;
           ПолеТабДокумента.Присоединить(НоменклатураЦена);
       КонецЕсли;
       
       Для НомПериода = 1 По КоличествоПериодовОтчета Цикл
           НоменклатураПериод.Параметры.Количество     = СтрокаОтчета[НомПериода*2];
           НоменклатураПериод.Параметры.Сумма         = СтрокаОтчета[НомПериода*2 + 1];
           
           ВсегоМесяцевПродажи     = ВсегоМесяцевПродажи + 1;
           ТекПродажи = СтрокаОтчета[НомПериода*2];
           ИтПродажи = ИтПродажи + ТекПродажи;
           Если ТекПродажи <> 0 Тогда
               МесяцевПродажи = МесяцевПродажи + 1;
           КонецЕсли;
           ПолеТабДокумента.Присоединить(НоменклатураПериод);
       КонецЦикла;
       Остаток     = СтрокаОтчета.Остаток;
       Резерв     = СтрокаОтчета.Резерв;
       
       Если ВсегоМесяцевПродажи <> 0 Тогда
           СреднееЗаПериод     = ИтПродажи/ВсегоМесяцевПродажи;
       Иначе
           СреднееЗаПериод     = 0;
       КонецЕсли;
       Если МесяцевПродажи <> 0 Тогда
           СредняяПомесячно = ИтПродажи/МесяцевПродажи;
       Иначе
           СредняяПомесячно = 0;
       КонецЕсли;
                           
       НоменклатураИтог.Параметры.Остаток             = Остаток;
       НоменклатураИтог.Параметры.Резерв             = Резерв;
       НоменклатураИтог.Параметры.Продажи             = ИтПродажи;
       НоменклатураИтог.Параметры.СреднееЗаПериод     = СреднееЗаПериод;
       НоменклатураИтог.Параметры.МесяцевПродажи     = МесяцевПродажи;
       НоменклатураИтог.Параметры.СредняяПомесячно     = СредняяПомесячно;
       
       ПолеТабДокумента.Присоединить(НоменклатураИтог);
   КонецЦикла;
   ПолеТабДокумента.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
23 lubja
 
03.11.11
13:02
(22) выгрузи номенклатуру в массив из своего табполя и в запросе в параметрах виртуальной таблицы напиши Номенклатура В (&Параметр), где Параметр это МассивНоменклатуры. как-то так...
24 Александр_
Тверь
 
03.11.11
13:03
(22) может не в тему вопроса, но я бы отделил код получения данных и их вывода.

Подготовь данные, если требуется - распихай по таблицам, а после выводи.
25 simol
 
03.11.11
13:04
Запрос.УстановитьПараметр("Номенклатура", ПереченьНоменклатуры.Получить(ТекущаяСтрока.НомерСтроки-1).Номенклатура);


-1 потерял
26 Darhon
 
03.11.11
13:05
(25) исправил на текущаяСтрока.Номенклатура
27 Darhon
 
03.11.11
13:09
(22) Хм...а что такое виртуальная таблица эта вообще??
28 xarann
 
03.11.11
13:20