8.х Запрос

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mhl, 4 окт 2007.

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Всем привет!
    Есть запрос
    Код:
    Запрос.Текст = 
    "ВЫБРАТЬ
    |РазмещениеЗаказа.Дата КАК Дата,
    |РазмещениеЗаказа.Номер,
    |РазмещениеЗаказа.ДатаРеализации,
    .............................................................
    .............................................................
    .............................................................
    
    Мне надо поставить примерно такое условие
    Код:
    Если Месяц(Дата) = 1 Тогда 
    Запрос.Текст = Запрос.Текст +         
    "
    |УПОРЯДОЧИТЬ ПО
    |    Дата
    |ИТОГИ
    |    СУММА(ИтогоРасходМатериал),
    |    СУММА(ИтогоРасходЗарплата),
    |    СУММА(ИтогоРасходПрочее),
    |    СУММА(ПроцентНаценки),
    |    СУММА(Количество),
    |    СУММА(Наценка),
    |    СУММА(ИтогоКВыплатеФакт)
    |ПО
    |    Общие
    |АВТОУПОРЯДОЧИВАНИЕ";
    КонецЕсли;
    
    но система выдает ошибку, что не может найти дату в самой первой строке. Каким образом мне это сделать?
  2. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А где распологается код? В документе?
  3. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    В отчете ОтчетПоПроизводствуЦех, конфигурация УПП
  4. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Если поставить такое условие
    Код:
    Запрос.Текст = Запрос.Текст +         
    "
    |УПОРЯДОЧИТЬ ПО
    |    Дата
    |ИТОГИ
    |    СУММА(ИтогоРасходМатериал),
    |    СУММА(ИтогоРасходЗарплата),
    |    СУММА(ИтогоРасходПрочее),
    |    СУММА(ПроцентНаценки),
    |    СУММА(Количество),
    |    СУММА(Наценка),
    |    СУММА(ИтогоКВыплатеФакт)
    |ПО
    |    Дата
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    то итоги будут выходить после каждой строки. Как можно сделать, чтобы они выходили только после месяца. Т.е закончились даты с январем выходит итог, с февралем-итог и т.д.
  5. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Сделай выбор еще одной даты так, типа:
    Код:
    ВЫБРАТЬ
    МЕСЯЦ(РазмещениеЗаказа.Дата) КАК Месяц,
    РазмещениеЗаказа.Дата КАК Дата,
    РазмещениеЗаказа.Номер КАК Номер,
    ....
    
    
    Дальше сделай группировку по Месяц и вывод итогов по этому полю - должно сработать. А упорядочить придется сделать по Месяц, Дата
  6. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Спасибо, помогло
  7. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Код:
    Запрос.Текст = Запрос.Текст +         
    "
    |УПОРЯДОЧИТЬ ПО
    |    Месяц
    |ИТОГИ
    |    СУММА(ИтогоРасходМатериал),
    |    СУММА(ИтогоРасходЗарплата),
    |    СУММА(ИтогоРасходПрочее),
    |    СУММА(ПроцентНаценки),
    |    СУММА(Количество),
    |    СУММА(Наценка),
    |    СУММА(ИтогоКВыплатеФакт)
    |ПО
    |    Месяц
    |АВТОУПОРЯДОЧИВАНИЕ";
    .............................................................................
    .............................................................................
    ВыборкаДетали = Результат.Выбрать();
    
    Пока ВыборкаДетали.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;
    
    можно ли сделать чтобы в макете, куда выводится результат запроса итоги выделялись по цвету. И как можно приписать к ним какое-нибудь строковое значение?
  8. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    В случае, если вы сделаете группировки и выборку по группировкам, то можно будет выводить каждый уровень с разным оформлением, а так - только вручную определять какая запись у вас (итоговая или нет), в макете сделать область, аналогичную Области детальных записей по параметрам, но с другим оформлением и ручками ее дозаполнять. Код будет что-то вроде

    Если ЭТОИТОГОВАЯСТРОКА Тогда
    ОбластьИтогов.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьИтогов, ВыборкаДетали.Уровень());
    Иначе
    // Область детальных записей
    КонецЕсли;
  9. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Разве конструкция
    Итог
    ...
    По
    ...
    не является группировкой?
    Если написать такой код:
    Код:
    ВыборкаИтог= Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаИтог.Следующий() Цикл
    //Что должно быть здесь?
    ВыборкаДетали = ВыборкаИтог.Выбрать();
    Пока ВыборкаДетали.Следующий Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;
    КонецЦикла;
    
    то не совсем ясно, что должно быть в первом цикле, и в выборку попадают только те значения, которые были в Итогах запроса.
  10. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Знаете, я вам рекомендую воспользоваться такой штукой как конструктор выходных форм - сразу увидите какие группировки у вас есть и как их использовать, да и макет сразу вам сделается. А дальше редактировать.

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

    Вложения:

Поделиться этой страницей