Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 03:20

Поспособствуйте найти ошибку в цикле please

Автор proofet, 04 апр 2011, 23:58

0 Пользователей и 1 гость просматривают эту тему.

proofet

В табличный документ выводится список номенклатуры два раза...вначале (здесь все ОК) вся номенклатура подряд....И далее эта же номенклатура выводится но уже в алфавитном порядке, ...всё выполняется как мне нужно, только вот в последнем цикле  должна заполняться параметр номенклатура в макете:
  Пока ДетальнаяВыборка.Следующий() Цикл
АПереченьНоменклатуры.Параметры.Заполнить(ДетальнаяВыборка);

АПереченьНоменклатуры.Параметры.Номенклатура = ДетальнаяВыборка.Номенклатура;
    ТабДок.Вывести(АПереченьНоменклатуры);

КонецЦикла;

   Но этого не происходит...,ЧТО СДЕЛАЛ НЕ ТАК В НЁМ ?  :mellow:
Процедура СформироватьОтчетНажатие(Элемент)
    НачалоПериода = ЭлементыФормы.ДатаНачала;
КонецПериода = ЭлементыФормы.ДатаОкончания;
Макет1 = Отчеты.ОтчетПоКассеВМакете.ПолучитьМакет("Макет1");

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

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода.Значение);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода.Значение);


ТабДок = ЭлементыФормы.ПереченьНоменклатуры;
                     
//Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбщееКолВо = Выборка.Количество();
ОбластьЗаголовок = Макет1.ПолучитьОбласть("Заголовок");
ОбластьПереченьНоменклатурыШапка = Макет1.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклатуры = Макет1.ПолучитьОбласть("ПереченьНоменклатуры");
АПереченьНоменклатуры = Макет1.ПолучитьОбласть("АПереченьНоменклатуры");
АПереченьНоменклатурыШапка = Макет1.ПолучитьОбласть("АПереченьНоменклатурыШапка");
АВсего = Макет1.ПолучитьОбласть("АВсего");
ОбластьБуква = Макет1.ПолучитьОбласть("ОбластьБуква");
ОбластьИтог = Макет1.ПолучитьОбласть("Всего");
ТабДок.Очистить();
   
ВставлятьРазделительСтраниц = Ложь;

СуммаНачальныйОстаток = 0;
СуммаОборот = 0;
СуммаКонечныйОстаток = 0;

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьПереченьНоменклатурыШапка);

Для Индекс = 1 По ОбщееКолВо  Цикл
Выборка.Следующий();
           
ОбластьПереченьНоменклатуры.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьПереченьНоменклатуры, Выборка.Уровень());

СуммаНачальныйОстаток = СуммаНачальныйОстаток + Выборка.НачальныйОстаток;
СуммаОборот = СуммаОборот + Выборка.Оборот;
СуммаКонечныйОстаток = СуммаКонечныйОстаток + Выборка.КонечныйОстаток;
Если Индекс = ОбщееКолВо - 1 Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
КонецЦикла;




ОбластьИтог.Параметры.ВсегоНачальныйОстаток = СуммаНачальныйОстаток;
ОбластьИтог.Параметры.ВсегоОборот = СуммаОборот;
        ОбластьИтог.Параметры.ВсегоКонечныйОстаток = СуммаКонечныйОстаток;

ТабДок.Вывести(ОбластьИтог);

ВставлятьРазделительСтраниц = Истина;

Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
ОбластьБуква.Параметры.Буква = Выборка.Буква;
ТабДок.Вывести(ОбластьБуква);
ТабДок.Вывести(АПереченьНоменклатурыШапка);
ДетальнаяВыборка = Выборка.Выбрать();

            Пока ДетальнаяВыборка.Следующий() Цикл
АПереченьНоменклатуры.Параметры.Заполнить(ДетальнаяВыборка);

АПереченьНоменклатуры.Параметры.Номенклатура = ДетальнаяВыборка.Номенклатура;
    ТабДок.Вывести(АПереченьНоменклатуры);

КонецЦикла;

         

КонецЦикла;

   

КонецПроцедуры


proofet

вопрос понятен ? пояснить может быть еще какие то моменты ? или выгрузить dt

proofet




Цитата: sergejK74 от 06 апр 2011, 09:57
Я зарекся читать электронные сканы,поэтому есть в бумажном. Найти ее в электронном не проблема.https://forum-baza.ru/index.php?topic=1444.msg23894#msg23894 Стр. 135
Ты имеешь ввиду Радченко, пособие разработчика по 8.2 ?...у меня есть в бумажном оно. Не совсем понятно  что ты имеешь ввиду...я читал 135 страницу, но так и не могу понять в чем ошибка..

proofet


Klyacksa

Но в запросе же нет поля Номенклатура :) Поэтому и не заполняет.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

"Этот ответ я писал совсем в другую тему. Да видимо чего-то напутал. Если хочешь выложи dt"

Я тему разделил, а ты в это время сообщение писал )
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

proofet

Цитата: Klyacksa от 06 апр 2011, 20:18
Но в запросе же нет поля Номенклатура :) Поэтому и не заполняет.
СпрНоменклатура.Наименование синоним Номенклатура давал....просто при копировании видимо не всё поле выделил. В общем не в этом проблема....платформа вообще не выдает ошибок ни на запрос не на код вообще.....Что то еще может быть?

proofet

Процедура СформироватьОтчетНажатие(Элемент)
    НачалоПериода = ЭлементыФормы.ДатаНачала;
КонецПериода = ЭлементыФормы.ДатаОкончания;
Макет1 = Отчеты.ОтчетПоКассеВМакете.ПолучитьМакет("Макет1");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ЕСТЬNULL(КассаОстаткиИОбороты.СтоимостьНачальныйОстаток, 0)) КАК НачальныйОстаток,
| СУММА(ЕСТЬNULL(КассаОстаткиИОбороты.СтоимостьОборот, 0)) КАК Оборот,
| СУММА(ЕСТЬNULL(КассаОстаткиИОбороты.СтоимостьКонечныйОстаток, 0)) КАК КонечныйОстаток,
| СпрНоменклатура.Наименование КАК Номенклатура,
| ПОДСТРОКА(СпрНоменклатура.Наименование, 1, 1) КАК Буква
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Касса.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК КассаОстаткиИОбороты
| ПО СпрНоменклатура.Ссылка = КассаОстаткиИОбороты.Номенклатура
|ГДЕ
| СпрНоменклатура.ЭтоГруппа = ЛОЖЬ
| И КассаОстаткиИОбороты.СтоимостьОборот <> 0
|
|СГРУППИРОВАТЬ ПО
| СпрНоменклатура.Наименование
|
|УПОРЯДОЧИТЬ ПО
| Буква
|АВТОУПОРЯДОЧИВАНИЕ";

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода.Значение);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода.Значение);


ТабДок = ЭлементыФормы.ПереченьНоменклатуры;
                     
//Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбщееКолВо = Выборка.Количество();
ОбластьЗаголовок = Макет1.ПолучитьОбласть("Заголовок");
ОбластьПереченьНоменклатурыШапка = Макет1.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклатуры = Макет1.ПолучитьОбласть("ПереченьНоменклатуры");
АПереченьНоменклатуры = Макет1.ПолучитьОбласть("АПереченьНоменклатуры");
АПереченьНоменклатурыШапка = Макет1.ПолучитьОбласть("АПереченьНоменклатурыШапка");
АВсего = Макет1.ПолучитьОбласть("АВсего");
АЗаголовок = Макет1.ПолучитьОбласть("АЗаголовок");
ОбластьБуква = Макет1.ПолучитьОбласть("ОбластьБуква");
ОбластьИтог = Макет1.ПолучитьОбласть("Всего");
ТабДок.Очистить();
   
ВставлятьРазделительСтраниц = Ложь;

СуммаНачальныйОстаток = 0;
СуммаОборот = 0;
СуммаКонечныйОстаток = 0;

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьПереченьНоменклатурыШапка);

Для Индекс = 1 По ОбщееКолВо  Цикл
Выборка.Следующий();
           
ОбластьПереченьНоменклатуры.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьПереченьНоменклатуры, Выборка.Уровень());
    СуммаНачальныйОстаток = СуммаНачальныйОстаток + Выборка.НачальныйОстаток;
СуммаОборот = СуммаОборот + Выборка.Оборот;
СуммаКонечныйОстаток = СуммаКонечныйОстаток + Выборка.КонечныйОстаток;
Если Индекс = ОбщееКолВо - 1 Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
     
КонецЦикла;




ОбластьИтог.Параметры.ВсегоНачальныйОстаток = СуммаНачальныйОстаток;
ОбластьИтог.Параметры.ВсегоОборот = СуммаОборот;
        ОбластьИтог.Параметры.ВсегоКонечныйОстаток = СуммаКонечныйОстаток;

ТабДок.Вывести(ОбластьИтог);

        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
                 ТабДок.Вывести(АЗаголовок);
//////////////////////////////////////////////////////////////
////                                                     /////
///////////                                                      ////////////////////////
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);    /////////////////////////////
Пока Выборка.Следующий() Цикл

ОбластьБуква.Параметры.Буква = Выборка.Буква;
ТабДок.Вывести(ОбластьБуква);
ТабДок.Вывести(АПереченьНоменклатурыШапка);
//ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ДетальнаяВыборка = Выборка.Выбрать();
         
            Пока ДетальнаяВыборка.Следующий() Цикл


АПереченьНоменклатуры.Параметры.Номенклатура = ДетальнаяВыборка.Номенклатура;
АПереченьНоменклатуры.Параметры.НачальныйОстаток = ДетальнаяВыборка.НачальныйОстаток;
АПереченьНоменклатуры.Параметры.Оборот = ДетальнаяВыборка.Оборот;
АПереченьНоменклатуры.Параметры.КонечныйОстаток = ДетальнаяВыборка.КонечныйОстаток;
//АПерНом = ДетальнаяВыборка.Наименование;
ТабДок.Вывести(АПереченьНоменклатуры);
КонецЦикла;


КонецЦикла;



КонецПроцедуры


Klyacksa

Поставь точку останова на строку заполнения номенклатуры:
АПереченьНоменклатуры.Параметры.Номенклатура = ДетальнаяВыборка.Номенклатура;
И посмотри, какое принимает значение
ДетальнаяВыборка.Номенклатура
и сама ДетальнаяВыборка - какие есть колонки, какие заполнены и т.д.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск