Не работает отбор по подразделению во внешнем отчете
10.11.2010
21:09
#1
"во внешнем отчете не работает отбор по подразделению. то есть когда в самой 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);
ОблИтог.Параметры.ВсегоМыДолжны = ПодрМыДолжны;
ОблИтог.Параметры.ВсегоНамДолжны = ПодрНамДолжны;
таб.Вывести(ОблИтог);
Таб.Показать();
КонецПроцедуры;
Я так понимаю строка струсл должна, при том или ином условии быть добавлена в текст запроса.
Но она дальше вообще нигде не фигурирует. Либо не хватает какого то цикла, который отфильтровывал бы ненужные подразделения. Если не сложно приведите пример исправления."
вот код в конфигурации:
Процедура КнопкаСформироватьНажатие(Кнопка)
струслном="""";
Если ЗначениеЗаполнено(ВыбКонтрагент) Тогда
Если ТипЗнч(ВыбКонтрагент) = Тип("СписокЗначений") Тогда
струслном = "Субконто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);
ОблИтог.Параметры.ВсегоМыДолжны = ПодрМыДолжны;
ОблИтог.Параметры.ВсегоНамДолжны = ПодрНамДолжны;
таб.Вывести(ОблИтог);
Таб.Показать();
КонецПроцедуры;
Я так понимаю строка струсл должна, при том или ином условии быть добавлена в текст запроса.
Но она дальше вообще нигде не фигурирует. Либо не хватает какого то цикла, который отфильтровывал бы ненужные подразделения. Если не сложно приведите пример исправления."
11.11.2010
09:53
#2
"Да уж - интересный запрос. Мне особенно понравилось условие:
| ВЫБОР
| КОГДА ХозрасчетныйОстатки.Субконто2 ССЫЛКА Справочник.ДоговорыКонтрагентов
| ТОГДА ВЫБОР
| КОГДА ХозрасчетныйОстатки.Субконто2 = &ПустойДоговор
| ТОГДА &ПустоеПодр
| ИНАЧЕ ХозрасчетныйОстатки.Субконто2.Подразделение
| КОНЕЦ
| ИНАЧЕ &Бухгалтерия
| КОНЕЦ КАК Субконто2Подразделение
Не понятно, что у вас за конфигурация и является ли она доработаной, но из этого условия вытекает, что Подразделение - это реквизит справочника Договора.
+ к этому можно добавить, что и отбор по контрагенту у вас не работает, т.к. струслном не участвует в запросе, а ВыбКонтрагент не фигурирует в условиях.
Скорее всего вот эта строка:
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов), , ) КАК ХозрасчетныйОстатки
должна бы выглядеть так:
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов)"+?(ПустаяСтрока(струслном),""""," И "+струслном)+?(ПустаяСтрока(струсл),""""," И "+струсл)+", , ) КАК ХозрасчетныйОстатки
При этом правда не понятно, что же будет в случае когда Субконто2 есть нечто не заполненое, но попытаться можно.
Да и еще: когда ЗначениеЗаполнено(ВыбПодразделение) - струсл у вас всегда = """", так что условие Если струсл="""" Тогда явно лишнее.
p.s. КонецПроцедуры; - уберите в конце ";" - не нужна она там, а в большинстве случаев мешает."
| ВЫБОР
| КОГДА ХозрасчетныйОстатки.Субконто2 ССЫЛКА Справочник.ДоговорыКонтрагентов
| ТОГДА ВЫБОР
| КОГДА ХозрасчетныйОстатки.Субконто2 = &ПустойДоговор
| ТОГДА &ПустоеПодр
| ИНАЧЕ ХозрасчетныйОстатки.Субконто2.Подразделение
| КОНЕЦ
| ИНАЧЕ &Бухгалтерия
| КОНЕЦ КАК Субконто2Подразделение
Не понятно, что у вас за конфигурация и является ли она доработаной, но из этого условия вытекает, что Подразделение - это реквизит справочника Договора.
+ к этому можно добавить, что и отбор по контрагенту у вас не работает, т.к. струслном не участвует в запросе, а ВыбКонтрагент не фигурирует в условиях.
Скорее всего вот эта строка:
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов), , ) КАК ХозрасчетныйОстатки
должна бы выглядеть так:
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов)"+?(ПустаяСтрока(струслном),""""," И "+струслном)+?(ПустаяСтрока(струсл),""""," И "+струсл)+", , ) КАК ХозрасчетныйОстатки
При этом правда не понятно, что же будет в случае когда Субконто2 есть нечто не заполненое, но попытаться можно.
Да и еще: когда ЗначениеЗаполнено(ВыбПодразделение) - струсл у вас всегда = """", так что условие Если струсл="""" Тогда явно лишнее.
p.s. КонецПроцедуры; - уберите в конце ";" - не нужна она там, а в большинстве случаев мешает."
11.11.2010
10:47
#3
"| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов)"+?(ПустаяСтрока(струслном),""""," И "+струслном)+?(ПустаяСтрока(струсл),""""," И "+струсл)+", , ) КАК ХозрасчетныйОстатки
Выдает ошибку:
{Форма.ФормаОтчета(154)}: Ошибка при вызове метода контекста (Выполнить): {(16, 86)}: Синтаксическая ошибка "И"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И <>>И Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
выбПодр = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(16, 86)}: Синтаксическая ошибка "И"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И <>>И Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
"
Выдает ошибку:
{Форма.ФормаОтчета(154)}: Ошибка при вызове метода контекста (Выполнить): {(16, 86)}: Синтаксическая ошибка "И"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И <>>И Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
выбПодр = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(16, 86)}: Синтаксическая ошибка "И"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И <>>И Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
"
11.11.2010
11:11
#5
"если так:
струсл="Субконто2.Подразделение = &ВыбПодразделение";
Если ЗначениеЗаполнено(ВыбПодразделение) Тогда
струсл = струсл+ "И Субконто2.Подразделение = &ВыбПодразделение";
КонецЕсли;
то выдает ошибку:
{Форма.ФормаОтчета(155)}: Ошибка при вызове метода контекста (Выполнить): {(16, 131)}: Ожидается выражение ")"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И Субконто2.Подразделение = &ВыбПодразделениеИ <>>Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
выбПодр = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(16, 131)}: Ожидается выражение ")"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И Субконто2.Подразделение = &ВыбПодразделениеИ <>>Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
"
струсл="Субконто2.Подразделение = &ВыбПодразделение";
Если ЗначениеЗаполнено(ВыбПодразделение) Тогда
струсл = струсл+ "И Субконто2.Подразделение = &ВыбПодразделение";
КонецЕсли;
то выдает ошибку:
{Форма.ФормаОтчета(155)}: Ошибка при вызове метода контекста (Выполнить): {(16, 131)}: Ожидается выражение ")"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И Субконто2.Подразделение = &ВыбПодразделениеИ <>>Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
выбПодр = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
{(16, 131)}: Ожидается выражение ")"
РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет В ИЕРАРХИИ (&СписокСчетов) И Субконто2.Подразделение = &ВыбПодразделениеИ <>>Субконто2.Подразделение = &ВыбПодразделение, , ) КАК ХозрасчетныйОстатки
"
Читают тему
(гостей: 1)