#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("АдресныйСклад");
МеханизмыДокумента.Добавить("Обеспечение");
МеханизмыДокумента.Добавить("СерийныйУчет");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ОрдерНаОтражениеИзлишковТоваров") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры);
ЗарегистрироватьИзлишкиНедостачиНаСкладе(Запрос, ТекстыЗапроса, Регистры);
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Обработки.ПомощникОформленияСкладскихАктов.ДобавитьКомандуСоздатьНаОснованииПомощникОформленияСкладскихАктов(КомандыСозданияНаОсновании);
Документы.ОприходованиеИзлишковТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Обработки.СправочноеРазмещениеНоменклатуры.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ОрдерНаОтражениеИзлишковТоваров) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ОрдерНаОтражениеИзлишковТоваров.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ОрдерНаОтражениеИзлишковТоваров);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Отчеты.ОформлениеИзлишковНедостачТоваров.ДобавитьКомандуОформление(КомандыОтчетов);
КонецПроцедуры
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Склад,Помещение,Дата";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.ОрдерНаОтражениеИзлишковТоваров";
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ОтражениеИзлишков);
ПараметрыУказанияСерий.ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(
Объект.Склад,Объект.Помещение, Объект.Дата);
Если ПараметрыУказанияСерий.ИспользоватьАдресноеХранение Тогда
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Ячейка");
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Упаковка");
ПараметрыУказанияСерий.ИмяПоляКоличество = "КоличествоУпаковок";
КонецЕсли;
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение");
ПараметрыУказанияСерий.ЭтоОрдер = Истина;
ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";
ПараметрыУказанияСерий.ИмяПоляПомещение = "Помещение";
ПараметрыУказанияСерий.Дата = Объект.Дата;
ПараметрыУказанияСерий.ТолькоСерииДляСебестоимости = Ложь;
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары." + ПараметрыУказанияСерий.ИмяПоляКоличество + " КАК Количество,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Номенклатура КАК Номенклатура,
| ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры КАК ВидНоменклатуры,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.Количество КАК Количество,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий
|ПОМЕСТИТЬ ТоварыДляЗапроса
|ИЗ
| Товары КАК Товары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА ВЫБОР
| КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 14
| ИНАЧЕ 13
| КОНЕЦ
| КОГДА НЕ &ТолькоСерииДляСебестоимости
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| ТОГДА 10
| ИНАЧЕ 9
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтбора
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| ТОГДА 6
| ИНАЧЕ 5
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Товары.Количество > 0
| ТОГДА 8
| ИНАЧЕ 7
| КОНЕЦ
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтраженииИзлишков
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| ТОГДА 4
| ИНАЧЕ 3
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтраженииИзлишков
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| ТОГДА 2
| ИНАЧЕ 1
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК СтатусУказанияСерий
|ПОМЕСТИТЬ Статусы
|ИЗ
| ТоварыДляЗапроса КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО (&Склад = Склады.Ссылка)
| ПО (ПолитикиУчетаСерий.Склад = &Склад)
| И Товары.ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Статусы.НомерСтроки КАК НомерСтроки,
| Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| Статусы КАК Статусы
|ГДЕ
| Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| Статусы.НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
Функция МакетФормыВыбораНазначений() Экспорт
МакетФормы = Справочники.Назначения.МакетФормыВыбораНазначений();
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначения.ДвиженияПоСкладскимРегистрам = "ИСТИНА";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.Назначение");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Склад";
Возврат МакетФормы;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Склад)";
КонецПроцедуры
#КонецОбласти
#Область Печать
Функция ПравилаПечатиЗаданияНаОтборРазмещение() Экспорт
ПравилаПечатиЗадания = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ПравилаПечатиЗаданияНаОтборРазмещение();
ПравилаПечатиЗадания.ОперацияПоступления = Истина;
ПравилаПечатиЗадания.ОтражениеИзлишков = Истина;
ПравилаПечатиЗадания.ЭтоНакладная = Ложь;
ПравилаПечатиЗадания.ИмяПоляПомещение = "Помещение";
Возврат ПравилаПечатиЗадания;
КонецФункции
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Дата КАК Период,
| ДанныеШапки.Склад КАК Склад,
| ДанныеШапки.Помещение КАК Помещение,
| ДанныеШапки.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ДанныеШапки.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеШапки.Дата >= ДанныеШапки.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ДанныеШапки.Помещение.ИспользоватьАдресноеХранение
| И ДанныеШапки.Дата >= ДанныеШапки.Помещение.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ДанныеШапки.Склад.ИспользоватьАдресноеХранение
| И ДанныеШапки.Дата >= ДанныеШапки.Склад.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользоватьАдресноеХранение
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров КАК ДанныеШапки
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
Запрос.УстановитьПараметр("Склад", Реквизиты.Склад);
Запрос.УстановитьПараметр("Помещение", Реквизиты.Помещение);
Запрос.УстановитьПараметр("ИспользоватьАдресноеХранение", Реквизиты.ИспользоватьАдресноеХранение);
КонецПроцедуры
Процедура ЗарегистрироватьИзлишкиНедостачиНаСкладе(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДокумента =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Ссылка.Дата КАК Дата,
| ТаблицаТовары.Ссылка.Склад КАК Склад,
| ТаблицаТовары.Ссылка.Помещение КАК Помещение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаТовары.Ячейка КАК Ячейка,
| ТаблицаТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ИСТИНА КАК ИзменяетсяОстаток
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка В(&Ссылка)
|";
СкладыСервер.ЗарегистрироватьИзлишкиНедостачиНаСкладе(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДокумента);
КонецПроцедуры
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтТаблицаТовары", ТекстыЗапроса) Тогда
ТекстЗапросаВтТаблицаТовары(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаСерии.Номенклатура КАК Номенклатура,
| ТаблицаСерии.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ТаблицаСерии.Серия КАК Серия,
| ТаблицаСерии.Количество КАК Количество,
| &Склад КАК Получатель,
| &Помещение КАК ПомещениеПолучателя,
| ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ОтражениеИзлишков) КАК СкладскаяОперация,
| &Ссылка КАК Документ,
| &Период КАК Период,
| ИСТИНА КАК ЭтоСкладскоеДвижение
|ИЗ
| ВтТаблицаТовары КАК ТаблицаСерии
|
|ГДЕ
| ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Ссылка.Склад КАК Склад,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| ЛОЖЬ КАК ПоГрафику,
| НЕОПРЕДЕЛЕНО КАК РаспоряжениеВГрафике
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТабЧасть
|ГДЕ
| ЕСТЬNULL(ТабЧасть.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)";
РаспределениеЗапасовДвижения.ПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть, Неопределено, Ложь);
ТекстТоварныеМеста =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Серия КАК Серия,
| МАКСИМУМ(ТабЧасть.Упаковка) КАК Упаковка
|ПОМЕСТИТЬ ТоварныеМеста
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТабЧасть
|ГДЕ
| ТабЧасть.Ссылка В(&Ссылка)
| И ТабЧасть.Упаковка.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|СГРУППИРОВАТЬ ПО
| ТабЧасть.Ссылка,
| ТабЧасть.Номенклатура,
| ТабЧасть.Характеристика,
| ТабЧасть.Назначение,
| ТабЧасть.Серия
|ИНДЕКСИРОВАТЬ ПО
| Ссылка, Номенклатура, Характеристика, Назначение, Серия, Упаковка";
ТекстыШаблоновВременныхТаблиц = Новый Структура();
ТекстыШаблоновВременныхТаблиц.Вставить("ТоварныеМеста", ТекстТоварныеМеста);
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Ссылка.Склад КАК Склад,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| ЛОЖЬ КАК ПоГрафику,
| НЕОПРЕДЕЛЕНО КАК РаспоряжениеВГрафике
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТабЧасть
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварныеМеста КАК ТоварныеМеста
| ПО ТабЧасть.Ссылка = ТоварныеМеста.Ссылка
| И ТабЧасть.Номенклатура = ТоварныеМеста.Номенклатура
| И ТабЧасть.Характеристика = ТоварныеМеста.Характеристика
| И ТабЧасть.Назначение = ТоварныеМеста.Назначение
| И ТабЧасть.Серия = ТоварныеМеста.Серия
| И ТабЧасть.Упаковка = ТоварныеМеста.Упаковка
|ГДЕ
| ТабЧасть.Упаковка.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)";
РаспределениеЗапасовДвижения.ПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть,
ТекстыШаблоновВременныхТаблиц, Ложь);
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ОрдерНаОтражениеИзлишковТоваров";
КомандаПечати.Представление = НСтр("ru = 'Отражение излишков товаров'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ДобавитьКомандуПечати(КомандыПечати, "ЗаданиеНаРазмещение");
КомандаПечати.ДополнительныеПараметры.Вставить("ПечатьПоДаннымДокумента");
Если ПраваПользователяПовтИсп.ПечатьЭтикетокИЦенников() Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьЭтикетокИЦенников";
КомандаПечати.МенеджерПечати = "Документ.ОрдерНаОтражениеИзлишковТоваров";
КомандаПечати.Идентификатор = "Ценники";
КомандаПечати.Представление = НСтр("ru = 'Ценники'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьЭтикетокИЦенников";
КомандаПечати.МенеджерПечати = "Документ.ОрдерНаОтражениеИзлишковТоваров";
КомандаПечати.Идентификатор = "Этикетки";
КомандаПечати.Представление = НСтр("ru = 'Этикетки'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецЕсли;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОрдерНаОтражениеИзлишковТоваров") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ОрдерНаОтражениеИзлишковТоваров",
НСтр("ru = 'Отражение излишков товаров'"),
ПечатьОтраженияИзлишковТоваровНаСкладе(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
КонецПроцедуры
Функция ПечатьОтраженияИзлишковТоваровНаСкладе(МассивОбъектов, ОбъектыПечати)
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ОрдерНаОтражениеИзлишковТоваров_ОтражениеИзлишковТоваров";
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = ЗначениеЗаполнено(ИмяКолонкиКодов);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОрдерНаОтражениеИзлишковТоваров.Ссылка,
| ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Склад) КАК СкладПредставление,
| ОрдерНаОтражениеИзлишковТоваров.Дата,
| ОрдерНаОтражениеИзлишковТоваров.Номер,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ОрдерНаОтражениеИзлишковТоваров.Дата >= ОрдерНаОтражениеИзлишковТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ОрдерНаОтражениеИзлишковТоваров.Помещение.ТекущийОтветственный
| ИНАЧЕ ОрдерНаОтражениеИзлишковТоваров.Склад.ТекущийОтветственный
| КОНЕЦ КАК Кладовщик,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ОрдерНаОтражениеИзлишковТоваров.Дата >= ОрдерНаОтражениеИзлишковТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ОрдерНаОтражениеИзлишковТоваров.Помещение.ТекущаяДолжностьОтветственного
| ИНАЧЕ ОрдерНаОтражениеИзлишковТоваров.Склад.ТекущаяДолжностьОтветственного
| КОНЕЦ КАК КладовщикДолжность,
| ОрдерНаОтражениеИзлишковТоваров.Ответственный.ФизическоеЛицо КАК Ответственный,
| ОрдерНаОтражениеИзлишковТоваров.Склад КАК Склад,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ОрдерНаОтражениеИзлишковТоваров.Дата >= ОрдерНаОтражениеИзлишковТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользоватьСкладскиеПомещения,
| ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Помещение) КАК ПомещениеПредставление,
| ОрдерНаОтражениеИзлишковТоваров.Помещение КАК Помещение
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров КАК ОрдерНаОтражениеИзлишковТоваров
|ГДЕ
| ОрдерНаОтражениеИзлишковТоваров.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ОрдерНаОтражениеИзлишковТоваров.Ссылка
|;
|
|
|ВЫБРАТЬ
| ОрдерНаОтражениеИзлишковТоваров.Ссылка КАК Ссылка,
| &ВыводитьКоды КАК ДопКолонка,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| ТОГДА NULL
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Ячейка)
| КОНЕЦ КАК ЯчейкаПредставление,
| ОрдерНаОтражениеИзлишковТоваров.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ОрдерНаОтражениеИзлишковТоваров.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| ТОГДА NULL
| ИНАЧЕ ОрдерНаОтражениеИзлишковТоваров.Серия.Наименование
| КОНЕЦ КАК ПредставлениеСерии,
| ОрдерНаОтражениеИзлишковТоваров.Номенклатура КАК Номенклатура,
| ОрдерНаОтражениеИзлишковТоваров.Характеристика КАК Характеристика,
| ОрдерНаОтражениеИзлишковТоваров.Упаковка.Наименование КАК ПредставлениеУпаковки,
| СУММА(ОрдерНаОтражениеИзлишковТоваров.КоличествоУпаковок) КАК КоличествоУпаковок,
| СУММА(ОрдерНаОтражениеИзлишковТоваров.КоличествоУпаковок) КАК Количество,
| ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Упаковка)
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ЕдиницаИзмерения)
| КОНЕЦ КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ОрдерНаОтражениеИзлишковТоваров
|ГДЕ
| ОрдерНаОтражениеИзлишковТоваров.Ссылка В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
| ОрдерНаОтражениеИзлишковТоваров.Ссылка,
| &ВыводитьКоды,
| ОрдерНаОтражениеИзлишковТоваров.Номенклатура.НаименованиеПолное,
| ОрдерНаОтражениеИзлишковТоваров.Характеристика.НаименованиеПолное,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| ТОГДА NULL
| ИНАЧЕ ОрдерНаОтражениеИзлишковТоваров.Серия.Наименование
| КОНЕЦ,
| ОрдерНаОтражениеИзлишковТоваров.Номенклатура,
| ОрдерНаОтражениеИзлишковТоваров.Характеристика,
| ОрдерНаОтражениеИзлишковТоваров.Упаковка.Наименование,
| ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий,
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| ТОГДА NULL
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Ячейка)
| КОНЕЦ,
| ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ЕдиницаИзмерения),
| ВЫБОР
| КОГДА ОрдерНаОтражениеИзлишковТоваров.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Упаковка)
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ОрдерНаОтражениеИзлишковТоваров.Номенклатура.ЕдиницаИзмерения)
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Номенклатура,
| Характеристика
|ИТОГИ ПО
| Ссылка,
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| И НЕ ТаблицаТоваров.Серия ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Номенклатура,
| Характеристика,
| ПредставлениеСерии
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Ячейка) КАК ЯчейкаПредставление
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| И НЕ ТаблицаТоваров.Ячейка ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Номенклатура,
| Характеристика";
Если ВыводитьКоды Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВыводитьКоды", "ОрдерНаОтражениеИзлишковТоваров.Номенклатура." + ИмяКолонкиКодов);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВыводитьКоды КАК ДопКолонка,", "");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВыводитьКоды,", "");
КонецЕсли;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Результаты = Запрос.ВыполнитьПакет();
ВыборкаПоДокументам = Результаты[0].Выбрать();
ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаПоСериям = Результаты[2].Выбрать();
ВыборкаПоЯчейкам = Результаты[3].Выбрать();
ПервыйДокумент = Истина;
РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
СинонимДокумента = "";
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
Пока ВыборкаПоДокументам.Следующий() Цикл
Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
Продолжить;
КонецЕсли;
ВыводитьЯчейкиИУпаковки = СкладыСервер.ИспользоватьАдресноеХранение(ВыборкаПоДокументам.Склад, ВыборкаПоДокументам.Помещение, ВыборкаПоДокументам.Дата);
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ОрдерНаОтражениеИзлишковТоваров.ПФ_MXL_ОрдерНаОтражениеИзлишковТоваров");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапкаТаблицыНачало = Макет.ПолучитьОбласть("ШапкаТаблицы|НачалоСтроки");
ОбластьСтрокаТаблицыНачало = Макет.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки");
ОбластьПодвалТаблицыНачало = Макет.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки");
Если ВыводитьЯчейкиИУпаковки Тогда
ОбластьШапкаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьСтрокаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов");
ОбластьПодвалТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
ОбластьШапкаТаблицыЯчейка = Макет.ПолучитьОбласть("ШапкаТаблицы|Ячейка");
ОбластьСтрокаТаблицыЯчейка = Макет.ПолучитьОбласть("СтрокаТаблицы|Ячейка");
ОбластьПодвалТаблицыЯчейка = Макет.ПолучитьОбласть("ПодвалТаблицы|Ячейка");
ОбластьШапкаТаблицыКолонкаУпаковок = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаУпаковок");
ОбластьСтрокаТаблицыКолонкаУпаковок = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаУпаковок");
ОбластьПодвалТаблицыКолонкаУпаковок = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаУпаковок");
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
Иначе
ОбластьШапкаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицыБезЯчУп|КолонкаКодовБезЯчейки");
ОбластьСтрокаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицыБезЯчУп|КолонкаКодовБезЯчейки");
ОбластьПодвалТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодовБезЯчейки");
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицыБезЯчУп|ТоварБезУпаковок");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицыБезЯчУп|ТоварБезУпаковок");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицы|ТоварБезУпаковок");
КонецЕсли;
ОбластьШапкаТаблицыКолонкаКодов.Параметры.ИмяКолонкиКодов = ПредставлениеКолонкиКодов;
ОбластьПодписей = Макет.ПолучитьОбласть("Подписи");
ОбластьКолонкаТоваров = ?(ВыводитьЯчейкиИУпаковки, Макет.Область("КолонкаТоваров"), Макет.Область("ТоварБезУпаковок"));
Если НЕ ВыводитьКоды Тогда
ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки
+ ?(ВыводитьЯчейкиИУпаковки, Макет.Область("КолонкаКодов").ШиринаКолонки, Макет.Область("КолонкаКодовБезЯчейки").ШиринаКолонки);
КонецЕсли;
ОбластьШапкаТаблицыКонец = Макет.ПолучитьОбласть("ШапкаТаблицы|КонецСтроки");
ОбластьСтрокаТаблицыКонец = Макет.ПолучитьОбласть("СтрокаТаблицы|КонецСтроки");
ОбластьПодвалТаблицыКонец = Макет.ПолучитьОбласть("ПодвалТаблицы|КонецСтроки");
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ЗаполнитьЗначенияСвойств(РеквизитыДокумента,ВыборкаПоДокументам);
Если Не ЗначениеЗаполнено(СинонимДокумента) Тогда
МетаданныеДокумента = ВыборкаПоДокументам.Ссылка.Метаданные();
Если Не ЗначениеЗаполнено(МетаданныеДокумента.ПредставлениеОбъекта) Тогда
СинонимДокумента = МетаданныеДокумента.Синоним;
Иначе
СинонимДокумента = МетаданныеДокумента.ПредставлениеОбъекта;
КонецЕсли;
КонецЕсли;
СтруктураДанныхЗаголовка = Новый Структура;
СтруктураДанныхЗаголовка.Вставить("ТекстЗаголовка",
ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента));
ОбластьЗаголовок.Параметры.Заполнить(СтруктураДанныхЗаголовка);
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ВыборкаПоДокументам.Ссылка);
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
ОбластьШапка.Параметры.Заполнить(ВыборкаПоДокументам);
ОбластьШапка.Параметры.СкладПредставление = СкладыСервер.ПолучитьПредставлениеСклада(
ВыборкаПоДокументам.СкладПредставление,
ВыборкаПоДокументам.ПомещениеПредставление);
ТабличныйДокумент.Вывести(ОбластьШапка);
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыНачало);
Если ВыводитьЯчейкиИУпаковки Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыЯчейка);
КонецЕсли;
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаТоваров);
Если ВыводитьЯчейкиИУпаковки Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаУпаковок);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКонец);
НомерСтроки = 1;
ВыборкаПоСсылкамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСсылкамТЧ.Следующий() Цикл
ВыборкаПоНоменклатуреТЧ = ВыборкаПоСсылкамТЧ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоНоменклатуреТЧ.Следующий() Цикл
ВыборкаПоСтрокамТЧ = ВыборкаПоНоменклатуреТЧ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаПоНоменклатуреТЧ.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
СтрокаУпаковок = "";
СтрокаКоличесткаУпаковок = "";
СтрокаЕдиницИзмерений = "";
СтрокаКоличества = "";
СтрокаЯчеек = "";
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
Если ВыводитьЯчейкиИУпаковки Тогда
СтрокаУпаковок = СтрокаУпаковок + ВыборкаПоСтрокамТЧ.ПредставлениеЕдиницыИзмеренияУпаковки + Символы.ПС;
СтрокаКоличесткаУпаковок = СтрокаКоличесткаУпаковок + ВыборкаПоСтрокамТЧ.КоличествоУпаковок + Символы.ПС;
КонецЕсли;
СтрокаЕдиницИзмерений = СтрокаЕдиницИзмерений + ВыборкаПоСтрокамТЧ.ПредставлениеБазовойЕдиницыИзмерения + Символы.ПС;
СтрокаКоличества = СтрокаКоличества + ВыборкаПоСтрокамТЧ.Количество + Символы.ПС;
КонецЦикла;
ВыборкаПоСтрокамТЧ.Сбросить();
Если ВыборкаПоСтрокамТЧ.Следующий() Тогда
ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(Новый Структура("НомерСтроки", НомерСтроки));
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Ссылка", ВыборкаПоСтрокамТЧ.Ссылка);
СтруктураПоиска.Вставить("Номенклатура", ВыборкаПоСтрокамТЧ.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", ВыборкаПоСтрокамТЧ.Характеристика);
Если ВыводитьЯчейкиИУпаковки Тогда
Пока ВыборкаПоЯчейкам.НайтиСледующий(СтруктураПоиска) Цикл
СтрокаЯчеек = СтрокаЯчеек + ВыборкаПоЯчейкам.ЯчейкаПредставление + Символы.ПС;
КонецЦикла;
ОбластьСтрокаТаблицыЯчейка.Параметры.ЯчейкаПредставление = СтрокаЯчеек;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыЯчейка);
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ.ДопКолонка;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;
СтрокаСерий = "";
Пока ВыборкаПоСериям.НайтиСледующий(СтруктураПоиска) Цикл
СтрокаСерий = СтрокаСерий + ВыборкаПоСериям.ПредставлениеСерии + ", ";
КонецЦикла;
Если СтрДлина(СтрокаСерий) <> 0 Тогда
СтрокаСерий = Лев(СтрокаСерий, СтрДлина(СтрокаСерий) - 2);
КонецЕсли;
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры,
ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики,
,
СтрокаСерий,
ДопПараметрыПредставлениеНоменклатуры);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);
Если ВыводитьЯчейкиИУпаковки Тогда
ОбластьСтрокаТаблицыКолонкаУпаковок.Параметры.КоличествоУпаковок = СтрокаКоличесткаУпаковок;
ОбластьСтрокаТаблицыКолонкаУпаковок.Параметры.ПредставлениеЕдиницыИзмеренияУпаковки = СтрокаУпаковок;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаУпаковок);
КонецЕсли;
ОбластьСтрокаТаблицыКонец.Параметры.Количество = СтрокаКоличества;
ОбластьСтрокаТаблицыКонец.Параметры.ПредставлениеБазовойЕдиницыИзмерения = СтрокаЕдиницИзмерений;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКонец);
НомерСтроки = НомерСтроки + 1;
КонецЕсли;
Иначе
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(Новый Структура("НомерСтроки", НомерСтроки));
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
Если ВыводитьЯчейкиИУпаковки Тогда
ОбластьСтрокаТаблицыЯчейка.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыЯчейка);
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ.ДопКолонка;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры,
ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики,
,
ВыборкаПоСтрокамТЧ.ПредставлениеСерии,
ДопПараметрыПредставлениеНоменклатуры);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);
Если ВыводитьЯчейкиИУпаковки Тогда
ОбластьСтрокаТаблицыКолонкаУпаковок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаУпаковок);
КонецЕсли;
ОбластьСтрокаТаблицыКонец.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКонец);
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);
Если ВыводитьЯчейкиИУпаковки Тогда
ОбластьПодвалТаблицыЯчейка.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыЯчейка);
КонецЕсли;
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаТоваров);
Если ВыводитьЯчейкиИУпаковки Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаУпаковок);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКонец);
ОбластьПодписей.Параметры.Ответственный = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный, ВыборкаПоДокументам.Дата);
ОбластьПодписей.Параметры.Кладовщик = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Кладовщик, ВыборкаПоДокументам.Дата);
ОбластьПодписей.Параметры.КладовщикДолжность = СкладыСервер.ДолжностьОтветственногоЛицаСклада(ВыборкаПоДокументам.КладовщикДолжность);
ТабличныйДокумент.Вывести(ОбластьПодписей);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Возврат ТабличныйДокумент;
КонецФункции
Функция ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров(ПараметрыПечати, МассивОбъектов) Экспорт
УчитыватьУпаковки = Не ПараметрыПечати.Свойство("БезДопКолонки");
ТекстЗапроса = ТекстЗапросаТоварыЗаданияОтборРазмещениеТоваров(УчитыватьУпаковки)
+ ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| МИНИМУМ(ТаблицаТовары.НомерСтроки) КАК НомерСтроки,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия
| КОНЕЦ КАК Серия,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ КАК Упаковка,
| СУММА(ТаблицаТовары.Количество) КАК Количество,
| СУММА(ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ТаблицаТовары.Количество
| ИНАЧЕ ТаблицаТовары.КоличествоУпаковок
| КОНЕЦ) КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТаблицаТоваровСуммированная
|ИЗ
| ТоварыЗадания КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| ТаблицаТовары.Склад,
| ТаблицаТовары.Помещение,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия
| КОНЕЦ,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ
|;
|
|
|ВЫБРАТЬ
| ДанныеЗадания.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Ссылка) КАК СсылкаПредставление,
| ДанныеЗадания.Номер КАК Номер,
| ДанныеЗадания.Дата КАК Дата,
| ДанныеЗадания.Склад КАК Склад,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Склад) КАК СкладПредставление,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Помещение) КАК ПомещениеПредставление,
| ЛОЖЬ КАК ЭтоНакладная,
| ЛОЖЬ КАК ИспользуетсяАдресноеХранение,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ДанныеЗадания.Помещение.ИспользоватьАдресноеХранениеСправочно
| И (НЕ ДанныеЗадания.Помещение.ИспользоватьАдресноеХранение
| ИЛИ ДанныеЗадания.Дата < ДанныеЗадания.Помещение.ДатаНачалаАдресногоХраненияОстатков)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьАдресноеХранениеСправочно
| И (НЕ ДанныеЗадания.Склад.ИспользоватьАдресноеХранение
| ИЛИ ДанныеЗадания.Дата < ДанныеЗадания.Склад.ДатаНачалаАдресногоХраненияОстатков)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользуетсяСправочноеХранение,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ДанныеЗадания.Помещение.ИспользованиеРабочихУчастков
| ИНАЧЕ ДанныеЗадания.Склад.ИспользованиеРабочихУчастков
| КОНЕЦ КАК ИспользованиеРабочихУчастков,
| ЛОЖЬ КАК ИспользуетсяОрдернаяСхема
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров КАК ДанныеЗадания
|
|ГДЕ
| ДанныеЗадания.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Склад КАК Склад,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию) КАК РабочийУчасток,
| ПРЕДСТАВЛЕНИЕ(ОсновныеЯчейки.Ячейка.РабочийУчасток) КАК ПредставлениеРабочегоУчастка,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.ПорядокОбхода, 0) КАК ПорядокОбхода,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка, &ЯчейкаПоУмолчанию) КАК ОсновнаяЯчейка,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.Код, """") КАК ОсновнаяЯчейкаПредставление,
| ЕСТЬNULL(ОстальныеЯчейки.Ячейка.ПорядокОбхода, 0) КАК ПорядокОбходаДополнительнаяЯчейка,
| ЕСТЬNULL(ОстальныеЯчейки.Ячейка.Код, """") КАК ЯчейкаПредставление,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура.Код КАК Код,
| ТаблицаТоваров.Номенклатура.Артикул КАК Артикул,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| Товары.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Упаковка) КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| ПРЕДСТАВЛЕНИЕ(Товары.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок
|ИЗ
| ТаблицаТоваровСуммированная КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
| ПО ТаблицаТоваров.Номенклатура = Товары.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
| И ОсновныеЯчейки.ОсновнаяЯчейка
| И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
| И ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
| ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОстальныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОстальныеЯчейки.Номенклатура
| И НЕ ОстальныеЯчейки.ОсновнаяЯчейка
| И ТаблицаТоваров.Склад = ОстальныеЯчейки.Склад
| И ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОстальныеЯчейки.Помещение
| ИНАЧЕ ОстальныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад,
| РабочийУчасток,
| НомерСтроки,
| Номенклатура,
| Характеристика,
| Серия
|
|ИТОГИ ПО
| Ссылка,
| Склад,
| РабочийУчасток
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Склад КАК Склад,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию) КАК РабочийУчасток,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии
|ИЗ
| ТоварыЗадания КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
| И ОсновныеЯчейки.ОсновнаяЯчейка
| И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
| И ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
| ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ
|
|ГДЕ
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| И ТаблицаТоваров.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад,
| РабочийУчасток,
| НомерСтроки,
| Номенклатура,
| Характеристика";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&НастройкаИспользованияСерий",
"ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&РабочийУчастокПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.РабочиеУчастки.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ЯчейкаПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка)");
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
МаксимальныйИндекс = Результат.ВГраница();
ДанныеЗадания = Новый Структура;
ДанныеЗадания.Вставить("РезультатПоОшибкам", Неопределено);
ДанныеЗадания.Вставить("РезультатПоРаспоряжениям", Неопределено);
ДанныеЗадания.Вставить("РезультатПоШапке", Результат[МаксимальныйИндекс - 2]);
ДанныеЗадания.Вставить("РезультатПоТабличнойЧасти", Результат[МаксимальныйИндекс - 1]);
ДанныеЗадания.Вставить("РезультатПоУпаковкам", Неопределено);
ДанныеЗадания.Вставить("РезультатПоСериям", Результат[МаксимальныйИндекс]);
Возврат ДанныеЗадания;
КонецФункции
Функция ТекстЗапросаТоварыЗаданияОтборРазмещениеТоваров(УчитыватьУпаковки)
Если УчитыватьУпаковки Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Серия КАК Серия,
| ТоварыДокумента.Упаковка КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТоварыЗадания
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОрдерНаОтражениеИзлишковТоваров КАК ДанныеДокумента
| ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
|
|ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Серия,
| ТоварыДокумента.Упаковка";
Иначе
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Серия КАК Серия,
| &УпаковкаПоУмолчанию КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТоварыЗадания
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОрдерНаОтражениеИзлишковТоваров КАК ДанныеДокумента
| ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
|
|ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
| И ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Серия,
| &УпаковкаПоУмолчанию
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыБезУпаковок.Номенклатура КАК Номенклатура,
| ТоварыБезУпаковок.Характеристика КАК Характеристика,
| ТоварыБезУпаковок.Серия КАК Серия,
| &УпаковкаПоУмолчанию КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.Количество) КАК КоличествоУпаковок
|ИЗ
| (ВЫБРАТЬ
| ТоварыДокумента.Ссылка КАК Ссылка,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ТоварыДокумента.Серия КАК Серия,
| МАКСИМУМ(ТоварыДокумента.Упаковка) КАК Упаковка
| ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТоварыДокумента
|
| ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
| И ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
| СГРУППИРОВАТЬ ПО
| ТоварыДокумента.Ссылка,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Назначение,
| ТоварыДокумента.Серия
|
| ) КАК ТоварыБезУпаковок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТоварыДокумента
| ПО ТоварыБезУпаковок.Ссылка = ТоварыДокумента.Ссылка
| И ТоварыБезУпаковок.Номенклатура = ТоварыДокумента.Номенклатура
| И ТоварыБезУпаковок.Характеристика = ТоварыДокумента.Характеристика
| И ТоварыБезУпаковок.Назначение = ТоварыДокумента.Назначение
| И ТоварыБезУпаковок.Серия = ТоварыДокумента.Серия
| И ТоварыБезУпаковок.Упаковка = ТоварыДокумента.Упаковка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОрдерНаОтражениеИзлишковТоваров КАК ДанныеДокумента
| ПО ТоварыБезУпаковок.Ссылка = ДанныеДокумента.Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыБезУпаковок.Номенклатура,
| ТоварыБезУпаковок.Характеристика,
| ТоварыБезУпаковок.Серия,
| &УпаковкаПоУмолчанию";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&УпаковкаПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)");
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ДанныеДляПечатиЭтикеток(МассивДокументов) Экспорт
ДатаЦенообразования = ОбщегоНазначенияУТ.ПолучитьМаксимальнуюДатуДокументов(МассивДокументов);
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ДатаЦенообразования);
Запрос = Новый Запрос;
Если ИспользуетсяЦенообразование25 Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Упаковка КАК Упаковка,
| Товары.Серия КАК Серия,
| МИНИМУМ(Товары.НомерСтроки) КАК Порядок,
| СУММА(Товары.КоличествоУпаковок) КАК Количество
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК Товары
|ГДЕ
| Товары.Ссылка В(&МассивДокументов)
| И ВЫБОР
| КОГДА Товары.Номенклатура.ИспользованиеХарактеристик В (ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| И Товары.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Упаковка,
| Товары.Серия
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Упаковка КАК Упаковка,
| МИНИМУМ(Товары.НомерСтроки) КАК Порядок,
| СУММА(Товары.КоличествоУпаковок) КАК Количество
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК Товары
|ГДЕ
| Товары.Ссылка В(&МассивДокументов)
| И ВЫБОР
| КОГДА Товары.Номенклатура.ИспользованиеХарактеристик В (ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| И Товары.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Упаковка
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|";
КонецЕсли;
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
РезультатЗапроса = Запрос.Выполнить();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьСклад", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьВидЦены", Неопределено);
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Истина);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЭтикеток");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЭтикетокПоДокументу");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", РезультатЗапроса.Выгрузить());
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
СтруктураРезультат.Вставить("Дата", ДатаЦенообразования);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
Функция ДанныеДляПечатиЦенников(МассивДокументов) Экспорт
ДатаЦенообразования = ОбщегоНазначенияУТ.ПолучитьМаксимальнуюДатуДокументов(МассивДокументов);
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ДатаЦенообразования);
Запрос = Новый Запрос;
Если ИспользуетсяЦенообразование25 Тогда
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Упаковка КАК Упаковка,
| Товары.Серия КАК Серия,
| МИНИМУМ(Товары.НомерСтроки) КАК Порядок,
| СУММА(Товары.КоличествоУпаковок) КАК Количество
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК Товары
|ГДЕ
| Товары.Ссылка В(&МассивДокументов)
| И ВЫБОР
| КОГДА Товары.Номенклатура.ИспользованиеХарактеристик В (ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| И Товары.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Упаковка,
| Товары.Серия
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Упаковка КАК Упаковка,
| МИНИМУМ(Товары.НомерСтроки) КАК Порядок,
| СУММА(Товары.КоличествоУпаковок) КАК Количество
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК Товары
|ГДЕ
| Товары.Ссылка В(&МассивДокументов)
| И ВЫБОР
| КОГДА Товары.Номенклатура.ИспользованиеХарактеристик В (ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры), ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры))
| И Товары.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Упаковка
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|";
КонецЕсли;
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
РезультатЗапроса = Запрос.Выполнить();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьСклад", Неопределено);
СтруктураДействий.Вставить("ЗаполнитьВидЦены", Неопределено);
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Истина);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЦенников");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЦенниковПоДокументу");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", РезультатЗапроса.Выгрузить());
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
СтруктураРезультат.Вставить("Дата", ДатаЦенообразования);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
Функция ТекстЗапросаВтТаблицаТовары(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтТаблицаТовары";
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Назначение,
| Товары.Серия,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| Товары.Количество
|ПОМЕСТИТЬ ВтТаблицаТовары
|ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
| И ЕСТЬNULL(Товары.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Серия,
| Таблица.СтатусУказанияСерий,
| СУММА(ТоварыКоличество.Количество)
|ИЗ
| (ВЫБРАТЬ
| ТоварыУпаковка.Ссылка КАК Ссылка,
| ТоварыУпаковка.Номенклатура КАК Номенклатура,
| ТоварыУпаковка.Характеристика КАК Характеристика,
| ТоварыУпаковка.Назначение КАК Назначение,
| ТоварыУпаковка.Серия КАК Серия,
| МАКСИМУМ(ТоварыУпаковка.Упаковка) КАК Упаковка,
| ТоварыУпаковка.СтатусУказанияСерий КАК СтатусУказанияСерий
| ИЗ
| Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТоварыУпаковка
| ГДЕ
| ТоварыУпаковка.Ссылка = &Ссылка
| И ЕСТЬNULL(ТоварыУпаковка.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
| СГРУППИРОВАТЬ ПО
| ТоварыУпаковка.Ссылка,
| ТоварыУпаковка.Номенклатура,
| ТоварыУпаковка.Характеристика,
| ТоварыУпаковка.Назначение,
| ТоварыУпаковка.Серия,
| ТоварыУпаковка.СтатусУказанияСерий) КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОрдерНаОтражениеИзлишковТоваров.Товары КАК ТоварыКоличество
| ПО Таблица.Ссылка = ТоварыКоличество.Ссылка
| И Таблица.Номенклатура = ТоварыКоличество.Номенклатура
| И Таблица.Характеристика = ТоварыКоличество.Характеристика
| И Таблица.Серия = ТоварыКоличество.Серия
| И Таблица.Назначение = ТоварыКоличество.Назначение
| И Таблица.Упаковка = ТоварыКоличество.Упаковка
|
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Серия,
| Таблица.СтатусУказанияСерий";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли