7.7 Отчет по проектам

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

  1. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Имеется Комплексная конф. 7.7 рел. 501
    Есть самописный отчет (писал предыдущий программист). Попросили его усовершенствовать. Нужно, чтобы в отчет попадали документы вида: Ввод начальных остатков по покупателю, Сторно, Корректировка долга покупателя.
    Не могу сообразить, как правильно задать условие, чтобы учитывалась операция документа. Ведь Ввод остатков может быть как приходом, так и расходом.
    Буду рада любым подсказкам.

    Код:
     Процедура СформироватьКонтрагенты ()
    
    Запрос = СоздатьОбъект ("Запрос");    
    
    ТекстЗапроса = "
    |  Период с Дата1 по Дата2;
    |  ДокРасх = Документ.РеализацияРозница.ТекущийДокумент, Документ.Реализация.ТекущийДокумент;
    |  ДокПрих = Документ.СтрокаВыпискиПриход.ТекущийДокумент, Документ.ПКО.ТекущийДокумент, Документ.ВводОстатковПокупателя.ТекущийДокумент;
    |  Контрагент = Документ.РеализацияРозница.Контрагент, Документ.Реализация.Контрагент, Документ.СтрокаВыпискиПриход.Контрагент, Документ.ПКО.Контрагент, Документ.ВводОстатковПокупателя.Контрагент;
    |  Проект = Документ.РеализацияРозница.Проект, Документ.Реализация.Проект, Документ.СтрокаВыпискиПриход.Проект, Документ.ПКО.Проект, Документ.ВводОстатковПокупателя.Проект;
    |  Док = Документ.РеализацияРозница.ТекущийДокумент, Документ.Реализация.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ТекущийДокумент, Документ.ПКО.ТекущийДокумент, Документ.ВводОстатковПокупателя.ТекущийДокумент;
    |  СРасх = Документ.РеализацияРозница.СуммаВзаиморасчетов, Документ.Реализация.СуммаВзаиморасчетов;    
    |  СПрих = Документ.СтрокаВыпискиПриход.СуммаВзаиморасчетов, Документ.ПКО.СуммаВзаиморасчетов;
    |  Функция СуммаПрих  = Сумма(СПрих);
    |  Функция СуммаРасх  = Сумма(СРасх);";
    
    ТекстЗапроса = ТекстЗапроса + "Группировка Проект;";    
    ТекстЗапроса = ТекстЗапроса + "Группировка Контрагент без групп;";
    ТекстЗапроса = ТекстЗапроса + "Группировка Док;";
    
    Если ПустоеЗначение (Прт) = 0 Тогда
    
    ТекстЗапроса = ТекстЗапроса + "Условие (Проект = Прт);";
    
    КонецЕсли;
    
    Если ПустоеЗначение (Кнтр) = 0 Тогда
    
    ТекстЗапроса = ТекстЗапроса + "Условие (Контрагент = Кнтр);";
    
    КонецЕсли;
    
    Флаг = Запрос.Выполнить (ТекстЗапроса);
    
    Таб = СоздатьОбъект ("Таблица");    
    Таб.ВывестиСекцию ("Заголовок");
    
    Н = "";
    
    Пока Запрос.Группировка ("Проект") = 1 Цикл
    
    Таб.ВывестиСекцию ("Проект");
    
    Пока Запрос.Группировка ("Контрагент") = 1 Цикл
    
    Если ПЛО = 1 Тогда
    
    Сальдо = (Запрос.СуммаПрих - Запрос.СуммаРасх);
    
    Если Сальдо = 0 Тогда
    
    Продолжить;
    
    КонецЕсли;
    
    КонецЕсли;
    
    Таб.ВывестиСекцию ("Контрагент");
    
    Пока Запрос.Группировка ("Док") = 1 Цикл
    
    Если Запрос.Док.Вид () = "СтрокаВыпискиПриход" Тогда
    
    Таб.ВывестиСекцию ("СтрокаП1");
    
    ИначеЕсли Запрос.Док.Вид () = "ПКО" Тогда
    
    Таб.ВывестиСекцию ("СтрокаП1");
    
    ИначеЕсли Запрос.Док.Вид () = "Реализация" Тогда
    
    Таб.ВывестиСекцию ("СтрокаР1");
    
    ИначеЕсли Запрос.Док.Вид () = "РеализацияРозница" Тогда
    
    Таб.ВывестиСекцию ("СтрокаР1");
    
    КонецЕсли;                    
    
    КонецЦикла;
    
    КонецЦикла;
    
    КонецЦикла;
    
    Таб.Опции(0,0,4,0);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Отчет по проектам","");
    
    КонецПроцедуры
    
    Дата1 = ТекущаяДата ();
    Дата2 = ТекущаяДата ();
    
  2. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Вот что у меня получилось с Вводом остатков и корректировкой долга:
    Код:
    Процедура СформироватьКонтрагенты ()
    
    Запрос = СоздатьОбъект ("Запрос");    
    
    ТекстЗапроса = "
    |  Период с Дата1 по Дата2;
    |  ДокРасх = Документ.РеализацияРозница.ТекущийДокумент, Документ.Реализация.ТекущийДокумент,Документ.ВводОстатковПокупателя.ТекущийДокумент,Документ.КорректировкаДолга.ТекущийДокумент;
    |  ДокПрих = Документ.СтрокаВыпискиПриход.ТекущийДокумент, Документ.ПКО.ТекущийДокумент, Документ.ВводОстатковПокупателя.ТекущийДокумент,Документ.КорректировкаДолга.ТекущийДокумент;
    |  Контрагент = Документ.РеализацияРозница.Контрагент, Документ.Реализация.Контрагент, Документ.СтрокаВыпискиПриход.Контрагент, Документ.ПКО.Контрагент, Документ.ВводОстатковПокупателя.Контрагент, Документ.КорректировкаДолга.Контрагент;
    |  Проект = Документ.РеализацияРозница.Проект, Документ.Реализация.Проект, Документ.СтрокаВыпискиПриход.Проект, Документ.ПКО.Проект, Документ.ВводОстатковПокупателя.Проект,Документ.КорректировкаДолга.Проект;
    |  Док = Документ.РеализацияРозница.ТекущийДокумент, Документ.Реализация.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ТекущийДокумент, Документ.ПКО.ТекущийДокумент, Документ.ВводОстатковПокупателя.ТекущийДокумент,Документ.КорректировкаДолга.ТекущийДокумент;
    |  ВидОперВвод = Документ.ВводОстатковПокупателя.ВидОперации;
    |  ВидОперКорр = Документ.КорректировкаДолга.ВидОперации;
    |  ССуммаВводОстатков =  Документ.ВводОстатковПокупателя.СуммаРуб;
    |  ССуммаКорр =  Документ.КорректировкаДолга.Сумма;
    |  СРасх = Документ.РеализацияРозница.СуммаВзаиморасчетов, Документ.Реализация.СуммаВзаиморасчетов;	
    |  СПрих = Документ.СтрокаВыпискиПриход.СуммаВзаиморасчетов, Документ.ПКО.СуммаВзаиморасчетов;
    |  Функция СуммаПрих  = Сумма(СПрих);
    |  Функция СуммаРасх  = Сумма(СРасх);
    |  Функция СуммаПрихВвод = Сумма(ССуммаВводОстатков) Когда (ВидОперВвод = Перечисление.ВидыОперацийПоВводуОстатков.ОстаткиДолгаПокупателяНам);
    |  Функция СуммаРасхВвод  = Сумма(ССуммаВводОстатков) Когда (ВидОперВвод = Перечисление.ВидыОперацийПоВводуОстатков.ОстаткиДолгаПокупателю);
    |  Функция СуммаКоррПрих = Сумма(ССуммаКорр) Когда ((ВидОперКорр = Перечисление.ВидыОперацийКоррДолга.Покупатель) и (ССуммаКорр<0));
    |  Функция СуммаКоррРасх = Сумма(ССуммаКорр) Когда ((ВидОперКорр = Перечисление.ВидыОперацийКоррДолга.Покупатель) и (ССуммаКорр>0));";
    
    А как Сторно сделать, не могу сообразить.
  3. Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    надо данные из документа "сторно" достать?
  4. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    ну да. и в зависимости от того, какой документ сторнируется, отнести сумму в приход или расход.
  5. Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Сорно ведь по 2-м регистрам проводки делает: КнигаПокупок и КнигаПродаж? в зависимости какие суммы вам надо вы их от туда и берите.
  6. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Снова поднимаю тему.

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

    Вложения:

  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не правильно считается ИТОГОВАЯ сумма (т.к. просто сумма выводится)?
    Кстати - в вашем отчете вы НЕ учитываете что сторно может не отражаться в книге покупок/продаж или это не принципиально?
  8. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Получается, что так. Можно с этим что-то сделать?

    Не принципиально.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно. В итоги выводятся тезультаты запроса (без учета сторно) Поэтому-то и некорректно.
    Способ больбы только 1 - выгружать результаты запроса в ТаблицуЗначений (с учетом сторно) И уже ее выводить в отчет (с группировками)
  10. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Что-то туплю сильно. Не могу понять, как вытянуть данные из запроса.

    Вот что получилось:
    Код:
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ДатаДоку"); 
    ТЗ.НоваяКолонка("НомерДоку"); 
    ТЗ.НоваяКолонка("Док","Документ");
    ТЗ.НоваяКолонка("Проект", "Справочник.Проекты");
    ТЗ.НоваяКолонка("Контрагент","Справочник.Контрагенты");
    ТЗ.НоваяКолонка("Информация");
    ТЗ.НоваяКолонка("Приход","Число", 12,2);
    ТЗ.НоваяКолонка("Расход","Число", 12,2);
    ТЗ.НоваяКолонка("Сальдо","Число", 12,2); 
    
    Флаг = Запрос.Выполнить (ТекстЗапроса);
    Запрос.Выгрузить(ТЗ);
    
    Пока Запрос.Получить("Проект","Контрагент",) = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.ДатаДоку = Запрос.Док.ДатаДок;
    ТЗ.НомерДоку = Запрос.Док.НомерДок;
    ТЗ.Док = Запрос.Док;
    ТЗ.Проект = Запрос.Проект;
    Если Запрос.Док.Вид() = "Сторно" Тогда
    ТЗ.Контрагент = ТЗ.Док.СторнируемыйДокумент.Контрагент;
    Иначе
    ТЗ.Контрагент = Запрос.Контрагент;
    КонецЕсли;
    КонецЦикла;
    
    
    
    это еще совсем недоделано... просто в правильном ли я направлении иду?
    И еще вопрос. Вот с Приходом и Расходом - нужно на каждое значение, как в запросе отдельную колонку ( СуммаПрих, СуммаРасх, СуммаПрихВвод, СуммаКоррПрих и т.д.) или Можно просто сделать колонки Приход и Расход?
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Проще использовать метод запроса Выгрузить. И в ней уже производить группировку
    2) Правильнее 2 колонки - Приход/Расход
  12. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Так?
    Пока Запрос.Выгрузить(ТЗ) = 1 Цикл
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    //создаем объект выгрузки
    ТЗ=СоздатьОбъект("ТаблицаЗначений")
    //итоги из запроса НЕ выгружаем т.к. они не актуальны из-за сторно
    Запрос.Выгрузить(ТЗ,0,0);
    //любуемся промежуточным результатом
    ТЗ.ВыбратьСтроку();
    
    
    далее предстоит кропотливая работа если итоги нужны СВЕРХУ. Если внизу - плевое дело.
  14. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Колонки создавать после ТЗ=СоздатьОбъект("ТаблицаЗначений")
    или после ТЗ.ВыбратьСтроку();

    А то у меня что-то ошибку выдет.
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В данной ситуации колонки отчета ПОКА не важны)))
    Вы еще не поределились с формированием. Как вам нужно - итоги сверху или снизу?
  16. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    желательно сверху
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    тогода вам нужно:
    1) Выгружаме нашу ТЗ в промежуточную (Тмп)
    2) Тмп "пробежаться" в цикле и пересчитать строки с учетом сторно
    3) Вот теперь вываодим ТЗ (итоги берем уже из Тмп используя группировки и сметод Свернуть)
  18. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    по п.2
    Пытаюсь сделать вот так:
    Код:
    Если Тмп.Док.Вид() = "Сторно" Тогда
    Если Тмп.Док.СторнируемыйДокумент.Вид() = "СтрокаВыпискиПриход" Тогда
    Тмп.УстановитьЗначение(Тмп.ТекущаяСтрока(),Тмп.СуммаРасх,Тмп.Док.СторнируемыйДокумент.СуммаВзаиморасчетов);
    КонецЕсли;
    КонецЕсли;
    
    Выдает ошибку: Тмп.УстановитьЗначение(Тмп.ТекущаяСтрока(),Тмп.СуммаРасх, Тмп.Док.СторнируемыйДокумент.СуммаВзаиморасчетов);
    {D:\1С_БАЗЫ_ДЛЯ_РАБОТЫ\ЭФФЕКТ\25102010_1\EF1\EXTFORMS\ОТЧЕТПОПРОЕКТАМ_ТЗ.ERT(71)}: Номер за пределами значения!
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ТекущаяСтрока установливает или определяет текущий элемент в поле ДИАЛОГА (т.е. формы). Воспользуйтесь атрибутом НомерСтроки
  20. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    А так ход мысли у меня правильный?

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