[РЕШЕНО] Как организовать 2 запроса в фарме отчета и можно ли? или нужно модифицировать 1 запрос?

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Kas-tet, 20 янв 2017.

  1. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Нужно, чтобы в отчет выводились данные остатков Товара, в отдельном отчет они выводятся, можно ли и как сделать запрос, чтобы вывести все в этом отчете? Вот Код:

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

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Можно все в один макет завернуть.
    А почему сразу остатки не выводите ?
  3. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Не знаю как)
  4. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Из регистров накоплений дергайте данные. Там и приход, и расход, и остатки
    Kas-tet нравится это.
  5. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Не подскажите, как правильнее? Сделать вложенный запрос или сделать 2 запроса? Делаю вложенный, как то не правильно выводит остатки...
  6. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Вы посмотрите какие проводки делает документ Приходная накладная, вернее по каким регистрам. Есть регистр накопления, например, ТоварыНаСкладах, вот по нему идет как приход, так и расход. Можно обойтись одним запросом из виртуальной таблицы, дергающим Начальные-Конечные остатки, а так же Обороты
  7. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Вот Код проводки документа ПриходнаяНакладная:
    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
      
        Движения.ЗакупочныеЦены.Записывать = Истина;
        Движения.ЗакупочныеЦены.Очистить();
        Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
            Движение = Движения.ЗакупочныеЦены.Добавить();
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
            Движение.Контрагент = Контрагент;
            Движение.Цена = ТекСтрокаСписокНоменклатуры.Цена;
          
            Движение = Движения.ОстаткиНоменклатуры.ДобавитьПриход();
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
            Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
            Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма;
        КонецЦикла;
    
         Движения.ОстаткиНоменклатуры.Записывать = Истина;
    КонецПроцедуры
    
    У меня дублируются записи в отчете,получается...
    Вот например док приходной накладной
    1.PNG
    И отчет
    2.PNG
  8. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Вот можете из РН ОстаткиНоменклатуры.ОстаткиИОбороты дергать данные. Можно выбирать КоличествоПриход, КоличествоРасход (это по сути и есть оборот)
  9. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    РН - это РасходнаяНакладная я так понимаю!? но в ней нету ОстаткиНоменклатуры.ОстаткиИОбороты, это поле есть только в Регистрах накопления
  10. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    РН - это регистр накопления :)
  11. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    А это правильный код записи в регистры накопления?
    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
     
        Движения.ЗакупочныеЦены.Записывать = Истина;
        Движения.ЗакупочныеЦены.Очистить();
        Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
            Движение = Движения.ЗакупочныеЦены.Добавить();
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
            Движение.Контрагент = Контрагент;
            Движение.Цена = ТекСтрокаСписокНоменклатуры.Цена;
         
            Движение = Движения.ОстаткиНоменклатуры.ДобавитьПриход();
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
            Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
            Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма;
        КонецЦикла;
    
         Движения.ОстаткиНоменклатуры.Записывать = Истина;
    КонецПроцедуры
    И код Расходной накладной, проводки, правильный?
    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
       
        Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
                   
            Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
            Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
            Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма;
        КонецЦикла;
    
         Движения.ОстаткиНоменклатуры.Записывать = Истина;
    КонецПроцедуры
    
    А то что-то не правильный остаток выводит...
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.890
    Симпатии:
    1.030
    Баллы:
    204
    /offtopic mode on/
    анекдот напомнили про вытягивание студента на экзамене:
    - Уж не в амперах ли измеряется сила тока в цепи?
    :)

    мож все же лучше литературу какую почитать по программированию 1С, не?
    /oftopic mode off/
  13. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    На первых порах лучше конструктором движений пользоваться
  14. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Я по видео урокам делал, и вроде все ном было, но нет...
    --- Объединение сообщений, 23 янв 2017 ---
    Я конструктором запроса с обработкой результата пользовался
  15. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Это вы для отчетов. Я говорил по поводу создания движений по регистрам (приход-расход)
  16. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    А вот еще, при проведении документа, все товары, что были в накладной, записываются еще раз в регистры накопления, это так и должно быть или нет?
  17. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Что значит записываются еще раз? Задвоение записей ? Такого не должно быть
  18. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Снимок.PNG
    Все, нашел где меняется...в документе приходная, в движениях надо было поставить удалять автоматически)
    Но в Отчете все равно записи дублированы
  19. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204
    Потому что разная расходная сумма и количество(это первое что бросилось в глаза). Либо убираете это поле, либо сворачиваете по регистратору. Либо выбираете обороты (там приход сторнируется расходом)
  20. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet Опытный в 1С

    Регистрация:
    30 сен 2016
    Сообщения:
    62
    Симпатии:
    1
    Баллы:
    29
    Переделал отчет, взял данные из регистра накоплений, все вроде получилось, ток там остатков на начало нету, не подскажешь как их внести? и все равно дублирует записи... Снимок.PNG
Похожие темы
  1. New1CCoder8
    Ответов:
    2
    Просмотров:
    1.984
  2. Ленок87
    Ответов:
    8
    Просмотров:
    648
  3. Yury
    Ответов:
    5
    Просмотров:
    3.023
  4. Vladius
    Ответов:
    17
    Просмотров:
    7.106
  5. Ktyf
    Ответов:
    5
    Просмотров:
    1.120
Загрузка...