|
Цикл со второй строки таблицы.... | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |