Files

760 lines
52 KiB
Plaintext

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