#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.События.ПриСозданииНаСервере = Истина;
Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина;
Настройки.События.ПриЗагрузкеВариантаНаСервере = Истина;
Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;
КонецПроцедуры
Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
КомпоновщикНастроекФормы = ЭтаФорма.Отчет.КомпоновщикНастроек;
Параметры = ЭтаФорма.Параметры;
Если Параметры.Свойство("ПараметрКоманды") Тогда
Параметры.КлючНазначенияИспользования = Параметры.КлючВарианта + "=" + Строка(Параметры.ПараметрКоманды);
ЭтаФорма.ФормаПараметры.КлючНазначенияИспользования = Параметры.КлючНазначенияИспользования;
ЭтаФорма.КлючНазначенияИспользования = Параметры.КлючНазначенияИспользования;
ЭтаФорма.ФормаПараметры.Отбор.Вставить("Документ", Параметры.ПараметрКоманды);
КонецЕсли;
Если ПустаяСтрока(ЭтаФорма.КлючНазначенияИспользования) Тогда
Отказ = Истина;
ВызватьИсключение НСтр("ru= 'Отчет предназначен только для открытия в документах ""Коммерческое предложение"", ""Заказ клиента"" и ""Реализация товаров и услуг"".'") ;
КонецЕсли;
КонецПроцедуры
Процедура ПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт
Отчет = ЭтаФорма.Отчет;
КомпоновщикНастроекФормы = Отчет.КомпоновщикНастроек;
КомпоновщикНастроекФормы.Настройки.ДополнительныеСвойства.Вставить("КлючТекущегоВарианта", ЭтаФорма.КлючТекущегоВарианта);
НастроитьПараметрыОтборыПоФункциональнымОпциям(КомпоновщикНастроекФормы);
НастроитьПараметрыОтборыПоКонтекстуВызова(ЭтаФорма,КомпоновщикНастроекФормы);
НовыеНастройкиКД = КомпоновщикНастроекФормы.Настройки;
КонецПроцедуры
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт
ПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД);
КонецПроцедуры
Процедура ПриЗагрузкеВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт
ПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПользовательскиеНастройкиМодифицированы = Ложь;
УстановитьОбязательныеНастройки(ПользовательскиеНастройкиМодифицированы);
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
УстановитьПривилегированныйРежим(Истина);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.ДанныеДокумента.Запрос;
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВЫРАЗИТЬ(ТоварыДокумента.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения)",
"ТоварыДокумента.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныПлановые.Упаковка",
"ЦеныПлановые.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки3",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныПродаж.Упаковка",
"ЦеныПродаж.Номенклатура"));
СхемаКомпоновкиДанных.НаборыДанных.ДанныеДокумента.Запрос = ТекстЗапроса;
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.СводныйРасчет.Запрос;
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВЫРАЗИТЬ(ТоварыДокумента.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения)",
"ТоварыДокумента.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныПлановые.Упаковка",
"ЦеныПлановые.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки3",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныПродаж.Упаковка",
"ЦеныПродаж.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки4",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ВЫРАЗИТЬ(ЗаказКлиентаТовары.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения)",
"ЗаказКлиентаТовары.Номенклатура"));
СхемаКомпоновкиДанных.НаборыДанных.СводныйРасчет.Запрос = ТекстЗапроса;
ТекстДополненияДанныеДокумента = "";
ТекстДополненияСводныйРасчет = "";
Продажи.ДополнитьТекстыЗапросовОтчетРентабельностьПродажДаннымиДокументов(
ТекстДополненияДанныеДокумента,
ТекстДополненияСводныйРасчет);
СхемаКомпоновкиДанных.НаборыДанных.ДанныеДокумента.Запрос = СтрЗаменить(
СхемаКомпоновкиДанных.НаборыДанных.ДанныеДокумента.Запрос,
"И &ПодменаТекстаЗапросаДокументаЛокализация",
ТекстДополненияДанныеДокумента);
СхемаКомпоновкиДанных.НаборыДанных.СводныйРасчет.Запрос = СтрЗаменить(
СхемаКомпоновкиДанных.НаборыДанных.СводныйРасчет.Запрос,
"И &ПодменаТекстаЗапросаДокументаЛокализация",
ТекстДополненияСводныйРасчет);
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета);
Если МакетКомпоновки.НаборыДанных.Количество() = 0 Тогда
ВызватьИсключение НСтр("ru= 'Отчет не сформирован. Включите хотя бы одну группировку в ""Элементы оформления и группировки"".'") ;
КонецЕсли;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
УстановитьПривилегированныйРежим(Ложь);
КомпоновкаДанныхСервер.СкрытьВспомогательныеПараметрыОтчета(СхемаКомпоновкиДанных, КомпоновщикНастроек, ДокументРезультат, ВспомогательныеПараметрыОтчета());
Если ПользовательскиеНастройкиМодифицированы Тогда
КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УстановитьОбязательныеНастройки(ПользовательскиеНастройкиМодифицированы)
ПараметрДокумент = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Документ");
Если Не ЗначениеЗаполнено(ПараметрДокумент.Значение) Тогда
ПараметрДокумент = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Документ");
КонецЕсли;
Если ТипЗнч(ПараметрДокумент.Значение) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
Если ЗначениеЗаполнено(ПараметрДокумент.Значение.ЗаказКлиента) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ЗаказКлиента", ПараметрДокумент.Значение.ЗаказКлиента);
ИначеЕсли ПараметрДокумент.Значение.РеализацияПоЗаказам Тогда
ТаблицаЗаказы = ПараметрДокумент.Значение.Товары.Выгрузить(, "ЗаказКлиента");
ТаблицаЗаказы.Свернуть("ЗаказКлиента");
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ЗаказКлиента", ТаблицаЗаказы.ВыгрузитьКолонку("ЗаказКлиента"));
Иначе
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ЗаказКлиента", ПараметрДокумент.Значение);
КонецЕсли;
ИначеЕсли ТипЗнч(ПараметрДокумент.Значение) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ЗаказКлиента", ПараметрДокумент.Значение);
КонецЕсли;
ПараметрДатаДокумента = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ДатаДокумента");
Если ПараметрДатаДокумента <> Неопределено
И Не ЗначениеЗаполнено(ПараметрДатаДокумента.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ДатаДокумента", ПараметрДокумент.Значение.Дата);
КонецЕсли;
ПараметрОрганизация = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Организация");
Если ПараметрОрганизация <> Неопределено
И Не ЗначениеЗаполнено(ПараметрОрганизация.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Организация", ПараметрДокумент.Значение.Организация);
КонецЕсли;
ПараметрМенеджер = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Менеджер");
Если ПараметрМенеджер <> Неопределено
И Не ЗначениеЗаполнено(ПараметрМенеджер.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Менеджер", ПараметрДокумент.Значение.Менеджер);
КонецЕсли;
ПараметрВалюта = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Валюта");
Если ПараметрВалюта <> Неопределено
И Не ЗначениеЗаполнено(ПараметрВалюта.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "Валюта", ПараметрДокумент.Значение.Валюта);
КонецЕсли;
ВалютаУправленческогоУчета = Константы.ВалютаУправленческогоУчета.Получить();
ПараметрВалютаУправленческогоУчета = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ВалютаУправленческогоУчета");
Если ПараметрВалютаУправленческогоУчета <> Неопределено
И Не ЗначениеЗаполнено(ПараметрВалютаУправленческогоУчета.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ВалютаУправленческогоУчета", ВалютаУправленческогоУчета);
КонецЕсли;
ПараметрЦенаВключаетНДС = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ЦенаВключаетНДС");
Если ПараметрЦенаВключаетНДС <> Неопределено Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ЦенаВключаетНДС", ПараметрДокумент.Значение.ЦенаВключаетНДС);
КонецЕсли;
ПараметрРежимРасчетаСтоимостиТоваров = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "РежимРасчетаСтоимостиТоваров");
Если ПараметрРежимРасчетаСтоимостиТоваров <> Неопределено Тогда
СтоимостьТоваровПриОценкеРентабельностиПродажи = Константы.СтоимостьТоваровПриОценкеРентабельностиПродажи.Получить();
НормативныйВидЦен = Константы.НормативныйВидЦен.Получить();
Если СтоимостьТоваровПриОценкеРентабельностиПродажи = Перечисления.СтоимостьТоваровПриОценкеРентабельностиПродажи.ПоРасчетнойСебестоимости Тогда
ПараметрыРасчетаСебестоимости = ПараметрыРасчетаСебестоимости(ПараметрОрганизация.Значение);
СтрокаРежима = НСтр("ru= 'По расчетной себестоимости'");
МетодОценки = ПараметрыРасчетаСебестоимости.МетодОценки;
ПредварительныйРасчет = ПараметрыРасчетаСебестоимости.ПредварительныйРасчет;
Если МетодОценки <> Неопределено Тогда
СтрокаРежима = СтрокаРежима + " (" + ?(ПредварительныйРасчет, НСтр("ru= 'Предварительный расчет'"), НСтр("ru= 'Фактический расчет'")) + ", " + МетодОценки + "). " +
НСтр("ru= 'Актуальна на дату'") + ": " + Формат(ПараметрыРасчетаСебестоимости.Дата, "ДЛФ=DT");
КонецЕсли;
Иначе
СтрокаРежима = НСтр("ru= 'По нормативному виду цен'") + " - """ + НормативныйВидЦен + """";
КонецЕсли;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "РежимРасчетаСтоимостиТоваров", СтрокаРежима);
КонецЕсли;
ПараметрЦеныПродажи = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ЦеныПродажи");
ПараметрВидЦены = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ВидЦены");
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ЦеныПродажи", 1 + Число(ПараметрВидЦены.Использование));
ПараметрСтоимостьТоваровПриОценкеРентабельностиПродажи = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек,
"СтоимостьТоваровПриОценкеРентабельностиПродажи");
Если ПараметрСтоимостьТоваровПриОценкеРентабельностиПродажи <> Неопределено
И Не ЗначениеЗаполнено(ПараметрСтоимостьТоваровПриОценкеРентабельностиПродажи.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "СтоимостьТоваровПриОценкеРентабельностиПродажи",
Константы.СтоимостьТоваровПриОценкеРентабельностиПродажи.Получить());
КонецЕсли;
ПараметрНормативныйВидЦен = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "НормативныйВидЦен");
Если ПараметрНормативныйВидЦен <> Неопределено
И Не ЗначениеЗаполнено(ПараметрНормативныйВидЦен.Значение) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "НормативныйВидЦен", Константы.НормативныйВидЦен.Получить());
КонецЕсли;
КонецПроцедуры
Функция ВспомогательныеПараметрыОтчета()
ВспомогательныеПараметры = Новый Массив;
КлючТекущегоВарианта = "";
Если КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("КлючТекущегоВарианта", КлючТекущегоВарианта) Тогда
Если КлючТекущегоВарианта = "ОценкаРентабельностиПродажиКонтекст" Тогда
ВспомогательныеПараметры.Добавить("ЦеныПродажи");
ВспомогательныеПараметры.Добавить("ВидЦены");
КонецЕсли;
КонецЕсли;
Возврат ВспомогательныеПараметры;
КонецФункции
Функция ПараметрыРасчетаСебестоимости(Организация)
ПараметрыРасчетаСебестоимости = Новый Структура("МетодОценки, ПредварительныйРасчет, Дата");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| РасчетСебестоимостиТоваров.ПредварительныйРасчет,
| РасчетСебестоимостиТоваров.МетодОценки,
| РасчетСебестоимостиТоваров.Дата КАК Дата
|ИЗ
| Документ.РасчетСебестоимостиТоваров.Организации КАК РасчетСебестоимостиТоваровОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасчетСебестоимостиТоваров КАК РасчетСебестоимостиТоваров
| ПО РасчетСебестоимостиТоваровОрганизации.Ссылка = РасчетСебестоимостиТоваров.Ссылка
|ГДЕ
| РасчетСебестоимостиТоваров.Проведен
| И РасчетСебестоимостиТоваровОрганизации.Организация = &Организация
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ";
Запрос.УстановитьПараметр("Организация", Организация);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ПараметрыРасчетаСебестоимости, Выборка);
КонецЕсли;
Возврат ПараметрыРасчетаСебестоимости;
КонецФункции
Процедура НастроитьПараметрыОтборыПоФункциональнымОпциям(КомпоновщикНастроекФормы)
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыКлиентов") Тогда
КомпоновкаДанныхСервер.УдалитьПараметрИзПользовательскихНастроекОтчета(КомпоновщикНастроекФормы, "БудущиеПродажи");
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен") Тогда
КомпоновкаДанныхСервер.УдалитьПараметрИзПользовательскихНастроекОтчета(КомпоновщикНастроекФормы, "ВидЦены");
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах") Тогда
КомпоновкаДанныхСервер.УдалитьПараметрИзПользовательскихНастроекОтчета(КомпоновщикНастроекФормы, "ИзменениеОбъемаРучныхСкидок");
КонецЕсли;
КонецПроцедуры
Процедура НастроитьПараметрыОтборыПоКонтекстуВызова(ЭтаФорма,КомпоновщикНастроекФормы)
Продажи.ПриНастройкеПараметровОтбораПоКонтекстуВызова(ЭтаФорма, КомпоновщикНастроекФормы);
КонецПроцедуры
#КонецОбласти
#КонецЕсли