8.х Отчет с группировками

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем russlix, 2 дек 2008.

  1. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Есть задача:
    Необходимо создать отчет остатков матералов в котором нужно группировать по:
    Структурным подразделениям в которых находятся работники
    Внутри работников по счетам учета.

    Структурное подразделение
    - Работник
    -- Счет учета
    --- Материал


    Вот мой код:

    Код:
    Процедура КнопкаСформироватьНажатие(Элемент)
    Макет = Отчеты.ПодробныйОтчет.ПолучитьМакет("Макет");
    ТабДок = Новый ТабличныйДокумент;
    ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
    ОбластьПодразделений = Макет.ПолучитьОбласть("Подразделение");
    ОбластьСотрудников = Макет.ПолучитьОбласть("Сотрудник");
    ОбластьМатериалов = Макет.ПолучитьОбласть("Материал");
    ОбластьСчета = Макет.ПолучитьОбласть("Счет");
    ТабДок.Вывести(ОбластьШапки);
    ЗапросСтруктурПодр = Новый Запрос;
    ЗапросСтруктурПодр.Текст =
    "ВЫБРАТЬ
    |    УправленческийОстатки.Субконто4.Наименование КАК Подразделение
    |ИЗ
    |    РегистрБухгалтерии.Управленческий.Остатки КАК УправленческийОстатки";
    ЗапросСотрудники = Новый Запрос;
    ЗапросСотрудники.Текст =
    "ВЫБРАТЬ
    |    УправленческийОстатки.Субконто3.Код КАК Код,
    |    УправленческийОстатки.Субконто3.Наименование КАК Сотрудник,
    |    УправленческийОстатки.КоличествоОстаток КАК Количество
    |ИЗ
    |    РегистрБухгалтерии.Управленческий.Остатки КАК УправленческийОстатки
    |
    |ГДЕ
    |    УправленческийОстатки.Субконто3.СтруктурноеПодразделение.Наименование = &СтруктурноеПодразделение";
    ЗапросСчет = Новый Запрос;
    ЗапросСчет.Текст =
    "ВЫБРАТЬ 
    |    УправленческийОстатки.КоличествоОстаток КАК Количество,
    |    УправленческийОстатки.Счет.Код КАК Код,
    |    УправленческийОстатки.Счет.Наименование КАК Счет
    |ИЗ
    |    РегистрБухгалтерии.Управленческий.Остатки КАК УправленческийОстатки
    |
    |ГДЕ
    |    УправленческийОстатки.Субконто3.Наименование = &Сотрудник И
    |    УправленческийОстатки.Субконто4.Наименование = &СтруктурноеПодразделение";
    ЗапросМат = Новый Запрос;
    ЗапросМат.Текст = 
    "ВЫБРАТЬ 
    |    УправленческийОстатки.КоличествоОстаток КАК Количество,
    |    УправленческийОстатки.Субконто1.Код КАК Код,
    |    УправленческийОстатки.Субконто1.Наименование КАК Материал
    |ИЗ
    |    РегистрБухгалтерии.Управленческий.Остатки КАК УправленческийОстатки
    |
    |ГДЕ
    |    УправленческийОстатки.Субконто3.Наименование = &Сотрудник И
    |    УправленческийОстатки.Субконто4.Наименование = &СтруктурноеПодразделение И
    |    УправленческийОстатки.Счет.Наименование = &Счет";
    ВыборкаПодр = ЗапросСтруктурПодр.Выполнить().Выбрать();
    Пока ВыборкаПодр.Следующий() Цикл
    //        ОбластьПодразделений.Параметры.Код = ВыборкаПодр.Код;
    ОбластьПодразделений.Параметры.Наименование = ВыборкаПодр.Подразделение;
    //        ОбластьПодразделений.Параметры.Количество = ВыборкаПодр.Количество;
    ТабДок.Вывести(ОбластьПодразделений);
    //Сообщить(""+ВыборкаПодр.Наименование+" "+ВыборкаПодр.Количество);
    ЗапросСотрудники.УстановитьПараметр("СтруктурноеПодразделение",ВыборкаПодр.Подразделение);
    ВыборкаСотр = ЗапросСотрудники.Выполнить().Выбрать();
    Пока ВыборкаСотр.Следующий() Цикл
    //            ОбластьСотрудников.Параметры.Код = ВыборкаСотр.Код;
    ОбластьСотрудников.Параметры.Наименование = ВыборкаСотр.Сотрудник;
    ОбластьСотрудников.Параметры.Количество = ВыборкаСотр.Количество;
    ТабДок.Вывести(ОбластьСотрудников);
    //Сообщить("  "+ВыборкаСотр.Сотрудник+"  "+ВыборкаСотр.Количество);
    ЗапросСчет.УстановитьПараметр("СтруктурноеПодразделение",ВыборкаПодр.Подразделение);
    ЗапросСчет.УстановитьПараметр("Сотрудник",ВыборкаСотр.Сотрудник);
    ВыборкаСчет= ЗапросСчет.Выполнить().Выбрать();
    Пока ВыборкаСчет.Следующий() Цикл
    ОбластьСчета.Параметры.Наименование = ВыборкаСчет.Код+" - "+ВыборкаСчет.Счет;
    ОбластьСчета.Параметры.Количество = ВыборкаСчет.Количество;
    ТабДок.Вывести(ОбластьСчета);
    ЗапросМат.УстановитьПараметр("СтруктурноеПодразделение",ВыборкаПодр.Подразделение);
    ЗапросМат.УстановитьПараметр("Сотрудник",ВыборкаСотр.Сотрудник);
    ЗапросМат.УстановитьПараметр("Счет",ВыборкаСчет.Счет);
    ВыборкаМат = ЗапросМат.Выполнить().Выбрать();
    Пока ВыборкаМат.Следующий() Цикл
    ОбластьМатериалов.Параметры.Код = ВыборкаМат.Код;
    ОбластьМатериалов.Параметры.Наименование = ВыборкаМат.Материал;
    ОбластьМатериалов.Параметры.Количество = ВыборкаМат.Количество;
    ТабДок.Вывести(ОбластьМатериалов);
    КонецЦикла;
    
    //Сообщить("      "+ВыборкаМат.Материал+"  "+ВыборкаМат.Количество);
    КонецЦикла;
    
    КонецЦикла;
    
    КонецЦикла;
    ТабДок.Показать();    
    КонецПроцедуры
    
    
    
    Видите сами нужно много подгрупп, для которых свой запрос и моного вложенных циклов.
    Можноли как-то упростить этот код?
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Сделай все один запросом - за запрос в цикле увольняют
  3. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Напиши вложенными запросами и вывод сделай по группировки , где имя передавай в цикл через параметр и
  4. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    В группировках не разбираюсь пока.

    ПРиведи плиз пример вложенного запроса а потом группировки.
  5. tirk
    Offline

    tirk Опытный в 1С

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

    // документы
    Выборка2 = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГРуппировкам);
    Пока выборка2.Следующий() Цикл
    //номенклатура
    Цикл;
    КонецЦикла;
    Код:
    Что то типа этого..  а вообще давай скину тебе консоль запросов.. в ней очень удобно писать запросы непосредственно из раб конфы а не из Конфигуратора)))

    Вложения:

  6. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Спасибо, сейчас буду разбарться в этом коде.
    А разве не надо в запросе указывать: ГПУППРИРОВКА ПО

    Файл скачал, про программа не может его открыть, не та версия.
  7. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    она для 8.. 0 открой ее конфигуратором сначало, она сконвентируется и все .. опля готово
  8. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Про конфигуруратор я и говорю.
    Пишет "Внешняя обработка не может быть прочитана текщей версией программы"

    Еще: Когда качаю файл - он качаеться в архиве Zip хотя вы выложили его не в архиве.
    Архив не читается. Я просто меняю разрешение на epf.
    Может в этом проблема?

    Пошли его в архиве.
  9. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    лови))

    Вложения:

    • Console.rar
      Размер файла:
      160 КБ
      Просмотров:
      63
  10. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Блин короче тоже самое пишет: "Внешняя обработка не может быть прочината текущей версисей программы"(((

    Ворсия: 8.0.8.7

    Мот проще самому написать))))
  11. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    а ты какую открываешь??
    поставь себе новую версию платформы.... и все .. в тестовой базе напиши запрос...и потом его туда кинь
  12. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Ну типа того вот :
    Код:
    ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовСКонтрагентом.Ответственный КАК Пользователь,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Контрагент КАК Контрагент,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента КАК Договор,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КАК ДопустимоеЧислоДнейЗадолженности,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовСКонтрагентом КАК Документ,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток КАК НачальныйОстаток,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК Приход,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовРасход КАК Расход,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК КонечныйОстаток
    ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты
    
    СГРУППИРОВАТЬ ПО
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовСКонтрагентом.Ответственный,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Контрагент,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовСКонтрагентом,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовПриход,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовРасход,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
    
    УПОРЯДОЧИТЬ ПО
    Пользователь,
    Документ,
    Контрагент,
    Договор,
    ДопустимоеЧислоДнейЗадолженности
    ИТОГИ
    СУММА(НачальныйОстаток),
    СУММА(Приход),
    СУММА(Расход),
    СУММА(КонечныйОстаток)
    ПО
    ОБЩИЕ,
    Пользователь,
    Контрагент,
    Договор
    
    

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