Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
29 Сен 2020, 22:23
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Помогите! Не работает отбор по подразделению  (Прочитано 4021 раз)

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

Оффлайн DimaZagaynov

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-09
  • Сайт: 
во внешнем отчете не работает отбор по подразделению. то есть когда в самой 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

  • *****
  • Сообщений: 2090
  • РЕПУТАЦИЯ: 371
  • КПД: 18%
  • Регистрация: 2010-10-09
  • Компания: http://progmikon.blogspot.com/
  • Профессия: Программист 1С
А где вы вообще накладываете ограничения на подразделения?
У вас идет определение переменной:
струсл = "";
которая судя по всему, и создает строку отбора по подразделению.
По идее эта строка должна, при том или ином условии быть добавлена в текст запроса.
Но у вас она дальше вообще нигде не фигурирует.

Оффлайн DimaZagaynov

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-09
  • Сайт: 
Если не сложно приведите пример исправления. Я еще мало знаком с 1С :)

Оффлайн DimaZagaynov

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-09
  • Сайт: 
неполадки устранени. тема закрыта


Теги:
 

Помогите выразить код Объект.Наименование = Объект.Подразделение + " " + Объект.Должность + " " + Объект.ФизическоеЛицо через строки.

Автор LedgikРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 1141
Последний ответ 05 Мар 2019, 19:28
от Ledgik
Помогите срочно!! В вкладке "Сервис"--> "Журнал регистрации" отражаются все операции как можно определить сделаны ли операции "задним числом" и как вычислить первоначальную информацию какой расчет поменял на другой?

Автор 2ronРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 6835
Последний ответ 24 Дек 2015, 15:34
от дфтын
Помогите правильно настроить справочник "Единицы измерения" и "Номенклатура"

Автор perminovandrРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 1361
Последний ответ 23 Янв 2019, 07:21
от Геннадий ОбьГЭС
На фото демонстрируется личная карточка сотрудника, но во столбце "ЗА ЯКИЙ ПЕРІОД " не показывает ничего, как это можно решить, помогите пожалуйста

Автор cBeginnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 9
Просмотров: 1635
Последний ответ 26 Июл 2018, 17:44
от alex0402
Помогите подобрать Back-office и Front-office

Автор avrnskРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 7240
Последний ответ 07 Сен 2010, 12:01
от mohock

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
77 Сообщений
oooo800
32 Сообщений
Дмитрий Джей Дмитрий Джей
30 Сообщений
IL2016
29 Сообщений
LexaK
25 Сообщений
antoneus antoneus
25 Сообщений
DmitriyF DmitriyF
17 Сообщений
Ann_
16 Сообщений
мадам брошкина
13 Сообщений
alexandr_ll
12 Сообщений

* Кто онлайн

  • Точка Гостей: 237
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal