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

Ребят нужна ваша помощь!

Автор SpiritDark, 27 мар 2012, 18:31

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

SpiritDark

Скажите пожалуйста как в Отчете в переменную положить данные из запроса. Например "Поле: сумма продаж". В 1с 7 это делалось легко: просто во время цикла в переменную закидывал поле из запроса. А в 1с 8.2 (Обычная форма) так не выходит. Просто не показывает что лежит в переменной. Заранее огромное, человеческое спасибо! :dfbbdrfb: :dfbbdrfb: :dfbbdrfb: :dfbbdrfb: :dfbbdrfb: :dfbbdrfb:

cska-fanat-kz

Запостите хотя бы как вы это делаете в 8.2...

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

SpiritDark

Код самописный! Дела такое: Идет колонка "Наши долги" И "Долги контрагентов". Надо сделать 3 колонку в которой будет складываться по дням итог колонки "Долги контрагентов".

Перем ИтогКонтр

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

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

   ВыборкаОбщийИтог.Следующий();      // Общий итог
   ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
   ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());

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

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

         ВыборкаДетальныеЗаписи = ВыборкаКонтрагенты.Выбрать();
                         
                         ИтогКонтр = 0;

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

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

         ВыборкаДетальныеЗаписи = ВыборкаКонтрагенты.Выбрать();

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

            ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
            КонецЕсли
         КонецЦикла;
      КонецЦикла;

   КОнецЕсли;
   

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);

cska-fanat-kz

К полям запроса обращаются не просто по имени
не

ДолгКонтрагента

а

ВыборкаДетальныеЗаписи.ДолгКонтрагента
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

SpiritDark

Все равно не выводит в отчет :trhregerhg: :trhregerhg: :trhregerhg: :trhregerhg: :trhregerhg:. Блин что за фигня. Может какое правило есть для создания переменной. Даже я просто уже создал переменную, и присвоил текст "123". Не выводит в отчете. В макете поставил переменную и дал заполнение "параметр". Где проблема??? :trhregerhg: :trhregerhg: :trhregerhg: :trhregerhg:

SpiritDark

Вот быстро для примера создал отчет

Перем ПП;         
ПРоцедура ТТ(ТабДок) Экспорт   
         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   Макет = Отчеты.ВедомостьПоКонтрагентам.ПолучитьМакет("Макет2");
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ОстаткиТоваровОстаткиИОбороты.Номенклатура КАК Номенклатура,
      |   ПРЕДСТАВЛЕНИЕ(ОстаткиТоваровОстаткиИОбороты.Номенклатура),
      |   ОстаткиТоваровОстаткиИОбороты.Партия,
      |   ПРЕДСТАВЛЕНИЕ(ОстаткиТоваровОстаткиИОбороты.Партия),
      |   ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток
      |ИЗ
      |   РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты КАК ОстаткиТоваровОстаткиИОбороты";

   Результат = Запрос.Выполнить();
   

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
   
   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.Вывести(ОбластьШапкаТаблицы);
   ТабДок.НачатьАвтогруппировкуСтрок();
     
   ВыборкаДетальныеЗаписи = Результат.Выбрать();

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

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

cska-fanat-kz

к параметрам области таб документа обращаться в виде:

<<ИмяОбласти>>.Параметры.<<ИмяПараметра>>

например

ОбластьДетальныхЗаписей.Параметры.ПП = "123";

ЗЫ и это естественно перед выводом области должно делаться, т.е.
перед

ТабДок.Вывести(ОбластьДетальныхЗаписей);
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

SpiritDark

cska-fanat-kz :ooifh: Спасибо дружище работает.   :zebzdr: :zebzdr: :zebzdr:

SpiritDark

Еще вопросик:
вот отрезок кода

ПП1 = ВыборкаДетальныеЗаписи.УменьшениеДолга;
               ПП2 = ПП2 + ПП1;
               ОбластьДетальныхЗаписей.Параметры.ПП = ПП2;
Но при выводе пишет что (Преобразование к типу число не может быть выполнено).
Как сделать ПП1 числом???

SpiritDark

Цитата: SpiritDark от 28 мар 2012, 09:42
Еще вопросик:
вот отрезок кода

ПП1 = ВыборкаДетальныеЗаписи.УменьшениеДолга;
               ПП2 = ПП2 + ПП1;
               ОбластьДетальныхЗаписей.Параметры.ПП = ПП2;
Но при выводе пишет что (Преобразование к типу число не может быть выполнено).
Как сделать ПП1 числом???



Все вопрос решен спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск