Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 18:09

Помогите! Не работает отбор по подразделению

Автор DimaZagaynov, 09 ноя 2010, 22:05

0 Пользователей и 1 гость просматривают эту тему.

DimaZagaynov

во внешнем отчете не работает отбор по подразделению. то есть когда в самой 1С Предприятие выбираешь какое-нибудь подразделение, он должен выводить отчет только по выбранному подразделению, а выводит все равно по всем.
вот код в конфигурации:
Процедура КнопкаСформироватьНажатие(Кнопка)
   
   струслном="";
   Если ЗначениеЗаполнено(ВыбКонтрагент) Тогда
      Если ТипЗнч(ВыбКонтрагент) = Тип("СписокЗначений") Тогда
         струслном = "Субконто1 В (&ВыбКонтрагент)";
      ИначеЕсли ВыбКонтрагент.ЭтоГруппа Тогда
         струслном = "Субконто1 В ИЕРАРХИИ (&ВыбКонтрагент)";
      Иначе
         струслном = "Субконто1 = &ВыбКонтрагент";         
      КонецЕсли;
   КонецЕсли;   
   струсл = "";
   Если ЗначениеЗаполнено(ВыбПодразделение) Тогда
      Если струсл="" Тогда
         струсл = "Субконто2.Подразделение = &ВыбПодразделение";
      Иначе
         струсл = струсл+  "И Субконто2.Подразделение = &ВыбПодразделение";
      КонецЕсли;   
   КонецЕсли;   
   
   Запрос = Новый Запрос("ВЫБРАТЬ
   |   ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
   |   МАКСИМУМ(ЕстьNULL(ХозрасчетныйОстатки.Субконто3.Дата,&ПустаяДата)) КАК ДатаВозникновенияДолга,
   |   СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,
   |   ВЫБОР
   |      КОГДА ХозрасчетныйОстатки.Субконто2 ССЫЛКА Справочник.ДоговорыКонтрагентов
   |         ТОГДА ВЫБОР
   |               КОГДА ХозрасчетныйОстатки.Субконто2 = &ПустойДоговор
   |                  ТОГДА &ПустоеПодр
   |               ИНАЧЕ ХозрасчетныйОстатки.Субконто2.Подразделение
   |            КОНЕЦ
   |      ИНАЧЕ &Бухгалтерия
   |   КОНЕЦ КАК Субконто2Подразделение,
   |   ХозрасчетныйОстатки.Счет
   |ИЗ
   |   РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов), , ) КАК ХозрасчетныйОстатки
   |
   |СГРУППИРОВАТЬ ПО
   |   ХозрасчетныйОстатки.Субконто1,
   |   ХозрасчетныйОстатки.Счет,
   |   ВЫБОР
   |      КОГДА ХозрасчетныйОстатки.Субконто2 ССЫЛКА Справочник.ДоговорыКонтрагентов
   |         ТОГДА ВЫБОР
   |               КОГДА ХозрасчетныйОстатки.Субконто2 = &ПустойДоговор
   |                  ТОГДА &ПустоеПодр
   |               ИНАЧЕ ХозрасчетныйОстатки.Субконто2.Подразделение
   |            КОНЕЦ
   |      ИНАЧЕ &Бухгалтерия
   |   КОНЕЦ
   |
   |УПОРЯДОЧИТЬ ПО
   |   Субконто2Подразделение,
   |   Контрагент,
   |   ДатаВозникновенияДолга
   |ИТОГИ
   |   СУММА(СуммаОстаток)
   |ПО
   |   Субконто2Подразделение,
   |   Контрагент");
   
   Запрос.УстановитьПараметр("ДатаКон",КонецДня(ВыбДатаКон));
   СписокСчетов = новый СписокЗначений;
   СписокСчетов2= новый СписокЗначений;
   для каждого стр из ТЗСчетов Цикл
      если стр.ФлИспользования Тогда
         СписокСчетов.Добавить(стр.Счет);
         ВидыСубконтоСчета = стр.Счет.ВидыСубконто;
         Если  ВидыСубконтоСчета.Найти(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами,"ВидСубконто")=Неопределено Тогда            
            СписокСчетов2.Добавить(стр.Счет);
         КонецЕсли;
      КонецЕсли;   
   КонецЦикла;   
   
   Запрос.УстановитьПараметр("Бухгалтерия",Справочники.ПодразделенияОрганизаций.НайтиПоКоду("4"));
   Запрос.УстановитьПараметр("ПустоеПодр",Справочники.ПодразделенияОрганизаций.ПустаяСсылка());
   Запрос.УстановитьПараметр("ПустойДоговор",Справочники.ДоговорыКонтрагентов.ПустаяСсылка());   
   Запрос.УстановитьПараметр("ПустаяДата",Дата('00010101'));   
   
   Запрос.УстановитьПараметр("СписокСчетов",СписокСчетов);
   
   
   Если ЗначениеЗаполнено(ВыбКонтрагент) Тогда
      Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент);
   КонецЕсли;
   
   Если ЗначениеЗаполнено(ВыбПодразделение) Тогда
      Запрос.УстановитьПараметр("ВыбПодразделение",ВыбПодразделение);   
   КонецЕсли;   
      
   //сделаем дополнительный запрос
   //сумма обборота по счетам
   ЗапросДоп = новый Запрос("ВЫБРАТЬ
   |   ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
   |   ХозрасчетныйОбороты.Счет КАК Счет,
   |   ХозрасчетныйОбороты.Регистратор.Дата КАК РегистраторДата,
   |   ХозрасчетныйОбороты.Регистратор КАК Регистратор,
   |   ХозрасчетныйОбороты.СуммаОборот КАК Сумма
   |ИЗ
   |   РегистрБухгалтерии.Хозрасчетный.Обороты(, &ДатаКон, Регистратор, Счет В (&СписокСчетов), , , , ) КАК ХозрасчетныйОбороты
   |
   |УПОРЯДОЧИТЬ ПО
   |   Субконто1,
   |   РегистраторДата УБЫВ");
   
   ЗапросДоп.УстановитьПараметр("ДатаКон", КонецДня(ВыбДатаКон));
   ЗапросДоп.УстановитьПараметр("СписокСчетов", СписокСчетов2);
   ТЗДоп = ЗапросДоп.Выполнить().Выгрузить();
   
   Таб = Новый ТабличныйДокумент;
   Таб.ТолькоПросмотр = Истина;
   таб.ОтображатьЗаголовки = ложь;
   таб.ОтображатьСетку = ложь;
   Макет = ПолучитьМакет("Долги");
   ОблЗ = макет.ПолучитьОбласть("Заголовок");
   ОблЗ.Параметры.ДатаКон = Формат(ВыбДатаКон,"ДФ=dd.MM.yyyy");
   
   ОблШ =  Макет.ПолучитьОбласть("Шапка");
   ОблПодразделение = Макет.ПолучитьОбласть("Подразделение");
   ОблИтПодразделение = Макет.ПолучитьОбласть("ИтогоПодразделение");
   ОблКонтр = Макет.ПолучитьОбласть("Контрагент");
   ОблИтог = Макет.ПолучитьОбласть("Всего");
   Обл6201 =  Макет.ПолучитьОбласть("Для6201");
   Обл6202 =  Макет.ПолучитьОбласть("Для6202");
   
   выбПодр = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Состояние("Заполнение выходной таблицы...");
   Таб.Вывести(ОблЗ);
   Таб.Вывести(ОблШ);
   
   ИтНамДолжны = 0; итМыДолжны = 0;
   ПодрНамДолжны = 0; ПодрМыДолжны = 0;
   
   ТЗКонтр = новый ТаблицаЗначений;
   ТЗКонтр.Колонки.Добавить("Контрагент");
   ТЗКонтр.Колонки.Добавить("СуммаОстаток");
   ТЗКонтр.Колонки.Добавить("ДатаДолга");
   ТЗКонтр.Колонки.Добавить("Счет");
   ТЗКонтр.Колонки.Добавить("Порядок");
   ИтогоПоРазделу1 = 0;
   ИтогоПоРазделу2 = 0;
   ИтогоПоРазделу3 = 0;
   ИтогоПоРазделу4 = 0;
   ИтогоПоРазделу5 = 0;

   Пока выбПодр.Следующий() Цикл
      НеБыло6201 = 1;
      НеБыло6202 = 1;
      НеБыло6203 = 1;
      НеБыло6204 = 1;
      НеБыло6205 = 1;
      ИтНамДолжны = 0; итМыДолжны = 0;
      Если выбПодр.СуммаОстаток=0 Тогда
         продолжить;
      КонецЕсли;
      ОблПодразделение.Параметры.ПодразделениеПредставление = СокрЛП(выбподр.Субконто2Подразделение.Наименование);
      ОблПодразделение.Параметры.Подразделение = выбподр.Субконто2Подразделение;
      таб.Вывести(ОблПодразделение);
      таб.НачатьГруппуСтрок("Подразделение");
      ТЗКонтр.Очистить();
      выбКонтр = выбПодр.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
      Пока выбКонтр.Следующий() Цикл
         Если выбКонтр.СуммаОстаток=0 Тогда
            продолжить;
         КонецЕсли;
         
         выб = выбКонтр.Выбрать();
         Если (сокрЛП(выбКонтр.Контрагент)<>"") Тогда
            СуммаДолга=0;
             стр = ТЗКонтр.Добавить();
            стр.Контрагент =  выбКонтр.Контрагент;
            стр.СуммаОстаток =  выбКонтр.СуммаОстаток;      
         Иначе
            Пока выб.Следующий() Цикл
               Если СокрЛП(выб.Контрагент)<>"" Тогда
                  прервать;
               КонецЕсли;
               стр = ТЗКонтр.Добавить();
               стр.Контрагент =  выб.Контрагент;
               стр.счет = выб.счет;
               Если СокрЛП(выб.счет)="76.09" Тогда
                  стр.СуммаОстаток = -выб.СуммаОстаток;
                  Иначе
                  стр.СуммаОстаток = выб.СуммаОстаток;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
         суммаПоКонтрагенту = выбКонтр.СуммаОстаток;
         //найдем дату возникновения долга   
         МаксДата  = Дата('00010101'); 
         МаксСумма = 0;
         Пока выб.Следующий() Цикл
            Если модуль(выб.СуммаОстаток)>= модуль(МаксСумма) Тогда
               МаксСумма = модуль(выб.СуммаОстаток);
               стр.Счет = Выб.Счет;
            КонецЕсли;
         //должны быть одного знака
            Если СписокСчетов2.НайтиПоЗначению(выб.Счет)<>неопределено Тогда
               Отб = новый Структура;
               Отб.Вставить("Счет",выб.Счет);
               Отб.Вставить("Субконто1",выб.Контрагент);
               строки = ТЗДоп.НайтиСтроки(Отб);
               для каждого стрДоп Из строки Цикл
                  Если суммаПоКонтрагенту*стрДоп.Сумма>0  Тогда
                     МаксДата = стрДоп.РегистраторДата;
                     прервать;
                  КонецЕсли;   
               КонецЦикла;   
               прервать;
            Иначе
               Если суммаПоКонтрагенту*выб.СуммаОстаток>0  Тогда
                  МаксДата = Макс(МаксДата,выб.ДатаВозникновенияДолга);
               КонецЕсли;   
            КонецЕсли;   
         КонецЦикла;   
         Если Формат(МаксДата,"ДФ=dd.MM.yy;") = "31.12.07" Тогда
            МаксДата = Дата('00010101');
         КонецЕсли;   
         стр.ДатаДолга = МаксДата;
      КонецЦикла;   
      ТЗКонтр.Сортировать("Счет Возр,ДатаДолга Возр");
      //   Если СокрЛП(выбподр.Субконто2Подразделение.Наименование)="Производство спец. технологического оборудования" Тогда
      СтрокаСчетов="62.01,76.06,62.02,76.06,60.01,76.05,76.09,60.21,60.02,76.02,60.32";
      РаскидатьПоСчетам(ТЗКонтр,СтрокаСчетов);
      ТЗКонтр.Сортировать("Порядок");
      //   КонецЕсли;
      для каждого стр из ТЗКонтр Цикл
         Если стр.СуммаОстаток>0 Тогда
            //нам должны
            ОблКонтр.Параметры.ВсегоМыДолжны = 0;
            ОблКонтр.Параметры.ВсегоНамДолжны = стр.СуммаОстаток;
            ИтНамДолжны = ИтНамДолжны + стр.СуммаОстаток;
            ПодрНамДолжны = ПодрНамДолжны + стр.СуммаОстаток;            
         ИначеЕсли стр.СуммаОстаток<0 Тогда
            //мы должны
            ОблКонтр.Параметры.ВсегоМыДолжны = -стр.СуммаОстаток;
            ОблКонтр.Параметры.ВсегоНамДолжны = 0;
            ИтМыДолжны = ИтМыДолжны - стр.СуммаОстаток;
            ПодрМыДолжны = ПодрМыДолжны - стр.СуммаОстаток;   
         КонецЕсли;
         
          Если (НеБыло6201=1) и (Найти("62.01,76.06",СокрЛП(стр.счет))<>0) Тогда
            НеБыло6201=0;
            Обл6201.Параметры.ЗаголовокРасчетов = "Расчеты с покупателями и заказчиками за отгруженную продукцию";
            Таб.Вывести(Обл6201);         
         КонецЕсли;
         Если (НеБыло6202=1) и ((СокрЛП(стр.счет)="62.02") или ((СокрЛП(стр.счет) = "76.06")и (стр.СуммаОстаток<0)))  Тогда
            НеБыло6201=0;
            НеБыло6202=0;
            Обл6201.Параметры.ЗаголовокРасчетов = "Авансы полученные от покупателей";
            Таб.Вывести(Обл6201);
         КонецЕсли;
         Если  (НеБыло6203=1) и ((Найти ("60.01,76.09,60.21",СокрЛП(стр.счет))<>0) или ((СокрЛП(стр.счет) = "76.05") и (стр.СуммаОстаток<0))) Тогда
            НеБыло6201=0;
            НеБыло6202=0;
            НеБыло6203=0;
            Обл6201.Параметры.ЗаголовокРасчетов = "Задолженность перед поставщиками и подрядчиками";
            Таб.Вывести(Обл6201);
         КонецЕсли;
         Если (НеБыло6204=1) и ((Найти("60.02",СокрЛП(стр.счет))<>0) или ((СокрЛП(стр.счет) = "76.05") и (стр.СуммаОстаток>0))) Тогда
            НеБыло6201=0;
            НеБыло6202=0;
            НеБыло6203=0;
            НеБыло6204=0;
            Обл6201.Параметры.ЗаголовокРасчетов = "Авансы выданные";
            Таб.Вывести(Обл6201);
         КонецЕсли;
         Если (НеБыло6205=1) и (Найти("76.02",СокрЛП(стр.счет))<>0) Тогда
            НеБыло6201=0;
            НеБыло6202=0;
            НеБыло6203=0;
            НеБыло6204=0;
            НеБыло6205=0;
            Обл6201.Параметры.ЗаголовокРасчетов = "Расчеты по претензиям";
            Таб.Вывести(Обл6201);         
         КонецЕсли;
      
         Если Небыло6201=0 Тогда
            Если Небыло6202=0 Тогда
               Если Небыло6203=0 Тогда
                  Если Небыло6204=0 Тогда
                     Если Небыло6205=0 Тогда
                        ИтогоПоРазделу5=ИтогоПоРазделу5+модуль(стр.СуммаОстаток);   
                     Иначе
                        ИтогоПоРазделу4=ИтогоПоРазделу4+модуль(стр.СуммаОстаток);
                     КонецЕсли;
                  Иначе
                     ИтогоПоРазделу3=ИтогоПоРазделу3+модуль(стр.СуммаОстаток);
                  КонецЕсли;
               Иначе
                  ИтогоПоРазделу2=ИтогоПоРазделу2+модуль(стр.СуммаОстаток);
               КонецЕсли;
            Иначе
               ИтогоПоРазделу1=ИтогоПоРазделу1+модуль(стр.СуммаОстаток);
            КонецЕсли;
         Иначе
            Сообщить("Пустой счет");
         КонецЕсли;
         ОблКонтр.Параметры.КонтрагентПредставление = СокрЛП(стр.Контрагент.Наименование);
         ОблКонтр.Параметры.Контрагент = стр.Контрагент;
         ОблКонтр.Параметры.счет = стр.счет;
         ОблКонтр.Параметры.ДатаДолга = Формат(стр.ДатаДолга,"ДФ=dd.MM.yy; ДП='  .  .  '");
         таб.Вывести(ОблКонтр);
      КонецЦикла;   
      таб.ЗакончитьГруппуСтрок();
      ОблИтПодразделение.Параметры.ПодразделениеПредставление = СокрЛП(выбподр.Субконто2Подразделение.Наименование);
      ОблИтПодразделение.Параметры.МыДолжны = ИтМыДолжны;
      ОблИтПодразделение.Параметры.НамДолжны = ИтНамДолжны;
      таб.Вывести(ОблИтПодразделение);
      сумма1=ИтогоПоРазделу1+ИтогоПоРазделу4+ИтогоПоРазделу5;
      сумма2=ИтогоПоРазделу2+ИтогоПоРазделу3;
      //сообщить("ИтогоПоРазделу1+ИтогоПоРазделу4="+сумма1);
      //сообщить("ИтогоПоРазделу2+ИтогоПоРазделу3="+сумма2);
      //сообщить("Подразделение="+СокрЛП(выбподр.Субконто2Подразделение.Наименование));
   КонецЦикла;   

   Обл6202.Параметры.ЗаголовокРасчетов = "Итого: расчеты с покупателями и заказчиками за отгруженную продукцию";
   Обл6202.Параметры.ИтогПоРазделуК = ИтогоПоРазделу1;
   Обл6202.Параметры.ИтогПоРазделуД = 0;
   Таб.Вывести(Обл6202);
   Обл6202.Параметры.ЗаголовокРасчетов = "Итого: авансы полученные от покупателей";
   Обл6202.Параметры.ИтогПоРазделуД = ИтогоПоРазделу2;
   Обл6202.Параметры.ИтогПоРазделуК = 0;
   Таб.Вывести(Обл6202);
   Обл6202.Параметры.ЗаголовокРасчетов = "Итого: задолженность перед поставщиками и подрядчиками";
   Обл6202.Параметры.ИтогПоРазделуД = ИтогоПоРазделу3;
   Обл6202.Параметры.ИтогПоРазделуК = 0;
   Таб.Вывести(Обл6202);
   Обл6202.Параметры.ЗаголовокРасчетов = "Итого: авансы выданные";
   Обл6202.Параметры.ИтогПоРазделуК = ИтогоПоРазделу4;
   Обл6202.Параметры.ИтогПоРазделуД = 0;
   Таб.Вывести(Обл6202);   
   Обл6202.Параметры.ЗаголовокРасчетов = "Итого: Расчеты по претензиям";
   Обл6202.Параметры.ИтогПоРазделуК = ИтогоПоРазделу5;
   Обл6202.Параметры.ИтогПоРазделуД = 0;
   Таб.Вывести(Обл6202);
   
   ОблИтог.Параметры.ВсегоМыДолжны = ПодрМыДолжны;
   ОблИтог.Параметры.ВсегоНамДолжны = ПодрНамДолжны;
   таб.Вывести(ОблИтог);
   Таб.Показать();
   
КонецПроцедуры

progmikon

А где вы вообще накладываете ограничения на подразделения?
У вас идет определение переменной:
струсл = "";
которая судя по всему, и создает строку отбора по подразделению.
По идее эта строка должна, при том или ином условии быть добавлена в текст запроса.
Но у вас она дальше вообще нигде не фигурирует.

DimaZagaynov

Если не сложно приведите пример исправления. Я еще мало знаком с 1С :)

DimaZagaynov


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск