8.х Отчет реализация-затраты (по проектам)

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

  1. TopicStarter Overlay
    fox_haus
    Offline

    fox_haus

    Регистрация:
    2 янв 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Помогите с отчетом. Создаю отчет такого типа : сумма реализаций по проектам - сумма затрат по проектам (без учета организаций)= Прибыль по проекту. В строках где нет затрат, а только сумма реализаций по проектам прибыль не считается и в строках где нет суммы реализаций а есть только сумма затрат - прибыль то же не считается. Строки правильно считаются ТОЛЬКО где есть сумма реализации и сумма затрат. Отчет создаю через схему компановки данных. Ниже привожу код запроса:

    ВЫБРАТЬ
    ЗатратыОбороты.Заказ КАК ДокументЗатрат,
    ЗатратыОбороты.СуммаОборот КАК СуммаЗатрат,
    ПродажиОбороты.Проект,
    ПродажиОбороты.СтоимостьОборот КАК СуммаПродаж,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.СтоимостьОборот - ЗатратыОбороты.СуммаОборот КАК Прибыль
    ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты КАК ЗатратыОбороты
    ПО ПродажиОбороты.Проект = ЗатратыОбороты.Заказ.Проект

    СГРУППИРОВАТЬ ПО
    ЗатратыОбороты.Заказ,
    ПродажиОбороты.Проект,
    ПродажиОбороты.ДокументПродажи,
    ЗатратыОбороты.СуммаОборот,
    ПродажиОбороты.СтоимостьОборот
  2. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    Код:
    ВЫБРАТЬ
    ЗатратыОбороты.Заказ КАК ДокументЗатрат,
    ЕСТЬNULL(ЗатратыОбороты.СуммаОборот,0) КАК СуммаЗатрат,
    ПродажиОбороты.Проект,
    ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот,0) КАК СуммаПродаж,
    ПродажиОбороты.ДокументПродажи,
    ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот,0) - ЕСТЬNULL(ЗатратыОбороты.СуммаОборот,0) КАК Прибыль
    ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты КАК ЗатратыОбороты
    ПО ПродажиОбороты.Проект = ЗатратыОбороты.Заказ.Проект
    
    СГРУППИРОВАТЬ ПО
    ЗатратыОбороты.Заказ,
    ПродажиОбороты.Проект,
    ПродажиОбороты.ДокументПродажи,
    ЗатратыОбороты.СуммаОборот,
    ПродажиОбороты.СтоимостьОборот
    
    
    
    быть может вам внутреннее соединение нужно? и группировочка у вас странная
  3. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
    ВЫБРАТЬ
    ПродажиОбороты.Проект,
    ПродажиОбороты.СтоимостьОборот - ЗатратыОбороты.СуммаОборот КАК Прибыль
    ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты КАК ЗатратыОбороты
    ПО ПродажиОбороты.Проект = ЗатратыОбороты.Заказ.Проект
    
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Проект
    
    
    Если у Вас отчет по проектам, то зачем вам остальные группировки? Если не только по проектам, то укажите какая еще детализация нужна. Но в любом случае не надо включать в группировки суммируемые поля!
  4. TopicStarter Overlay
    fox_haus
    Offline

    fox_haus

    Регистрация:
    2 янв 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Спасибо отчет заработал. А по поводу группировок я подумаю
  5. TopicStarter Overlay
    fox_haus
    Offline

    fox_haus

    Регистрация:
    2 янв 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Что Ваш вариант у меня не работает, но все равно спасибо.
  6. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Сори не проверял в работе:
    Код:
    ВЫБРАТЬ
    ПродажиОбороты.Проект,
    СУММА(ПродажиОбороты.СтоимостьОборот - ЗатратыОбороты.СуммаОборот) КАК Прибыль
    ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты КАК ЗатратыОбороты
    ПО ПродажиОбороты.Проект = ЗатратыОбороты.Заказ.Проект
    
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Проект
    
    
    Так должен :)
  7. TopicStarter Overlay
    fox_haus
    Offline

    fox_haus

    Регистрация:
    2 янв 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    В вашем запросе ошибка, если оборот затрат или оборот реализации = 0 то прибыль не считается (смотрите выше мне прислали ответ с еслиNULL .... там все работает).
  8. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    А так? :unsure:
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВЫБОР
    КОГДА ПродажиОбороты.Проект ЕСТЬ NULL 
    ТОГДА ЗатратыОбороты.Проект
    ИНАЧЕ ПродажиОбороты.Проект
    КОНЕЦ КАК Проект,
    ВЫБОР
    КОГДА ПродажиОбороты.СтоимостьОборот ЕСТЬ NULL 
    ТОГДА 0
    ИНАЧЕ ПродажиОбороты.СтоимостьОборот
    КОНЕЦ - ВЫБОР
    КОГДА ЗатратыОбороты.СуммаОборот ЕСТЬ NULL 
    ТОГДА 0
    ИНАЧЕ ЗатратыОбороты.СуммаОборот
    КОНЕЦ КАК Прибыль
    ПОМЕСТИТЬ ИЗРегистров
    ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты КАК ЗатратыОбороты
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/по')">		ПО ПродажиОбороты.Проект = ЗатратыОбороты.Проект;</span>
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ИЗРегистров.Проект,
    СУММА(ИЗРегистров.Прибыль) КАК Прибыль
    ИЗ
    ИЗРегистров КАК ИЗРегистров
    
    СГРУППИРОВАТЬ ПО
    ИЗРегистров.Проект
    
    
  9. TopicStarter Overlay
    fox_haus
    Offline

    fox_haus

    Регистрация:
    2 янв 2010
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Спасибо за ответ, ваш вариант проверяю в консоли запросов и он не работает. (может я что то неправильно делаю??)
  10. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    У меня тоже не работает. Если конфигурация стандартная, то в регистре "Затраты" нету поля "Проект". Поэтому нормально протестировать не могу.
    Тоже самое, только вместо Проекта взять подразделение:
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВЫБОР
    КОГДА ПродажиОбороты.Подразделение ЕСТЬ NULL 
    ТОГДА ЗатратыОбороты.Подразделение
    ИНАЧЕ ПродажиОбороты.Подразделение
    КОНЕЦ КАК Проект,
    ВЫБОР
    КОГДА ПродажиОбороты.СтоимостьОборот ЕСТЬ NULL 
    ТОГДА 0
    ИНАЧЕ ПродажиОбороты.СтоимостьОборот
    КОНЕЦ - ВЫБОР
    КОГДА ЗатратыОбороты.СуммаОборот ЕСТЬ NULL 
    ТОГДА 0
    ИНАЧЕ ЗатратыОбороты.СуммаОборот
    КОНЕЦ КАК Прибыль
    ПОМЕСТИТЬ ИЗРегистров
    ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Затраты.Обороты КАК ЗатратыОбороты
    ПО ПродажиОбороты.Подразделение = ЗатратыОбороты.Подразделение;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ИЗРегистров.Проект,
    СУММА(ИЗРегистров.Прибыль) КАК Прибыль
    ИЗ
    ИЗРегистров КАК ИЗРегистров
    
    СГРУППИРОВАТЬ ПО
    ИЗРегистров.Проект
    
    
    То у меня на стандартной все ОК
    Правда может быть еще проблема с правами. Попробуйте первую строку поменять. Вместо "ВЫБРАТЬ РАЗРЕШЕННЫЕ", написать "ВЫБРАТЬ"
  11. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    1)Пользуйтесь функцией ЕСТЬNULL(,)! зачем напрягаете условный оператор и грамоздите тест запроса?
    2)вместо временной таблицы воспользутесь итогами
  12. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    По п. 1 - согласен.
    По п. 2, итоги это тоже временная таблица :) здесь разницы никакой...
  13. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    хм, а откуда такая информация, интересно? :)
    и всётаки терзают меня сомнения по поводу полного соединения :(
  14. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Точно могут сказать только разработчики. Но есть косвенные признаки:
    1. Нельзя сохранить запрос с итогами во временную таблицу. Если бы это была одна физическая таблица, я думаю проблем бы не было.
    2. Получение итогов при разборе запроса в любом порядке. Значит должны создаваться физически дополнительные поля, для отбора вхождения в итоги, индексы и т.д. В общем не самый легкий в смысле расчета и получения данных механизм. С этой точки зрения, временная таблица все таки эффективнее.

    Полное соединение нужно т.к. могут быть продажи без себестоимости и, например, создан документ, который в Затраты вносит информацию, а реализация не отражает.

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