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