7.7 Ошибка внешнего отчета 1С 7.7

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Дмитрий Игоревич, 18 май 2013.

  1. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Добрый День есть внешний отчет, считающий параметры, из документа выгрузки, работает не правильно если делаем по конкретному ЦФО + подразделение, если по всем все хорошо работает, помогите найти ошибку или подскажите в каком направление думать, буду при много благодарен!, вот код:
    Код:
    //*******************************************
    Перем ДатаПланирования;
    Перем Запрос, ТекстЗапроса, Таб,ВыбНачПериода,ВыбКонПериода;  
    //Если есть Закрпепленные ЦФО подстовляет их
    Функция ПолучитьКодРодителя(ИсходныйЭлемент)
    Элем=ИсходныйЭлемент;
    Пока Элем.Уровень()<>1 Цикл
    Элем=Элем.Родитель;
    КонецЦикла;
    Код=Число(Элем.Кодстатьи);
    Возврат(Код);
    КонецФункции
    //
    //Процедура ПриВыбореОтветственногоЛица()
    // СписокЦФО.УдалитьВсе();
    // Док=СоздатьОбъект("Справочник.ЦФО");
    // Док.ВыбратьЭлементы();
    // Пока Док.ПолучитьЭлемент()=1 Цикл
    //  Если Док.ПометкаУдаления()=1 тогда
    //   продолжить;
    //  КонецЕсли;
    //  Если (Док.ОтветственноеЛицо = ВыбОтветственныеЛица) Тогда
    //   СписокЦФО.ДобавитьЗначение(Док);
    //  КонецЕсли;
    // КонецЦикла;
    //КонецПроцедуры
    
    Процедура ПриВыбореОтветственногоЛица()
    
    СписокЦФО.УдалитьВсе();
    Док=СоздатьОбъект("Документ.БюджетнаяЗаявка");
    Док.ВыбратьДокументы(ДобавитьМесяц(НачМесяца(ДатаПланирования),-1),ДобавитьМесяц(КонМесяца(ДатаПланирования),-1));
    Пока Док.ПолучитьДокумент()=1 Цикл
    Если Док.Проведен()=0 тогда
    продолжить;
    КонецЕсли;
    
    Если ((Док.ДатаПланирования=ДатаПланирования) и (Док.ОтветственноеЛицо = ВыбОтветственныеЛица)) тогда
    СписокЦФО.ДобавитьЗначение(Док.ЦФО);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    //////////////////////////////////////////////////////////////  Общие функции подбора ЦФО
    
    Процедура Добавить()
    ОткрытьПодбор("Справочник.ЦФО",,,1);
    КонецПроцедуры
    
    Процедура Удалить()
    СписокЦФО.УдалитьЗначение(СписокЦФО.ТекущаяСтрока());
    КонецПроцедуры
    
    Процедура Очистить()
    СписокЦФО.УдалитьВсе();
    КонецПроцедуры
    Процедура ОбработкаПодбора(Зн)
    СписокЦФО.ДобавитьЗначение(Зн);
    КонецПроцедуры
    ////////////////////////////////////////////////////////////
    
    Процедура ВпередМесяц(КолМесяцев)
    ДатаПланирования=ДобавитьМесяц(ДатаПланирования,КолМесяцев);
    ТекстПериода = ПериодСтр(НачМесяца(ДатаПланирования),КонМесяца(ДатаПланирования));
    КонецПроцедуры
    
    Функция РассчитатьМаржинальнуюПрибыль(ТаблицаРасчетов)
    /// Ищем 1 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    Выручка=ТаблицаРасчетов.СуммаСумма;
    Иначе
    Выручка=0;
    КонецЕсли;
    
    
    /// Ищем 2 строку
    
    Если Спр.НайтиПоНаименованию("СЕБЕСТОИМОСТЬ РЕАЛИЗАЦИИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель СЕБЕСТОИМОСТЬ РЕАЛИЗАЦИИ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    Себестоимость=ТаблицаРасчетов.СуммаСумма;
    Иначе
    Себестоимость=0;
    КонецЕсли;
    
    
    возврат(выручка-себестоимость);
    
    КонецФункции
    
    // Расчет маржинальной прибыли по ЦФО
    Функция РассчитатьМаржинальнуюПрибыльПоЗапросу(Организация,ЦФО,Запрос)
    ///////////////////////////////////////////////Если Организация пустая
    Если ПустоеЗначение(Организация)=0 Тогда
    
    /// Ищем 1 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Выручка=Запрос.СуммаСумма;
    Иначе
    Выручка=0;
    КонецЕсли;
    
    
    /// Ищем 2 строку
    
    Если Спр.НайтиПоНаименованию("СЕБЕСТОИМОСТЬ РЕАЛИЗАЦИИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель СЕБЕСТОИМОСТЬ РЕАЛИЗАЦИИ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость=Запрос.СуммаСумма;
    Иначе
    Себестоимость=0;
    КонецЕсли;
    
    
    возврат(выручка-себестоимость);
    Иначе //Если Организация Заполнена
    
    /// Ищем 1 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Выручка=Запрос.СуммаСумма;
    Иначе
    Выручка=0;
    КонецЕсли;
    
    
    /// Ищем 2 строку
    
    Если Спр.НайтиПоНаименованию("СЕБЕСТОИМОСТЬ РЕАЛИЗАЦИИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель СЕБЕСТОИМОСТЬ РЕАЛИЗАЦИИ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость=Запрос.СуммаСумма;
    Иначе
    Себестоимость=0;
    КонецЕсли;
    
    
    возврат(выручка-себестоимость);
    КонецЕсли;
    КонецФункции
    
    ///////////////////////////////////
    Функция РассчитатьОперационнуюПрибыль(ТаблицаРасчетов)
    МП = РассчитатьМаржинальнуюПрибыль(ТаблицаРасчетов);
    /// Ищем 3 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("КОСВЕННЫЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель КОСВЕННЫЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    Себестоимость3=ТаблицаРасчетов.СуммаСумма;
    Иначе
    Себестоимость3=0;
    КонецЕсли;
    
    
    /// Ищем 4 строку
    Если Спр.НайтиПоНаименованию("КОММЕРЧЕСКИЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель КОММЕРЧЕСКИЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    Себестоимость4=ТаблицаРасчетов.СуммаСумма;
    Иначе
    Себестоимость4=0;
    КонецЕсли;
    
    //
    
    /// Ищем 5 строку
    Если Спр.НайтиПоНаименованию("УПРАВЛЕНЧЕСКИЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель УПРАВЛЕНЧЕСКИЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    Себестоимость5=ТаблицаРасчетов.СуммаСумма;
    Иначе
    Себестоимость5=0;
    КонецЕсли;
    
    //
    возврат(МП-себестоимость3-себестоимость4-себестоимость5);
    
    КонецФункции
    
    Функция РассчитатьОперационнуюПрибыльПоЗапросу(Организация,ЦФО,Запрос) // ОП по ЦФО
    ///////////////////////////////////////////////Если Организация пустая
    Если ПустоеЗначение(Организация)=0 Тогда
    
    
    МП = РассчитатьМаржинальнуюПрибыльПоЗапросу(,ЦФО,Запрос);
    /// Ищем 3 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("КОСВЕННЫЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель КОСВЕННЫЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость3=Запрос.СуммаСумма;
    Иначе
    Себестоимость3=0;
    КонецЕсли;
    
    
    /// Ищем 4 строку
    Если Спр.НайтиПоНаименованию("КОММЕРЧЕСКИЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель КОММЕРЧЕСКИЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость4=Запрос.СуммаСумма;
    Иначе
    Себестоимость4=0;
    КонецЕсли;
    
    //
    
    /// Ищем 5 строку
    Если Спр.НайтиПоНаименованию("УПРАВЛЕНЧЕСКИЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель УПРАВЛЕНЧЕСКИЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость5=Запрос.СуммаСумма;
    Иначе
    Себестоимость5=0;
    КонецЕсли;
    //
    возврат(МП-себестоимость3-себестоимость4-себестоимость5);
    Иначе ///////////////////Если Организация заполнена
    
    МП = РассчитатьМаржинальнуюПрибыльПоЗапросу(Организация,ЦФО,Запрос);
    /// Ищем 3 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("КОСВЕННЫЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель КОСВЕННЫЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость3=Запрос.СуммаСумма;
    Иначе
    Себестоимость3=0;
    КонецЕсли;
    
    
    /// Ищем 4 строку
    Если Спр.НайтиПоНаименованию("КОММЕРЧЕСКИЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель КОММЕРЧЕСКИЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость4=Запрос.СуммаСумма;
    Иначе
    Себестоимость4=0;
    КонецЕсли;
    
    //
    
    /// Ищем 5 строку
    Если Спр.НайтиПоНаименованию("УПРАВЛЕНЧЕСКИЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель УПРАВЛЕНЧЕСКИЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость5=Запрос.СуммаСумма;
    Иначе
    Себестоимость5=0;
    КонецЕсли;
    //
    возврат(МП-себестоимость3-себестоимость4-себестоимость5);
    //////////////////////////////////КОнец Заполненой Организации
    КонецЕсли;
    КонецФункции
    
    Функция РассчитатьИнвестиционнуюПрибыль(ТаблицаРасчетов)
    ОП = РассчитатьОперационнуюПрибыль(ТаблицаРасчетов);
    /// Ищем 6 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВНЕРЕАЛИЗАЦИОННЫЕ ДОХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВНЕРЕАЛИЗАЦИОННЫЕ ДОХОДЫ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    Доходы=ТаблицаРасчетов.СуммаСумма;
    Иначе
    Доходы=0;
    КонецЕсли;
    
    
    /// Ищем 7 строку
    Если Спр.НайтиПоНаименованию("ВНЕРЕАЛИЗАЦИОННЫЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВНЕРЕАЛИЗАЦИОННЫЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    расходы=ТаблицаРасчетов.СуммаСумма;
    Иначе
    расходы=0;
    КонецЕсли;
    
    возврат(ОП+доходы-расходы);
    
    КонецФункции
    
    Функция РассчитатьИнвестиционнуюПрибыльПоЗапросу(Организация,ЦФО,Запрос) // ИП по ЦФО
    ///////////////////////////////////////////////Если Организация пустая
    Если ПустоеЗначение(Организация)=0 Тогда
    
    ОП = РассчитатьОперационнуюПрибыльПоЗапросу(,ЦФО,Запрос);
    /// Ищем 6 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВНЕРЕАЛИЗАЦИОННЫЕ ДОХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВНЕРЕАЛИЗАЦИОННЫЕ ДОХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Доходы=Запрос.СуммаСумма;
    Иначе
    Доходы=0;
    КонецЕсли;
    
    /// Ищем 7 строку
    Если Спр.НайтиПоНаименованию("ВНЕРЕАЛИЗАЦИОННЫЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВНЕРЕАЛИЗАЦИОННЫЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы=Запрос.СуммаСумма;
    Иначе
    Расходы=0;
    КонецЕсли;
    
    возврат(ОП+доходы-расходы);
    Иначе /////////////////делаем по заполненой организации
    
    ОП = РассчитатьОперационнуюПрибыльПоЗапросу(Организация,ЦФО,Запрос);
    /// Ищем 6 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВНЕРЕАЛИЗАЦИОННЫЕ ДОХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВНЕРЕАЛИЗАЦИОННЫЕ ДОХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Доходы=Запрос.СуммаСумма;
    Иначе
    Доходы=0;
    КонецЕсли;
    
    /// Ищем 7 строку
    Если Спр.НайтиПоНаименованию("ВНЕРЕАЛИЗАЦИОННЫЕ РАСХОДЫ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВНЕРЕАЛИЗАЦИОННЫЕ РАСХОДЫ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы=Запрос.СуммаСумма;
    Иначе
    Расходы=0;
    КонецЕсли;
    
    возврат(ОП+доходы-расходы);
    КонецЕсли;
    КонецФункции
    
    
    Функция РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетом(ТаблицаРасчетов) // ИП После расчетов с бюджетом
    
    ИП =РассчитатьИнвестиционнуюПрибыль(ТаблицаРасчетов);
    /// Ищем 8 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("РАСЧЕТЫ С БЮДЖЕТОМ (налоги, не вкл. в расх.)",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель РАСЧЕТЫ С БЮДЖЕТОМ (налоги, не вкл. в расх.) не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    расходы=ТаблицаРасчетов.СуммаСумма;
    Иначе
    расходы=0;
    КонецЕсли;
    возврат(ИП-расходы);
    КонецФункции
    
    Функция РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(Организация,ЦФО,Запрос) // ИП После расчетов с бюджетом по ЦФО
    ///////////////////////////////////////////////Если Организация пустая
    Если ПустоеЗначение(Организация)=0 Тогда
    
    ИП =РассчитатьИнвестиционнуюПрибыльПоЗапросу(,ЦФО,Запрос);
    /// Ищем 8 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("РАСЧЕТЫ С БЮДЖЕТОМ (налоги, не вкл. в расх.)",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель РАСЧЕТЫ С БЮДЖЕТОМ (налоги, не вкл. в расх.) не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы=Запрос.СуммаСумма;
    Иначе
    Расходы=0;
    КонецЕсли;
    возврат(ИП-расходы);
    Иначе ////////////по организации
    
    ИП =РассчитатьИнвестиционнуюПрибыльПоЗапросу(Организация,ЦФО,Запрос);
    
    /// Ищем 8 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("РАСЧЕТЫ С БЮДЖЕТОМ (налоги, не вкл. в расх.)",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель РАСЧЕТЫ С БЮДЖЕТОМ (налоги, не вкл. в расх.) не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы=Запрос.СуммаСумма;
    Иначе
    Расходы=0;
    КонецЕсли;
    
    возврат(ИП-расходы);
    КонецЕсли;
    КонецФункции
    
    
    Функция ОстатокЧистойПрибыли(ТаблицаРасчетов)
    
    ИП  = РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетом(ТаблицаРасчетов);
    /// Ищем 9 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("БЛАГОТВОРИТЕЛЬНОСТЬ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель БЛАГОТВОРИТЕЛЬНОСТЬ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    расходы1=ТаблицаРасчетов.СуммаСумма;
    Иначе
    расходы1=0;
    КонецЕсли;
    /// Ищем 10 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("РАСПРЕДЕЛЕНИЯ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель РАСПРЕДЕЛЕНИЯ не найден !!!");
    КонецЕсли;
    Номстр=0;
    Если ТаблицаРасчетов.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомСтр);
    расходы2=ТаблицаРасчетов.СуммаСумма;
    Иначе
    расходы2=0;
    КонецЕсли;
    
    возврат(ИП-расходы1-расходы2);
    КонецФункции
    
    Функция ОстатокЧистойПрибылиПоЗапросу(Организация,ЦФО,Запрос) // ОЧП ПО ЦФО
    ///////////////////////////////////////////////Если Организация пустая
    Если ПустоеЗначение(Организация)=0 Тогда
    
    ИП  = РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(,ЦФО,Запрос);
    /// Ищем 9 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("БЛАГОТВОРИТЕЛЬНОСТЬ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель БЛАГОТВОРИТЕЛЬНОСТЬ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы1=Запрос.СуммаСумма;
    Иначе
    Расходы1=0;
    КонецЕсли;
    /// Ищем 10 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("РАСПРЕДЕЛЕНИЯ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель РАСПРЕДЕЛЕНИЯ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы2=Запрос.СуммаСумма;
    Иначе
    Расходы2=0;
    КонецЕсли;
    
    возврат(ИП-расходы1-расходы2);
    Иначе //////////по организации
    
    ИП  = РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(Организация,ЦФО,Запрос);
    /// Ищем 9 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("БЛАГОТВОРИТЕЛЬНОСТЬ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель БЛАГОТВОРИТЕЛЬНОСТЬ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы1=Запрос.СуммаСумма;
    Иначе
    Расходы1=0;
    КонецЕсли;
    /// Ищем 10 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("РАСПРЕДЕЛЕНИЯ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель РАСПРЕДЕЛЕНИЯ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Расходы2=Запрос.СуммаСумма;
    Иначе
    Расходы2=0;
    КонецЕсли;
    
    возврат(ИП-расходы1-расходы2);
    КонецЕсли;
    КонецФункции
    Функция ПолучитьБазуПоЗапросу(Организация,ЦФО,Запрос)
    Если ПустоеЗначение(Организация)=0 Тогда
    /// Ищем 1 строку
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(,ЦФО,БазовыйЭлемент)=1 тогда
    Выручка=Запрос.СуммаСумма;
    Иначе
    Выручка=0;
    КонецЕсли;
    возврат(Выручка);
    Иначе
    //если значение Организация заполнена
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не найден !!!");
    КонецЕсли;
    Если Запрос.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Выручка=Запрос.СуммаСумма;
    Иначе
    Выручка=0;
    КонецЕсли;
    возврат(Выручка);
    КонецЕсли;
    КонецФункции
    
    
    Процедура Сформировать()
    
    //Создание объекта типа Запрос
    
    ВыбНачПериода=НачМесяца(ДатаПланирования);
    ВыбКонПериода=КонМесяца(ДатаПланирования);
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ЦФО = Документ.ВыгрузкаДИР.ЦФО;
    |Организация = Документ.ВыгрузкаДИР.Организация;
    |Статья = Документ.ВыгрузкаДИР.Статья;
    |ДатаП = Документ.ВыгрузкаДИР.ДатаПланирования;
    |Сумма = Документ.ВыгрузкаДИР.Сумма;
    |Функция СуммаСумма = Сумма(Сумма);
    |Условие(ЦФО в СписокЦФО);
    |Условие ((ДатаП>=ВыбНачПериода)и(ДатаП<=ВыбКонПериода));
    |Группировка Организация без групп;
    |Группировка ЦФО без групп;
    |Группировка Статья все ВошедшиеВЗапрос;";
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    ТекстЗаголовка="ИТОГО";
    Таб.ВывестиСекцию("Шапка|Статья");
    
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    ТекстЗаголовка=СокрЛП(СписокЦФО.ПолучитьЗначение(а));
    Таб.ПрисоединитьСекцию("Шапка|Подитог");
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    ТекстЗаголовка=СокрЛП(СпрОрганизации);
    Таб.ПрисоединитьСекцию("Шапка|Подитог");  
    КонецЦикла;
    КонецЦикла;
    
    ТТ=СоздатьОбъект("ТаблицаЗначений");
    
    Запрос.Выгрузить(ТТ,0,0);
    // ТТ.ВыбратьСтроку();  
    
    
    ТТ1=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.НоваяКолонка("КодСтатьи","Строка",10);
    ТТ1.НоваяКолонка("КодСтатьи1","Число",10);
    ТТ1.НоваяКолонка("Статья","Справочник.СтатьиДоходовИРасходов");
    //ТТ1.НоваяКолонка("Организация","Справочник.Организации");
    ТТ1.НоваяКолонка("СуммаСумма","Число",15,2);
    
    ТТ.Свернуть("Статья","СуммаСумма");
    ТТ.ВыбратьСтроки();  
    
    
    
    Пока ТТ.ПолучитьСтроку()=1 Цикл
    ТТ1.НоваяСтрока();
    ТТ1.КодСтатьи=СокрЛП(ТТ.Статья.КодСтатьи);
    ТТ1.КодСтатьи1 = ПолучитьКодРодителя(ТТ.Статья);
    ТТ1.Статья=ТТ.Статья;
    ТТ1.СуммаСумма=ТТ.СуммаСумма;
    КонецЦикла;
    
    ТТ1.Сортировать("КодСтатьи1+,КодСтатьи+");
    
    Номстр=0;
    База=0;
    
    ФлагПрибыль=0;
    
    Спр=СоздатьОбъект("Справочник.СтатьиДоходовИРасходов");
    Если Спр.НайтиПоНаименованию("ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ",0,1)>0 тогда
    БазовыйЭлемент=Спр.ТекущийЭлемент();
    Иначе
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не найден !!!");
    КонецЕсли;
    
    Если ТТ1.НайтиЗначение(БазовыйЭлемент,Номстр,"Статья")>0 тогда
    ТТ1.ПолучитьСтрокуПоНомеру(НомСтр);
    База=ТТ1.СуммаСумма;
    Иначе
    База=0;
    Сообщить("базовый показатель ВЫРУЧКА ПО ОПЕРАЦИОННОЙ ДЕЯТЕЛЬНОСТИ не заполнен !!!");
    КонецЕсли;
    
    
    //ТТ1.Сортировать("КодСтатьи+");
    
    // ТТ1.ВыбратьСтроку();
    
    ТТ1.ВыбратьСтроки();
    
    Пока ТТ1.ПолучитьСтроку()=1 Цикл
    
    
    
    КодСтатьи=ТТ1.Статья.КодСтатьи;
    
    
    Если ((Число(Лев(КодСтатьи,1))>=3) и (ФлагПрибыль=0)) тогда // маржинальная прибыль
    ФлагПрибыль=1;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма=РассчитатьМаржинальнуюПрибыль(ТТ2);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Текст="Маржинальная Прибыль";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьМаржинальнуюПрибыльПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    /// Добавляем организации
    
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Сумма=РассчитатьМаржинальнуюПрибыльПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    КонецЦикла;
    
    ////////////////////////////////
    КонецЦикла;
    /////////////////////
    КонецЕсли;
    
    Если ((Число(Лев(КодСтатьи,1))>=6) и (ФлагПрибыль=1)) тогда //Операционная прибыль
    ФлагПрибыль=2;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= РассчитатьОперационнуюПрибыль(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="Операционная Прибыль";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьОперационнуюПрибыльПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    /// Добавляем организации
    
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Сумма=РассчитатьОперационнуюПрибыльПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    КонецЦикла;
    
    ////////////////////////////////
    
    
    КонецЦикла;
    //////////
    
    КонецЕсли;
    //
    Если ((Число(Лев(КодСтатьи,1))>=8) и (ФлагПрибыль=2)) тогда // Инвестиционная прибыль
    ФлагПрибыль=3;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= РассчитатьИнвестиционнуюПрибыль(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="Инвестиционная Прибыль";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьИнвестиционнуюПрибыльПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    /// Добавляем организации
    
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Сумма=РассчитатьИнвестиционнуюПрибыльПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    КонецЦикла;
    
    ////////////////////////////////
    
    КонецЦикла;
    //////////
    КонецЕсли;
    //
    //
    Если ((Число(Лев(КодСтатьи,1))>=9) и (ФлагПрибыль=3)) тогда // Инвестиционная прибыль- расчет с бюджетом
    ФлагПрибыль=4;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетом(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="ИП после расчетов с бюджетом";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    
    /// Добавляем организации
    
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Сумма=РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    КонецЦикла;
    
    ////////////////////////////////
    КонецЦикла;
    //////////
    
    КонецЕсли;
    //
    
    //////// Основные показатели статей
    
    Наименование=ТТ1.Статья;
    Сумма=ТТ1.СуммаСумма;
    Сумма1=?(База=0,0,Окр(ТТ1.СуммаСумма/База,6,1)*100);
    Если ТТ1.Статья.ЭтоГруппа()=1 тогда
    Таб.ВывестиСекцию("Группа"+СокрЛП(ТТ1.Статья.Уровень())+"|Статья");
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Если Запрос.Получить(СписокЦФО.ПолучитьЗначение(а),ТТ1.Статья,)=1 тогда
    Сумма=Запрос.СуммаСумма;
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Иначе
    Сумма=0;
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("Группа"+СокрЛП(ТТ1.Статья.Уровень())+"|Подитог");
    
    /// Добавляем организации
    
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Если Запрос.Получить(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),ТТ1.Статья)=1 тогда
    Сумма=Запрос.СуммаСумма;
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Иначе
    Сумма=0;
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("Группа"+СокрЛП(ТТ1.Статья.Уровень())+"|Подитог");
    
    КонецЦикла;
    
    ////////////////////////////////
    
    КонецЦикла;
    //////////
    
    Иначе
    
    Таб.ВывестиСекцию("Группа4|Статья");
    
    // // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Если Запрос.Получить(,СписокЦФО.ПолучитьЗначение(а),ТТ1.Статья)=1 тогда
    Сумма=Запрос.СуммаСумма;
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Иначе
    Сумма=0;
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    КонецЕсли;
    Таб.ПрисоединитьСекцию("Группа4|Подитог");
    
    
    /// Добавляем организации
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Если Запрос.Получить(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),ТТ1.Статья)=1 тогда
    Сумма=Запрос.СуммаСумма;
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Иначе
    Сумма=0;
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    КонецЕсли;	
    
    Таб.ПрисоединитьСекцию("Группа4|Подитог");
    КонецЦикла;
    
    КонецЦикла;
    ////////////
    КонецЕсли;
    
    
    КонецЦикла;
    Если ФлагПрибыль=0 тогда // маржинальная прибыль
    ФлагПрибыль=1;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма=РассчитатьМаржинальнуюПрибыль(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="Маржинальная Прибыль";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьМаржинальнуюПрибыльПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    /// Добавляем организации
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Сумма=РассчитатьМаржинальнуюПрибыльПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    КонецЦикла;
    ////////////////////////////////
    
    КонецЦикла;
    //////////
    КонецЕсли;
    
    Если ФлагПрибыль=1 тогда //Операционная прибыль
    ФлагПрибыль=2;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= РассчитатьОперационнуюПрибыль(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="Операционная Прибыль";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьОперационнуюПрибыльПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    /// Добавляем организации
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    
    Сумма=РассчитатьОперационнуюПрибыльПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    КонецЦикла;
    ////////////////////////////////
    
    
    КонецЦикла;
    //////////
    
    КонецЕсли;
    //
    Если ФлагПрибыль=2 тогда // Инвестиционная прибыль
    ФлагПрибыль=3;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= РассчитатьИнвестиционнуюПрибыль(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="Инвестиционная Прибыль";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьИнвестиционнуюПрибыльПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    
    
    /// Добавляем организации
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    Сумма=РассчитатьИнвестиционнуюПрибыльПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    КонецЦикла;
    ////////////////////////////////
    КонецЦикла;
    //////////
    КонецЕсли;
    //
    //
    Если ФлагПрибыль=3 тогда // Инвестиционная прибыль- расчет с бюджетом
    ФлагПрибыль=4;
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетом(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="ИП после расчетов с бюджетом";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    /// Добавляем организации
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    Сумма=РассчитатьИнвестиционнуюПрибыльПослеРасчетовсБюджетомПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    КонецЦикла;
    ////////////////////////////////
    
    
    КонецЦикла;
    //////////
    
    КонецЕсли;
    //
    
    
    
    
    Если ФлагПрибыль=4 тогда // Остаток
    ТТ2=СоздатьОбъект("ТаблицаЗначений");
    ТТ1.Выгрузить(ТТ2);
    Сумма= ОстатокЧистойПрибыли(ТТ2);
    Сумма1=?(База=0,0,Окр( Сумма/База,6,1)*100);
    Текст="ОСТАТОК ЧИСТОЙ ПРИБЫЛИ";
    Таб.ВывестиСекцию("МаржинальнаяПрибыль|Статья");
    
    // Выводим по ЦФО
    Для а=1 по СписокЦФО.РазмерСписка() Цикл // поехали по ЦФО
    Сумма=ОстатокЧистойПрибылиПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    // Добавляем организации
    СпрОрганизации=СоздатьОбъект("Справочник.Организации");
    СпрОрганизации.ВыбратьЭлементы();
    Пока СпрОрганизации.ПолучитьЭлемент()=1 Цикл
    Если СпрОрганизации.ПометкаУдаления()=1 тогда
    продолжить;
    КонецЕсли;
    Сумма=ОстатокЧистойПрибылиПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    База=ПолучитьБазуПоЗапросу(СпрОрганизации,СписокЦФО.ПолучитьЗначение(а),Запрос);
    Сумма1=?(База=0,0,Окр(Сумма/База,6,1)*100);
    Таб.ПрисоединитьСекцию("МаржинальнаяПрибыль|Подитог");
    КонецЦикла;
    ////////////////////////////////
    КонецЦикла;
    //////////
    КонецЕсли;
    Таб.Опции(0,0,7,7,,,,);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Бюджет заявок ");	
    
    
    КонецПроцедуры
    Процедура ПриОткрытии()
    ДатаПланирования=НачМесяца(ТекущаяДата());
    ВпередМесяц(1);
    КонецПроцедуры
    
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Выложите сам отчет. Крайне не удобно читать-анализировать такой большой текст в браузере.
  3. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Отчет в студию =)

    Вложения:

  4. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Пробовал и на 2 запроса разбивать, в одном группировки цфо,статья, в другом, организация, цфо статья, все равно ни каких результатов :dry:
  5. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Разделил запрос на 2:

    Код:
     Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ЦФО = Документ.ВыгрузкаДИР.ЦФО;
    |Организация = Документ.ВыгрузкаДИР.Организация;
    |Статья = Документ.ВыгрузкаДИР.Статья;
    |ДатаП = Документ.ВыгрузкаДИР.ДатаПланирования;
    |Сумма = Документ.ВыгрузкаДИР.Сумма;
    |Функция СуммаСумма = Сумма(Сумма);
    |Условие(ЦФО в СписокЦФО);
    |Условие ((ДатаП>=ВыбНачПериода)и(ДатаП<=ВыбКонПериода));
    |Группировка ЦФО без групп;
    |Группировка Статья все ВошедшиеВЗапрос;";
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    //////////////Второй запрос
    Запрос2 = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Организация = Документ.ВыгрузкаДИР.Организация;
    |ЦФО = Документ.ВыгрузкаДИР.ЦФО;
    |Статья = Документ.ВыгрузкаДИР.Статья;
    |ДатаП = Документ.ВыгрузкаДИР.ДатаПланирования;
    |Сумма = Документ.ВыгрузкаДИР.Сумма;
    |Функция СуммаСумма = Сумма(Сумма);
    |Условие(ЦФО в СписокЦФО);
    |Условие ((ДатаП>=ВыбНачПериода)и(ДатаП<=ВыбКонПериода));
    |Группировка Организация без групп;
    |Группировка ЦФО без групп;
    |Группировка Статья все ВошедшиеВЗапрос;";
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос2.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    При выгрузке 2 запроса в ТЗ и методе выбрать строку он выдает впринципе то что нам необходимо, но при
    проверке :
    Код:
    Если Запрос2.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Запрос2.Получить(Организация,ЦФО,БазовыйЭлемент) всегда возвращает 0, не могу понять почему!
  6. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Хотя по такой организации, цфо и базовому элементу есть запись!
  7. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Еще раз Всем Добрый день!
    Прикладываю новый вариант отчета, переделанный отладчик показывает что при передаче в функции запроса Запроса, все в порядке, а Запрос 2 передается голый, в чем дело не могу понять, помогите пожалуйста разобраться.

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


    Код:
    Если Запрос2.Получить(Организация,ЦФО,БазовыйЭлемент)=1 тогда
    Себестоимость3=Запрос2.СуммаСумма;
    Иначе
    всегда возвращает 0!

    аналогичная проблема с другими функциями ............ПоЗапросу1

    Вложения:

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

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А запрос2 сам по себе содержит данные? Выгрузите результат запроса в ТЗ и проверьте.
  9. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Дело в шляпе! А всего то и надо было дописать спрорганизации.текущийэлемент() все выходные парился и вот сегодня начальник помог )!

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