#Если НЕ МобильныйАвтономныйСервер Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("АдресныйСклад");
МеханизмыДокумента.Добавить("СерийныйУчет");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.РасходныйОрдерНаТовары") Тогда
ДокументОбъект = Документ;
ДокументСсылка = Документ.Ссылка;
ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
ДокументОбъект = Документ.ПолучитьОбъект();
ДокументСсылка = Документ;
Иначе
ДокументОбъект = Неопределено;
ДокументСсылка = Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
ПолучитьДанныеДокумента(Запрос, ДокументСсылка);
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ОтгрузитьТоварСоСклада(Запрос, ТекстыЗапроса, Регистры, ДокументОбъект);
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Документы.ОтборРазмещениеТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Документы.ОрдерНаОтражениеПорчиТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Документы.ОрдерНаОтражениеПересортицыТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.РасходныйОрдерНаТовары) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.РасходныйОрдерНаТовары.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.РасходныйОрдерНаТовары);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьОрдернуюСхемуПриОтгрузке";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ДобавитьКомандуСоздатьНаОснованииРасходныйОрдерНаТовары(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.РасходныйОрдерНаТовары) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Обработчик = "СозданиеНаОснованииУТКлиент.СоздатьНаОснованииРасходныйОрдерНаТовары";
КомандаСоздатьНаОсновании.Идентификатор = "СоздатьНаОснованииРасходныйОрдерНаТовары";
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.РасходныйОрдерНаТовары);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.МножественныйВыбор = Истина;
КомандаСоздатьНаОсновании.ФункциональныеОпции = "РасходныеОрдераФормируютсяМенеджером";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ДобавитьКомандуСоздатьНаОснованииРасходныйОрдерНаТоварыПоЗаданиюНаПеревозку(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.РасходныйОрдерНаТовары) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Обработчик = "СозданиеНаОснованииУТКлиент.СоздатьНаОснованииРасходныйОрдерНаТовары";
КомандаСоздатьНаОсновании.Идентификатор = "СоздатьНаОснованииРасходныйОрдерНаТоварыПоЗаданиюНаПеревозку";
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.РасходныйОрдерНаТовары);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "РасходныеОрдераФормируютсяМенеджером";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КонецПроцедуры
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Склад,Помещение,Статус,СкладскаяОперация,Распоряжение,ДатаОтгрузки";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = Новый Структура;
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
ОтгружаемыеТовары = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ОтгружаемыеТовары.ПолноеИмяОбъекта = "Документ.РасходныйОрдерНаТовары";
ОтгружаемыеТовары.ЭтоОрдер = Истина;
ОтгружаемыеТовары.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
ОтгружаемыеТовары.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ОтгружаемыеТовары.ИспользуютсяТоварныеМеста = Истина;
ОтгружаемыеТовары.СкладскиеОперации.Добавить(Объект.СкладскаяОперация);
ОтгружаемыеТовары.ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад, Объект.Помещение, Объект.ДатаОтгрузки);
ОтгружаемыеТовары.ИмяТЧТовары = "ОтгружаемыеТовары";
ОтгружаемыеТовары.ИмяТЧСерии = "ОтгружаемыеТовары";
ОтгружаемыеТовары.ИмяПоляПомещение = "Помещение";
Если Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.Подготовлен Тогда
ОтгружаемыеТовары.ПодготовкаОрдера = Истина;
ОтгружаемыеТовары.ПланированиеОтгрузки = Ложь;
ОтгружаемыеТовары.ПланированиеОтбора = Ложь;
ОтгружаемыеТовары.ПроверкаОтбора = Ложь;
ОтгружаемыеТовары.ФактОтбора = Ложь;
ИначеЕсли Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.КОтбору Тогда
ОтгружаемыеТовары.ПодготовкаОрдера = Ложь;
ОтгружаемыеТовары.ПланированиеОтгрузки = Ложь;
ОтгружаемыеТовары.ПланированиеОтбора = Истина;
ОтгружаемыеТовары.ПроверкаОтбора = Ложь;
ОтгружаемыеТовары.ФактОтбора = Ложь;
ИначеЕсли Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.КПроверке Тогда
ОтгружаемыеТовары.ПоляСвязи.Добавить("Упаковка");
ОтгружаемыеТовары.ИмяПоляКоличество = "КоличествоУпаковок";
ОтгружаемыеТовары.ПодготовкаОрдера = Ложь;
ОтгружаемыеТовары.ПланированиеОтгрузки = Ложь;
ОтгружаемыеТовары.ПланированиеОтбора = Ложь;
ОтгружаемыеТовары.ПроверкаОтбора = Истина;
ОтгружаемыеТовары.ФактОтбора = Ложь;
ИначеЕсли Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.Проверен
Или Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.КОтгрузке
Или Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.Отгружен Тогда
ОтгружаемыеТовары.ПоляСвязи.Добавить("Упаковка");
ОтгружаемыеТовары.ИмяПоляКоличество = "КоличествоУпаковок";
ОтгружаемыеТовары.ПодготовкаОрдера = Ложь;
ОтгружаемыеТовары.ПланированиеОтгрузки = Ложь;
ОтгружаемыеТовары.ПланированиеОтбора = Ложь;
ОтгружаемыеТовары.ПроверкаОтбора = Ложь;
ОтгружаемыеТовары.ФактОтбора = Истина;
КонецЕсли;
ОтгружаемыеТовары.РегистрироватьСерии = НоменклатураКлиентСервер.НеобходимоРегистрироватьСерии(ОтгружаемыеТовары);
ОтгружаемыеТовары.ОсобеннаяПроверкаСтатусовУказанияСерий = Истина;
ОтгружаемыеТовары.ПоляСвязи.Добавить("Действие");
ОтгружаемыеТовары.ПоляСвязи.Добавить("УпаковочныйЛистРодитель");
ОтгружаемыеТовары.ПоляСвязи.Добавить("Назначение");
ОтгружаемыеТовары.ЭтоОрдер = Истина;
ОтгружаемыеТовары.ИмяПоляПомещение = "Помещение";
ОтгружаемыеТовары.Дата = Объект.ДатаОтгрузки;
ТоварыПоРаспоряжениям = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ТоварыПоРаспоряжениям.ПолноеИмяОбъекта = "Документ.РасходныйОрдерНаТовары";
ТоварыПоРаспоряжениям.ЭтоНакладная = Истина;
ТоварыПоРаспоряжениям.ПланированиеОтгрузки = Истина;
ТоварыПоРаспоряжениям.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
ТоварыПоРаспоряжениям.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ТоварыПоРаспоряжениям.СкладскиеОперации.Добавить(Объект.СкладскаяОперация);
ТоварыПоРаспоряжениям.ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад, Объект.Помещение, Объект.ДатаОтгрузки);
ТоварыПоРаспоряжениям.ИмяТЧТовары = "ТоварыПоРаспоряжениям";
ТоварыПоРаспоряжениям.ИмяТЧСерии = "ТоварыПоРаспоряжениям";
ТоварыПоРаспоряжениям.ИмяПоляПомещение = "Помещение";
ТоварыПоРаспоряжениям.ИмяПоляКоличество = "Количество";
ТоварыПоРаспоряжениям.ИменаПолейДляОпределенияРаспоряжения.Добавить("ТоварыПоРаспоряжениям_Распоряжение");
ТоварыПоРаспоряжениям.ПоляСвязи.Добавить("Распоряжение");
ТоварыПоРаспоряжениям.ОсобеннаяПроверкаСтатусовУказанияСерий = Ложь;
ПараметрыУказанияСерий.Вставить("ОтгружаемыеТовары", ОтгружаемыеТовары);
ПараметрыУказанияСерий.Вставить("ТоварыПоРаспоряжениям", ТоварыПоРаспоряжениям);
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция РаспоряжениеНаВыполнениеСкладскойОперации(ЗначенияПолейДляОпределенияРаспоряжения) Экспорт
Возврат ЗначенияПолейДляОпределенияРаспоряжения.ТоварыПоРаспоряжениям_Распоряжение;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
Если ПараметрыУказанияСерий.ИмяТЧТовары = "ОтгружаемыеТовары"
ИЛИ ПараметрыУказанияСерий.ИмяТЧТовары = "ПодобраннаяМаркируемаяПродукция" Тогда
ТекстЗапроса = ТекстЗапросаЗаполненияСтатусовУказанияСерийОтгружаемыеТовары(ПараметрыУказанияСерий);
Иначе
ТекстЗапроса = ТекстЗапросаЗаполненияСтатусовУказанияСерийТоварыПоРаспоряжениям(ПараметрыУказанияСерий);
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаДоступныхНазначений(ПараметрыФормированияЗапроса) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДанныеРегистраТоварыКОтгрузке.Номенклатура,
| ДанныеРегистраТоварыКОтгрузке.Характеристика,
| СУММА(ДанныеРегистраТоварыКОтгрузке.Потребность) КАК Потребность,
| СУММА(0) КАК Обеспечено,
| Назначения.Ссылка КАК Назначение,
| Назначения.ДвиженияПоСкладскимРегистрам КАК ДвиженияПоСкладскимРегистрам,
| СУММА(ДанныеРегистраТоварыКОтгрузке.Потребность) - МАКСИМУМ(ЕСТЬNULL(ДанныеДокумента.Количество, 0)) КАК Остаток
|ИЗ
| (ВЫБРАТЬ
| ТоварыКОтгрузкеОстатки.Номенклатура КАК Номенклатура,
| ТоварыКОтгрузкеОстатки.Характеристика КАК Характеристика,
| ТоварыКОтгрузкеОстатки.Назначение КАК Назначение,
| ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток КАК Потребность
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Остатки(
| ,
| (&ПоВсемРаспоряжениям ИЛИ ДокументОтгрузки = &Распоряжение)
| И (Номенклатура, Характеристика) В (&ОтборПоТоварам)
| И Склад = &Склад
| И Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК ТоварыКОтгрузкеОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКОтгрузке.Номенклатура,
| ТоварыКОтгрузке.Характеристика,
| ТоварыКОтгрузке.Назначение,
| ВЫБОР
| КОГДА ТоварыКОтгрузке.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 0
| ИНАЧЕ ТоварыКОтгрузке.КОтгрузке
| КОНЕЦ
| ИЗ
| РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
| ГДЕ
| (ТоварыКОтгрузке.Номенклатура, ТоварыКОтгрузке.Характеристика) В (&ОтборПоТоварам)
| И ТоварыКОтгрузке.Склад = &Склад
| И ТоварыКОтгрузке.Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И ТоварыКОтгрузке.Регистратор = &Регистратор
| И (&ПоВсемРаспоряжениям ИЛИ ТоварыКОтгрузке.ДокументОтгрузки = &Распоряжение)) КАК ДанныеРегистраТоварыКОтгрузке
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыДокументаСгруппированные КАК ДанныеДокумента
| ПО ДанныеРегистраТоварыКОтгрузке.Номенклатура = ДанныеДокумента.Номенклатура
| И ДанныеРегистраТоварыКОтгрузке.Характеристика = ДанныеДокумента.Характеристика
| И ДанныеРегистраТоварыКОтгрузке.Назначение = ДанныеДокумента.Назначение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Назначения КАК Назначения
| ПО ДанныеРегистраТоварыКОтгрузке.Назначение = Назначения.Ссылка
|ГДЕ
| ДанныеРегистраТоварыКОтгрузке.Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И ДанныеРегистраТоварыКОтгрузке.Назначение.ДвиженияПоСкладскимРегистрам
|
|СГРУППИРОВАТЬ ПО
| ДанныеРегистраТоварыКОтгрузке.Номенклатура,
| ДанныеРегистраТоварыКОтгрузке.Характеристика,
| Назначения.Ссылка
|ИМЕЮЩИЕ
| СУММА(ДанныеРегистраТоварыКОтгрузке.Потребность) - МАКСИМУМ(ЕСТЬNULL(ДанныеДокумента.Количество, 0))>=0";
Если ПараметрыФормированияЗапроса.УчестьУжеПодобранные Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Назначение,
| ТоварыДокумента.Количество
|ПОМЕСТИТЬ ТаблицаТоваровДокумента
|ИЗ
| &ТоварыДокумента КАК ТоварыДокумента
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваровДокумента.Номенклатура КАК Номенклатура,
| ТаблицаТоваровДокумента.Характеристика КАК Характеристика,
| ТаблицаТоваровДокумента.Назначение КАК Назначение,
| СУММА(ТаблицаТоваровДокумента.Количество) КАК Количество
|ПОМЕСТИТЬ ТоварыДокументаСгруппированные
|ИЗ
| ТаблицаТоваровДокумента КАК ТаблицаТоваровДокумента
|ГДЕ
| (ТаблицаТоваровДокумента.Номенклатура, ТаблицаТоваровДокумента.Характеристика) В (&ОтборПоТоварам)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваровДокумента.Номенклатура,
| ТаблицаТоваровДокумента.Характеристика,
| ТаблицаТоваровДокумента.Назначение
|;" + ТекстЗапроса;
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТоварыДокументаСгруппированные", "(" +
"ВЫБРАТЬ
| ИСТИНА КАК Номенклатура,
| ИСТИНА КАК Характеристика,
| ИСТИНА КАК Назначение,
| 0 КАК Количество" + ")");
КонецЕсли;
Если ПараметрыФормированияЗапроса.ПоНесколькимТоварам Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика
|ПОМЕСТИТЬ ТаблицаОтбораПоТоварам
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаОтбораПоТоварам.Номенклатура,
| ТаблицаОтбораПоТоварам.Характеристика
|ПОМЕСТИТЬ ТоварыОтборСгруппированные
|ИЗ
| ТаблицаОтбораПоТоварам КАК ТаблицаОтбораПоТоварам
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОтбораПоТоварам.Номенклатура,
| ТаблицаОтбораПоТоварам.Характеристика
|;" + ТекстЗапроса;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоТоварам",
"ВЫБРАТЬ
| ТоварыОтборСгруппированные.Номенклатура,
| ТоварыОтборСгруппированные.Характеристика
|ИЗ
| ТоварыОтборСгруппированные КАК ТоварыОтборСгруппированные");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоТоварам",
"ВЫБРАТЬ
| &Номенклатура,
| &Характеристика");
КонецЕсли;
Если ПараметрыФормированияЗапроса.УпорядочитьПоДатеЗаказаНазначения Тогда
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Назначения.Заказ.Дата";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаПроверкиЗаполненияСерий(ПараметрыУказанияСерий) Экспорт
Если ПараметрыУказанияСерий.ИспользоватьАдресноеХранение Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаСерий.НомерСтроки КАК НомерСтроки,
| ТаблицаСерий.Номенклатура КАК Номенклатура,
| ТаблицаСерий.Характеристика КАК Характеристика,
| ТаблицаСерий.Серия КАК Серия,
| ""Серия"" КАК ИмяПоляСерия,
| ВЫБОР
| КОГДА ТаблицаСерий.Действие <> ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать)
| ТОГДА ТаблицаСерий.Упаковка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| ВЫБОР
| КОГДА ТаблицаСерий.Действие <> ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать)
| ТОГДА ТаблицаСерий.КоличествоУпаковок
| ИНАЧЕ ТаблицаСерий.Количество
| КОНЕЦ КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТаблицаСерийДляЗапроса
|ИЗ
| &ТаблицаСерий_НомерЗапроса КАК ТаблицаСерий
|ГДЕ
| ТаблицаСерий.СтатусУказанияСерий > 0
| И НЕ ТаблицаСерий.СтатусУказанияСерий В (&СтатусыСерийСериюМожноУказать)";
Иначе
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаСерий.НомерСтроки КАК НомерСтроки,
| ТаблицаСерий.Номенклатура КАК Номенклатура,
| ТаблицаСерий.Характеристика КАК Характеристика,
| ТаблицаСерий.Серия КАК Серия,
| ""Серия"" КАК ИмяПоляСерия,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| ТаблицаСерий.Количество КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТаблицаСерийДляЗапроса
|ИЗ
| &ТаблицаСерий_НомерЗапроса КАК ТаблицаСерий
|ГДЕ
| ТаблицаСерий.СтатусУказанияСерий > 0
| И НЕ ТаблицаСерий.СтатусУказанияСерий В (&СтатусыСерийСериюМожноУказать)";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция РазбитьОрдер(ИсточникОбъект, СтрокиДляПриемника, ПриемникСсылка = Неопределено, ЗаданиеНаПеревозку = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(ПриемникСсылка) Тогда
ПриемникОбъект = Документы.РасходныйОрдерНаТовары.СоздатьДокумент();
ЗаполнитьЗначенияСвойств(ПриемникОбъект, ИсточникОбъект,, "Дата,Номер");
Если ЗначениеЗаполнено(ЗаданиеНаПеревозку) Тогда
ПриемникОбъект.ЗаданиеНаПеревозку = ЗаданиеНаПеревозку;
КонецЕсли;
ПриемникОбъект.Дата = ТекущаяДатаСеанса();
Иначе
ПриемникОбъект = ПриемникСсылка.ПолучитьОбъект();
Попытка
ПриемникОбъект.Заблокировать();
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
РезультатРасчетаПереносимыхСтрок = ПереносимыеСтроки(ИсточникОбъект, СтрокиДляПриемника);
Если РезультатРасчетаПереносимыхСтрок.ЕстьОшибка Тогда
Возврат Неопределено;
КонецЕсли;
Если СкладыСервер.ИспользоватьАдресноеХранение(ИсточникОбъект.Склад, ИсточникОбъект.Помещение, ИсточникОбъект.ДатаОтгрузки) Тогда
КорректировкаОбъект = Документы.КорректировкаПоОрдеруНаТовары.СоздатьДокумент();
ЗаполнитьЗначенияСвойств(КорректировкаОбъект, ИсточникОбъект, "Склад,Помещение");
КорректировкаОбъект.Дата = ТекущаяДатаСеанса();
КорректировкаОбъект.Ордер = ИсточникОбъект.Ссылка;
Иначе
КорректировкаОбъект = Неопределено;
КонецЕсли;
Для Каждого СтрМас Из РезультатРасчетаПереносимыхСтрок.СтрокиДляПереноса Цикл
НоваяСтрока = ПриемникОбъект.ОтгружаемыеТовары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрМас);
Если КорректировкаОбъект <> Неопределено
И Не СтрМас.ЭтоУпаковочныйЛист Тогда
НоваяСтрокаКорректировки = КорректировкаОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаКорректировки, СтрМас);
НоваяСтрокаКорректировки.ВидОперации = Перечисления.ВидыОперацийКорректировокОстатковТоваров.ПеренестиВДругойОрдер;
КонецЕсли;
ИсточникОбъект.ОтгружаемыеТовары.Удалить(СтрМас);
КонецЦикла;
ИсточникОбъект.ВсегоМест = УпаковочныеЛистыСервер.КоличествоМестВТЧ(ИсточникОбъект.ОтгружаемыеТовары);
ПриемникОбъект.ВсегоМест = УпаковочныеЛистыСервер.КоличествоМестВТЧ(ПриемникОбъект.ОтгружаемыеТовары);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыПоРаспоряжениям.НомерСтроки,
| ТоварыПоРаспоряжениям.Распоряжение,
| ТоварыПоРаспоряжениям.Номенклатура,
| ТоварыПоРаспоряжениям.Характеристика,
| ТоварыПоРаспоряжениям.Назначение,
| ТоварыПоРаспоряжениям.Серия,
| ТоварыПоРаспоряжениям.Количество
|ПОМЕСТИТЬ ТоварыПоРаспоряжениямДляЗапроса
|ИЗ
| &ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
|;
|
|
|ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ВЫБОР
| КОГДА ОтгружаемыеТовары.СтатусУказанияСерий В (10, 14)
| ТОГДА ОтгружаемыеТовары.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ОтгружаемыеТовары.Количество
|ПОМЕСТИТЬ ОтгружаемыеТовары
|ИЗ
| &ОтгружаемыеТовары КАК ОтгружаемыеТовары
|ГДЕ
| НЕ ОтгружаемыеТовары.ЭтоУпаковочныйЛист
| И ОтгружаемыеТовары.Действие <> ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение
|ПОМЕСТИТЬ РаспоряженияЗадания
|ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
|ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка = &ЗаданиеНаПеревозку
| И ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель = &Получатель
|;
|
|
|ВЫБРАТЬ
| ТоварыПоРаспоряжениям.НомерСтроки,
| ТоварыПоРаспоряжениям.Распоряжение,
| ВЫБОР
| КОГДА РаспоряженияЗадания.Распоряжение ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК РаспоряжениеЕстьВЗадании,
| ТоварыПоРаспоряжениям.Номенклатура,
| ТоварыПоРаспоряжениям.Характеристика,
| ТоварыПоРаспоряжениям.Назначение,
| ТоварыПоРаспоряжениям.Серия,
| ТоварыПоРаспоряжениям.Количество
|ПОМЕСТИТЬ ТоварыПоРаспоряжениям
|ИЗ
| ТоварыПоРаспоряжениямДляЗапроса КАК ТоварыПоРаспоряжениям
| ЛЕВОЕ СОЕДИНЕНИЕ РаспоряженияЗадания КАК РаспоряженияЗадания
| ПО ТоварыПоРаспоряжениям.Распоряжение = РаспоряженияЗадания.Распоряжение
|;
|
|
|ВЫБРАТЬ
| ВсеТовары.Номенклатура,
| ВсеТовары.Характеристика,
| ВсеТовары.Назначение,
| ВсеТовары.Серия,
| СУММА(ВсеТовары.КоличествоПоРаспоряжениям) - СУММА(ВсеТовары.КоличествоОтгружается) КАК РасхождениеСРаспоряжениями
|ПОМЕСТИТЬ РасхожденияПоТоварам
|ИЗ
| (ВЫБРАТЬ
| ТоварыПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ТоварыПоРаспоряжениям.Характеристика КАК Характеристика,
| ТоварыПоРаспоряжениям.Назначение КАК Назначение,
| ТоварыПоРаспоряжениям.Серия КАК Серия,
| 0 КАК КоличествоОтгружается,
| ТоварыПоРаспоряжениям.Количество КАК КоличествоПоРаспоряжениям
| ИЗ
| ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ОтгружаемыеТовары.Серия,
| ОтгружаемыеТовары.Количество,
| 0
| ИЗ
| ОтгружаемыеТовары КАК ОтгружаемыеТовары) КАК ВсеТовары
|
|СГРУППИРОВАТЬ ПО
| ВсеТовары.Номенклатура,
| ВсеТовары.Назначение,
| ВсеТовары.Характеристика,
| ВсеТовары.Серия
|
|ИМЕЮЩИЕ
| СУММА(ВсеТовары.КоличествоОтгружается) < СУММА(ВсеТовары.КоличествоПоРаспоряжениям)
|;
|
|
|ВЫБРАТЬ
| РасхожденияПоТоварам.Номенклатура КАК Номенклатура,
| РасхожденияПоТоварам.Характеристика КАК Характеристика,
| РасхожденияПоТоварам.Назначение КАК Назначение,
| РасхожденияПоТоварам.Серия КАК Серия,
| РасхожденияПоТоварам.РасхождениеСРаспоряжениями,
| ТоварыПоРаспоряжениям.НомерСтроки КАК НомерСтрокиРаспоряжений
|ИЗ
| ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РасхожденияПоТоварам КАК РасхожденияПоТоварам
| ПО ТоварыПоРаспоряжениям.Номенклатура = РасхожденияПоТоварам.Номенклатура
| И ТоварыПоРаспоряжениям.Характеристика = РасхожденияПоТоварам.Характеристика
| И ТоварыПоРаспоряжениям.Назначение = РасхожденияПоТоварам.Назначение
| И ТоварыПоРаспоряжениям.Серия = РасхожденияПоТоварам.Серия
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| ТоварыПоРаспоряжениям.РаспоряжениеЕстьВЗадании УБЫВ";
Запрос.УстановитьПараметр("ТоварыПоРаспоряжениям",ИсточникОбъект.ТоварыПоРаспоряжениям.Выгрузить());
Запрос.УстановитьПараметр("ОтгружаемыеТовары",ИсточникОбъект.ОтгружаемыеТовары.Выгрузить());
Запрос.УстановитьПараметр("ОтгружаемыеТовары",ИсточникОбъект.ОтгружаемыеТовары.Выгрузить());
Запрос.УстановитьПараметр("ЗаданиеНаПеревозку",ПриемникОбъект.ЗаданиеНаПеревозку);
Запрос.УстановитьПараметр("Получатель",ПриемникОбъект.Получатель);
ТекНоменклатура = Неопределено;
ТекХарактеристика = Неопределено;
ТекНазначение = Неопределено;
ТекСерия = Неопределено;
Выборка = Запрос.Выполнить().Выбрать();
СтрокиДляУдаления = Новый Массив;
Пока Выборка.Следующий() Цикл
Если ТекНоменклатура <> Выборка.Номенклатура
Или ТекХарактеристика <> Выборка.Характеристика
Или ТекНазначение <> Выборка.Назначение
Или ТекСерия <> Выборка.Серия Тогда
КоличествоКРаспределению = Выборка.РасхождениеСРаспоряжениями;
ТекНоменклатура = Выборка.Номенклатура;
ТекХарактеристика = Выборка.Характеристика;
ТекНазначение = Выборка.Назначение;
ТекСерия = Выборка.Серия;
КонецЕсли;
Если КоличествоКРаспределению = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаРаспоряжений = ИсточникОбъект.ТоварыПоРаспоряжениям[Выборка.НомерСтрокиРаспоряжений - 1];
НоваяСтрока = ПриемникОбъект.ТоварыПоРаспоряжениям.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРаспоряжений);
Если КоличествоКРаспределению >= СтрокаРаспоряжений.Количество Тогда
КоличествоКРаспределению = КоличествоКРаспределению - СтрокаРаспоряжений.Количество;
СтрокиДляУдаления.Добавить(СтрокаРаспоряжений);
Иначе
СтрокаРаспоряжений.Количество = СтрокаРаспоряжений.Количество - КоличествоКРаспределению;
НоваяСтрока.Количество = КоличествоКРаспределению;
КоличествоКРаспределению = 0;
КонецЕсли;
КонецЦикла;
Для Каждого СтрМас Из СтрокиДляУдаления Цикл
ИсточникОбъект.ТоварыПоРаспоряжениям.Удалить(СтрМас);
КонецЦикла;
ТранзакцияЗафиксирована = Истина;
НачатьТранзакцию();
Попытка
ИсточникОбъект.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПриПроведении");
Если ИсточникОбъект.ОтгружаемыеТовары.Количество() > 0 Тогда
ИсточникОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ИсточникОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
ПриемникОбъект.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПриПроведении");
ПриемникОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если КорректировкаОбъект <> Неопределено Тогда
КорректировкаОбъект.ОрдерПолучатель = ПриемникОбъект.Ссылка;
КорректировкаОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТранзакцияЗафиксирована = Ложь;
ТекстСообщения = НСтр("ru = 'Не удалось разбить ордер %Источник%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Источник%", ИсточникОбъект.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Не удалось перенести данные в новый ордер'", КодОсновногоЯзыка),
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Если ТранзакцияЗафиксирована Тогда
Возврат ПриемникОбъект.Ссылка;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Склад)";
КонецПроцедуры
#КонецОбласти
#Область Печать
Функция ПравилаПечатиЗаданияНаОтборРазмещение() Экспорт
ПравилаПечатиЗадания = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ПравилаПечатиЗаданияНаОтборРазмещение();
ПравилаПечатиЗадания.ЭтоНакладная = Ложь;
ПравилаПечатиЗадания.ИмяПоляПомещение = "Помещение";
ПравилаПечатиЗадания.ИмяТЧТовары = "ОтгружаемыеТовары";
ПравилаПечатиЗадания.ЕстьУпаковочныеЛисты = Истина;
Возврат ПравилаПечатиЗадания;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
ПолноеИмяДокумента = "Документ.РасходныйОрдерНаТовары";
Если ИмяРегистра = "ДвиженияСерийТоваров" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, ИмяРегистра);
СинонимТаблицыДокумента = "ТаблицаСерии";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросМеханизмаПроведения(ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента);
Возврат Результат;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументаШапка.ДатаОтгрузки КАК Период,
| ДанныеДокументаШапка.Склад КАК Склад,
| ДанныеДокументаШапка.Получатель КАК Получатель,
| ДанныеДокументаШапка.СкладскаяОперация КАК СкладскаяОперация,
| ДанныеДокументаШапка.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку,
| ДанныеДокументаШапка.Помещение КАК Помещение,
| ДанныеДокументаШапка.ЗонаОтгрузки КАК ЗонаОтгрузки,
| ДанныеДокументаШапка.Статус КАК Статус
|ИЗ
| ДанныеДокументаШапка КАК ДанныеДокументаШапка";
Результат = Запрос.Выполнить();
СтруктураПараметров = ОбщегоНазначенияУТ.ПерваяСтрокаРезультатаЗапросаВСтруктуру(Результат);
ОбщегоНазначенияУТ.УстановитьПараметрыЗапроса(Запрос, СтруктураПараметров);
КонецПроцедуры
Процедура ПолучитьДанныеДокумента(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Если ДокументСсылка = Неопределено Тогда
Возврат;
КонецЕсли;
СписокЗапросов = Новый Массив;
ТекстЗапросаДанныеДокументаШапка(СписокЗапросов);
ТекстЗапросаДанныеДокументаТаблицаОтгружаемыеТовары(СписокЗапросов);
ТекстЗапросаДанныеДокументаТаблицаТоварыПоРаспоряжениям(СписокЗапросов);
ТекстЗапроса = СтрСоединить(СписокЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Выполнить();
КонецПроцедуры
Процедура ТекстЗапросаДанныеДокументаШапка(СписокЗапросов)
ТекстЗапросаШапка =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.ДатаОтгрузки КАК ДатаОтгрузки,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Получатель КАК Получатель,
| ДанныеДокумента.СкладскаяОперация КАК СкладскаяОперация,
| ДанныеДокумента.Помещение КАК Помещение,
| ДанныеДокумента.Статус КАК Статус,
| ДанныеДокумента.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку,
| ДанныеДокумента.ЗонаОтгрузки КАК ЗонаОтгрузки
|ПОМЕСТИТЬ ДанныеДокументаШапка
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка";
СписокЗапросов.Добавить(ТекстЗапросаШапка);
КонецПроцедуры
Процедура ТекстЗапросаДанныеДокументаТаблицаОтгружаемыеТовары(СписокЗапросов)
ТекстЗапросаТаблицаТовары =
"ВЫБРАТЬ
| ТаблицаОтгружаемыеТовары.Ссылка КАК Ссылка,
| ТаблицаОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ТаблицаОтгружаемыеТовары.Характеристика КАК Характеристика,
| ТаблицаОтгружаемыеТовары.Назначение КАК Назначение,
| ТаблицаОтгружаемыеТовары.Количество КАК Количество,
| ТаблицаОтгружаемыеТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаОтгружаемыеТовары.Серия КАК Серия,
| ТаблицаОтгружаемыеТовары.Действие КАК Действие,
| ТаблицаОтгружаемыеТовары.Упаковка КАК Упаковка,
| Упаковки.ТипУпаковки КАК УпаковкаТипУпаковки,
| ТаблицаОтгружаемыеТовары.ЭтоУпаковочныйЛист КАК ЭтоУпаковочныйЛист,
| ТаблицаОтгружаемыеТовары.КоличествоУпаковок КАК КоличествоУпаковок
|ПОМЕСТИТЬ ДанныеДокументаТаблицаОтгружаемыеТовары
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК ТаблицаОтгружаемыеТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО (Упаковки.Ссылка = ТаблицаОтгружаемыеТовары.Упаковка)
|ГДЕ
| ТаблицаОтгружаемыеТовары.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка";
СписокЗапросов.Добавить(ТекстЗапросаТаблицаТовары);
КонецПроцедуры
Процедура ТекстЗапросаДанныеДокументаТаблицаТоварыПоРаспоряжениям(СписокЗапросов)
ТекстЗапросаТаблицаТоварыПоРаспоряжениям =
"ВЫБРАТЬ
| ТаблицаТоварыПоРаспоряжениям.Ссылка КАК Ссылка,
| ТаблицаТоварыПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ТаблицаТоварыПоРаспоряжениям.Характеристика КАК Характеристика,
| ТаблицаТоварыПоРаспоряжениям.Назначение КАК Назначение,
| ТаблицаТоварыПоРаспоряжениям.Количество КАК Количество,
| ТаблицаТоварыПоРаспоряжениям.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоварыПоРаспоряжениям.Серия КАК Серия,
| ТаблицаТоварыПоРаспоряжениям.Распоряжение КАК Распоряжение
|ПОМЕСТИТЬ ДанныеДокументаТаблицаТоварыПоРаспоряжениям
|ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК ТаблицаТоварыПоРаспоряжениям
|ГДЕ
| ТаблицаТоварыПоРаспоряжениям.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка";
СписокЗапросов.Добавить(ТекстЗапросаТаблицаТоварыПоРаспоряжениям);
КонецПроцедуры
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтТаблицаТовары", ТекстыЗапроса) Тогда
ТекстЗапросаВтТаблицаТовары(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокументаШапка.ДатаОтгрузки КАК Период,
| ТаблицаСерии.Номенклатура КАК Номенклатура,
| ТаблицаСерии.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ТаблицаСерии.Серия КАК Серия,
| ТаблицаСерии.Количество КАК Количество,
| ДанныеДокументаШапка.Склад КАК Отправитель,
| ДанныеДокументаШапка.Помещение КАК ПомещениеОтправителя,
| ДанныеДокументаШапка.Получатель КАК Получатель,
| ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка) КАК ПомещениеПолучателя,
| ТаблицаСерии.Ссылка КАК Документ,
| ДанныеДокументаШапка.СкладскаяОперация КАК СкладскаяОперация,
| ИСТИНА КАК ЭтоСкладскоеДвижение
|ИЗ
| ВтТаблицаТовары КАК ТаблицаСерии
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТаблицаСерии.Ссылка)
|ГДЕ
| ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ТаблицаСерии.Действие <> ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДанныеДокументаШапка.ДатаОтгрузки,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ,
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| ДанныеДокументаШапка.Склад,
| ДанныеДокументаШапка.Помещение,
| ДанныеДокументаШапка.Склад,
| ДанныеДокументаШапка.Помещение,
| ТаблицаСерии.Ссылка,
| ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.РазмещениеВЯчейки),
| ИСТИНА
|ИЗ
| ВтТаблицаТовары КАК ТаблицаСерии
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТаблицаСерии.Ссылка)
|ГДЕ
| ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ТаблицаСерии.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтТаблицаТовары(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтТаблицаТовары";
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыОтгружаемыеТовары.Ссылка КАК Ссылка,
| ТоварыОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ТоварыОтгружаемыеТовары.Характеристика КАК Характеристика,
| ТоварыОтгружаемыеТовары.Назначение КАК Назначение,
| ТоварыОтгружаемыеТовары.Серия КАК Серия,
| ТоварыОтгружаемыеТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТоварыОтгружаемыеТовары.Действие КАК Действие,
| ТоварыОтгружаемыеТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВтТаблицаТовары
|ИЗ
| ДанныеДокументаТаблицаОтгружаемыеТовары КАК ТоварыОтгружаемыеТовары
|ГДЕ
| ТоварыОтгружаемыеТовары.Ссылка В(&Ссылка)
| И НЕ ТоварыОтгружаемыеТовары.ЭтоУпаковочныйЛист
| И ЕСТЬNULL(ТоварыОтгружаемыеТовары.УпаковкаТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Ссылка,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Серия,
| Таблица.СтатусУказанияСерий,
| Таблица.Действие,
| СУММА(ОтгружаемыеТоварыКоличество.Количество)
|ИЗ
| (ВЫБРАТЬ
| ОтгружаемыеТоварыУпаковка.Ссылка КАК Ссылка,
| ОтгружаемыеТоварыУпаковка.Номенклатура КАК Номенклатура,
| ОтгружаемыеТоварыУпаковка.Характеристика КАК Характеристика,
| ОтгружаемыеТоварыУпаковка.Назначение КАК Назначение,
| ОтгружаемыеТоварыУпаковка.Серия КАК Серия,
| МАКСИМУМ(ОтгружаемыеТоварыУпаковка.Упаковка) КАК Упаковка,
| ОтгружаемыеТоварыУпаковка.Действие КАК Действие,
| ОтгружаемыеТоварыУпаковка.СтатусУказанияСерий КАК СтатусУказанияСерий
| ИЗ
| ДанныеДокументаТаблицаОтгружаемыеТовары КАК ОтгружаемыеТоварыУпаковка
| ГДЕ
| ОтгружаемыеТоварыУпаковка.Ссылка В(&Ссылка)
| И НЕ ОтгружаемыеТоварыУпаковка.ЭтоУпаковочныйЛист
| И ЕСТЬNULL(ОтгружаемыеТоварыУпаковка.УпаковкаТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
| СГРУППИРОВАТЬ ПО
| ОтгружаемыеТоварыУпаковка.Ссылка,
| ОтгружаемыеТоварыУпаковка.Номенклатура,
| ОтгружаемыеТоварыУпаковка.Характеристика,
| ОтгружаемыеТоварыУпаковка.Назначение,
| ОтгружаемыеТоварыУпаковка.Действие,
| ОтгружаемыеТоварыУпаковка.Серия,
| ОтгружаемыеТоварыУпаковка.СтатусУказанияСерий) КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеДокументаТаблицаОтгружаемыеТовары КАК ОтгружаемыеТоварыКоличество
| ПО Таблица.Ссылка = ОтгружаемыеТоварыКоличество.Ссылка
| И Таблица.Номенклатура = ОтгружаемыеТоварыКоличество.Номенклатура
| И Таблица.Характеристика = ОтгружаемыеТоварыКоличество.Характеристика
| И Таблица.Серия = ОтгружаемыеТоварыКоличество.Серия
| И Таблица.Назначение = ОтгружаемыеТоварыКоличество.Назначение
| И Таблица.Упаковка = ОтгружаемыеТоварыКоличество.Упаковка
| И Таблица.Действие = ОтгружаемыеТоварыКоличество.Действие
|
|СГРУППИРОВАТЬ ПО
| Таблица.Ссылка,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Серия,
| Таблица.Действие,
| Таблица.СтатусУказанияСерий";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ОтгрузитьТоварСоСклада(Запрос, ТекстыЗапроса, Регистры, ДокументОбъект)
Если ДокументОбъект <> Неопределено
И ДокументОбъект.Статус = Перечисления.СтатусыРасходныхОрдеров.ПустаяСсылка() Тогда
Возврат;
КонецЕсли;
ТекстЗапросаДанныхДокумента =
"ВЫБРАТЬ
| ТоварыДокумента.Ссылка КАК Ссылка,
| ДанныеШапки.ДатаОтгрузки КАК Период,
| ТоварыДокумента.Распоряжение КАК Заказ,
| ДанныеШапки.ЗаданиеНаПеревозку КАК ЗаданиеНаПеревозку,
| ДанныеШапки.Получатель КАК Получатель,
| ДанныеШапки.Склад КАК Склад,
| ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка) КАК Помещение,
| ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка) КАК Ячейка,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| ТоварыДокумента.Серия КАК Серия,
| ТоварыДокумента.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТоварыДокумента.Количество КАК Количество,
| 0 КАК КоличествоУпаковок,
| ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.ПустаяСсылка) КАК Действие,
| ДанныеШапки.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Подготовлен) КАК КСборке,
| ДанныеШапки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КОтбору), ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КПроверке)) КАК Собирается,
| ДанныеШапки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Проверен), ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КОтгрузке)) КАК Собрано,
| ДанныеШапки.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Отгружен) КАК КОтгрузке
|ИЗ
| ДанныеДокументаТаблицаТоварыПоРаспоряжениям КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеШапки
| ПО (ДанныеШапки.Ссылка = ТоварыДокумента.Ссылка)
|ГДЕ
| ТоварыДокумента.Ссылка В(&Ссылка)
| И ДанныеШапки.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.ПустаяСсылка)
| И ТоварыДокумента.Количество <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыДокумента.Ссылка,
| ДанныеШапки.ДатаОтгрузки,
| НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Документ.ЗаданиеНаПеревозку.ПустаяСсылка),
| НЕОПРЕДЕЛЕНО,
| ДанныеШапки.Склад,
| ДанныеШапки.Помещение,
| ДанныеШапки.ЗонаОтгрузки,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Назначение,
| ТоварыДокумента.Упаковка,
| ТоварыДокумента.Серия,
| ТоварыДокумента.СтатусУказанияСерий,
| ТоварыДокумента.Количество,
| ТоварыДокумента.КоличествоУпаковок,
| ТоварыДокумента.Действие,
| ДанныеШапки.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Подготовлен),
| ДанныеШапки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КОтбору), ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КПроверке)),
| ДанныеШапки.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Проверен), ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КОтгрузке)),
| ДанныеШапки.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Отгружен)
|ИЗ
| ДанныеДокументаТаблицаОтгружаемыеТовары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеШапки
| ПО (ДанныеШапки.Ссылка = ТоварыДокумента.Ссылка)
|ГДЕ
| ТоварыДокумента.Ссылка В(&Ссылка)
| И НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
| И ТоварыДокумента.Количество <> 0
| И ДанныеШапки.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.ПустаяСсылка)";
СкладыСервер.ОтгрузитьТоварСоСклада(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДанныхДокумента);
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Если ПравоДоступа("Изменение", Метаданные.Документы.РасходныйОрдерНаТовары) Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "РасходныйОрдерНаТовары";
КомандаПечати.Представление = НСтр("ru = 'Расходный ордер на товары'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецЕсли;
ИнтеграцияСМаркетплейсамиСервер.ДобавитьКомандуПечатиЭтикеток(КомандыПечати);
КомандаПечати = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ДобавитьКомандуПечати(КомандыПечати, "ЗаданиеНаОтбор");
КомандаПечати.ДополнительныеПараметры.Вставить("ПечатьПоДаннымДокумента");
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасходныйОрдерНаТовары") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"РасходныйОрдерНаТовары",
НСтр("ru = 'Расходный ордер на товары'"),
ПечатьРасходногоОрдераНаТовары(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
КонецПроцедуры
Функция ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров(ПараметрыПечати, МассивОбъектов) Экспорт
ИспользуетсяМаркируемаяПродукция = РасходныйОрдерНаТоварыЛокализация.ИспользуетсяМаркируемаяПродукция();
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Серия КАК Серия,
| ТоварыДокумента.Упаковка КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТоварыЗадания
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары КАК ДанныеДокумента
| ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
|ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
| И НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
| И ТоварыДокумента.Действие <> ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Серия,
| ТоварыДокумента.Упаковка
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| МИНИМУМ(ТаблицаТовары.НомерСтроки) КАК НомерСтроки,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия
| КОНЕЦ КАК Серия,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ КАК Упаковка,
| СУММА(ТаблицаТовары.Количество) КАК Количество,
| СУММА(ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ТаблицаТовары.Количество
| ИНАЧЕ ТаблицаТовары.КоличествоУпаковок
| КОНЕЦ) КАК КоличествоУпаковок,
| ТаблицаТовары.МаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТаблицаТоваровСуммированная
|ИЗ
| ТоварыЗадания КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| ТаблицаТовары.Склад,
| ТаблицаТовары.Помещение,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия
| КОНЕЦ,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ,
| ТаблицаТовары.МаркируемаяПродукция
|;
|
|
|ВЫБРАТЬ
| РаспоряженияДокумента.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(РаспоряженияДокумента.Распоряжение) КАК ОснованиеПредставление,
| РаспоряженияДокумента.Распоряжение.Номер КАК ОснованиеНомер,
| РаспоряженияДокумента.Распоряжение.Дата КАК ОснованиеДата,
| МИНИМУМ(РаспоряженияДокумента.НомерСтроки) КАК НомерСтроки
|ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК РаспоряженияДокумента
|ГДЕ
| РаспоряженияДокумента.Ссылка В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияДокумента.Ссылка,
| РаспоряженияДокумента.Распоряжение.Номер,
| РаспоряженияДокумента.Распоряжение.Дата,
| ПРЕДСТАВЛЕНИЕ(РаспоряженияДокумента.Распоряжение)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки
|;
|
|
|ВЫБРАТЬ
| ДанныеЗадания.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Ссылка) КАК СсылкаПредставление,
| ДанныеЗадания.Номер КАК Номер,
| ДанныеЗадания.ДатаОтгрузки КАК Дата,
| ДанныеЗадания.Склад КАК Склад,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Склад) КАК СкладПредставление,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Помещение) КАК ПомещениеПредставление,
| ЛОЖЬ КАК ЭтоНакладная,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.ДатаОтгрузки >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ДанныеЗадания.Помещение.ИспользоватьАдресноеХранение
| И ДанныеЗадания.ДатаОтгрузки >= ДанныеЗадания.Помещение.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьАдресноеХранение
| И ДанныеЗадания.ДатаОтгрузки >= ДанныеЗадания.Склад.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользуетсяАдресноеХранение,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.ДатаОтгрузки >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ДанныеЗадания.Помещение.ИспользоватьАдресноеХранениеСправочно
| И (НЕ ДанныеЗадания.Помещение.ИспользоватьАдресноеХранение
| ИЛИ ДанныеЗадания.ДатаОтгрузки < ДанныеЗадания.Помещение.ДатаНачалаАдресногоХраненияОстатков)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьАдресноеХранениеСправочно
| И (НЕ ДанныеЗадания.Склад.ИспользоватьАдресноеХранение
| ИЛИ ДанныеЗадания.ДатаОтгрузки < ДанныеЗадания.Склад.ДатаНачалаАдресногоХраненияОстатков)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользуетсяСправочноеХранение,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.ДатаОтгрузки >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ДанныеЗадания.Помещение.ИспользованиеРабочихУчастков
| ИНАЧЕ ДанныеЗадания.Склад.ИспользованиеРабочихУчастков
| КОНЕЦ КАК ИспользованиеРабочихУчастков,
| ЛОЖЬ КАК ИспользуетсяОрдернаяСхема,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.ЗаданиеНаПеревозку.Ссылка) КАК ЗаданиеНаПеревозкуПредставление,
| ДанныеЗадания.ЗаданиеНаПеревозку.Номер КАК ЗаданиеНаПеревозкуНомер,
| ДанныеЗадания.ЗаданиеНаПеревозку.Дата КАК ЗаданиеНаПеревозкуДата,
| ДанныеЗадания.ПорядокДоставки КАК ПорядокДоставки,
| ДанныеЗадания.ОтгрузкаПоЗаданиюНаПеревозку КАК ОтгрузкаПоЗаданиюНаПеревозку
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК ДанныеЗадания
|ГДЕ
| ДанныеЗадания.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Склад КАК Склад,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию) КАК РабочийУчасток,
| ПРЕДСТАВЛЕНИЕ(ОсновныеЯчейки.Ячейка.РабочийУчасток) КАК ПредставлениеРабочегоУчастка,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.ПорядокОбхода, 0) КАК ПорядокОбхода,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка, &ЯчейкаПоУмолчанию) КАК ОсновнаяЯчейка,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.Код, """") КАК ОсновнаяЯчейкаПредставление,
| ЕСТЬNULL(ОстальныеЯчейки.Ячейка.ПорядокОбхода, 0) КАК ПорядокОбходаДополнительнаяЯчейка,
| ЕСТЬNULL(ОстальныеЯчейки.Ячейка.Код, """") КАК ЯчейкаПредставление,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура.Код КАК Код,
| ТаблицаТоваров.Номенклатура.Артикул КАК Артикул,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| Товары.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Упаковка) КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| ПРЕДСТАВЛЕНИЕ(Товары.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаТоваров.МаркируемаяПродукция КАК МаркируемаяПродукция
|ИЗ
| ТаблицаТоваровСуммированная КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
| ПО ТаблицаТоваров.Номенклатура = Товары.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
| И (ОсновныеЯчейки.ОсновнаяЯчейка)
| И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
| И (ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.ДатаОтгрузки >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
| ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОстальныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОстальныеЯчейки.Номенклатура
| И (НЕ ОстальныеЯчейки.ОсновнаяЯчейка)
| И ТаблицаТоваров.Склад = ОстальныеЯчейки.Склад
| И (ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.ДатаОтгрузки >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОстальныеЯчейки.Помещение
| ИНАЧЕ ОстальныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад,
| РабочийУчасток,
| НомерСтроки,
| Номенклатура,
| Характеристика,
| Серия
|ИТОГИ ПО
| Ссылка,
| Склад,
| РабочийУчасток
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Склад КАК Склад,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию) КАК РабочийУчасток,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.МаркируемаяПродукция КАК МаркируемаяПродукция
|ИЗ
| ТоварыЗадания КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
| И (ОсновныеЯчейки.ОсновнаяЯчейка)
| И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
| И (ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.ДатаОтгрузки >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
| ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ)
|ГДЕ
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| И ТаблицаТоваров.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад,
| РабочийУчасток,
| НомерСтроки,
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ТоварыЗадания.Ссылка,
| МАКСИМУМ(ТоварыЗадания.МаркируемаяПродукция) КАК ЕстьМаркируемаяПродукция
|ИЗ
| ТоварыЗадания КАК ТоварыЗадания
|СГРУППИРОВАТЬ ПО
| ТоварыЗадания.Ссылка";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&НастройкаИспользованияСерий",
"ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&РабочийУчастокПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.РабочиеУчастки.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ЯчейкаПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка)");
Если ИспользуетсяМаркируемаяПродукция Тогда
ОпределениеМаркируемаяПродукция = РасходныйОрдерНаТоварыЛокализация.ОпределениеПризнакаМаркируемаяПродукцияТекстаЗапроса("ТоварыДокумента.Номенклатура");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпределениеПризнакаМаркируемаяПродукция", ОпределениеМаркируемаяПродукция);
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпределениеПризнакаМаркируемаяПродукция", "ЛОЖЬ");
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
МаксимальныйИндекс = Результат.ВГраница();
ДанныеЗадания = Новый Структура;
ДанныеЗадания.Вставить("РезультатПоОшибкам", Неопределено);
ДанныеЗадания.Вставить("РезультатПоРаспоряжениям", Результат[МаксимальныйИндекс - 4]);
ДанныеЗадания.Вставить("РезультатПоШапке", Результат[МаксимальныйИндекс - 3]);
ДанныеЗадания.Вставить("РезультатПоТабличнойЧасти", Результат[МаксимальныйИндекс - 2]);
ДанныеЗадания.Вставить("РезультатПоУпаковкам", Неопределено);
ДанныеЗадания.Вставить("РезультатПоСериям", Результат[МаксимальныйИндекс - 1]);
ДанныеЗадания.Вставить("РезультатПоМаркам", Результат[МаксимальныйИндекс]);
Возврат ДанныеЗадания;
КонецФункции
Функция ПечатьРасходногоОрдераНаТовары(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасходныйОрдерНаТовары_РасходныйОрдерНаТовары";
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = ЗначениеЗаполнено(ИмяКолонкиКодов);
РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс,Представление");
СинонимДокумента = НСтр("ru='Расходный ордер на товары'", ОбщегоНазначения.КодОсновногоЯзыка());
ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
ИспользуетсяМаркируемаяПродукция = РасходныйОрдерНаТоварыЛокализация.ИспользуетсяМаркируемаяПродукция();
ЗапросПоШапке = Новый Запрос;
ЗапросПоШапке.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТовары.Ссылка,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТовары.Склад) КАК ПредставлениеСклада,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТовары.Помещение) КАК ПредставлениеПомещения,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТовары.ЗонаОтгрузки) КАК ПредставлениеЗоныОтгрузки,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТовары.Получатель) КАК ПредставлениеПолучателя,
| РасходныйОрдерНаТовары.Дата КАК Дата,
| РасходныйОрдерНаТовары.ДатаОтгрузки КАК ДатаОтгрузки,
| РасходныйОрдерНаТовары.Номер КАК Номер,
| РасходныйОрдерНаТовары.Ответственный.ФизическоеЛицо КАК Ответственный,
| РасходныйОрдерНаТовары.Склад КАК Склад,
| РасходныйОрдерНаТовары.Помещение КАК Помещение,
| РасходныйОрдерНаТовары.Склад.ИспользоватьСерииНоменклатуры КАК ИспользоватьСерииНоменклатуры,
| РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку КАК ОтгрузкаПоЗаданиюНаПеревозку,
| РасходныйОрдерНаТовары.ПорядокДоставки КАК ПорядокДоставки,
| РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.Дата КАК ЗаданиеНаПеревозкуДата,
| РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.Номер КАК ЗаданиеНаПеревозкуНомер,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТовары.ЗаданиеНаПеревозку) КАК ЗаданиеНаПеревозкуПредставление
|ИЗ
| Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
|ГДЕ
| РасходныйОрдерНаТовары.Ссылка В(&МассивОбъектов)
|
|ИТОГИ ПО
| ИспользоватьСерииНоменклатуры
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Организация.Префикс) КАК РаспоряжениеПрефикс,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение) КАК РаспоряжениеПредставление,
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Номер КАК РаспоряжениеНомер,
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Дата КАК РаспоряжениеДата,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Организация) КАК ПредставлениеОрганизации,
| МИНИМУМ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.НомерСтроки) КАК НомерСтроки
|ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК РасходныйОрдерНаТоварыТоварыПоРаспоряжениям
|ГДЕ
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Ссылка В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Ссылка,
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Номер,
| РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Дата,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Организация.Префикс),
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение),
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыТоварыПоРаспоряжениям.Распоряжение.Организация)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки";
ЗапросПоШапке.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
УстановитьПривилегированныйРежим(Истина);
МассивРезультатов = ЗапросПоШапке.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
ДеревоОбъектов = МассивРезультатов[0].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаРаспоряжений = МассивРезультатов[1].Выбрать();
Для Каждого ИспользованиеСерий Из ДеревоОбъектов.Строки Цикл
ЗапросПоТоварам = Новый Запрос;
МассивОбъектовИспользованиеСерий = ИспользованиеСерий.Строки.ВыгрузитьКолонку("Ссылка");
ЗапросПоТоварам.УстановитьПараметр("МассивОбъектов", МассивОбъектовИспользованиеСерий);
Если ИспользованиеСерий.ИспользоватьСерииНоменклатуры Тогда
ТекстЗапросаПоТоварам =
"ВЫБРАТЬ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка КАК Ссылка,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.НомерСтроки КАК НомерСтроки,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.Код КАК Код,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Характеристика КАК Характеристика,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Серия КАК Серия,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель.Код КАК УпаковочныйЛистРодительКод,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.КоличествоУпаковок,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Количество,
| ВЫБОР
| КОГДА РасходныйОрдерНаТоварыОтгружаемыеТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК НеОтгружать,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Упаковка,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК РасходныйОрдерНаТоварыОтгружаемыеТовары
|ГДЕ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка В(&МассивОбъектов)
| И НЕ РасходныйОрдерНаТоварыОтгружаемыеТовары.ЭтоУпаковочныйЛист
|
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка,
| Максимум(ТаблицаТоваров.НомерСтроки) КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| ТОГДА NULL
| ИНАЧЕ ТаблицаТоваров.Серия
| КОНЕЦ КАК Серия,
| ТаблицаТоваров.УпаковочныйЛистРодитель,
| ТаблицаТоваров.УпаковочныйЛистРодительКод,
| СУММА(ТаблицаТоваров.КоличествоУпаковок) КАК КоличествоУпаковок,
| СУММА(ТаблицаТоваров.Количество) КАК Количество,
| ТаблицаТоваров.НеОтгружать,
| ТаблицаТоваров.Упаковка,
| ТаблицаТоваров.МаркируемаяПродукция
|ПОМЕСТИТЬ СуммированнаяТаблицаТоваров
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ТаблицаТоваров.НеОтгружать,
| ТаблицаТоваров.Упаковка,
| ТаблицаТоваров.МаркируемаяПродукция,
| ВЫБОР
| КОГДА ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| ТОГДА NULL
| ИНАЧЕ ТаблицаТоваров.Серия
| КОНЕЦ,
| ТаблицаТоваров.УпаковочныйЛистРодитель,
| ТаблицаТоваров.УпаковочныйЛистРодительКод
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Номенклатура.ИмяКолонкиКодов КАК Артикул,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура.Код КАК Код,
| ТаблицаТоваров.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ТаблицаТоваров.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.УпаковочныйЛистРодитель,
| ТаблицаТоваров.УпаковочныйЛистРодительКод,
| ТаблицаТоваров.КоличествоУпаковок,
| ТаблицаТоваров.Количество,
| ТаблицаТоваров.НеОтгружать КАК НеОтгружать,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ВЫБОР
| КОГДА ТаблицаТоваров.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Упаковка)
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения)
| КОНЕЦ КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| ТаблицаТоваров.МаркируемаяПродукция
|ИЗ
| СуммированнаяТаблицаТоваров КАК ТаблицаТоваров
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки
|ИТОГИ ПО
| Ссылка,
| НеОтгружать,
| УпаковочныйЛистРодитель,
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.УпаковочныйЛистРодитель,
| ТаблицаТоваров.НеОтгружать КАК НеОтгружать,
| ТаблицаТоваров.МаркируемаяПродукция КАК МаркируемаяПродукция
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)
| И НЕ ТаблицаТоваров.Серия ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| ТаблицаТоваров.Ссылка,
| ТаблицаТоваров.НеОтгружать,
| ТаблицаТоваров.УпаковочныйЛистРодитель,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ТаблицаТоваров.МаркируемаяПродукция,
| ПредставлениеСерии
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка,
| МАКСИМУМ(ТаблицаТоваров.МаркируемаяПродукция) КАК ЕстьМаркируемаяПродукция
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка";
Если ВыводитьКоды Тогда
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "ИмяКолонкиКодов", ИмяКолонкиКодов);
Иначе
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "ТаблицаТоваров.Номенклатура.ИмяКолонкиКодов КАК Артикул,", "");
КонецЕсли;
Если ИспользуетсяМаркируемаяПродукция Тогда
ОпределениеМаркируемаяПродукция = РасходныйОрдерНаТоварыЛокализация.ОпределениеПризнакаМаркируемаяПродукцияТекстаЗапроса("РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура");
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ОпределениеПризнакаМаркируемаяПродукция", ОпределениеМаркируемаяПродукция);
Иначе
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ОпределениеПризнакаМаркируемаяПродукция", "ЛОЖЬ");
КонецЕсли;
ЗапросПоТоварам.Текст = ТекстЗапросаПоТоварам;
МассивРезультатов = ЗапросПоТоварам.ВыполнитьПакет();
РезультатЗапроса = МассивРезультатов[2];
ВыборкаТЧПоСсылкам = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РезультатЗапроса = МассивРезультатов[3];
ВыборкаПоСериям = РезультатЗапроса.Выбрать();
РезультатЗапроса = МассивРезультатов[4];
ВыборкаПоМаркам = РезультатЗапроса.Выбрать();
Иначе
ТекстЗапросаПоТоварам =
"ВЫБРАТЬ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка КАК Ссылка,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.НомерСтроки КАК НомерСтроки,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.Код КАК Код,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ИмяКолонкиКодов КАК Артикул,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Характеристика КАК Характеристика,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Серия КАК Серия,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Серия.Наименование КАК ПредставлениеСерии,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.КоличествоУпаковок,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Количество,
| ВЫБОР
| КОГДА РасходныйОрдерНаТоварыОтгружаемыеТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК НеОтгружать,
| ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ВЫБОР
| КОГДА РасходныйОрдерНаТоварыОтгружаемыеТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыОтгружаемыеТовары.Упаковка)
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ЕдиницаИзмерения)
| КОНЕЦ КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель КАК УпаковочныйЛистРодитель,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель.Код КАК УпаковочныйЛистРодительКод,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК РасходныйОрдерНаТоварыОтгружаемыеТовары
|
|ГДЕ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка В(&МассивОбъектов)
| И НЕ РасходныйОрдерНаТоварыОтгружаемыеТовары.ЭтоУпаковочныйЛист
|
|;
|
|
|ВЫБРАТЬ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка КАК Ссылка,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Характеристика КАК Характеристика,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.Код КАК Код,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ИмяКолонкиКодов КАК Артикул,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Серия КАК Серия,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.ПредставлениеСерии КАК ПредставлениеСерии,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.КоличествоУпаковок,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Количество,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.НеОтгружать,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.ПредставлениеБазовойЕдиницыИзмерения,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.ПредставлениеЕдиницыИзмеренияУпаковки,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель КАК УпаковочныйЛистРодитель,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель.Код КАК УпаковочныйЛистРодительКод,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.МаркируемаяПродукция
|ИЗ
| ТаблицаТоваров КАК РасходныйОрдерНаТоварыОтгружаемыеТовары
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки
|ИТОГИ ПО
| Ссылка,
| НеОтгружать,
| УпаковочныйЛистРодитель,
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка,
| МАКСИМУМ(ТаблицаТоваров.МаркируемаяПродукция) КАК ЕстьМаркируемаяПродукция
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка";
Если ВыводитьКоды Тогда
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "ИмяКолонкиКодов", ИмяКолонкиКодов);
Иначе
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура.ИмяКолонкиКодов КАК Артикул,", "");
КонецЕсли;
Если ИспользуетсяМаркируемаяПродукция Тогда
ОпределениеМаркируемаяПродукция = РасходныйОрдерНаТоварыЛокализация.ОпределениеПризнакаМаркируемаяПродукцияТекстаЗапроса("РасходныйОрдерНаТоварыОтгружаемыеТовары.Номенклатура");
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ОпределениеПризнакаМаркируемаяПродукция", ОпределениеМаркируемаяПродукция);
Иначе
ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ОпределениеПризнакаМаркируемаяПродукция", "ЛОЖЬ");
КонецЕсли;
ЗапросПоТоварам.Текст = ТекстЗапросаПоТоварам;
МассивРезультатов = ЗапросПоТоварам.ВыполнитьПакет();
РезультатЗапроса = МассивРезультатов[1];
ВыборкаТЧПоСсылкам = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РезультатЗапроса = МассивРезультатов[2];
ВыборкаПоМаркам = РезультатЗапроса.Выбрать();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель = ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка)
| ТОГДА РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка
| ИНАЧЕ РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель
| КОНЕЦ КАК УпаковочныйЛистРодитель,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист КАК УпаковочныйЛист,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка КАК Ссылка,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист.Дата КАК Дата,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист.Код КАК Код,
| ВЫБОР
| КОГДА РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛистРодитель = ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьВложенность
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК РасходныйОрдерНаТоварыОтгружаемыеТовары
|ГДЕ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка В(&МассивОбъектов)
| И РасходныйОрдерНаТоварыОтгружаемыеТовары.ЭтоУпаковочныйЛист";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектовИспользованиеСерий);
УпаковочныеЛистыПоДокументам = Запрос.Выполнить().Выгрузить();
ПервыйДокумент = Истина;
Для Каждого ВыборкаПоДокументам Из ИспользованиеСерий.Строки Цикл
Если НЕ ВыборкаТЧПоСсылкам.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
Продолжить;
КонецЕсли;
Если ВыборкаПоМаркам.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
ВыводитьМарки = ВыборкаПоМаркам.ЕстьМаркируемаяПродукция;
Иначе
ВыводитьМарки = Ложь;
КонецЕсли;
УпаковочныеЛистыДокумента = УпаковочныеЛистыПоДокументам.Скопировать(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка));
ИспользуетсяАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(ВыборкаПоДокументам.Склад, ВыборкаПоДокументам.Помещение, ВыборкаПоДокументам.ДатаОтгрузки);
ВыводитьУпаковочныеЛисты = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковочныеЛисты")
И УпаковочныеЛистыДокумента.Количество() > 0;
ВыводитьУпаковки = ИспользоватьУпаковкиНоменклатуры Или ИспользуетсяАдресноеХранение;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.РасходныйОрдерНаТовары.ПФ_MXL_РасходныйОрдерНаТовары");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьЗаданиеНаПеревозку = Макет.ПолучитьОбласть("ЗаданиеНаПеревозку");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПокупатель = Макет.ПолучитьОбласть("Покупатель");
ОбластьШапкаТаблицыУпаковочныеЛисты = Макет.ПолучитьОбласть("ШапкаТаблицыУпаковочныеЛисты");
ОбластьСтрокаТаблицыУпаковочныеЛисты = Макет.ПолучитьОбласть("СтрокаТаблицыУпаковочныеЛисты");
ОбластьПодвалТаблицыУпаковочныеЛисты = Макет.ПолучитьОбласть("ПодвалТаблицыУпаковочныеЛисты");
ОбластьШапкаТаблицы = Неопределено;
ОбластьСтрокаТаблицы = Неопределено;
ОбластьПодвалТаблицы = Неопределено;
Если Не ВыводитьУпаковочныеЛисты И Не ВыводитьКоды И Не ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ИначеЕсли ВыводитьУпаковочныеЛисты И Не ВыводитьКоды И Не ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыУпаковочныйЛист");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыУпаковочныйЛист");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыУпаковочныйЛист");
ИначеЕсли Не ВыводитьУпаковочныеЛисты И ВыводитьКоды И Не ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыКолонкаКодов");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыКолонкаКодов");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыКолонкаКодов");
ИначеЕсли Не ВыводитьУпаковочныеЛисты И Не ВыводитьКоды И ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыУпаковки");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыУпаковки");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыУпаковки");
ИначеЕсли ВыводитьУпаковочныеЛисты И ВыводитьКоды И Не ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыУпаковочныйЛистКолонкаКодов");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыУпаковочныйЛистКолонкаКодов");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыУпаковочныйЛистКолонкаКодов");
ИначеЕсли Не ВыводитьУпаковочныеЛисты И ВыводитьКоды И ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыКолонкаКодовУпаковки");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыКолонкаКодовУпаковки");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыКолонкаКодовУпаковки");
ИначеЕсли ВыводитьУпаковочныеЛисты И Не ВыводитьКоды И ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыУпаковочныйЛистУпаковки");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыУпаковочныйЛистУпаковки");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыУпаковочныйЛистУпаковки");
ИначеЕсли ВыводитьУпаковочныеЛисты И ВыводитьКоды И ВыводитьУпаковки Тогда
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыВсе");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыВсе");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицыВсе");
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьШапкаТаблицы.Параметры.ИмяКолонкиКодов = ПредставлениеКолонкиКодов;
КонецЕсли;
ОбластьПодписей = Макет.ПолучитьОбласть("Подписи");
ОбластьЗаголовокНеОтгружать = Макет.ПолучитьОбласть("ЗаголовокНеОтгружать");
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ВыборкаПоДокументам.Ссылка);
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Если ИспользуетсяАдресноеХранение Тогда
ТекстЗоны = НСтр("ru='Зона отгрузки:'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗонаПредставление = ВыборкаПоДокументам.ПредставлениеЗоныОтгрузки;
Иначе
ТекстЗоны = "";
ЗонаПредставление = "";
КонецЕсли;
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
СтруктураДанныхЗаголовка = Новый Структура;
СтруктураДанныхЗаголовка.Вставить("ТекстЗаголовка",
ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента));
ОбластьЗаголовок.Параметры.Заполнить(СтруктураДанныхЗаголовка);
Если ВыводитьМарки Тогда
ОбластьЗаголовок.Параметры.ПризнакМаркировки = "[М]";
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
Если ЗначениеЗаполнено(ВыборкаПоДокументам.ПредставлениеПолучателя) Тогда
ОбластьПокупатель.Параметры.Заполнить(ВыборкаПоДокументам);
ТабличныйДокумент.Вывести(ОбластьПокупатель);
КонецЕсли;
ОбластьШапка.Параметры.ПредставлениеСклада =
СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоДокументам.ПредставлениеСклада,ВыборкаПоДокументам.ПредставлениеПомещения);
ОбластьШапка.Параметры.ТекстЗоны = ТекстЗоны;
ОбластьШапка.Параметры.ПредставлениеЗоныОтгрузки = ЗонаПредставление;
Счетчик = 0;
ПредставлениеРаспоряжений = "";
ПервоеРаспоряжение = Истина;
Пока ВыборкаРаспоряжений.НайтиСледующий(Новый Структура("Ссылка", ВыборкаПоДокументам.Ссылка)) Цикл
РеквизитыДокумента.Дата = ВыборкаРаспоряжений.РаспоряжениеДата;
РеквизитыДокумента.Номер = ВыборкаРаспоряжений.РаспоряжениеНомер;
РеквизитыДокумента.Префикс = ВыборкаРаспоряжений.РаспоряжениеПрефикс;
РеквизитыДокумента.Представление = ВыборкаРаспоряжений.РаспоряжениеПредставление;
ПредставлениеРаспоряжения = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
Если Не ПервоеРаспоряжение Тогда
ПредставлениеРаспоряжений = ПредставлениеРаспоряжений + ", ";
КонецЕсли;
ПервоеРаспоряжение = Ложь;
ПредставлениеРаспоряжений = ПредставлениеРаспоряжений + ПредставлениеРаспоряжения;
Счетчик = Счетчик + 1;
КонецЦикла;
ЗаголовокРаспоряжения = "";
Если Счетчик > 1 Тогда
ЗаголовокРаспоряжения = НСтр("ru = 'Распоряжения:'", ОбщегоНазначения.КодОсновногоЯзыка());
Иначе
ЗаголовокРаспоряжения = НСтр("ru = 'Распоряжение:'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ОбластьШапка.Параметры.ПредставлениеРаспоряжений = ПредставлениеРаспоряжений;
ОбластьШапка.Параметры.ЗаголовокРаспоряжения = ЗаголовокРаспоряжения;
ОбластьШапка.Параметры.ДатаОтгрузки = ВыборкаПоДокументам.ДатаОтгрузки;
ТабличныйДокумент.Вывести(ОбластьШапка);
Если ВыборкаПоДокументам.ОтгрузкаПоЗаданиюНаПеревозку Тогда
РеквизитыДокумента.Дата = ВыборкаПоДокументам.ЗаданиеНаПеревозкуДата;
РеквизитыДокумента.Номер = ВыборкаПоДокументам.ЗаданиеНаПеревозкуНомер;
РеквизитыДокумента.Префикс = "";
РеквизитыДокумента.Представление = ВыборкаПоДокументам.ЗаданиеНаПеревозкуПредставление;
ОбластьЗаданиеНаПеревозку.Параметры.ПредставлениеЗаданияНаПеревозку =
ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
ОбластьЗаданиеНаПеревозку.Параметры.ПорядокДоставки = ВыборкаПоДокументам.ПорядокДоставки;
ТабличныйДокумент.Вывести(ОбластьЗаданиеНаПеревозку);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
ВсегоНаименований = 0;
ТабличныйДокументНеОтгружать = Новый ТабличныйДокумент;
ВсегоНаименованийНеОтгружать = 0;
ВыборкаПоПараметруНеОтгружать = ВыборкаТЧПоСсылкам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоПараметруНеОтгружать.Следующий() Цикл
ВыборкаТЧПоУпаковочнымЛистам = ВыборкаПоПараметруНеОтгружать.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаТЧПоУпаковочнымЛистам.Следующий() Цикл
ВыборкаПоНоменклатуреТЧ = ВыборкаТЧПоУпаковочнымЛистам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоНоменклатуреТЧ.Следующий() Цикл
ВыборкаПоХарактеристикамТЧ = ВыборкаПоНоменклатуреТЧ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоХарактеристикамТЧ.Следующий() Цикл
ВыборкаПоСтрокамТЧ = ВыборкаПоХарактеристикамТЧ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПерваяСтрока = Истина;
СтрокаУпаковок = "";
СтрокаКоличесткаУпаковок = "";
СтрокаЕдиницИзмерений = "";
СтрокаКоличества = "";
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
Если ВыборкаПоНоменклатуреТЧ.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
Если ПерваяСтрока Тогда
Если ВыборкаПоСтрокамТЧ.НеОтгружать = 0 Тогда
ТабличныйДокументДляВыводаСтроки = ТабличныйДокумент;
ВсегоНаименований = ВсегоНаименований + 1;
НомерСтроки = ВсегоНаименований;
Иначе
ТабличныйДокументДляВыводаСтроки = ТабличныйДокументНеОтгружать;
ВсегоНаименованийНеОтгружать = ВсегоНаименованийНеОтгружать + 1;
НомерСтроки = ВсегоНаименованийНеОтгружать;
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ОбластьСтрокаТаблицы.Параметры.Заполнить(Новый Структура("НомерСтроки", НомерСтроки));
Если ВыводитьУпаковочныеЛисты Тогда
ОбластьСтрокаТаблицы.Параметры.УпаковочныйЛистРодитель = ВыборкаПоСтрокамТЧ.УпаковочныйЛистРодительКод;
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицы.Параметры.Артикул = ВыборкаПоСтрокамТЧ[ИмяКолонкиКодов];
КонецЕсли;
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Ссылка", ВыборкаПоСтрокамТЧ.Ссылка);
СтруктураПоиска.Вставить("Номенклатура", ВыборкаПоСтрокамТЧ.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", ВыборкаПоСтрокамТЧ.Характеристика);
СтруктураПоиска.Вставить("НеОтгружать", ВыборкаПоСтрокамТЧ.НеОтгружать);
СтруктураПоиска.Вставить("УпаковочныйЛистРодитель", ВыборкаПоСтрокамТЧ.УпаковочныйЛистРодитель);
СтрокаСерий = "";
Пока ВыборкаПоСериям.НайтиСледующий(СтруктураПоиска) Цикл
СтрокаСерий = СтрокаСерий + ВыборкаПоСериям.ПредставлениеСерии + ", ";
КонецЦикла;
Если СтрДлина(СтрокаСерий) <> 0 Тогда
СтрокаСерий = Лев(СтрокаСерий, СтрДлина(СтрокаСерий) - 2);
КонецЕсли;
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
Если ВыводитьМарки И ВыборкаПоСтрокамТЧ.МаркируемаяПродукция Тогда
ОбластьСтрокаТаблицы.Параметры.ПризнакМаркировки = "[М]";
Иначе
ОбластьСтрокаТаблицы.Параметры.ПризнакМаркировки = "";
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры,
ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики,
,
СтрокаСерий,
ДопПараметрыПредставлениеНоменклатуры);
ПерваяСтрока = Ложь;
ТоварССериямиЭкземплярами = Истина;
КонецЕсли;
Если ВыводитьУпаковки Тогда
СтрокаУпаковок = СтрокаУпаковок + ВыборкаПоСтрокамТЧ.ПредставлениеЕдиницыИзмеренияУпаковки + Символы.ПС;
СтрокаКоличесткаУпаковок = СтрокаКоличесткаУпаковок + ВыборкаПоСтрокамТЧ.КоличествоУпаковок + Символы.ПС;
КонецЕсли;
СтрокаЕдиницИзмерений = СтрокаЕдиницИзмерений + ВыборкаПоСтрокамТЧ.ПредставлениеБазовойЕдиницыИзмерения + Символы.ПС;
СтрокаКоличества = СтрокаКоличества + ВыборкаПоСтрокамТЧ.Количество + Символы.ПС;
Иначе
Если ВыборкаПоСтрокамТЧ.НеОтгружать = 0 Тогда
ТабличныйДокументДляВыводаСтроки = ТабличныйДокумент;
ВсегоНаименований = ВсегоНаименований + 1;
НомерСтроки = ВсегоНаименований;
Иначе
ТабличныйДокументДляВыводаСтроки = ТабличныйДокументНеОтгружать;
ВсегоНаименованийНеОтгружать = ВсегоНаименованийНеОтгружать + 1;
НомерСтроки = ВсегоНаименованийНеОтгружать;
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ОбластьСтрокаТаблицы.Параметры.Заполнить(Новый Структура("НомерСтроки", НомерСтроки));
Если ВыводитьУпаковочныеЛисты Тогда
ОбластьСтрокаТаблицы.Параметры.УпаковочныйЛистРодитель = ВыборкаПоСтрокамТЧ.УпаковочныйЛистРодительКод;
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицы.Параметры.Артикул = ВыборкаПоСтрокамТЧ[ИмяКолонкиКодов];
КонецЕсли;
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
Если ВыводитьМарки И ВыборкаПоСтрокамТЧ.МаркируемаяПродукция Тогда
ОбластьСтрокаТаблицы.Параметры.ПризнакМаркировки = "[М]";
Иначе
ОбластьСтрокаТаблицы.Параметры.ПризнакМаркировки = "";
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры,
ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики,
,
ВыборкаПоСтрокамТЧ.ПредставлениеСерии,
ДопПараметрыПредставлениеНоменклатуры);
ТабличныйДокументДляВыводаСтроки.Вывести(ОбластьСтрокаТаблицы);
ТоварССериямиЭкземплярами = Ложь;
КонецЕсли;
КонецЦикла;
Если ТоварССериямиЭкземплярами Тогда
Если ВыводитьУпаковки Тогда
ОбластьСтрокаТаблицы.Параметры.КоличествоУпаковок = СтрокаКоличесткаУпаковок;
ОбластьСтрокаТаблицы.Параметры.ПредставлениеЕдиницыИзмеренияУпаковки = СтрокаУпаковок;
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.Количество = СтрокаКоличества;
ОбластьСтрокаТаблицы.Параметры.ПредставлениеБазовойЕдиницыИзмерения = СтрокаЕдиницИзмерений;
ТабличныйДокументДляВыводаСтроки.Вывести(ОбластьСтрокаТаблицы);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);
ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%'", ОбщегоНазначения.КодОсновногоЯзыка());
ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки, "%ВсегоНаименований%", ВсегоНаименований);
ОбластьПодписей.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
ОбластьПодписей.Параметры.ПредставлениеОтветсвенного = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный, ВыборкаПоДокументам.Дата);
ТабличныйДокумент.Вывести(ОбластьПодписей);
Если ВсегоНаименованийНеОтгружать > 0 Тогда
ТекстЗаголовка = НСтр("ru = 'В зоне отгрузки необходимо оставить следующие позиции товаров'", ОбщегоНазначения.КодОсновногоЯзыка());
ОбластьЗаголовокНеОтгружать.Параметры.Заполнить(Новый Структура("ТекстЗаголовка", ТекстЗаголовка));
ТабличныйДокумент.Вывести(ОбластьЗаголовокНеОтгружать);
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
ТабличныйДокумент.Вывести(ТабличныйДокументНеОтгружать);
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);
КонецЕсли;
#Область ПечатьИерархииУпаковочныхЛистов
Если ВыводитьУпаковочныеЛисты
И УпаковочныеЛистыДокумента.НайтиСтроки(Новый Структура("ЕстьВложенность", Истина)).Количество() > 0 Тогда
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыУпаковочныеЛисты);
Документы.УпаковочныйЛист.РекурсивноВывестиИерархиюУпаковочныхЛистов(ТабличныйДокумент, ОбластьСтрокаТаблицыУпаковочныеЛисты, УпаковочныеЛистыДокумента, ВыборкаПоДокументам.Ссылка);
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыУпаковочныеЛисты);
КонецЕсли;
#КонецОбласти
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
#Область Прочее
Функция ОрдерныеСкладыПриОтгрузке(Знач Распоряжение, Знач Склад) Экспорт
Запрос = Новый Запрос;
МассивСкладов = Новый Массив;
МетаданныеДокумента = Распоряжение.Метаданные();
ТипДокумента = МетаданныеДокумента.Имя;
Запрос.УстановитьПараметр("Ссылка", Распоряжение);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Товары.Склад КАК Склад
|ИЗ
| &ДокументТипДокументаТовары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
| И Товары.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| И Товары.Ссылка.Склад.ЭтоГруппа
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Распоряжение.Склад
|ИЗ
| &ДокументТипДокумента КАК Распоряжение
|ГДЕ
| Распоряжение.Ссылка = &Ссылка
| И (НЕ Распоряжение.Склад.ЭтоГруппа)
| И Распоряжение.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДокументТипДокументаТовары", "Документ." + ТипДокумента+".Товары");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДокументТипДокумента", "Документ." + ТипДокумента);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивСкладов.Добавить(Выборка.Склад);
КонецЦикла;
Если ЗначениеЗаполнено(Склад)
И МассивСкладов.Найти(Склад) = Неопределено Тогда
МассивСкладов.Добавить(Склад);
КонецЕсли;
Возврат МассивСкладов
КонецФункции
Процедура РазбитьПоУпаковкамСправочно(Объект) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Назначение КАК Назначение,
| Таблица.НомерСтроки КАК НомерСтроки,
| Таблица.Количество КАК Количество,
| Таблица.Серия КАК Серия
|ПОМЕСТИТЬ ТаблицаНоменклатурыДляЗапроса
|ИЗ
| &Таблица КАК Таблица
|ГДЕ
| Таблица.УпаковочныйЛистРодитель = ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка)
| И Таблица.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать)
| И НЕ Таблица.ЭтоУпаковочныйЛист
|;
|
|
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| МИНИМУМ(Таблица.НомерСтроки) КАК НомерСтроки,
| ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура).НаборУпаковок КАК НаборУпаковок,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Назначение КАК Назначение,
| Таблица.Серия КАК Серия,
| СУММА(Таблица.Количество) КАК Количество
|ПОМЕСТИТЬ ТаблицаНоменклатуры
|ИЗ
| ТаблицаНоменклатурыДляЗапроса КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.Серия,
| Таблица.Номенклатура,
| ВЫРАЗИТЬ(Таблица.Номенклатура КАК Справочник.Номенклатура).НаборУпаковок,
| Таблица.Характеристика,
| Таблица.Назначение
|;
|
|
|ВЫБРАТЬ
| ТаблицаНоменклатуры.Номенклатура КАК Номенклатура,
| ТаблицаНоменклатуры.Количество,
| ТаблицаНоменклатуры.НомерСтроки КАК НомерСтроки,
| ТаблицаНоменклатуры.Характеристика КАК Характеристика,
| ТаблицаНоменклатуры.Серия КАК Серия,
| ТаблицаНоменклатуры.Назначение КАК Назначение,
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК КоличествоВУпаковке,
| ЕСТЬNULL(УпаковкиНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК Упаковка,
| ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать) КАК Действие
|ИЗ
| ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
| ПО (ТаблицаНоменклатуры.Номенклатура = УпаковкиНоменклатуры.Владелец
| ИЛИ ТаблицаНоменклатуры.НаборУпаковок = УпаковкиНоменклатуры.Владелец)
| И (НЕ УпаковкиНоменклатуры.ПометкаУдаления)
| И (УпаковкиНоменклатуры.ТипУпаковки <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто))
| И (УпаковкиНоменклатуры.ТипУпаковки <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.Разупаковка))
| И ТаблицаНоменклатуры.Количество >= &ТекстЗапросаКоэффициентУпаковки
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| КоличествоВУпаковке УБЫВ";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УпаковкиНоменклатуры",
"ТаблицаНоменклатуры.Номенклатура"));
ТаблицаНоменклатуры = Объект.ОтгружаемыеТовары.Выгрузить();
Запрос.УстановитьПараметр("Таблица",ТаблицаНоменклатуры);
УдаляемыеСтроки = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Для Каждого СтрТабл Из Объект.ОтгружаемыеТовары Цикл
Если СтрТабл.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать
И Не ЗначениеЗаполнено(СтрТабл.УпаковочныйЛистРодитель) Тогда
УдаляемыеСтроки.Добавить(СтрТабл);
КонецЕсли;
КонецЦикла;
Для Каждого СтрМас Из УдаляемыеСтроки Цикл
Объект.ОтгружаемыеТовары.Удалить(СтрМас);
КонецЦикла;
ТекущиеЗначения = Новый Структура;
ТекущиеЗначения.Вставить("НомерСтроки", Неопределено);
ТекущиеЗначения.Вставить("Номенклатура", Неопределено);
ТекущиеЗначения.Вставить("Характеристика", Неопределено);
ТекущиеЗначения.Вставить("Назначение", Неопределено);
ТекущиеЗначения.Вставить("Серия", Неопределено);
Количество = 0;
Пока Выборка.Следующий() Цикл
Если Выборка.НомерСтроки <> ТекущиеЗначения.НомерСтроки Тогда
Если Количество <> 0 Тогда
НоваяСтрока = Объект.ОтгружаемыеТовары.Добавить();
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоУпаковок = Количество;
НоваяСтрока.Номенклатура = ТекущиеЗначения.Номенклатура;
НоваяСтрока.Характеристика = ТекущиеЗначения.Характеристика;
НоваяСтрока.Назначение = ТекущиеЗначения.Назначение;
НоваяСтрока.Серия = ТекущиеЗначения.Серия;
НоваяСтрока.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТекущиеЗначения, Выборка);
Количество = Выборка.Количество;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Выборка.Упаковка) Тогда
Продолжить;
КонецЕсли;
КоличествоВДокумент = Цел(Количество / Выборка.КоличествоВУпаковке);
Если КоличествоВДокумент > 0 Тогда
НоваяСтрока = Объект.ОтгружаемыеТовары.Добавить();
НоваяСтрока.Количество = КоличествоВДокумент * Выборка.КоличествоВУпаковке;
НоваяСтрока.КоличествоУпаковок = КоличествоВДокумент;
НоваяСтрока.Упаковка = Выборка.Упаковка;
НоваяСтрока.Номенклатура = ТекущиеЗначения.Номенклатура;
НоваяСтрока.Характеристика = ТекущиеЗначения.Характеристика;
НоваяСтрока.Назначение = ТекущиеЗначения.Назначение;
НоваяСтрока.Серия = ТекущиеЗначения.Серия;
НоваяСтрока.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать;
Количество = Количество - КоличествоВДокумент * Выборка.КоличествоВУпаковке;
КонецЕсли;
КонецЦикла;
Если Окр(Количество,3) <> 0 Тогда
НоваяСтрока = Объект.ОтгружаемыеТовары.Добавить();
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоУпаковок = Количество;
НоваяСтрока.Номенклатура = ТекущиеЗначения.Номенклатура;
НоваяСтрока.Характеристика = ТекущиеЗначения.Характеристика;
НоваяСтрока.Назначение = ТекущиеЗначения.Назначение;
НоваяСтрока.Серия = ТекущиеЗначения.Серия;
НоваяСтрока.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать;
КонецЕсли;
НоменклатураСервер.РазбитьТоварыПоТоварнымМестам(Объект.ОтгружаемыеТовары);
Объект.ВсегоМест = УпаковочныеЛистыСервер.КоличествоМестВТЧ(Объект.ОтгружаемыеТовары);
КонецПроцедуры
Процедура ЗаполнитьОтгружаемыеТоварыПоТоварамПоРаспоряжениям(Объект) Экспорт
Объект.ОтгружаемыеТовары.Очистить();
Для Каждого СтрТабл Из Объект.ТоварыПоРаспоряжениям Цикл
НоваяСтрока = Объект.ОтгружаемыеТовары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрТабл);
НоваяСтрока.КоличествоУпаковок = СтрТабл.Количество;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыРасходныхОрдеров", Новый Структура("Склад", Объект.Склад)) Тогда
НоваяСтрока.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать;
Иначе
НоваяСтрока.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить;
КонецЕсли;
КонецЦикла;
КолонкиСвертки = "Номенклатура, Характеристика, Назначение, Серия, СтатусУказанияСерий, ЭтоУпаковочныйЛист,"
+ "УпаковочныйЛистРодитель, УпаковочныйЛист, Упаковка, Действие";
КолонкиСуммы = "Количество, КоличествоУпаковок";
Если ТипЗнч(Объект) = Тип("ДанныеФормыСтруктура") Тогда
ТаблицаДляСвертки = Объект.ОтгружаемыеТовары.Выгрузить();
ТаблицаДляСвертки.Свернуть(КолонкиСвертки, КолонкиСуммы);
Объект.ОтгружаемыеТовары.Загрузить(ТаблицаДляСвертки);
Иначе
Объект.ОтгружаемыеТовары.Свернуть(КолонкиСвертки, КолонкиСуммы);
КонецЕсли;
Объект.ВсегоМест = УпаковочныеЛистыСервер.КоличествоМестВТЧ(Объект.ОтгружаемыеТовары);
КонецПроцедуры
Процедура ИзменитьТоварыПоРаспоряжениямПоОтгружаемымТоварам(Объект,
ВыводитьСообщения = Ложь, ЗаполнитьПоОтобранным = Ложь) Экспорт
Выборка = ВыборкаИзЗапросаПоПревышениюРаспоряжений(Объект, ЗаполнитьПоОтобранным);
Если Выборка.Количество() > 0 Тогда
Пока Выборка.Следующий() Цикл
КоличествоКРаспределению = Выборка.РасхождениеСРаспоряжением;
Если Выборка.ЕстьСтрокаРаспоряжений Тогда
УсловияОтбора = Новый Структура("Номенклатура,Характеристика,Серия,Назначение");
ЗаполнитьЗначенияСвойств(УсловияОтбора,Выборка);
НайденныеРаспоряжения = Объект.ТоварыПоРаспоряжениям.НайтиСтроки(УсловияОтбора);
Для Каждого СтрМас Из НайденныеРаспоряжения Цикл
Если КоличествоКРаспределению > 0 Тогда
Если КоличествоКРаспределению >= СтрМас.Количество Тогда
КоличествоКРаспределению = КоличествоКРаспределению - СтрМас.Количество;
Объект.ТоварыПоРаспоряжениям.Удалить(СтрМас);
Иначе
СтрМас.Количество = СтрМас.Количество - КоличествоКРаспределению;
КоличествоКРаспределению = 0;
КонецЕсли;
Иначе
СтрМас.Количество = СтрМас.Количество - КоличествоКРаспределению;
КоличествоКРаспределению = 0;
КонецЕсли;
Если КоличествоКРаспределению = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
НоваяСтрока = Объект.ТоварыПоРаспоряжениям.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.Количество = - КоличествоКРаспределению;
КонецЕсли;
КонецЦикла;
ИначеЕсли ВыводитьСообщения Тогда
ТекстСообщения = НСтр("ru = 'Заполнение табличной части ""Товары по распоряжениям"" соответствует заполнению табличной части ""Отгружаемые товары"". Перезаполнение не требуется.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецПроцедуры
Функция ВыборкаИзЗапросаПоПревышениюРаспоряжений(Объект, ЗаполнитьПоОтобранным = Ложь) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ТоварыПоРаспоряжениям.Характеристика КАК Характеристика,
| ТоварыПоРаспоряжениям.Назначение КАК Назначение,
| ТоварыПоРаспоряжениям.Серия КАК Серия,
| ТоварыПоРаспоряжениям.Количество КАК Количество
|ПОМЕСТИТЬ ТоварыПоРаспоряжениям
|ИЗ
| &ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
|;
|
|
|ВЫБРАТЬ
| ВЫРАЗИТЬ(ОтгружаемыеТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ОтгружаемыеТовары.Характеристика КАК Характеристика,
| ОтгружаемыеТовары.Назначение КАК Назначение,
| ВЫБОР
| КОГДА ОтгружаемыеТовары.СтатусУказанияСерий В (10, 14)
| ТОГДА ОтгружаемыеТовары.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ОтгружаемыеТовары.Количество КАК Количество,
| ОтгружаемыеТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ВЫРАЗИТЬ(ОтгружаемыеТовары.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения) КАК Упаковка
|ПОМЕСТИТЬ ОтгружаемыеТоварыНеукомплектованные
|ИЗ
| &ОтгружаемыеТовары КАК ОтгружаемыеТовары
|ГДЕ
| НЕ ОтгружаемыеТовары.ЭтоУпаковочныйЛист
| И ОтгружаемыеТовары.Действие <> ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.НеОтгружать)
|;
|
|
|ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ОтгружаемыеТовары.Характеристика КАК Характеристика,
| ОтгружаемыеТовары.Назначение КАК Назначение,
| ОтгружаемыеТовары.Серия КАК Серия,
| МАКСИМУМ(ОтгружаемыеТовары.Упаковка) КАК Упаковка
|ПОМЕСТИТЬ ОтгружаемыеТоварыСгруппированные
|ИЗ
| ОтгружаемыеТоварыНеукомплектованные КАК ОтгружаемыеТовары
|ГДЕ
| ЕСТЬNULL(ОтгружаемыеТовары.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|СГРУППИРОВАТЬ ПО
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ОтгружаемыеТовары.Серия
|;
|
|
|ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ОтгружаемыеТовары.Серия,
| ОтгружаемыеТовары.Количество
|ПОМЕСТИТЬ ОтгружаемыеТовары
|ИЗ
| ОтгружаемыеТоварыНеукомплектованные КАК ОтгружаемыеТовары
|ГДЕ
| ЕСТЬNULL(ОтгружаемыеТовары.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ОтгружаемыеТовары.Серия,
| СУММА(ОтгружаемыеТоварыКоличество.КоличествоУпаковок) / ОтгружаемыеТовары.Упаковка.КоличествоУпаковок
|ИЗ
| ОтгружаемыеТоварыСгруппированные КАК ОтгружаемыеТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтгружаемыеТоварыНеукомплектованные КАК ОтгружаемыеТоварыКоличество
| ПО ОтгружаемыеТовары.Номенклатура = ОтгружаемыеТоварыКоличество.Номенклатура
| И ОтгружаемыеТовары.Характеристика = ОтгружаемыеТоварыКоличество.Характеристика
| И ОтгружаемыеТовары.Серия = ОтгружаемыеТоварыКоличество.Серия
| И ОтгружаемыеТовары.Назначение = ОтгружаемыеТоварыКоличество.Назначение
| И ОтгружаемыеТовары.Упаковка = ОтгружаемыеТоварыКоличество.Упаковка
|
|СГРУППИРОВАТЬ ПО
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ОтгружаемыеТовары.Серия,
| ОтгружаемыеТовары.Упаковка,
| ОтгружаемыеТовары.Упаковка.КоличествоУпаковок
|;
|
|
|ВЫБРАТЬ
| ТоварыПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ТоварыПоРаспоряжениям.Характеристика КАК Характеристика,
| ТоварыПоРаспоряжениям.Назначение КАК Назначение,
| ТоварыПоРаспоряжениям.Серия КАК Серия,
| ИСТИНА КАК СтрокаИзРаспоряжений,
| 0 КАК КоличествоОтгружается,
| ТоварыПоРаспоряжениям.Количество КАК КоличествоПоРаспоряжениям
|ПОМЕСТИТЬ ТоварыПоДокументу
|ИЗ
| ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Назначение,
| ОтгружаемыеТовары.Серия,
| ЛОЖЬ,
| ОтгружаемыеТовары.Количество,
| 0
|ИЗ
| ОтгружаемыеТовары КАК ОтгружаемыеТовары
|;
|
|
|ВЫБРАТЬ
| ВсеТовары.Номенклатура КАК Номенклатура,
| ВсеТовары.Характеристика КАК Характеристика,
| ВсеТовары.Назначение КАК Назначение,
| ВсеТовары.Серия КАК Серия,
| МАКСИМУМ(ВсеТовары.СтрокаИзРаспоряжений) КАК ЕстьСтрокаРаспоряжений,
| ВЫБОР
| КОГДА МАКСИМУМ(ВсеТовары.СтрокаИзРаспоряжений)
| ТОГДА ВЫБОР
| КОГДА Товары.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&ТипыМерныхВеличин)
| И &ЗаполнитьПоОтобранным
| ТОГДА ВЫБОР
| КОГДА СУММА(ВсеТовары.КоличествоОтгружается) - СУММА(ВсеТовары.КоличествоПоРаспоряжениям) <= &ДопустимоеОтклонение * СУММА(ВсеТовары.КоличествоПоРаспоряжениям) / 100
| ТОГДА СУММА(ВсеТовары.КоличествоПоРаспоряжениям) - СУММА(ВсеТовары.КоличествоОтгружается)
| ИНАЧЕ -&ДопустимоеОтклонение * СУММА(ВсеТовары.КоличествоПоРаспоряжениям) / 100
| КОНЕЦ
| ИНАЧЕ СУММА(ВсеТовары.КоличествоПоРаспоряжениям) - СУММА(ВсеТовары.КоличествоОтгружается)
| КОНЕЦ
| ИНАЧЕ СУММА(ВсеТовары.КоличествоПоРаспоряжениям) - СУММА(ВсеТовары.КоличествоОтгружается)
| КОНЕЦ КАК РасхождениеСРаспоряжением
|ИЗ
| ТоварыПоДокументу КАК ВсеТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
| ПО ВсеТовары.Номенклатура = Товары.Ссылка
|
|СГРУППИРОВАТЬ ПО
| ВсеТовары.Номенклатура,
| Товары.ЕдиницаИзмерения.ТипИзмеряемойВеличины,
| ВсеТовары.Характеристика,
| ВсеТовары.Назначение,
| ВсеТовары.Серия
|
|ИМЕЮЩИЕ
| СУММА(ВсеТовары.КоличествоОтгружается) <> СУММА(ВсеТовары.КоличествоПоРаспоряжениям)";
ТипыМерныхВеличин = Справочники.УпаковкиЕдиницыИзмерения.МерныеТипыЕдиницИзмерений();
ДопустимоеОтклонениеКоличества = Константы.ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров.Получить();
Запрос.УстановитьПараметр("ТипыМерныхВеличин", ТипыМерныхВеличин);
Запрос.УстановитьПараметр("ЗаполнитьПоОтобранным", ЗаполнитьПоОтобранным);
Запрос.УстановитьПараметр("ДопустимоеОтклонение", ДопустимоеОтклонениеКоличества);
Запрос.УстановитьПараметр("ОтгружаемыеТовары", Объект.ОтгружаемыеТовары.Выгрузить());
Запрос.УстановитьПараметр("ТоварыПоРаспоряжениям", Объект.ТоварыПоРаспоряжениям.Выгрузить());
Возврат Запрос.Выполнить().Выбрать();
КонецФункции
Процедура ЗаполнитьДействиеВСтроках(Объект) Экспорт
Если Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.Проверен
Или Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.КОтгрузке
Или Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.Отгружен Тогда
НайденныеСтроки = Объект.ОтгружаемыеТовары.НайтиСтроки(Новый Структура("Действие",
Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать));
Для Каждого СтрМас Из НайденныеСтроки Цикл
СтрМас.Действие = Перечисления.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ПереносимыеСтроки(ИсточникОбъект, СтрокиДляПриемника)
Результат = Новый Структура("СтрокиДляПереноса,ЕстьОшибка", Новый Массив, Ложь);
Для Каждого СтрМас Из СтрокиДляПриемника Цикл
ТекущаяСтрока = ИсточникОбъект.ОтгружаемыеТовары[СтрМас - 1];
Если Не СкладыКлиентСервер.СтрокуРасходногоОрдераМожноПереноситьВДругойОрдер(ТекущаяСтрока) Тогда
Результат.ЕстьОшибка = Истина;
Возврат Результат;
КонецЕсли;
Результат.СтрокиДляПереноса.Добавить(ТекущаяСтрока);
Если ТекущаяСтрока.ЭтоУпаковочныйЛист Тогда
ПодчиненныеСтроки = Новый Массив;
УпаковочныеЛистыСервер.РекурсивноОбойтиПодчиненныеСтроки(ИсточникОбъект.ОтгружаемыеТовары, ТекущаяСтрока.УпаковочныйЛист, ,ПодчиненныеСтроки);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат.СтрокиДляПереноса, ПодчиненныеСтроки);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерийОтгружаемыеТовары(Знач ПараметрыУказанияСерий)
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Действие,
| Товары.Номенклатура,
| Товары.Серия,
| Товары.Количество,
| Товары.СтатусУказанияСерий,
| Товары.НомерСтроки
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА 14
| ИНАЧЕ 10
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА 13
| ИНАЧЕ 9
| КОНЕЦ
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтбора
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 6
| ИНАЧЕ 5
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 8
| КОГДА &ПодготовкаОрдера
| ТОГДА 27
| ИНАЧЕ 7
| КОНЕЦ
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора
| И (ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеКлиенту
| И &ОтгрузкаКлиенту
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеВРозницу
| И &ОтгрузкаВРозницу
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеКомплектующихДляСборки
| И &ОтгрузкаКомплектующихДляСборки
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеКомплектовДляРазборки
| И &ОтгрузкаКомплектовДляРазборки
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеНаВнутренниеНужды
| И &ОтгрузкаНаВнутренниеНужды
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеПоВозвратуПоставщику
| И &ОтгрузкаПоВозвратуПоставщику
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузкеПоПеремещению
| И &ОтгрузкаПоПеремещению)
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 4
| КОГДА Товары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отобрать)
| И (НЕ &ИспользоватьАдресноеХранение
| ИЛИ &ИспользоватьАдресноеХранение
| И (&ПланированиеОтбора
| ИЛИ &ПодготовкаОрдера))
| ТОГДА 0
| ИНАЧЕ 3
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И Товары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить)
| ТОГДА 2
| КОГДА Товары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить)
| ТОГДА 1
| КОГДА Товары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.ПустаяСсылка)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ КАК СтатусУказанияСерий
|ПОМЕСТИТЬ ТаблицаСтатусов
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО ПолитикиУчетаСерий.Склад = Склады.Ссылка
| ПО (ПолитикиУчетаСерий.Склад = &Склад)
| И Товары.Номенклатура.ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаСтатусов.НомерСтроки КАК НомерСтроки,
| ТаблицаСтатусов.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| ТаблицаСтатусов КАК ТаблицаСтатусов
|ГДЕ
| ТаблицаСтатусов.СтатусУказанияСерий <> ТаблицаСтатусов.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Если ПараметрыУказанияСерий.ПоляСвязи.Найти("Упаковка") <> Неопределено
И ПараметрыУказанияСерий.ИмяПоляКоличество = "КоличествоУпаковок" Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"Товары.Количество,",
"Товары.КоличествоУпаковок КАК Количество,")
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерийТоварыПоРаспоряжениям(Знач ПараметрыУказанияСерий)
Перем ТекстЗапроса;
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Серия,
| Товары.Количество,
| Товары.СтатусУказанияСерий,
| Товары.НомерСтроки
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА 14
| ИНАЧЕ 10
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА 13
| ИНАЧЕ 9
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ КАК СтатусУказанияСерий
|ПОМЕСТИТЬ ТаблицаСтатусов
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО ПолитикиУчетаСерий.Склад = Склады.Ссылка
| ПО (ПолитикиУчетаСерий.Склад = &Склад)
| И (ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка)
|;
|
|
|ВЫБРАТЬ
| ТаблицаСтатусов.НомерСтроки КАК НомерСтроки,
| ТаблицаСтатусов.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| ТаблицаСтатусов КАК ТаблицаСтатусов
|ГДЕ
| ТаблицаСтатусов.СтатусУказанияСерий <> ТаблицаСтатусов.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли
#КонецЕсли