Консультация № 141809
20.08.2008, 10:05
0.00 руб.
0 4 0
Ребята, помогите! Есть конфигуряция, изначально была ТИС 7.7, но изрядно переписанная. В ней есть 2 фирмы: ИП Иванов, ИП Петров. ИП
Иванов напрямую может делать только оптовые родажи. Для того, чтоб сделать с ИП Иванова розничные, формируется транзит: поступление Реализация ИП Петров-ИП иванов, поступление ИП Иванов. Вот бухгалтеру в отчете по продажам (анализ продаж) захотелось видеть, что, если поставить галочку "учитывать транзиты", чтоб отдельно выводилось ИП Иванов, и ИП Иванов транзит. Как это сделат ь, если фирма-то по сути одна, и формируя запрос, у нас при выводе группи ровки она идет тож как одна фирма. За правильный ответ фото топлесс

Обсуждение

Неизвестный
20.08.2008, 11:03
общий
Укажите в запросе дополнительную переменную ИПТранзит:

...
|ИпТранзит = Документ.Транзит.Фирма;
...
...
|
Неизвестный
20.08.2008, 11:05
общий
Еще приведите пример запроса отчета - это поможет Вам помочь
Неизвестный
20.08.2008, 11:39
общий
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//
Перем ТекСтрокаВТаблице; // текущая строка в таблице значений МФ

// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем Таб,тзтранз;
Перем Обновить;
Перем Расшифровка;

// переменные предназначены для механизма универсальных группировок отчета
Перем СписокГруппировок;
Перем КоличествоГруппировок;
Перем НомерГруппировкиПоТМЦ;

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//******************************************************************************
// Процедура ОбновитьСпГруппировок(спРазворачиватьПо)
Процедура ОбновитьСпГруппировок(сп)
Перем Сч,спТекЗначение,ПредставлениеГрупп;
если сп.ТекущаяСтрока() > 0 тогда
сп.ПолучитьЗначение(сп.ТекущаяСтрока(),спТекЗначение);
КонецЕсли ;
сп.УдалитьВсе();
сп.ДобавитьЗначение("НЕРАЗВОРАЧИВАТЬ" ,"<Не разворачивать> ");
сп.ДобавитьЗначение("Год" ,"Период Год");
сп.ДобавитьЗначение("Квартал","Период Квартал");
сп.ДобавитьЗначение("Месяц" ,"Период Месяц");
сп.ДобавитьЗначение("Неделя" ,"Период Неделя");

Для Сч=1 По Группировки.РазмерСписка() Цикл
Если Группировки.Пометка(Сч)=1 Тогда
ТекстГрупп = Группировки.ПолучитьЗначение(Сч,ПредставлениеГрупп);
сп.ДобавитьЗначение(ТекстГрупп, ПредставлениеГрупп );
КонецЕсли;
КонецЦикла;
Если сп.ТекущаяСтрока( сп.НайтиЗначение(спТекЗначение)) = 0 тогда
сп.ТекущаяСтрока( 1);
КонецЕсли;

КонецПроцедуры
//******************************************************************************
// ВыбратьПоФильтру()
//
// Параметры:
// Нет
//
// Описание:
// Открывает обработку отбора элементов по произвольному фильтру
//
Процедура ВыбратьПоФильтру()

Перем ВидЗначенияПодбора;

ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);

Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
Возврат;
КонецЕсли;

СписокПараметров=СоздатьОбъект("СписокЗначений");
СписокПараметров.ДобавитьЗначение("", "ИмяВызвавшейФормы");
СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип, "Тип");
СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
ТаблицаМФ.ФлВкл=2;
ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);

КонецПроцедуры // ВыбратьПоФильтру

//******************************************************************************
// ПерерисовкаНазванийЗакладок
//
// Параметры:
// Нет
//
// Описание:
// Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
//
Функция ПерерисовкаНазванийЗакладок()

Форма.Закладки.УстановитьЗначение(2,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");

КонецФункции // ПерерисовкаНазванийЗакладок

//******************************************************************************
// УправлениеДиалогом()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Управление доступностью элементов диалога.
//
Процедура УправлениеДиалогом()

Если Форма.Закладки.ТекущаяСтрока() = 1 Тогда
Если (ВыбСвойствоТМЦ. Выбран()=1)
или (ВыбСвойствоПоставщика.Выбран()=1)
или (ВыбСвойствоПокупателя.Выбран()=1)
Тогда
ДопСлой = "ВыбСвойства,";
Иначе
ДопСлой = "";
КонецЕсли;
Форма.ИспользоватьСлой(ДопСлой+"Шапка,Подвал,Основной1,Основной2,Разделитель"+СокрЛП(ВидРазделителя));
Иначе
Форма.ИспользоватьСлой("Шапка,МФ,Подвал");
КонецЕсли;

КонецПроцедуры //УправлениеДиалогом()

//******************************************************************************
// РасшифровкаОбновить(Обновить)
//
// Параметры:
// Обновить = 1 - нажата кнопка "Обновить"
// 2 - нажата кнопка "Настройка"
//
// Возвращаемое значение:
// Расшифровка (список значений)
//
// Вызывается из формул элементов диалога:
// из таблицы, кнопки "Обновить" и "Настройка"
//
// Описание:
// функция для стандартного механизма кнопок ""Обновить" и "Настройка""
// помещает значение параметра в список Расшифровка и возвращает этот список
//
Функция РасшифровкаОбновить(Обновить)

Расшифровка.Установить("Обновить", Обновить);
Возврат Расшифровка;

КонецФункции //РасшифровкаОбновить()

//******************************************************************************
// ИзменениеПорядкаГрупп(НаправлениеСдвига)
//
// Параметры:
// НаправлениеСдвига = -1 - вниз
// 1 - вверх
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
// кнопки "вверх" и "вниз" рядом со списком группировок
//
// Описание:
// Процедура производит сдвиг текущей группировки в общем
// списке группировок на "НаправлениеСдвига" позиций
//
Процедура ИзменениеПорядкаГрупп(НаправлениеСдвига)

ТекСтр = Группировки.ТекущаяСтрока();
ПослСдвигСтр = Группировки.РазмерСписка();
Если не((НаправлениеСдвига = 1) и (ТекСтр = ПослСдвигСтр)) Тогда
Группировки.СдвинутьЗначение(НаправлениеСдвига, ТекСтр);
КонецЕсли;

КонецПроцедуры // ИзменениеПорядкаГрупп()

//******************************************************************************
// УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)
//
// Параметры: ТекстЗапроса - переданный по ссылке текст запроса
// ТекстЗагол - переданный по ссылке текст заголовка
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Дополняет строку запроса и заголовка в соответствии с выбранными группировками.
//
Процедура УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)

НомерГруппировкиПоТМЦ = 9999;

СписокГруппировок = СоздатьОбъект("СписокЗначений");

Для Сч=1 По Группировки.РазмерСписка() Цикл

Если Группировки.Пометка(Сч)=1 Тогда
ПредставлениеГрупп="";
ТекстГрупп = Группировки.ПолучитьЗначение(Сч,ПредставлениеГрупп);
Если (ТекстГрупп = "Поставщик") или (ТекстГрупп = "Покупатель") или
((ТекстГрупп = "Номенклатура") и (ПоГруппам = 0)) Тогда
ТекстБезГрупп = " без групп";
Иначе
ТекстБезГрупп = "";
КонецЕсли;

Если СокрЛП(спСортироватьПо.ПолучитьЗначение(спСортироватьПо.ТекущаяСтрока())) <>"" тогда
Если (ТекстГрупп = "Документ") ИЛИ
(ТекстГрупп = "КредДок") ИЛИ
(ТекстГрупп = "Месяц")тогда
УпорядочитьПо = "";
Иначе
УпорядочитьПо = " Упорядочить по "+ СокрЛП(спСортироватьПо.ПолучитьЗначение(спСортироватьПо.ТекущаяСтрока()))+" ";
КонецЕсли;
Иначе
УпорядочитьПо = "";
КонецЕсли;

// ТекстЗапроса = ТекстЗапроса + "Группировка "+ТекстГрупп+ТекстБезГрупп+";";
ТекстЗапроса = ТекстЗапроса + "Группировка "+ТекстГрупп+УпорядочитьПо+ТекстБезГрупп+";";
ТекстЗагол = ТекстЗагол + ?(ТекстЗагол="",""," / ")+ПредставлениеГрупп;
СписокГруппировок.ДобавитьЗначение(ТекстГрупп,ПредставлениеГрупп);
Если ТекстГрупп = "Номенклатура" Тогда
НомерГруппировкиПоТМЦ = СписокГруппировок.РазмерСписка();
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // УстановитьГруппировкиЗапроса()

//******************************************************************************
//если установлена галочка транзит
Процедура ПечатьСтрокиТ(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка = "")

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ДЗ=Запрос.ТекДок;
Если ПустоеЗначение(ДЗ)=0 Тогда
Док=СоздатьОбъект("Документ");
Док.ВыбратьПодчиненныедокументы(,,ДЗ);
Если Док.ПолучитьДокумент()=1 Тогда
А=Док.Вид();
КонецЕсли;

КонецЕсли;

ПечЕд = "";
Если (Ном >= НомерГруппировкиПоТМЦ) Тогда
Если Запрос.ЭтоГруппа("Номенклатура") = 0 Тогда
ПечЕд = ?(ВидЕдиницы=1,Запрос.Номенклатура.ОсновнаяЕдиница,Запрос.Номенклатура.БазоваяЕдиница);
// БАВ 10,08,06
// ПечКол = глФРМКоличество(Запрос.СуммаКоличество - Запрос.СуммаКоличествоВ,ПечЕд);
ПечКол = глФРМКоличество(Запрос.СуммаКоличество,ПечЕд);
ПечКолВозврат = глФРМКоличество(Запрос.СуммаКоличествоВ,ПечЕд);
печКонОстПартииКолво = глФРМКоличество(Запрос.КонОстПартииКолво,ПечЕд);
Иначе
// если не в базовых единицах, то не имеет смысла количество
// БАВ 10,08,06
// ПечКол = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличество - Запрос.СуммаКоличествоВ,ПечЕд));
ПечКол = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличество,ПечЕд));
ПечКолВозврат = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличествоВ,ПечЕд));
печКонОстПартииКолво = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.КонОстПартииКолво,ПечЕд));
КонецЕсли;
Иначе
ПечКол = "";
КонецЕсли;

ПечКол = Запрос.СуммаКоличество;
ПечКолВозврат = Запрос.СуммаКоличествоВ;
печКонОстПартииКолво = Запрос.КонОстПартииКолво;


Себест = Запрос.СуммаСебест;
СебестВозврат = Запрос.СуммаСебестВ;
ПродСт = Запрос.СуммаПродСт;
ПродСтВозврат = Запрос.СуммаПродСтВ;
Профит = ПродСт - ПродСтВозврат - (Себест - СебестВозврат);

// печОстатокКол = Запрос.КонОстКолво;
КонОстПартииСуммаРуб = Запрос.КонОстПартииСуммаРуб;

ЗнакПрофит = ?(ПродСт<0,-1,1);

ПрофитПроц = ?(Себест = 0, 0,Профит/Себест);
КонОстПродажнаяСуммаРуб = КонОстПартииСуммаРуб*(1+ПрофитПроц);

ПечСебест = глФРМ(Себест,"");
ПечСебестВозврат = глФРМ(СебестВозврат,"");
ПечПродСт = глФРМ(ПродСт,"");
ПечПродСтВозврат = глФРМ(ПродСтВозврат,"");
ПечПрофит = глФРМ(Профит,"");
ПечПрофитПроц = ?(Себест = 0, "",СокрЛ(Формат(ЗнакПрофит*Профит/Себест*100,"Ч12.2")+"%"));

// печОстатокКол = ОстатокКол;
// печОстатокСумма = глФРМ(ОстатокСумма,"");
печКонОстПартииСуммаРуб = глФРМ(КонОстПартииСуммаРуб,"");
печКонОстПродажнаяСуммаРуб= глФРМ(КонОстПродажнаяСуммаРуб,"");

//Если печОстатокКол <> печКонОстПартииКолво тогда
// Коэфф = печОстатокКол / печКонОстПартииКолво ;
// печКонОстПартииКолво = печОстатокКол;
// печКонОстПартииСуммаРуб = глФРМ(КонОстПартииСуммаРуб*Коэфф,"");
// печКонОстПродажнаяСуммаРуб= глФРМ(КонОстПродажнаяСуммаРуб*Коэфф,"");
//КонецЕсли;

//сООБЩИТЬ(НазваниеСекции);
//Lord
Если (ТолькоГруппы=1) и (Ном = НомерГруппировкиПоТМЦ) Тогда
Если (Запрос.ЭтоГруппа("Номенклатура") = 1) и (Запрос.Номенклатура.Уровень() = 1) тогда
// Если (ПечКол <> "") Или (ПечЕд <> "") Тогда Возврат; КонецЕсли;
Таб.ВывестиСекцию(НазваниеСекции);
КонецЕсли;
Иначе
Таб.ВывестиСекцию(НазваниеСекции);
КонецЕсли;

глОживить(1);

КонецПроцедуры



// ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка)
//
// Параметры:
// Запрос - объект "Запрос", на основании которого строится отчет
// Ном - Номер группировки запроса (Число)
// НазваниеСекции - название секции, которую следует использовать (Строка)
// ПечТекстСтроки - текстовое представление текущей строки
// ТекРасшифровка - расшифровка текущей строки
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
// Производит вывод в печатную форму одной строки запроса.
//
Процедура ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка = "")

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ДЗ=Запрос.ТекДок;
Если ПустоеЗначение(ДЗ)=0 Тогда
Док=СоздатьОбъект("Документ");
Док.ВыбратьПодчиненныедокументы(,,ДЗ);
Если Док.ПолучитьДокумент()=1 Тогда
А=Док.Вид();
КонецЕсли;

КонецЕсли;

ПечЕд = "";
Если (Ном >= НомерГруппировкиПоТМЦ) Тогда
Если Запрос.ЭтоГруппа("Номенклатура") = 0 Тогда
ПечЕд = ?(ВидЕдиницы=1,Запрос.Номенклатура.ОсновнаяЕдиница,Запрос.Номенклатура.БазоваяЕдиница);
// БАВ 10,08,06
// ПечКол = глФРМКоличество(Запрос.СуммаКоличество - Запрос.СуммаКоличествоВ,ПечЕд);
ПечКол = глФРМКоличество(Запрос.СуммаКоличество,ПечЕд);
ПечКолВозврат = глФРМКоличество(Запрос.СуммаКоличествоВ,ПечЕд);
печКонОстПартииКолво = глФРМКоличество(Запрос.КонОстПартииКолво,ПечЕд);
Иначе
// если не в базовых единицах, то не имеет смысла количество
// БАВ 10,08,06
// ПечКол = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличество - Запрос.СуммаКоличествоВ,ПечЕд));
ПечКол = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличество,ПечЕд));
ПечКолВозврат = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличествоВ,ПечЕд));
печКонОстПартииКолво = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.КонОстПартииКолво,ПечЕд));
КонецЕсли;
Иначе
ПечКол = "";
КонецЕсли;

ПечКол = Запрос.СуммаКоличество;
ПечКолВозврат = Запрос.СуммаКоличествоВ;
печКонОстПартииКолво = Запрос.КонОстПартииКолво;


Себест = Запрос.СуммаСебест;
СебестВозврат = Запрос.СуммаСебестВ;
ПродСт = Запрос.СуммаПродСт;
ПродСтВозврат = Запрос.СуммаПродСтВ;
Профит = ПродСт - ПродСтВозврат - (Себест - СебестВозврат);

// печОстатокКол = Запрос.КонОстКолво;
КонОстПартииСуммаРуб = Запрос.КонОстПартииСуммаРуб;

ЗнакПрофит = ?(ПродСт<0,-1,1);

ПрофитПроц = ?(Себест = 0, 0,Профит/Себест);
КонОстПродажнаяСуммаРуб = КонОстПартииСуммаРуб*(1+ПрофитПроц);

ПечСебест = глФРМ(Себест,"");
ПечСебестВозврат = глФРМ(СебестВозврат,"");
ПечПродСт = глФРМ(ПродСт,"");
ПечПродСтВозврат = глФРМ(ПродСтВозврат,"");
ПечПрофит = глФРМ(Профит,"");
ПечПрофитПроц = ?(Себест = 0, "",СокрЛ(Формат(ЗнакПрофит*Профит/Себест*100,"Ч12.2")+"%"));

// печОстатокКол = ОстатокКол;
// печОстатокСумма = глФРМ(ОстатокСумма,"");
печКонОстПартииСуммаРуб = глФРМ(КонОстПартииСуммаРуб,"");
печКонОстПродажнаяСуммаРуб= глФРМ(КонОстПродажнаяСуммаРуб,"");

//Если печОстатокКол <> печКонОстПартииКолво тогда
// Коэфф = печОстатокКол / печКонОстПартииКолво ;
// печКонОстПартииКолво = печОстатокКол;
// печКонОстПартииСуммаРуб = глФРМ(КонОстПартииСуммаРуб*Коэфф,"");
// печКонОстПродажнаяСуммаРуб= глФРМ(КонОстПродажнаяСуммаРуб*Коэфф,"");
//КонецЕсли;

//сООБЩИТЬ(НазваниеСекции);
//Lord
Если (ТолькоГруппы=1) и (Ном = НомерГруппировкиПоТМЦ) Тогда
Если (Запрос.ЭтоГруппа("Номенклатура") = 1) и (Запрос.Номенклатура.Уровень() = 1) тогда
// Если (ПечКол <> "") Или (ПечЕд <> "") Тогда Возврат; КонецЕсли;
Таб.ВывестиСекцию(НазваниеСекции);
КонецЕсли;
Иначе
Таб.ВывестиСекцию(НазваниеСекции);
КонецЕсли;

глОживить(1);

КонецПроцедуры //ПечатьСтроки()

//******************************************************************************
// ВывестиГруппировку(Запрос,Ном)
//
// Параметры:
// Запрос - объект "Запрос"
// Ном - номер выводимой группировки
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
// Выводит в печатную форму одну группировку запроса. Если
// Есть нижележащие группировки, они выводятся также с использованием рекурсивного
// вызова этой же процедуры.
//
Процедура ВывестиГруппировку(Запрос,Ном)

Если Ном <= КоличествоГруппировок Тогда

НазваниеГруппировки = СписокГруппировок.ПолучитьЗначение(Ном);
Пока Запрос.Группировка(Ном) = 1 Цикл

Если НазваниеГруппировки = "Документ" Тогда
НазваниеСекции="Документ";
// БАВ ИначеЕсли Запрос.ЭтоГруппа(НазваниеГруппировки) = 1 Тогда
ИначеЕсли Ном < КоличествоГруппировок Тогда
НазваниеСекции="Строка"+СокрЛП(Ном)+"Г";
Иначе
НазваниеСекции="Строка"+Ном;
КонецЕсли;
ПечТекстСтроки = Запрос.ПолучитьАтрибут(НазваниеГруппировки);
Расшифровка = ПечТекстСтроки;
Если НазваниеГруппировки = "Документ" Тогда
ПечТекстСтроки = ""+глНазваниеДокументаВЖурнале(ПечТекстСтроки)+" № "+ПечТекстСтроки.НомерДок;
ИначеЕсли НазваниеГруппировки = "Номенклатура" Тогда
ПечТекстСтроки = "" + ПечТекстСтроки + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Запрос.Номенклатура.Артикул), "")
КонецЕсли;


ПечТекстСтроки = ?(ПустоеЗначение(ПечТекстСтроки)=1,глПредставлениеПустогоЗначения(НазваниеГруппировки),ПечТекстСтроки);
Если (НазваниеГруппировки="Номенклатура") и (Транзит=1) и (СОКРЛП(Запрос.Фирма)="ИП Демина Галина Алексеевна") Тогда
ПечатьСтрокиТ(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,Расшифровка);
КонецЕсли;
Для нГрп = 1 по Ном-1 Цикл
ПечТекстСтроки = " "+ПечТекстСтроки;
КонецЦикла;

//Если НазваниеГруппировки = "Номенклатура" Тогда
// Если (ТолькоГруппы = 0 ) или (Запрос.Номенклатура.Уровень() = 1) тогда
// ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,Расшифровка);
// КонецЕсли;
//Иначе
ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,Расшифровка);
//КонецЕсли;
// если есть более детальная группировка - выведем ее
Если КоличествоГруппировок > Ном Тогда
ВывестиГруппировку(Запрос,Ном+1);
КонецЕсли;

КонецЦикла;
КонецЕсли;

КонецПроцедуры // ВывестиГруппировку()

//******************************************************************************
// Сформировать(ЗакрытьДиалог=0)
//
// Параметры:
// ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
// кнопки "Сформировать" и "ОК"
//
// Описание:
// Запускает отчет.
//
Процедура Сформировать(ЗакрытьДиалог=0)

Перем Запрос, ТекстЗапроса;

Если глПроверкаДаты(ДатаНачала,ДатаКонца)=0 Тогда
Возврат;
КонецЕсли;

Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
Таб = СоздатьОбъект("Таблица");
Иначе
Таб.Очистить();
КонецЕсли;

Таб.ИсходнаяТаблица( "АнализПродаж" );

// Здесь формируется отчет, который использует регистры, критичные к
// последовательности проведения документов
// поэтому сравним установленные даты периода формируемого отчета с ГП
// Если глПроверкаАктуальностиОтчета(ДатаНачала,ДатаКонца,Последовательность.ОсновнаяПоследовательность)=0 Тогда
// Возврат;
// КонецЕсли;



Расшифровка = СоздатьОбъект("СписокЗначений");
Расшифровка.Установить("Отчет", "АнализПродаж");

// все настройки помещаем в список
Расшифровка.Установить("ДатаНачала", ДатаНачала);
Расшифровка.Установить("ДатаКонца", ДатаКонца);
Расшифровка.Установить("ВыбРазделитель1",ВыбРазделитель1);
Расшифровка.Установить("ВыбРазделитель2",ВыбРазделитель2);
Расшифровка.Установить("ВыбРазделитель3",ВыбРазделитель3);
Расшифровка.Установить("ВидРазделителя",ВидРазделителя);

Расшифровка.Установить("ВыбТМЦ", ВыбТМЦ);
Расшифровка.Установить("ВыбПокупатель", ВыбПокупатель);
Расшифровка.Установить("ВыбПоставщик", ВыбПоставщик);
Расшифровка.Установить("Группировки", Группировки);
Расшифровка.Установить("ВидЕдиницы", ВидЕдиницы);
Расшифровка.Установить("ПоГруппам", ПоГруппам);

Расшифровка.Установить("ВыбСвойствоТМЦ", ВыбСвойствоТМЦ);
Расшифровка.Установить("ВыбСвойствоПокупателя", ВыбСвойствоПокупателя);
Расшифровка.Установить("ВыбСвойствоПоставщика", ВыбСвойствоПоставщика);


глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

// запомним МФ только если он задан
Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
КонецЕсли;

//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаНачала по ДатаКонца;
|Фирма = Регистр.Продажи.Фирма,
|Регистр.ОстаткиТМЦ.Фирма,
|Регистр.ПартииНаличие.Фирма;
|МОЛ = Регистр.ПартииНаличие.Мол;
|УпрАналитика = Регистр.Продажи.Фирма.УпрАналитика;
|ЮрЛицо = Регистр.Продажи.Фирма.ЮрЛицо;
|Покупатель = Регистр.Продажи.Покупатель;
|СвойствоПок = Регистр.Продажи.Покупатель.ОсновноеСвойство.ЗначениеСвойства;
|Номенклатура = Регистр.Продажи.Номенклатура,
|Регистр.ОстаткиТМЦ.Номенклатура,
|Регистр.ПартииНаличие.Партия.Владелец,
|Регистр.ПартииНаличие.Номенклатура;
|СвойствоТМЦ = Регистр.Продажи.Номенклатура.ОсновноеСвойство.ЗначениеСвойства,
|Регистр.ОстаткиТМЦ.Номенклатура.ОсновноеСвойство.ЗначениеСвойства,
|Регистр.ПартииНаличие.Номенклатура.ОсновноеСвойство.ЗначениеСвойства;
|Поставщик = Регистр.Продажи.Поставщик,
|Регистр.ПартииНаличие.Партия.Поставщик;
|ТекДок= Регистр.партииналичие.текущийдокумент,
| Регистр.продажи.текущийдокумент;
|СвойствоПост = Регистр.Продажи.Поставщик.ОсновноеСвойство.ЗначениеСвойства;
|";

ЕстьАвтор = 0;
ЕстьПроект = 0;
ЕстьПроизводитель= 0;
НомСтроки = 0;
НомКолонки = 0;

// Проверка на необходимость включения в запрос переменной "Автор"
// Сначала проверим, есть ли множественный фильтр по автору.
Если ТаблицаМФ.НайтиЗначение("Автор", НомСтроки, НомКолонки) = 1 Тогда
Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2 Тогда
ЕстьАвтор = 1;
КонецЕсли;
КонецЕсли;

// Если фильтра нет, то возможно есть группировка
Если ЕстьАвтор = 0 Тогда
НомСтроки = Группировки.НайтиЗначение("Автор");
Если НомСтроки > 0 Тогда
Если Группировки.Пометка(НомСтроки)=1 Тогда
ЕстьАвтор = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;

// Проверка на необходимость включения в запрос переменной "Производитель"
// Сначала проверим, есть ли множественный фильтр по Производитель\ю.
Если ТаблицаМФ.НайтиЗначение("ПроизводительТМЦ", НомСтроки, НомКолонки) = 1 Тогда
Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2 Тогда
ЕстьПроизводитель = 1;
КонецЕсли;
КонецЕсли;

// Если фильтра нет, то возможно есть группировка
Если ЕстьАвтор = 0 Тогда
НомСтроки = Группировки.НайтиЗначение("ПроизводительТМЦ");
Если НомСтроки > 0 Тогда
Если Группировки.Пометка(НомСтроки)=1 Тогда
ЕстьПроизводитель = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;


// Проверка на необходимость включения в запрос переменной "Проект"
НомСтроки = 0;
НомКолонки = 0;
Если ТаблицаМФ.НайтиЗначение("Проект", НомСтроки, НомКолонки) = 1 Тогда
Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2 Тогда
ЕстьПроект = 1;
КонецЕсли;
КонецЕсли;
Если ЕстьПроект = 0 Тогда
НомСтроки = Группировки.НайтиЗначение("Проект");
Если НомСтроки > 0 Тогда
Если Группировки.Пометка(НомСтроки)=1 Тогда
ЕстьПроект = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если ЕстьАвтор=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"
|Автор = Регистр.Продажи.ТекущийДокумент.Автор;";
КонецЕсли;

Если ЕстьПроект=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"
// |Проект = Регистр.Продажи.ТекущийДокумент.Проект;";
|Проект = Регистр.Продажи.ТекущийДокумент.Реализация.Договор.Проект,
|Регистр.Продажи.ТекущийДокумент.ВозвратОтПокупателя.Договор.Проект,
|Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Договор.Проект,
|Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Договор.Проект;";

КонецЕсли;

Если ЕстьПроизводитель=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"
|ПроизводительТМЦ = Регистр.Продажи.Номенклатура.Родитель.Производитель,Регистр.Продажи.Номенклатура.Производитель,
|Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Производитель,Регистр.ОстаткиТМЦ.Номенклатура.Производитель,
|Регистр.ПартииНаличие.Номенклатура.Родитель.Производитель,Регистр.ПартииНаличие.Номенклатура.Производитель;
|";
КонецЕсли;

ТекстЗапроса = ТекстЗапроса +
"
|Себест = Регистр.Продажи.Себестоимость;
|Количество = Регистр.Продажи.Количество;
|ПродСт = Регистр.Продажи.ПродСтоимость;
|СебестВ = Регистр.Продажи.СебестоимостьВ;
|КоличествоВ = Регистр.Продажи.КоличествоВ;
|ПродСтВ = Регистр.Продажи.ПродСтоимостьВ;
// БАВ
|ОстКолво = Регистр.ОстаткиТМЦ.Количество;
// |ОстЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
//
|ПартииКолво = Регистр.ПартииНаличие.Количество;
|ПартииСуммаРуб = Регистр.ПартииНаличие.СуммаРуб;
//
|Функция СуммаСебест = Сумма(Себест);
|Функция СуммаКоличество = Сумма(Количество);
|Функция СуммаПродСт = Сумма(ПродСт);
|Функция СуммаСебестВ = Сумма(СебестВ);
|Функция СуммаКоличествоВ = Сумма(КоличествоВ);
|Функция СуммаПродСтВ = Сумма(ПродСтВ);
//
|Функция КонОстПартииКолво = КонОст(ПартииКолво);
|Функция КонОстПартииСуммаРуб = КонОст(ПартииСуммаРуб);";

// Если ВыбСклад.Выбран() = 1 Тогда
// ТекстЗапроса = ТекстЗапроса +"
// |Функция КонОстКолво = КонОст(ОстКолво) когда (Склад = ВыбСклад);";
//
// КонецЕсли;
Загол="";

НетОш = 1; // нет ошибок при наложении фильтров
Если ВидРазделителя = 1 Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
ИначеЕсли ВидРазделителя = 2 Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
ИначеЕсли ВидРазделителя = 3 Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
КонецЕсли;

//Если ВыбСклад.Выбран()=1 Тогда
// Загол = Загол+" Остатки по складу: "+ВыбСклад+".";
//
//КонецЕсли;

НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "МОЛ",ВыбСклад, "ВыбСклад",ТекстЗапроса,Загол,"СвойстваНоменклатуры");

НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура",ВыбТМЦ, "ВыбТМЦ",ТекстЗапроса,Загол,"СвойстваНоменклатуры");
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Поставщик", ВыбПоставщик, "ВыбПоставщик",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Покупатель", ВыбПокупатель, "ВыбПокупатель",ТекстЗапроса,Загол,"СвойстваКонтрагентов");

Если (ВыбСвойствоТМЦ.Выбран() = 1) Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоТМЦ", ВыбСвойствоТМЦ, "ВыбСвойствоТМЦ", ТекстЗапроса,Загол);
КонецЕсли;
Если (ВыбСвойствоПоставщика.Выбран() = 1) Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоПост",ВыбСвойствоПоставщика,"ВыбСвойствоПоставщика",ТекстЗапроса,Загол);
КонецЕсли;
Если (ВыбСвойствоПокупателя.Выбран() = 1) Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоПок", ВыбСвойствоПокупателя,"ВыбСвойствоПокупателя",ТекстЗапроса,Загол);
КонецЕсли;
Если НетОш = 0 Тогда
Возврат;
КонецЕсли;
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Автор", , ,ТекстЗапроса,Загол,"Автор");
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Проект", , ,ТекстЗапроса,Загол,"Проект");

ПечЗаголовок = "Общий Анализ продаж ("+глДоллары.Наименование+")";

ПечЗаголовокСтолбца = "";
УстановитьГруппировкиЗапроса(ТекстЗапроса, ПечЗаголовокСтолбца);
КоличествоГруппировок = СписокГруппировок.РазмерСписка();

Если КоличествоГруппировок > 5 Тогда
Предупреждение("Нельзя сделать больше 5 группировок!",60);
Возврат;
КонецЕсли;

// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

ТЗТранз=СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(Тзтранз,,);
ТЗТранз.выбратьстроку();

глЧислоСтрок = 0;

Таб.ВывестиСекцию("Кнопки");
НачПовт = Таб.ВысотаСекции("Кнопки");

Таб.ВывестиСекцию("Шапка");
НачПовт = НачПовт + Таб.ВысотаСекции("Шапка");

Таб.ВывестиСекцию("ЗаголовокТаблицы");
КонПовт = НачПовт + Таб.ВысотаСекции("ЗаголовокТаблицы");
Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

глОживить(1);

Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0, "АнализПродаж", "АнализПродаж");

// ВЫВОД ГРУППИРОВОК ЗАПРОСА
ВывестиГруппировку(Запрос,1);

ПечатьСтроки(Запрос,0,"Всего","Всего:");

Таб.ОбластьПечати(3);

// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
Таб.Защита(1);
КонецЕсли;

Таб.Показать("Анализ продаж", "");

Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда
СтрокаДействийФормы = "#Закрыть";
КонецЕсли;
Если Вэксель=1 Тогда
ФВ=КаталогПользователя()+"report_"+ДатаЧисло(ТекущаяДата());
Таб.Записать(ФВ,1);
Предупреждение("Прайс будет сохранен под именем "+СОКРЛП(ФВ));
КонецЕсли
КонецПроцедуры // Сформировать()

////////////////////////////////////////////////////////////////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии(ФлагВосстановленияНастройки)

// тип вид переменная название
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Номенклатура", "Номенклатура", "По номенклатуре");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Контрагенты", "Поставщик", "По поставщикам");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Контрагенты", "Покупатель", "По покупателям");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Номенклатура", "По свойствам номенклатуры");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Поставщик", "По свойствам поставщиков");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Покупатель", "По свойствам покупателей");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Пользователи", "Автор", "По авторам документов");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Проекты", "Проект", "По проектам");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Фирмы", "Фирма", "По фирмам");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","СвоиЮрЛица", "ЮрЛицо", "По юр. лицам");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","УпрАналитика", "УпрАналитика", "По упр. аналитике");

Если ФлагВосстановленияНастройки = 0 Тогда

ВидРазделителя = 1;
ВидЕдиницы = 1;
ПоГруппам = 1;
ДатаНачала = глЗначениеПоУмолчанию("ОсновнаяДатаНачалаОтчетов");
Если ПустоеЗначение(ДатаНачала) = 1 Тогда
ДатаНачала = НачМесяца(ДатаКонца);
КонецЕсли;
КонецЕсли;

Если глФлагРасшифровки = 1 Тогда
Обновить = глОбновить;

// восстанавливаем настройки из списка
ДатаНачала = глРасшифровка.Получить("ДатаНачала");
ДатаКонца = глРасшифровка.Получить("ДатаКонца");
ВидРазделителя = глРасшифровка.Получить("ВидРазделителя");
ВыбРазделитель1 = глРасшифровка.Получить("ВыбРазделитель1");
ВыбРазделитель2 = глРасшифровка.Получить("ВыбРазделитель2");
ВыбРазделитель3 = глРасшифровка.Получить("ВыбРазделитель3");

ВыбПокупатель = глРасшифровка.Получить("ВыбПокупатель");
ВыбПоставщик = глРасшифровка.Получить("ВыбПоставщик");
ВыбТМЦ = глРасшифровка.Получить("ВыбТМЦ");

ВыбСвойствоТМЦ = глРасшифровка.Получить("ВыбСвойствоТМЦ");
ВыбСвойствоПокупателя = глРасшифровка.Получить("ВыбСвойствоПокупателя");
ВыбСвойствоПоставщика = глРасшифровка.Получить("ВыбСвойствоПоставщика");

глРасшифровка.Получить("Группировки").Выгрузить(Группировки);
ВидЕдиницы = глРасшифровка.Получить("ВидЕдиницы");
ПоГруппам = глРасшифровка.Получить("ПоГруппам");

Если ТипЗначенияСтр(глРасшифровка.Получить("ТаблицаМФ"))="ТаблицаЗначений" Тогда
ТаблицаМФ.Загрузить(глРасшифровка.Получить("ТаблицаМФ"));
КонецЕсли;

Если Обновить <> 0 Тогда
Таб = глТаблица;
КонецЕсли;

Если Обновить <> 2 Тогда
Сформировать();
СтатусВозврата(0);
Возврат;
КонецЕсли;
Иначе
Обновить = 0;
КонецЕсли;

ПерерисовкаНазванийЗакладок();

ТаблицаМФ.ВидимостьКолонки("Тип",0);
ТаблицаМФ.ВидимостьКолонки("Вид",0);
ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0);
ТаблицаМФ.ВидимостьКолонки("ТипМФ",0);
ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0);

ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");


УправлениеДиалогом();

КонецПроцедуры // ПриОткрытии()

//******************************************************************************
// Предопределенная процедура.
//
Процедура ПриЗакрытии()

// записываем изменения если они были
глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст);

КонецПроцедуры // ПриЗакрытии()

//******************************************************************************
// Предопределенная процедура.
Процедура ВводНового()

// эта предопределенная процедура выполняется при восстановлении настройки
ПерерисовкаНазванийЗакладок();
УправлениеДиалогом();
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

КонецПроцедуры // ВводНового()

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриВыбореЗакладки(Номер,Значение)
// закладки
Если Номер=1 Тогда
глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
КонецЕсли;
УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();

КонецПроцедуры // ПриВыбореЗакладки

//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(Значение)

Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда
Представление=""+Значение;
Если ТипЗначенияСтр(Значение)="Справочник" Тогда
Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда
Представление=Представление+" ("+Значение.Владелец+")";
КонецЕсли;
КонецЕсли;
СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление);
ТаблицаМФ.ФлВкл=2;
КонецЕсли;

КонецПроцедуры // ОбработкаПодбора

////////////////////////////////////////////////////////////////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
//
ДатаНачала = НачМесяца(ПолучитьДатуТА());
ДатаКонца = ПолучитьДатуТА();

// инициализация переменных множественного фильтра
ТипМФ.УдалитьВсе();
ТипМФ.ДобавитьЗначение("одно из");
ТипМФ.ДобавитьЗначение("все кроме");

ТаблицаМФ.УдалитьСтроки();
Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл
ТаблицаМФ.УдалитьКолонку(1);
КонецЦикла;

ТаблицаМФ.НоваяКолонка("Тип");
ТаблицаМФ.НоваяКолонка("Вид");
ТаблицаМФ.НоваяКолонка("ИмяПеременной");
ТаблицаМФ.НоваяКолонка("СписокЭлементов"); // список элементов, по которым производим фильтрацию
ТаблицаМФ.НоваяКолонка("ТипМФ"); // текущая строка списка ТипМФ
ТаблицаМФ.НоваяКолонка("ФлВкл","Число",1,,"Вкл",5,,); // фильтр включен ("1" или "0")
ТаблицаМФ.НоваяКолонка("Представление",,,,"Вид фильтра:");
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

ТекСтрокаВТаблице="";

// Инициализируем закладки
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение(1,"Основная");
Форма.Закладки.ДобавитьЗначение(2,"Множественный фильтр");
Форма.Закладки.ТекущаяСтрока(1);

Группировки.ДобавитьЗначение("Фирма", "Фирма");
Группировки.ДобавитьЗначение("СвойствоПок", "Свойство покупателя");
Группировки.ДобавитьЗначение("Покупатель", "Покупатель");
Группировки.ДобавитьЗначение("СвойствоПост","Свойство поставщика");
Группировки.ДобавитьЗначение("Поставщик", "Поставщик");
Группировки.ДобавитьЗначение("СвойствоТМЦ", "Свойство номенклатуры");
Группировки.ДобавитьЗначение("Номенклатура","Номенклатура");
Группировки.ДобавитьЗначение("ПроизводительТМЦ","Производитель номенклатуры");
Группировки.ДобавитьЗначение("Автор", "Авторы документов");
Группировки.ДобавитьЗначение("Проект", "Проекты");
Группировки.ДобавитьЗначение("Месяц", "Период Месяц");
Группировки.ДобавитьЗначение("День", "Период День");
Группировки.ДобавитьЗначение("Документ", "Документы движения");

Группировки. Пометка(6,1);

ОбновитьСпГруппировок(спРазворачиватьПо);

спСортироватьПо.ДобавитьЗначение("","< не сортировть>");
спСортироватьПо.ДобавитьЗначение("СуммаКоличество" ,"Количество продаж");
спСортироватьПо.ДобавитьЗначение("СуммаПродСт" ,"Сумма продаж");
спСортироватьПо.ДобавитьЗначение("СуммаКоличествоВ" ,"Количество возврата");
спСортироватьПо.ДобавитьЗначение("СуммаПродСтВ" ,"Сумма возврата");
спСортироватьПо.ДобавитьЗначение("КонОстПартииКолво","Количество остаток");
спСортироватьПо.ДобавитьЗначение("КонОстПартииСуммаРуб" ,"Сумма остаток");

//
Неизвестный
20.08.2008, 11:47
общий
у меня у документа нет физического признака транзит, и выводить мне нужно одновременно и транзиты этой фирмы, и нет. Т.е. установка признака мне не сильно поможет, все равно из общей кучи по ип иванов их придется выдергивать
/
Процедура ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка = "")

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ДЗ=Запрос.ТекДок;
Если ПустоеЗначение(ДЗ)=0 Тогда
Док=СоздатьОбъект("Документ");
Док.ВыбратьПодчиненныедокументы(,,ДЗ);
Если Док.ПолучитьДокумент()=1 Тогда
А=Док.Вид();
КонецЕсли;

КонецЕсли;

ПечЕд = "";
Если (Ном >= НомерГруппировкиПоТМЦ) Тогда
Если Запрос.ЭтоГруппа("Номенклатура") = 0 Тогда
ПечЕд = ?(ВидЕдиницы=1,Запрос.Номенклатура.ОсновнаяЕдиница,Запрос.Номенклатура.БазоваяЕдиница);
// БАВ 10,08,06
// ПечКол = глФРМКоличество(Запрос.СуммаКоличество - Запрос.СуммаКоличествоВ,ПечЕд);
ПечКол = глФРМКоличество(Запрос.СуммаКоличество,ПечЕд);
ПечКолВозврат = глФРМКоличество(Запрос.СуммаКоличествоВ,ПечЕд);
печКонОстПартииКолво = глФРМКоличество(Запрос.КонОстПартииКолво,ПечЕд);
Иначе
// если не в базовых единицах, то не имеет смысла количество
// БАВ 10,08,06
// ПечКол = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличество - Запрос.СуммаКоличествоВ,ПечЕд));
ПечКол = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличество,ПечЕд));
ПечКолВозврат = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.СуммаКоличествоВ,ПечЕд));
печКонОстПартииКолво = ?(ВидЕдиницы=1,"",глФРМКоличество(Запрос.КонОстПартииКолво,ПечЕд));
КонецЕсли;
Иначе
ПечКол = "";
КонецЕсли;

ПечКол = Запрос.СуммаКоличество;
ПечКолВозврат = Запрос.СуммаКоличествоВ;
печКонОстПартииКолво = Запрос.КонОстПартииКолво;


Себест = Запрос.СуммаСебест;
СебестВозврат = Запрос.СуммаСебестВ;
ПродСт = Запрос.СуммаПродСт;
ПродСтВозврат = Запрос.СуммаПродСтВ;
Профит = ПродСт - ПродСтВозврат - (Себест - СебестВозврат);

// печОстатокКол = Запрос.КонОстКолво;
КонОстПартииСуммаРуб = Запрос.КонОстПартииСуммаРуб;

ЗнакПрофит = ?(ПродСт<0,-1,1);

ПрофитПроц = ?(Себест = 0, 0,Профит/Себест);
КонОстПродажнаяСуммаРуб = КонОстПартииСуммаРуб*(1+ПрофитПроц);

ПечСебест = глФРМ(Себест,"");
ПечСебестВозврат = глФРМ(СебестВозврат,"");
ПечПродСт = глФРМ(ПродСт,"");
ПечПродСтВозврат = глФРМ(ПродСтВозврат,"");
ПечПрофит = глФРМ(Профит,"");
ПечПрофитПроц = ?(Себест = 0, "",СокрЛ(Формат(ЗнакПрофит*Профит/Себест*100,"Ч12.2")+"%"));

// печОстатокКол = ОстатокКол;
// печОстатокСумма = глФРМ(ОстатокСумма,"");
печКонОстПартииСуммаРуб = глФРМ(КонОстПартииСуммаРуб,"");
печКонОстПродажнаяСуммаРуб= глФРМ(КонОстПродажнаяСуммаРуб,"");

//Если печОстатокКол <> печКонОстПартииКолво тогда
// Коэфф = печОстатокКол / печКонОстПартииКолво ;
// печКонОстПартииКолво = печОстатокКол;
// печКонОстПартииСуммаРуб = глФРМ(КонОстПартииСуммаРуб*Коэфф,"");
// печКонОстПродажнаяСуммаРуб= глФРМ(КонОстПродажнаяСуммаРуб*Коэфф,"");
//КонецЕсли;

//сООБЩИТЬ(НазваниеСекции);
//Lord
Если (ТолькоГруппы=1) и (Ном = НомерГруппировкиПоТМЦ) Тогда
Если (Запрос.ЭтоГруппа("Номенклатура") = 1) и (Запрос.Номенклатура.Уровень() = 1) тогда
// Если (ПечКол <> "") Или (ПечЕд <> "") Тогда Возврат; КонецЕсли;
Таб.ВывестиСекцию(НазваниеСекции);
КонецЕсли;
Иначе
Таб.ВывестиСекцию(НазваниеСекции);
КонецЕсли;

глОживить(1);

КонецПроцедуры //ПечатьСтроки()

//******************************************************************************
// ВывестиГруппировку(Запрос,Ном)
//
// Параметры:
// Запрос - объект "Запрос"
// Ном - номер выводимой группировки
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
// Выводит в печатную форму одну группировку запроса. Если
// Есть нижележащие группировки, они выводятся также с использованием рекурсивного
// вызова этой же процедуры.
//
Процедура ВывестиГруппировку(Запрос,Ном)

Если Ном <= КоличествоГруппировок Тогда

НазваниеГруппировки = СписокГруппировок.ПолучитьЗначение(Ном);
Пока Запрос.Группировка(Ном) = 1 Цикл

Если НазваниеГруппировки = "Документ" Тогда
НазваниеСекции="Документ";
// БАВ ИначеЕсли Запрос.ЭтоГруппа(НазваниеГруппировки) = 1 Тогда
ИначеЕсли Ном < КоличествоГруппировок Тогда
НазваниеСекции="Строка"+СокрЛП(Ном)+"Г";
Иначе
НазваниеСекции="Строка"+Ном;
КонецЕсли;
ПечТекстСтроки = Запрос.ПолучитьАтрибут(НазваниеГруппировки);
Расшифровка = ПечТекстСтроки;
Если НазваниеГруппировки = "Документ" Тогда
ПечТекстСтроки = ""+глНазваниеДокументаВЖурнале(ПечТекстСтроки)+" № "+ПечТекстСтроки.НомерДок;
ИначеЕсли НазваниеГруппировки = "Номенклатура" Тогда
ПечТекстСтроки = "" + ПечТекстСтроки + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Запрос.Номенклатура.Артикул), "")
КонецЕсли;


ПечТекстСтроки = ?(ПустоеЗначение(ПечТекстСтроки)=1,глПредставлениеПустогоЗначения(НазваниеГруппировки),ПечТекстСтроки);
Если (НазваниеГруппировки="Номенклатура") и (Транзит=1) и (СОКРЛП(Запрос.Фирма)="ИП Демина Галина Алексеевна") Тогда
ПечатьСтрокиТ(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,Расшифровка);
КонецЕсли;
Для нГрп = 1 по Ном-1 Цикл
ПечТекстСтроки = " "+ПечТекстСтроки;
КонецЦикла;

//Если НазваниеГруппировки = "Номенклатура" Тогда
// Если (ТолькоГруппы = 0 ) или (Запрос.Номенклатура.Уровень() = 1) тогда
// ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,Расшифровка);
// КонецЕсли;
//Иначе
ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,Расшифровка);
//КонецЕсли;
// если есть более детальная группировка - выведем ее
Если КоличествоГруппировок > Ном Тогда
ВывестиГруппировку(Запрос,Ном+1);
КонецЕсли;

КонецЦикла;
КонецЕсли;

КонецПроцедуры // ВывестиГруппировку()

//******************************************************************************
// Сформировать(ЗакрытьДиалог=0)
//
// Параметры:
// ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
// кнопки "Сформировать" и "ОК"
//
// Описание:
// Запускает отчет.
//
Процедура Сформировать(ЗакрытьДиалог=0)

Перем Запрос, ТекстЗапроса;

Если глПроверкаДаты(ДатаНачала,ДатаКонца)=0 Тогда
Возврат;
КонецЕсли;

Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
Таб = СоздатьОбъект("Таблица");
Иначе
Таб.Очистить();
КонецЕсли;

Таб.ИсходнаяТаблица( "АнализПродаж" );

// Здесь формируется отчет, который использует регистры, критичные к
// последовательности проведения документов
// поэтому сравним установленные даты периода формируемого отчета с ГП
// Если глПроверкаАктуальностиОтчета(ДатаНачала,ДатаКонца,Последовательность.ОсновнаяПоследовательность)=0 Тогда
// Возврат;
// КонецЕсли;



Расшифровка = СоздатьОбъект("СписокЗначений");
Расшифровка.Установить("Отчет", "АнализПродаж");

// все настройки помещаем в список
Расшифровка.Установить("ДатаНачала", ДатаНачала);
Расшифровка.Установить("ДатаКонца", ДатаКонца);
Расшифровка.Установить("ВыбРазделитель1",ВыбРазделитель1);
Расшифровка.Установить("ВыбРазделитель2",ВыбРазделитель2);
Расшифровка.Установить("ВыбРазделитель3",ВыбРазделитель3);
Расшифровка.Установить("ВидРазделителя",ВидРазделителя);

Расшифровка.Установить("ВыбТМЦ", ВыбТМЦ);
Расшифровка.Установить("ВыбПокупатель", ВыбПокупатель);
Расшифровка.Установить("ВыбПоставщик", ВыбПоставщик);
Расшифровка.Установить("Группировки", Группировки);
Расшифровка.Установить("ВидЕдиницы", ВидЕдиницы);
Расшифровка.Установить("ПоГруппам", ПоГруппам);

Расшифровка.Установить("ВыбСвойствоТМЦ", ВыбСвойствоТМЦ);
Расшифровка.Установить("ВыбСвойствоПокупателя", ВыбСвойствоПокупателя);
Расшифровка.Установить("ВыбСвойствоПоставщика", ВыбСвойствоПоставщика);


глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

// запомним МФ только если он задан
Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
КонецЕсли;

//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаНачала по ДатаКонца;
|Фирма = Регистр.Продажи.Фирма,
|Регистр.ОстаткиТМЦ.Фирма,
|Регистр.ПартииНаличие.Фирма;
|МОЛ = Регистр.ПартииНаличие.Мол;
|УпрАналитика = Регистр.Продажи.Фирма.УпрАналитика;
|ЮрЛицо = Регистр.Продажи.Фирма.ЮрЛицо;
|Покупатель = Регистр.Продажи.Покупатель;
|СвойствоПок = Регистр.Продажи.Покупатель.ОсновноеСвойство.ЗначениеСвойства;
|Номенклатура = Регистр.Продажи.Номенклатура,
|Регистр.ОстаткиТМЦ.Номенклатура,
|Регистр.ПартииНаличие.Партия.Владелец,
|Регистр.ПартииНаличие.Номенклатура;
|СвойствоТМЦ = Регистр.Продажи.Номенклатура.ОсновноеСвойство.ЗначениеСвойства,
|Регистр.ОстаткиТМЦ.Номенклатура.ОсновноеСвойство.ЗначениеСвойства,
|Регистр.ПартииНаличие.Номенклатура.ОсновноеСвойство.ЗначениеСвойства;
|Поставщик = Регистр.Продажи.Поставщик,
|Регистр.ПартииНаличие.Партия.Поставщик;
|ТекДок= Регистр.партииналичие.текущийдокумент,
| Регистр.продажи.текущийдокумент;
|СвойствоПост = Регистр.Продажи.Поставщик.ОсновноеСвойство.ЗначениеСвойства;
|";

ЕстьАвтор = 0;
ЕстьПроект = 0;
ЕстьПроизводитель= 0;
НомСтроки = 0;
НомКолонки = 0;

// Проверка на необходимость включения в запрос переменной "Автор"
// Сначала проверим, есть ли множественный фильтр по автору.
Если ТаблицаМФ.НайтиЗначение("Автор", НомСтроки, НомКолонки) = 1 Тогда
Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2 Тогда
ЕстьАвтор = 1;
КонецЕсли;
КонецЕсли;

// Если фильтра нет, то возможно есть группировка
Если ЕстьАвтор = 0 Тогда
НомСтроки = Группировки.НайтиЗначение("Автор");
Если НомСтроки > 0 Тогда
Если Группировки.Пометка(НомСтроки)=1 Тогда
ЕстьАвтор = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;

// Проверка на необходимость включения в запрос переменной "Производитель"
// Сначала проверим, есть ли множественный фильтр по Производитель\ю.
Если ТаблицаМФ.НайтиЗначение("ПроизводительТМЦ", НомСтроки, НомКолонки) = 1 Тогда
Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2 Тогда
ЕстьПроизводитель = 1;
КонецЕсли;
КонецЕсли;

// Если фильтра нет, то возможно есть группировка
Если ЕстьАвтор = 0 Тогда
НомСтроки = Группировки.НайтиЗначение("ПроизводительТМЦ");
Если НомСтроки > 0 Тогда
Если Группировки.Пометка(НомСтроки)=1 Тогда
ЕстьПроизводитель = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;


// Проверка на необходимость включения в запрос переменной "Проект"
НомСтроки = 0;
НомКолонки = 0;
Если ТаблицаМФ.НайтиЗначение("Проект", НомСтроки, НомКолонки) = 1 Тогда
Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2 Тогда
ЕстьПроект = 1;
КонецЕсли;
КонецЕсли;
Если ЕстьПроект = 0 Тогда
НомСтроки = Группировки.НайтиЗначение("Проект");
Если НомСтроки > 0 Тогда
Если Группировки.Пометка(НомСтроки)=1 Тогда
ЕстьПроект = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если ЕстьАвтор=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"
|Автор = Регистр.Продажи.ТекущийДокумент.Автор;";
КонецЕсли;

Если ЕстьПроект=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"
// |Проект = Регистр.Продажи.ТекущийДокумент.Проект;";
|Проект = Регистр.Продажи.ТекущийДокумент.Реализация.Договор.Проект,
|Регистр.Продажи.ТекущийДокумент.ВозвратОтПокупателя.Договор.Проект,
|Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Договор.Проект,
|Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Договор.Проект;";

КонецЕсли;

Если ЕстьПроизводитель=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"
|ПроизводительТМЦ = Регистр.Продажи.Номенклатура.Родитель.Производитель,Регистр.Продажи.Номенклатура.Производитель,
|Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Производитель,Регистр.ОстаткиТМЦ.Номенклатура.Производитель,
|Регистр.ПартииНаличие.Номенклатура.Родитель.Производитель,Регистр.ПартииНаличие.Номенклатура.Производитель;
|";
КонецЕсли;

ТекстЗапроса = ТекстЗапроса +
"
|Себест = Регистр.Продажи.Себестоимость;
|Количество = Регистр.Продажи.Количество;
|ПродСт = Регистр.Продажи.ПродСтоимость;
|СебестВ = Регистр.Продажи.СебестоимостьВ;
|КоличествоВ = Регистр.Продажи.КоличествоВ;
|ПродСтВ = Регистр.Продажи.ПродСтоимостьВ;
// БАВ
|ОстКолво = Регистр.ОстаткиТМЦ.Количество;
// |ОстЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
//
|ПартииКолво = Регистр.ПартииНаличие.Количество;
|ПартииСуммаРуб = Регистр.ПартииНаличие.СуммаРуб;
//
|Функция СуммаСебест = Сумма(Себест);
|Функция СуммаКоличество = Сумма(Количество);
|Функция СуммаПродСт = Сумма(ПродСт);
|Функция СуммаСебестВ = Сумма(СебестВ);
|Функция СуммаКоличествоВ = Сумма(КоличествоВ);
|Функция СуммаПродСтВ = Сумма(ПродСтВ);
//
|Функция КонОстПартииКолво = КонОст(ПартииКолво);
|Функция КонОстПартииСуммаРуб = КонОст(ПартииСуммаРуб);";

// Если ВыбСклад.Выбран() = 1 Тогда
// ТекстЗапроса = ТекстЗапроса +"
// |Функция КонОстКолво = КонОст(ОстКолво) когда (Склад = ВыбСклад);";
//
// КонецЕсли;
Загол="";

НетОш = 1; // нет ошибок при наложении фильтров
Если ВидРазделителя = 1 Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
ИначеЕсли ВидРазделителя = 2 Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
ИначеЕсли ВидРазделителя = 3 Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
КонецЕсли;

//Если ВыбСклад.Выбран()=1 Тогда
// Загол = Загол+" Остатки по складу: "+ВыбСклад+".";
//
//КонецЕсли;

НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "МОЛ",ВыбСклад, "ВыбСклад",ТекстЗапроса,Загол,"СвойстваНоменклатуры");

НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура",ВыбТМЦ, "ВыбТМЦ",ТекстЗапроса,Загол,"СвойстваНоменклатуры");
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Поставщик", ВыбПоставщик, "ВыбПоставщик",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Покупатель", ВыбПокупатель, "ВыбПокупатель",ТекстЗапроса,Загол,"СвойстваКонтрагентов");

Если (ВыбСвойствоТМЦ.Выбран() = 1) Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоТМЦ", ВыбСвойствоТМЦ, "ВыбСвойствоТМЦ", ТекстЗапроса,Загол);
КонецЕсли;
Если (ВыбСвойствоПоставщика.Выбран() = 1) Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоПост",ВыбСвойствоПоставщика,"ВыбСвойствоПоставщика",ТекстЗапроса,Загол);
КонецЕсли;
Если (ВыбСвойствоПокупателя.Выбран() = 1) Тогда
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоПок", ВыбСвойствоПокупателя,"ВыбСвойствоПокупателя",ТекстЗапроса,Загол);
КонецЕсли;
Если НетОш = 0 Тогда
Возврат;
КонецЕсли;
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Автор", , ,ТекстЗапроса,Загол,"Автор");
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Проект", , ,ТекстЗапроса,Загол,"Проект");

ПечЗаголовок = "Общий Анализ продаж ("+глДоллары.Наименование+")";

ПечЗаголовокСтолбца = "";
УстановитьГруппировкиЗапроса(ТекстЗапроса, ПечЗаголовокСтолбца);
КоличествоГруппировок = СписокГруппировок.РазмерСписка();

Если КоличествоГруппировок > 5 Тогда
Предупреждение("Нельзя сделать больше 5 группировок!",60);
Возврат;
КонецЕсли;

// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

ТЗТранз=СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(Тзтранз,,);
ТЗТранз.выбратьстроку();

глЧислоСтрок = 0;

Таб.ВывестиСекцию("Кнопки");
НачПовт = Таб.ВысотаСекции("Кнопки");

Таб.ВывестиСекцию("Шапка");
НачПовт = НачПовт + Таб.ВысотаСекции("Шапка");

Таб.ВывестиСекцию("ЗаголовокТаблицы");
КонПовт = НачПовт + Таб.ВысотаСекции("ЗаголовокТаблицы");
Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

глОживить(1);

Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0, "АнализПродаж", "АнализПродаж");

// ВЫВОД ГРУППИРОВОК ЗАПРОСА
ВывестиГруппировку(Запрос,1);

ПечатьСтроки(Запрос,0,"Всего","Всего:");

Таб.ОбластьПечати(3);

// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
Таб.Защита(1);
КонецЕсли;

Таб.Показать("Анализ продаж", "");

Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда
СтрокаДействийФормы = "#Закрыть";
КонецЕсли;
Если Вэксель=1 Тогда
ФВ=КаталогПользователя()+"report_"+ДатаЧисло(ТекущаяДата());
Таб.Записать(ФВ,1);
Предупреждение("Прайс будет сохранен под именем "+СОКРЛП(ФВ));
КонецЕсли
КонецПроцедуры // Сформировать()
Форма ответа