#Если НЕ МобильныйАвтономныйСервер Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("Обеспечение");
МеханизмыДокумента.Добавить("СерийныйУчет");
МеханизмыДокумента.Добавить("АдресныйСклад");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ПриходныйОрдерНаТовары") Тогда
ДокументОбъект = Документ;
ДокументСсылка = Документ.Ссылка;
ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ПриходныйОрдерНаТовары") Тогда
ДокументОбъект = Документ.ПолучитьОбъект();
ДокументСсылка = Документ;
Иначе
ДокументОбъект = Неопределено;
ДокументСсылка = Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
ПолучитьДанныеДокумента(Запрос, ДокументСсылка);
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры, ДокументОбъект);
ПринятьТоварНаСклад(Запрос, ТекстыЗапроса, Регистры);
ЗарегистрироватьИзлишкиНедостачиНаСкладе(Запрос, ТекстыЗапроса, Регистры);
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Документы.ОтборРазмещениеТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Обработки.СправочноеРазмещениеНоменклатуры.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КомандаОтчет = Отчеты.ТоварыКПоступлению.ДобавитьКомандуОтчета(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Порядок = 1;
КомандаОтчет.ВидимостьВФормах = "ФормаДокумента";
КонецЕсли;
КонецПроцедуры
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Склад,Помещение,Статус,СкладскаяОперация,Дата";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.ПриходныйОрдерНаТовары";
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Истина);
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры =
ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад", Новый Структура("Склад",Объект.Склад));
ПараметрыУказанияСерий.ИспользуютсяТоварныеМеста = Истина;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Объект.СкладскаяОперация);
ПараметрыУказанияСерий.ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад, Объект.Помещение, Объект.Дата);
ПараметрыУказанияСерий.ИмяТЧТовары = "Товары";
ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";
ПараметрыУказанияСерий.ПоляСвязи.Добавить("УпаковочныйЛистРодитель");
Если ПараметрыУказанияСерий.ИспользоватьАдресноеХранение Тогда
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Упаковка");
ПараметрыУказанияСерий.ИмяПоляКоличество = "КоличествоУпаковок";
КонецЕсли;
Если Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров Тогда
ПараметрыУказанияСерий.ПоляСвязи.Добавить("ДокументОтгрузки");
КонецЕсли;
ПараметрыУказанияСерий.ПоляСвязи.Добавить("Назначение");
ПараметрыУказанияСерий.ЭтоОрдер = Истина;
ПараметрыУказанияСерий.ИмяПоляПомещение = "Помещение";
Если Объект.Статус = Перечисления.СтатусыПриходныхОрдеров.КПоступлению
Или Объект.Статус = Перечисления.СтатусыПриходныхОрдеров.ТребуетсяОбработка
Или Объект.Статус = Перечисления.СтатусыПриходныхОрдеров.ВРаботе Тогда
ПараметрыУказанияСерий.ПодготовкаОрдера = Истина;
КонецЕсли;
ПараметрыУказанияСерий.Дата = Объект.Дата;
ПараметрыУказанияСерий.ИменаПолейДляОпределенияРаспоряжения.Добавить("Распоряжение");
ПараметрыУказанияСерий.РегистрироватьСерии = Истина;
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция РаспоряжениеНаВыполнениеСкладскойОперации(ЗначенияПолейДляОпределенияРаспоряжения) Экспорт
Возврат ЗначенияПолейДляОпределенияРаспоряжения.Распоряжение;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Таблица.Упаковка КАК Упаковка,
| Таблица.УпаковочныйЛистРодитель,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Серия,
| Таблица.КоличествоУпаковок КАК Количество,
| Таблица.СтатусУказанияСерий,
| Таблица.ДокументОтгрузки КАК ДокументОтгрузки,
| Таблица.Назначение,
| Таблица.НомерСтроки
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Таблица
|;
|
|
|";
Если ПараметрыУказанияСерий.ПоляСвязи.Найти("Упаковка") = Неопределено
Или ПараметрыУказанияСерий.ИмяПоляКоличество = "Количество" Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Таблица.Упаковка", "ИСТИНА");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Таблица.УпаковочныйЛистРодитель","Истина КАК УпаковочныйЛистРодитель");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"Таблица.КоличествоУпаковок КАК Количество,",
"Таблица.Количество КАК Количество,")
КонецЕсли;
Если ПараметрыУказанияСерий.ПоляСвязи.Найти("ДокументОтгрузки") = Неопределено
ИЛИ ПараметрыУказанияСерий.ИмяТЧТовары = "ПодобраннаяМаркируемаяПродукция" Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Таблица.ДокументОтгрузки", "ИСТИНА");
КонецЕсли;
ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА 14
| ИНАЧЕ 10
| КОНЕЦ
| КОГДА &ПодготовкаОрдера
| ТОГДА 11
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА 13
| ИНАЧЕ 9
| КОНЕЦ
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтбора
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 6
| КОГДА &ПодготовкаОрдера
| ТОГДА 25
| ИНАЧЕ 5
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 8
| КОГДА &ПодготовкаОрдера
| ТОГДА 27
| ИНАЧЕ 7
| КОНЕЦ
| КОНЕЦ
| КОГДА &УсловиеПоПараметруПолитикиУчетаСерий
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий
| ТОГДА ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 4
| КОГДА &ПодготовкаОрдера
| ТОГДА 23
| ИНАЧЕ 3
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Товары.Количество > 0
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 2
| КОГДА &ПодготовкаОрдера
| ТОГДА 21
| ИНАЧЕ 1
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ КАК СтатусУказанияСерий
|ПОМЕСТИТЬ ТаблицаСтатусов
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО ПолитикиУчетаСерий.Склад = Склады.Ссылка
| ПО (ПолитикиУчетаСерий.Склад = &Склад)
| И Товары.Номенклатура.ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаСтатусов.НомерСтроки КАК НомерСтроки,
| ТаблицаСтатусов.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| ТаблицаСтатусов КАК ТаблицаСтатусов
|ГДЕ
| ТаблицаСтатусов.СтатусУказанияСерий <> ТаблицаСтатусов.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ЭтоВозвратНепринятыхТоваров = ПараметрыУказанияСерий.СкладскиеОперации
.Найти(Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров) <> Неопределено;
ЭтоВозвратНепринятыхТоваровУстаревший = ПараметрыУказанияСерий.СкладскиеОперации
.Найти(Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваровУстарел) <> Неопределено;
Если ЭтоВозвратНепринятыхТоваров
Или ЭтоВозвратНепринятыхТоваровУстаревший Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеПоПараметруПолитикиУчетаСерий",
"ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриВозвратеНепринятыхПолучателемТоваров");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеПоПараметруПолитикиУчетаСерий",
"ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемке
| И (ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеОтПоставщика
| И &ПриемкаОтПоставщика
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеПоВозвратуОтКлиента
| И &ПриемкаПоВозвратуОтКлиента
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеПродукцииИзПроизводства
| И &ПриемкаПродукцииИзПроизводства
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеПоПеремещению
| И &ПриемкаПоПеремещению
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеПоПрочемуОприходованию
| И &ПриемкаПоПрочемуОприходованию
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеКомплектующихПослеРазборки
| И &ПриемкаКомплектующихПослеРазборки
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемкеСобранныхКомплектов
| И &ПриемкаСобранныхКомплектов)");
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаДоступныхНазначений(ПараметрыФормированияЗапроса) Экспорт
Если ПараметрыФормированияЗапроса.ВидОперации = ПредопределенноеЗначение("Перечисление.СкладскиеОперации.ВозвратНеПринятыхТоваров") Тогда
Возврат Справочники.Назначения.ТекстЗапросаВсехНазначений(ПараметрыФормированияЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| Назначения.Ссылка КАК Назначение,
| СУММА(ТоварыКПоступлению.Потребность) КАК Потребность,
| СУММА(ТоварыКПоступлению.Потребность) - МАКСИМУМ(ЕСТЬNULL(ДанныеДокумента.Количество, 0)) КАК Остаток
|ИЗ
| (ВЫБРАТЬ
| ТоварыКПоступлениюОстатки.Номенклатура КАК Номенклатура,
| ТоварыКПоступлениюОстатки.Характеристика КАК Характеристика,
| ТоварыКПоступлениюОстатки.Назначение КАК Назначение,
| ТоварыКПоступлениюОстатки.КОформлениюОрдеровОстаток КАК Потребность
| ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &Распоряжение
| И (Номенклатура, Характеристика) В (&ОтборПоТоварам)
| И Склад = &Склад
| И Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК ТоварыКПоступлениюОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКПоступлениюПоРегистратору.Номенклатура,
| ТоварыКПоступлениюПоРегистратору.Характеристика,
| ТоварыКПоступлениюПоРегистратору.Назначение,
| ВЫБОР
| КОГДА ТоварыКПоступлениюПоРегистратору.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА 0
| ИНАЧЕ ТоварыКПоступлениюПоРегистратору.КОформлениюОрдеров
| КОНЕЦ
| ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлениюПоРегистратору
| ГДЕ
| ТоварыКПоступлениюПоРегистратору.ДокументПоступления = &Распоряжение
| И ТоварыКПоступлениюПоРегистратору.Склад = &Склад
| И ТоварыКПоступлениюПоРегистратору.Регистратор = &Регистратор
| И (ТоварыКПоступлениюПоРегистратору.Номенклатура, ТоварыКПоступлениюПоРегистратору.Характеристика) В (&ОтборПоТоварам)
| И ТоварыКПоступлениюПоРегистратору.Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыДокументаСгруппированные КАК ДанныеДокумента
| ПО ТоварыКПоступлению.Номенклатура = ДанныеДокумента.Номенклатура
| И ТоварыКПоступлению.Характеристика = ДанныеДокумента.Характеристика
| И ТоварыКПоступлению.Назначение = ДанныеДокумента.Назначение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Назначения КАК Назначения
| ПО ТоварыКПоступлению.Назначение = Назначения.Ссылка
|ГДЕ
| ТоварыКПоступлению.Назначение.ДвиженияПоСкладскимРегистрам
|
|СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| Назначения.Ссылка";
Если ПараметрыФормированияЗапроса.УчестьУжеПодобранные Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Назначение,
| ТоварыДокумента.Количество
|ПОМЕСТИТЬ ТаблицаТоваровДокумента
|ИЗ
| &ТоварыДокумента КАК ТоварыДокумента
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваровДокумента.Номенклатура КАК Номенклатура,
| ТаблицаТоваровДокумента.Характеристика КАК Характеристика,
| ТаблицаТоваровДокумента.Назначение КАК Назначение,
| СУММА(ТаблицаТоваровДокумента.Количество) КАК Количество
|ПОМЕСТИТЬ ТоварыДокументаСгруппированные
|ИЗ
| ТаблицаТоваровДокумента КАК ТаблицаТоваровДокумента
|ГДЕ
| (ТаблицаТоваровДокумента.Номенклатура, ТаблицаТоваровДокумента.Характеристика) В (&ОтборПоТоварам)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваровДокумента.Номенклатура,
| ТаблицаТоваровДокумента.Характеристика,
| ТаблицаТоваровДокумента.Назначение
|;" + ТекстЗапроса;
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТоварыДокументаСгруппированные", "(" +
"ВЫБРАТЬ
| ИСТИНА КАК Номенклатура,
| ИСТИНА КАК Характеристика,
| ИСТИНА КАК Назначение,
| 0 КАК Количество" + ")");
КонецЕсли;
Если ПараметрыФормированияЗапроса.ПоНесколькимТоварам Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика
|ПОМЕСТИТЬ ТаблицаОтбораПоТоварам
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаОтбораПоТоварам.Номенклатура,
| ТаблицаОтбораПоТоварам.Характеристика
|ПОМЕСТИТЬ ТоварыОтборСгруппированные
|ИЗ
| ТаблицаОтбораПоТоварам КАК ТаблицаОтбораПоТоварам
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОтбораПоТоварам.Номенклатура,
| ТаблицаОтбораПоТоварам.Характеристика
|;" + ТекстЗапроса;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоТоварам",
"ВЫБРАТЬ
| ТоварыОтборСгруппированные.Номенклатура,
| ТоварыОтборСгруппированные.Характеристика
|ИЗ
| ТоварыОтборСгруппированные КАК ТоварыОтборСгруппированные");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоТоварам",
"ВЫБРАТЬ
| &Номенклатура,
| &Характеристика");
КонецЕсли;
Если ПараметрыФормированияЗапроса.УпорядочитьПоДатеЗаказаНазначения Тогда
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Назначения.Заказ.Дата";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Склад)";
КонецПроцедуры
#КонецОбласти
#Область Печать
Функция ПравилаПечатиЗаданияНаОтборРазмещение() Экспорт
ПравилаПечатиЗадания = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ПравилаПечатиЗаданияНаОтборРазмещение();
ПравилаПечатиЗадания.ОперацияПоступления = Истина;
ПравилаПечатиЗадания.ЭтоНакладная = Ложь;
ПравилаПечатиЗадания.ИмяПоляПомещение = "Помещение";
ПравилаПечатиЗадания.ЕстьУпаковочныеЛисты = Истина;
Возврат ПравилаПечатиЗадания;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументаШапка.Дата КАК Период,
| ДанныеДокументаШапка.Склад КАК Склад,
| ДанныеДокументаШапка.Статус КАК Статус,
| ДанныеДокументаШапка.Распоряжение КАК Распоряжение,
| ДанныеДокументаШапка.СкладскаяОперация КАК СкладскаяОперация,
| ВЫБОР
| КОГДА ДанныеДокументаШапка.ИспользоватьСкладскиеПомещения
| И ДанныеДокументаШапка.Дата >= ДанныеДокументаШапка.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ДанныеДокументаШапка.ИспользоватьАдресноеХранение
| И ДанныеДокументаШапка.Дата >= ДанныеДокументаШапка.ДатаНачалаАдресногоХраненияОстатков
| ИНАЧЕ ДанныеДокументаШапка.ИспользоватьАдресноеХранение
| И ДанныеДокументаШапка.Дата >= ДанныеДокументаШапка.ДатаНачалаАдресногоХраненияОстатков
| КОНЕЦ КАК ИспользоватьАдресноеХранение,
| ДанныеДокументаШапка.ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач
| И ДанныеДокументаШапка.Дата >= ДанныеДокументаШапка.ДатаНачалаОрдернойСхемыПриОтраженииИзлишковНедостач КАК ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач,
| ДанныеДокументаШапка.ЗонаПриемки КАК ЗонаПриемки,
| ДанныеДокументаШапка.Помещение КАК Помещение,
| ДанныеДокументаШапка.ВозвратНепринятыхТоваров КАК ВозвратНепринятыхТоваров,
| ДанныеДокументаШапка.Отправитель КАК Отправитель,
| ДанныеДокументаШапка.ХозяйственнаяОперация КАК ХозяйственнаяОперация
|ИЗ
| ДанныеДокументаШапка КАК ДанныеДокументаШапка";
Результат = Запрос.Выполнить();
СтруктураПараметров = ОбщегоНазначенияУТ.ПерваяСтрокаРезультатаЗапросаВСтруктуру(Результат);
ОбщегоНазначенияУТ.УстановитьПараметрыЗапроса(Запрос, СтруктураПараметров);
ТипыОжидаемоеПоступление = Метаданные.ОпределяемыеТипы.ОжидаемоеПоступление.Тип.Типы();
Запрос.УстановитьПараметр("ТипыОжидаемоеПоступление", ТипыОжидаемоеПоступление);
КонецПроцедуры
Процедура ПолучитьДанныеДокумента(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Если ДокументСсылка = Неопределено Тогда
Возврат;
КонецЕсли;
СписокЗапросов = Новый Массив;
ТекстЗапросаДанныеДокументаШапка(СписокЗапросов);
ТекстЗапросаДанныеДокументаТаблицаТовары(СписокЗапросов);
ТекстЗапроса = СтрСоединить(СписокЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Выполнить();
КонецПроцедуры
Процедура ТекстЗапросаДанныеДокументаШапка(СписокЗапросов)
ТекстЗапросаШапка =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Дата КАК Дата,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Статус КАК Статус,
| ДанныеДокумента.Распоряжение КАК Распоряжение,
| ДанныеДокумента.СкладскаяОперация КАК СкладскаяОперация,
| ДанныеДокумента.СкладскаяОперация В (ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВозвратНеПринятыхТоваров), ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВозвратНеПринятыхТоваровУстарел)) КАК ВозвратНепринятыхТоваров,
| Склады.ИспользоватьСкладскиеПомещения КАК ИспользоватьСкладскиеПомещения,
| Склады.ДатаНачалаИспользованияСкладскихПомещений КАК ДатаНачалаИспользованияСкладскихПомещений,
| СкладскиеПомещения.ИспользоватьАдресноеХранение КАК ПомещениеИспользоватьАдресноеХранение,
| СкладскиеПомещения.ДатаНачалаАдресногоХраненияОстатков КАК ПомещениеДатаНачалаАдресногоХраненияОстатков,
| Склады.ИспользоватьАдресноеХранение КАК ИспользоватьАдресноеХранение,
| Склады.ДатаНачалаАдресногоХраненияОстатков КАК ДатаНачалаАдресногоХраненияОстатков,
| Склады.ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач КАК ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач,
| Склады.ДатаНачалаОрдернойСхемыПриОтраженииИзлишковНедостач КАК ДатаНачалаОрдернойСхемыПриОтраженииИзлишковНедостач,
| ДанныеДокумента.ЗонаПриемки КАК ЗонаПриемки,
| ДанныеДокумента.Помещение КАК Помещение,
| ДанныеДокумента.Отправитель КАК Отправитель,
| ДанныеДокумента.ХозяйственнаяОперация КАК ХозяйственнаяОперация
|ПОМЕСТИТЬ ДанныеДокументаШапка
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО (Склады.Ссылка = ДанныеДокумента.Склад)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СкладскиеПомещения КАК СкладскиеПомещения
| ПО (СкладскиеПомещения.Ссылка = ДанныеДокумента.Помещение)
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка";
СписокЗапросов.Добавить(ТекстЗапросаШапка);
КонецПроцедуры
Процедура ТекстЗапросаДанныеДокументаТаблицаТовары(СписокЗапросов)
ТекстЗапросаТаблицаТовары =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.ЭтоУпаковочныйЛист КАК ЭтоУпаковочныйЛист,
| ТаблицаТовары.Количество КАК Количество,
| Упаковки.ТипУпаковки КАК УпаковкаТипУпаковки,
| ТаблицаТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок
|ПОМЕСТИТЬ ДанныеДокументаТаблицаТовары
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО (Упаковки.Ссылка = ТаблицаТовары.Упаковка)
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка";
СписокЗапросов.Добавить(ТекстЗапросаТаблицаТовары);
КонецПроцедуры
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ПринятьТоварНаСклад(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДокумента =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ДанныеДокументаШапка.Дата КАК Дата,
| ДанныеДокументаШапка.Склад КАК Склад,
| ДанныеДокументаШапка.ЗонаПриемки КАК Ячейка,
| ДанныеДокументаШапка.Помещение КАК Помещение,
| ДанныеДокументаШапка.Отправитель КАК Отправитель,
| ДанныеДокументаШапка.Распоряжение КАК Распоряжение,
| ДанныеДокументаШапка.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.ЭтоУпаковочныйЛист КАК ЭтоУпаковочныйЛист,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ДанныеДокументаШапка.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.КПоступлению), ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.ВРаботе), ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.ТребуетсяОбработка)) КАК Принимается,
| ДанныеДокументаШапка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.Принят) КАК Принят,
| ДанныеДокументаШапка.ВозвратНепринятыхТоваров КАК ЭтоПриемкаБезРаспоряжения
|ИЗ
| ДанныеДокументаТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТаблицаТовары.Ссылка)
|ГДЕ
| НЕ ТаблицаТовары.ЭтоУпаковочныйЛист
| И ТаблицаТовары.Количество <> 0";
СкладыСервер.ПринятьТоварНаСклад(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДокумента, "ТаблицаТовары");
КонецПроцедуры
Процедура ЗарегистрироватьИзлишкиНедостачиНаСкладе(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДокумента =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ДанныеДокументаШапка.Дата КАК Дата,
| ДанныеДокументаШапка.Склад КАК Склад,
| ДанныеДокументаШапка.Помещение КАК Помещение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ДанныеДокументаШапка.ЗонаПриемки КАК Ячейка,
| ТаблицаТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ЛОЖЬ КАК ИзменяетсяОстаток
|ИЗ
| ДанныеДокументаТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТаблицаТовары.Ссылка)
|ГДЕ
| ТаблицаТовары.Количество <> 0
| И ДанныеДокументаШапка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.Принят)
| И ДанныеДокументаШапка.ВозвратНепринятыхТоваров";
СкладыСервер.ЗарегистрироватьИзлишкиНедостачиНаСкладе(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДокумента);
КонецПроцедуры
Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияСерийТоваров";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтТаблицаТовары", ТекстыЗапроса) Тогда
ТекстЗапросаВтТаблицаТовары(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Количество КАК Количество,
| ДанныеДокументаШапка.Склад КАК Получатель,
| ДанныеДокументаШапка.Помещение КАК ПомещениеПолучателя,
| ДанныеДокументаШапка.Отправитель КАК Отправитель,
| ДанныеДокументаШапка.СкладскаяОперация КАК СкладскаяОперация,
| ТаблицаТовары.Ссылка КАК Документ,
| ДанныеДокументаШапка.Дата КАК Период,
| ИСТИНА КАК ЭтоСкладскоеДвижение
|ИЗ
| ВтТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТаблицаТовары.Ссылка)
|ГДЕ
| ТаблицаТовары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтТаблицаТовары(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтТаблицаТовары";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВтТаблицаТовары
|ИЗ
| ДанныеДокументаТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка В(&Ссылка)
| И НЕ ТаблицаТовары.ЭтоУпаковочныйЛист
| И ЕСТЬNULL(ТаблицаТовары.УпаковкаТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Таблица.Ссылка,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Серия,
| Таблица.СтатусУказанияСерий,
| СУММА(ПриходныйОрдерНаТоварыТоварыКоличество.Количество)
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Назначение КАК Назначение,
| ТаблицаТовары.Серия КАК Серия,
| МАКСИМУМ(ТаблицаТовары.Упаковка) КАК Упаковка,
| ТаблицаТовары.СтатусУказанияСерий КАК СтатусУказанияСерий
| ИЗ
| ДанныеДокументаТаблицаТовары КАК ТаблицаТовары
| ГДЕ
| НЕ ТаблицаТовары.ЭтоУпаковочныйЛист
| И ЕСТЬNULL(ТаблицаТовары.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
| СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Назначение,
| ТаблицаТовары.Серия,
| ТаблицаТовары.СтатусУказанияСерий) КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДанныеДокументаТаблицаТовары КАК ПриходныйОрдерНаТоварыТоварыКоличество
| ПО Таблица.Номенклатура = ПриходныйОрдерНаТоварыТоварыКоличество.Номенклатура
| И Таблица.Характеристика = ПриходныйОрдерНаТоварыТоварыКоличество.Характеристика
| И Таблица.Серия = ПриходныйОрдерНаТоварыТоварыКоличество.Серия
| И Таблица.Назначение = ПриходныйОрдерНаТоварыТоварыКоличество.Назначение
| И Таблица.Упаковка = ПриходныйОрдерНаТоварыТоварыКоличество.Упаковка
|
|СГРУППИРОВАТЬ ПО
| Таблица.Ссылка,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение,
| Таблица.Серия,
| Таблица.СтатусУказанияСерий";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры, ДокументОбъект)
Если ДокументОбъект <> Неопределено
И ДокументОбъект.Статус <> Перечисления.СтатусыПриходныхОрдеров.Принят Тогда
Возврат;
КонецЕсли;
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ДанныеДокументаШапка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ДанныеДокументаШапка.Склад КАК Склад,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| ТИПЗНАЧЕНИЯ(ДанныеДокументаШапка.Распоряжение) В (&ТипыОжидаемоеПоступление) КАК ПоГрафику,
| ДанныеДокументаШапка.Распоряжение КАК РаспоряжениеВГрафике
|ИЗ
| ДанныеДокументаТаблицаТовары КАК ТабЧасть
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТабЧасть.Ссылка)
|ГДЕ
| НЕ ТабЧасть.ЭтоУпаковочныйЛист
| И ТабЧасть.Количество <> 0
| И ЕСТЬNULL(ТабЧасть.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| И ДанныеДокументаШапка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.Принят)";
РаспределениеЗапасовДвижения.ПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть);
ТекстТоварныеМеста =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Серия КАК Серия,
| МАКСИМУМ(ТабЧасть.Упаковка) КАК Упаковка
|ПОМЕСТИТЬ ТоварныеМеста
|ИЗ
| ДанныеДокументаТаблицаТовары КАК ТабЧасть
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТабЧасть.Ссылка)
|ГДЕ
| НЕ ТабЧасть.ЭтоУпаковочныйЛист
| И ТабЧасть.Количество <> 0
| И ТабЧасть.УпаковкаТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| И ДанныеДокументаШапка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.Принят)
|
|СГРУППИРОВАТЬ ПО
| ТабЧасть.Ссылка,
| ТабЧасть.Номенклатура,
| ТабЧасть.Характеристика,
| ТабЧасть.Назначение,
| ТабЧасть.Серия
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| Номенклатура,
| Характеристика,
| Назначение,
| Серия,
| Упаковка";
ТекстыШаблоновВременныхТаблиц = Новый Структура();
ТекстыШаблоновВременныхТаблиц.Вставить("ТоварныеМеста", ТекстТоварныеМеста);
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ДанныеДокументаШапка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ДанныеДокументаШапка.Склад КАК Склад,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| ТИПЗНАЧЕНИЯ(ДанныеДокументаШапка.Распоряжение) В (&ТипыОжидаемоеПоступление) КАК ПоГрафику,
| ДанныеДокументаШапка.Распоряжение КАК РаспоряжениеВГрафике
|ИЗ
| ДанныеДокументаТаблицаТовары КАК ТабЧасть
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварныеМеста КАК ТоварныеМеста
| ПО ТабЧасть.Ссылка = ТоварныеМеста.Ссылка
| И ТабЧасть.Номенклатура = ТоварныеМеста.Номенклатура
| И ТабЧасть.Характеристика = ТоварныеМеста.Характеристика
| И ТабЧасть.Назначение = ТоварныеМеста.Назначение
| И ТабЧасть.Серия = ТоварныеМеста.Серия
| И ТабЧасть.Упаковка = ТоварныеМеста.Упаковка
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокументаШапка КАК ДанныеДокументаШапка
| ПО (ДанныеДокументаШапка.Ссылка = ТабЧасть.Ссылка)
|ГДЕ
| НЕ ТабЧасть.ЭтоУпаковочныйЛист
| И ТабЧасть.Количество <> 0
| И ТабЧасть.УпаковкаТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| И ДанныеДокументаШапка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПриходныхОрдеров.Принят)";
РаспределениеЗапасовДвижения.ПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть, ТекстыШаблоновВременныхТаблиц);
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Если ПравоДоступа("Изменение", Метаданные.Документы.ПриходныйОрдерНаТовары) Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПриходныйОрдерНаТовары";
КомандаПечати.Представление = НСтр("ru = 'Приходный ордер на товары'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецЕсли;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "БланкПриемкиТоваров";
КомандаПечати.Представление = НСтр("ru = 'Бланк приемки товаров'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати = Обработки.ПечатьЗаданияНаОтборРазмещениеТоваров.ДобавитьКомандуПечати(КомандыПечати, "ЗаданиеНаРазмещение");
КомандаПечати.ДополнительныеПараметры.Вставить("ПечатьПоДаннымДокумента");
Если ПраваПользователяПовтИсп.ПечатьЭтикетокИЦенников() Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьЭтикетокИЦенников";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.Идентификатор = "Ценники";
КомандаПечати.Представление = НСтр("ru = 'Ценники'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьЭтикетокИЦенников";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.Идентификатор = "Этикетки";
КомандаПечати.Представление = НСтр("ru = 'Этикетки'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецЕсли;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПриходныйОрдерНаТовары") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПриходныйОрдерНаТовары",
НСтр("ru = 'Приходный ордер на товары'"),
ПечатьПриходногоОрдераНаТовары(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "БланкПриемкиТоваров") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"БланкПриемкиТоваров",
НСтр("ru = 'Бланк приемки товаров'"),
ПечатьБланкаПриемкиТоваров(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
КонецПроцедуры
Функция ПечатьПриходногоОрдераНаТовары(МассивОбъектов, ОбъектыПечати)
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйОрдерНаТовары_ПриходныйОрдерНаТовары";
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = ЗначениеЗаполнено(ИмяКолонкиКодов);
РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс,Представление");
СинонимДокумента = НСтр("ru='Приходный ордер на товары'", ОбщегоНазначения.КодОсновногоЯзыка());
ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
ИспользуетсяМаркируемаяПродукция = ПриходныйОрдерНаТоварыЛокализация.ИспользуетсяМаркируемаяПродукция();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходныйОрдерНаТовары.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Склад) КАК ПредставлениеСклада,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Помещение) КАК ПредставлениеПомещения,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.ЗонаПриемки) КАК ПредставлениеЗоныПриемки,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Отправитель) КАК ПредставлениеПартнера,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Распоряжение) КАК РаспоряжениеПредставление,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТовары.Распоряжение ССЫЛКА Справочник.СоглашенияСПоставщиками
| ТОГДА ВЫРАЗИТЬ(ПриходныйОрдерНаТовары.Распоряжение КАК Справочник.СоглашенияСПоставщиками).Номер
| ИНАЧЕ ЕСТЬNULL(РеквизитыРаспоряжения.НомерДокументаИБ, """""""")
| КОНЕЦ КАК РаспоряжениеНомер,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТовары.Распоряжение ССЫЛКА Справочник.СоглашенияСПоставщиками
| ТОГДА ВЫРАЗИТЬ(ПриходныйОрдерНаТовары.Распоряжение КАК Справочник.СоглашенияСПоставщиками).Дата
| ИНАЧЕ ЕСТЬNULL(РеквизитыРаспоряжения.ДатаДокументаИБ, ДАТАВРЕМЯ(1, 1, 1))
| КОНЕЦ КАК РаспоряжениеДата,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТовары.Распоряжение ССЫЛКА Справочник.СоглашенияСПоставщиками
| ТОГДА ВЫРАЗИТЬ(ПриходныйОрдерНаТовары.Распоряжение КАК Справочник.СоглашенияСПоставщиками).Организация.Префикс
| ИНАЧЕ ЕСТЬNULL(РеквизитыРаспоряжения.Организация.Префикс, """""""")
| КОНЕЦ КАК РаспоряжениеПрефикс,
| ПриходныйОрдерНаТовары.Дата,
| ПриходныйОрдерНаТовары.Номер,
| ПриходныйОрдерНаТовары.Ответственный.ФизическоеЛицо КАК Ответственный,
| ПриходныйОрдерНаТовары.Исполнитель.ФизическоеЛицо КАК Исполнитель,
| ПриходныйОрдерНаТовары.Склад КАК Склад,
| ПриходныйОрдерНаТовары.Помещение КАК Помещение,
| ПриходныйОрдерНаТовары.Склад.ИспользоватьСерииНоменклатуры КАК ИспользоватьСерииНоменклатуры,
| ПриходныйОрдерНаТовары.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
| ПриходныйОрдерНаТовары.НомерВходящегоДокумента КАК НомерВходящегоДокумента
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеквизитыРаспоряжения
| ПО (НЕ РеквизитыРаспоряжения.ДополнительнаяЗапись)
| И ПриходныйОрдерНаТовары.Распоряжение = РеквизитыРаспоряжения.Ссылка
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ПриходныйОрдерНаТовары.Ссылка
|;
|
|
|ВЫБРАТЬ
| ПриходныйОрдерНаТоварыТовары.Ссылка КАК Ссылка,
| ПриходныйОрдерНаТоварыТовары.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА &КолонкаКодов = ""Артикул""
| ТОГДА ПриходныйОрдерНаТоварыТовары.Номенклатура.Артикул
| КОГДА &КолонкаКодов = ""Код""
| ТОГДА ПриходныйОрдерНаТоварыТовары.Номенклатура.Код
| ИНАЧЕ """"
| КОНЕЦ КАК Артикул,
| ПриходныйОрдерНаТоварыТовары.ЭтоУпаковочныйЛист КАК ЭтоУпаковочныйЛист,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТоварыТовары.УпаковочныйЛист) КАК УпаковочныйЛист,
| ПриходныйОрдерНаТоварыТовары.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ПриходныйОрдерНаТоварыТовары.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| ПриходныйОрдерНаТоварыТовары.Номенклатура КАК Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика КАК Характеристика,
| ПриходныйОрдерНаТоварыТовары.Серия КАК Серия,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТоварыТовары.Серия) КАК ПредставлениеСерии,
| ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок КАК КоличествоУпаковок,
| ПриходныйОрдерНаТоварыТовары.Количество КАК Количество,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТоварыТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТоварыТовары.Упаковка)
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТоварыТовары.Номенклатура.ЕдиницаИзмерения)
| КОНЕЦ КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| NULL КАК НастройкаИспользованияСерий,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
|ГДЕ
| ПриходныйОрдерНаТоварыТовары.Ссылка В (&МассивОбъектов)
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка,
| ТаблицаТоваров.Артикул,
| ТаблицаТоваров.ЭтоУпаковочныйЛист,
| ТаблицаТоваров.УпаковочныйЛист,
| ТаблицаТоваров.ПредставлениеНоменклатуры,
| ТаблицаТоваров.ПредставлениеХарактеристики,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ТаблицаТоваров.Серия,
| ТаблицаТоваров.ПредставлениеСерии,
| ТаблицаТоваров.КоличествоУпаковок,
| ТаблицаТоваров.Количество,
| ТаблицаТоваров.ПредставлениеБазовойЕдиницыИзмерения,
| ТаблицаТоваров.ПредставлениеЕдиницыИзмеренияУпаковки,
| ТаблицаТоваров.НастройкаИспользованияСерий,
| ТаблицаТоваров.МаркируемаяПродукция,
| НомерСтроки
|ИЗ
| ТаблицаТоваров
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| ТаблицаТоваров.НомерСтроки
|ИТОГИ
|ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка,
| МАКСИМУМ(ТаблицаТоваров.МаркируемаяПродукция) КАК ЕстьМаркируемаяПродукция
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.Ссылка";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("КолонкаКодов", ИмяКолонкиКодов);
Если ИспользуетсяМаркируемаяПродукция Тогда
ОпределениеМаркируемаяПродукция = ПриходныйОрдерНаТоварыЛокализация.ОпределениеПризнакаМаркируемаяПродукцияТекстаЗапроса("ПриходныйОрдерНаТоварыТовары.Номенклатура");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОпределениеПризнакаМаркируемаяПродукция", ОпределениеМаркируемаяПродукция);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОпределениеПризнакаМаркируемаяПродукция", "ЛОЖЬ");
КонецЕсли;
МассивРезультатов = Запрос.ВыполнитьПакет();
РезультатЗапроса = МассивРезультатов[0];
ВыборкаПоДокументам = РезультатЗапроса.Выбрать();
РезультатЗапроса = МассивРезультатов[2];
ВыборкаПоТабличнымЧастям = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РезультатЗапроса = МассивРезультатов[3];
ВыборкаПоМаркам = РезультатЗапроса.Выбрать();
ПервыйДокумент = Истина;
Пока ВыборкаПоДокументам.Следующий() Цикл
Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
Продолжить;
КонецЕсли;
Если ВыборкаПоМаркам.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
ВыводитьМарки = ВыборкаПоМаркам.ЕстьМаркируемаяПродукция;
Иначе
ВыводитьМарки = Ложь;
КонецЕсли;
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
ИспользуетсяАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(
ВыборкаПоДокументам.Склад, ВыборкаПоДокументам.Помещение, ВыборкаПоДокументам.Дата);
ВыводитьУпаковки = ИспользоватьУпаковкиНоменклатуры Или ИспользуетсяАдресноеХранение;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПриходныйОрдерНаТовары.ПФ_MXL_ПриходныйОрдерНаТовары");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПоставщик = Макет.ПолучитьОбласть("Поставщик");
ОбластьШапкаТаблицыНачало = Макет.ПолучитьОбласть("ШапкаТаблицы|НачалоСтроки");
ОбластьСтрокаТаблицыНачало = Макет.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки");
ОбластьПодвалТаблицыНачало = Макет.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки");
ОбластьШапкаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьСтрокаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов");
ОбластьПодвалТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
ОбластьШапкаТаблицыКолонкаКодов.Параметры.ИмяКолонкиКодов = ПредставлениеКолонкиКодов;
ОбластьШапкаТаблицыКолонкаУпаковок = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаУпаковок");
ОбластьСтрокаТаблицыКолонкаУпаковок = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаУпаковок");
ОбластьПодвалТаблицыКолонкаУпаковок = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаУпаковок");
ОбластьШапкаТаблицыКолонкаМаркировки = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаМаркировки");
ОбластьСтрокаТаблицыКолонкаМаркировки = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаМаркировки");
ОбластьПодвалТаблицыКолонкаМаркировки = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаМаркировки");
ОбластьПодписей = Макет.ПолучитьОбласть("Подписи");
ОбластьКолонкаТоваров = Макет.Область("КолонкаТоваров");
Если НЕ ВыводитьКоды Тогда
ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки + Макет.Область("КолонкаКодов").ШиринаКолонки;
КонецЕсли;
Если НЕ ВыводитьУпаковки Тогда
ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки + Макет.Область("КолонкаУпаковокКоличество").ШиринаКолонки
+ Макет.Область("КолонкаУпаковокПредставление").ШиринаКолонки;
КонецЕсли;
Если НЕ ИспользуетсяМаркируемаяПродукция Тогда
ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки + Макет.Область("КолонкаМаркировки").ШиринаКолонки;
КонецЕсли;
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
ОбластьШапкаТаблицыКонец = Макет.ПолучитьОбласть("ШапкаТаблицы|КонецСтроки");
ОбластьСтрокаТаблицыКонец = Макет.ПолучитьОбласть("СтрокаТаблицы|КонецСтроки");
ОбластьПодвалТаблицыКонец = Макет.ПолучитьОбласть("ПодвалТаблицы|КонецСтроки");
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ВыборкаПоДокументам.Ссылка);
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Если ИспользуетсяАдресноеХранение Тогда
ТекстЗоны = НСтр("ru='Зона приемки:'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗонаПредставление = ВыборкаПоДокументам.ПредставлениеЗоныПриемки;
Иначе
ТекстЗоны = "";
ЗонаПредставление = "";
КонецЕсли;
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
СтруктураДанныхЗаголовка = Новый Структура;
СтруктураДанныхЗаголовка.Вставить("ТекстЗаголовка", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента));
ОбластьЗаголовок.Параметры.Заполнить(СтруктураДанныхЗаголовка);
Если ВыводитьМарки Тогда
ОбластьЗаголовок.Параметры.ПризнакМаркировки = "[М]";
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
Если ЗначениеЗаполнено(ВыборкаПоДокументам.ПредставлениеПартнера) Тогда
ОбластьПоставщик.Параметры.Заполнить(ВыборкаПоДокументам);
ТабличныйДокумент.Вывести(ОбластьПоставщик);
КонецЕсли;
ПараметрыШапки = Новый Структура;
ПараметрыШапки.Вставить("ПредставлениеСклада",
СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоДокументам.ПредставлениеСклада,ВыборкаПоДокументам.ПредставлениеПомещения));
ПараметрыШапки.Вставить("ТекстЗоны", ТекстЗоны);
ПараметрыШапки.Вставить("ПредставлениеЗоныПриемки", ЗонаПредставление);
ПредставлениеВходящегоДокумента = ?(ПустаяСтрока(ВыборкаПоДокументам.НомерВходящегоДокумента),"","№ " + СокрЛП(ВыборкаПоДокументам.НомерВходящегоДокумента))
+ ?(Не ЗначениеЗаполнено(ВыборкаПоДокументам.ДатаВходящегоДокумента),""," от " + Формат(ВыборкаПоДокументам.ДатаВходящегоДокумента,"ДЛФ=D"));
ПараметрыШапки.Вставить("ПредставлениеВходящегоДокумента", ПредставлениеВходящегоДокумента);
ОбластьШапка.Параметры.Заполнить(ПараметрыШапки);
Если Не ЗначениеЗаполнено(ВыборкаПоДокументам.РаспоряжениеДата)
Или Не ЗначениеЗаполнено(ВыборкаПоДокументам.РаспоряжениеНомер) Тогда
ОбластьШапка.Параметры.ПредставлениеРаспоряжения = ВыборкаПоДокументам.РаспоряжениеПредставление;
Иначе
РеквизитыДокумента.Дата = ВыборкаПоДокументам.РаспоряжениеДата;
РеквизитыДокумента.Номер = ВыборкаПоДокументам.РаспоряжениеНомер;
РеквизитыДокумента.Префикс = ВыборкаПоДокументам.РаспоряжениеПрефикс;
РеквизитыДокумента.Представление = ВыборкаПоДокументам.РаспоряжениеПредставление;
ОбластьШапка.Параметры.ПредставлениеРаспоряжения = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьШапка);
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыНачало);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаТоваров);
Если ИспользуетсяМаркируемаяПродукция Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаМаркировки);
КонецЕсли;
Если ВыводитьУпаковки Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаУпаковок);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКонец);
ВсегоНаименований = 0;
ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПерваяСтрока = Истина;
СтрокаУпаковок = "";
СтрокаКоличесткаУпаковок = "";
СтрокаЕдиницИзмерений = "";
СтрокаКоличества = "";
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(Новый Структура("НомерСтроки", ВсегоНаименований + 1));
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;
Если ВыборкаПоСтрокамТЧ.ЭтоУпаковочныйЛист Тогда
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = ВыборкаПоСтрокамТЧ.УпаковочныйЛист;
Иначе
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры,
ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики,
,
ВыборкаПоСтрокамТЧ.ПредставлениеСерии,
ДопПараметрыПредставлениеНоменклатуры);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);
ВсегоНаименований = ВсегоНаименований + 1;
Если ИспользуетсяМаркируемаяПродукция Тогда
Если ВыводитьМарки И ВыборкаПоСтрокамТЧ.МаркируемаяПродукция Тогда
ОбластьСтрокаТаблицыКолонкаМаркировки.Параметры.ПризнакМаркировки = "[М]";
Иначе
ОбластьСтрокаТаблицыКолонкаМаркировки.Параметры.ПризнакМаркировки = "";
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаМаркировки);
КонецЕсли;
Если ВыводитьУпаковки Тогда
ОбластьСтрокаТаблицыКолонкаУпаковок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
Если ВыборкаПоСтрокамТЧ.ЭтоУпаковочныйЛист Тогда
ОбластьСтрокаТаблицыКолонкаУпаковок.Параметры.ПредставлениеЕдиницыИзмеренияУпаковки = НСтр("ru = 'место'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаУпаковок);
КонецЕсли;
ОбластьСтрокаТаблицыКонец.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
Если ВыборкаПоСтрокамТЧ.ЭтоУпаковочныйЛист Тогда
ОбластьСтрокаТаблицыКонец.Параметры.ПредставлениеБазовойЕдиницыИзмерения = НСтр("ru = 'место'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКонец);
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаТоваров);
Если ИспользуетсяМаркируемаяПродукция Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаМаркировки);
КонецЕсли;
Если ВыводитьУпаковки Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаУпаковок);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКонец);
ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%'", ОбщегоНазначения.КодОсновногоЯзыка());
ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
ОбластьПодписей.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
ОбластьПодписей.Параметры.ПредставлениеОтветственного = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный, ВыборкаПоДокументам.Дата);
ОбластьПодписей.Параметры.ПредставлениеИсполнителя = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Исполнитель, ВыборкаПоДокументам.Дата);
ТабличныйДокумент.Вывести(ОбластьПодписей);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Функция ПечатьБланкаПриемкиТоваров(МассивОбъектов, ОбъектыПечати)
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйОрдерНаТовары_БланкПриемкиТоваров";
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = ЗначениеЗаполнено(ИмяКолонкиКодов);
РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс,Представление");
СинонимДокумента = НСтр("ru='Бланк приемки товаров'", ОбщегоНазначения.КодОсновногоЯзыка());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходныйОрдерНаТовары.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Склад) КАК ПредставлениеСклада,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Помещение) КАК ПредставлениеПомещения,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.ЗонаПриемки) КАК ПредставлениеЗоныПриемки,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Отправитель) КАК ПредставлениеПартнера,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТовары.Распоряжение) КАК РаспоряжениеПредставление,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТовары.Распоряжение ССЫЛКА Справочник.СоглашенияСПоставщиками
| ТОГДА ВЫРАЗИТЬ(ПриходныйОрдерНаТовары.Распоряжение КАК Справочник.СоглашенияСПоставщиками).Номер
| ИНАЧЕ ЕСТЬNULL(РеквизитыРаспоряжения.НомерДокументаИБ, """""""")
| КОНЕЦ КАК РаспоряжениеНомер,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТовары.Распоряжение ССЫЛКА Справочник.СоглашенияСПоставщиками
| ТОГДА ВЫРАЗИТЬ(ПриходныйОрдерНаТовары.Распоряжение КАК Справочник.СоглашенияСПоставщиками).Дата
| ИНАЧЕ ЕСТЬNULL(РеквизитыРаспоряжения.ДатаДокументаИБ, ДАТАВРЕМЯ(1, 1, 1))
| КОНЕЦ КАК РаспоряжениеДата,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТовары.Распоряжение ССЫЛКА Справочник.СоглашенияСПоставщиками
| ТОГДА ВЫРАЗИТЬ(ПриходныйОрдерНаТовары.Распоряжение КАК Справочник.СоглашенияСПоставщиками).Организация.Префикс
| ИНАЧЕ ЕСТЬNULL(РеквизитыРаспоряжения.Организация.Префикс, """""""")
| КОНЕЦ КАК РаспоряжениеПрефикс,
| ПриходныйОрдерНаТовары.Дата,
| ПриходныйОрдерНаТовары.Номер,
| ПриходныйОрдерНаТовары.Ответственный.ФизическоеЛицо КАК Ответственный,
| ПриходныйОрдерНаТовары.Исполнитель.ФизическоеЛицо КАК Исполнитель,
| ПриходныйОрдерНаТовары.Склад КАК Склад,
| ПриходныйОрдерНаТовары.Помещение КАК Помещение,
| ПриходныйОрдерНаТовары.Склад.ИспользоватьСерииНоменклатуры КАК ИспользоватьСерииНоменклатуры,
| ПриходныйОрдерНаТовары.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
| ПриходныйОрдерНаТовары.НомерВходящегоДокумента КАК НомерВходящегоДокумента
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеквизитыРаспоряжения
| ПО (НЕ РеквизитыРаспоряжения.ДополнительнаяЗапись)
| И ПриходныйОрдерНаТовары.Распоряжение = РеквизитыРаспоряжения.Ссылка
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ПриходныйОрдерНаТовары.Ссылка
|;
|
|
|ВЫБРАТЬ
| ПриходныйОрдерНаТоварыТовары.Ссылка КАК Ссылка,
| ПриходныйОрдерНаТоварыТовары.ЭтоУпаковочныйЛист КАК ЭтоУпаковочныйЛист,
| ПРЕДСТАВЛЕНИЕ(ПриходныйОрдерНаТоварыТовары.УпаковочныйЛист) КАК УпаковочныйЛист,
| ВЫБОР
| КОГДА &КолонкаКодов = ""Артикул""
| ТОГДА ПриходныйОрдерНаТоварыТовары.Номенклатура.Артикул
| КОГДА &КолонкаКодов = ""Код""
| ТОГДА ПриходныйОрдерНаТоварыТовары.Номенклатура.Код
| ИНАЧЕ """"
| КОНЕЦ КАК Артикул,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ПриходныйОрдерНаТоварыТовары.Номенклатура.ЕдиницаИзмерения.Представление
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.Упаковка.Представление
| КОНЕЦ КАК ЕдиницаИзмеренияПредставление,
| ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок КАК Количество,
| ПриходныйОрдерНаТоварыТовары.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ПриходныйОрдерНаТоварыТовары.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| ПриходныйОрдерНаТоварыТовары.Серия КАК Серия,
| ПриходныйОрдерНаТоварыТовары.Серия.Наименование КАК ПредставлениеСерии,
| ПриходныйОрдерНаТоварыТовары.СтатусУказанияСерий,
| ПриходныйОрдерНаТоварыТовары.НомерСтроки,
| ПриходныйОрдерНаТоварыТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| ПриходныйОрдерНаТоварыТовары.Номенклатура.ВидНоменклатуры.ИспользоватьНомерСерии КАК ИспользоватьНомерСерии,
| ПриходныйОрдерНаТоварыТовары.Номенклатура.ВидНоменклатуры.ИспользоватьСрокГодностиСерии КАК ИспользоватьСрокГодностиСерии
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
|ГДЕ
| ПриходныйОрдерНаТоварыТовары.Ссылка В(&МассивОбъектов)
| И ПриходныйОрдерНаТоварыТовары.УпаковочныйЛистРодитель = ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| ПриходныйОрдерНаТоварыТовары.НомерСтроки
|
|ИТОГИ ПО
| Ссылка";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("КолонкаКодов", ИмяКолонкиКодов);
МассивРезультатов = Запрос.ВыполнитьПакет();
РезультатЗапроса = МассивРезультатов[0];
ВыборкаПоДокументам = РезультатЗапроса.Выбрать();
РезультатЗапроса = МассивРезультатов[1];
ВыборкаПоТабличнымЧастям = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПриходныйОрдерНаТовары.ПФ_MXL_БланкПриемкиТоваров");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПоставщик = Макет.ПолучитьОбласть("Поставщик");
ОбластьШапкаТаблицыНачало = Макет.ПолучитьОбласть("ШапкаТаблицы|НачалоСтроки");
ОбластьСтрокаТаблицыНачало = Макет.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки");
ОбластьСтрокаСерийНачало = Макет.ПолучитьОбласть("СтрокаСерий|НачалоСтрокиСерий");
ОбластьПодвалТаблицыНачало = Макет.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки");
ОбластьШапкаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьСтрокаТаблицыКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов");
ОбластьПодвалТаблицыКолонкаКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
ОбластьШапкаТаблицыКолонкаКодов.Параметры.ИмяКолонкиКодов = ПредставлениеКолонкиКодов;
ОбластьПодписей = Макет.ПолучитьОбласть("Подписи");
ОбластьКолонкаТоваров = Макет.Область("КолонкаТоваров");
ШиринаКолонкиКодов = Макет.Область("КолонкаКодов").ШиринаКолонки;
Если Не ВыводитьКоды Тогда
ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки + ШиринаКолонкиКодов;
КонецЕсли;
ОбластьШапкаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров");
ОбластьСтрокаТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
ОбластьСтрокаСерийКолонкаСерий = Макет.ПолучитьОбласть("СтрокаСерий|КолонкаСерий");
ОбластьПодвалТаблицыКолонкаТоваров = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
ОбластьШапкаТаблицыКонец = Макет.ПолучитьОбласть("ШапкаТаблицы|КонецСтроки");
ОбластьСтрокаТаблицыКонец = Макет.ПолучитьОбласть("СтрокаТаблицы|КонецСтроки");
ОбластьПодвалТаблицыКонец = Макет.ПолучитьОбласть("ПодвалТаблицы|КонецСтроки");
Пока ВыборкаПоДокументам.Следующий() Цикл
Если Не ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
Продолжить;
КонецЕсли;
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ВыборкаПоДокументам.Ссылка);
ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ИспользуетсяАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(
ВыборкаПоДокументам.Склад, ВыборкаПоДокументам.Помещение, ВыборкаПоДокументам.Дата);
Если ИспользуетсяАдресноеХранение Тогда
ТекстЗоны = НСтр("ru='Зона приемки:'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗонаПредставление = ВыборкаПоДокументам.ПредставлениеЗоныПриемки;
Иначе
ТекстЗоны = "";
ЗонаПредставление = "";
КонецЕсли;
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
СтруктураДанныхЗаголовка = Новый Структура;
СтруктураДанныхЗаголовка.Вставить("ТекстЗаголовка", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента));
ОбластьЗаголовок.Параметры.Заполнить(СтруктураДанныхЗаголовка);
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
Если ЗначениеЗаполнено(ВыборкаПоДокументам.ПредставлениеПартнера) Тогда
ОбластьПоставщик.Параметры.Заполнить(ВыборкаПоДокументам);
ТабличныйДокумент.Вывести(ОбластьПоставщик);
КонецЕсли;
ПараметрыШапки = Новый Структура;
ПараметрыШапки.Вставить("ПредставлениеСклада", СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоДокументам.ПредставлениеСклада,
ВыборкаПоДокументам.ПредставлениеПомещения));
ПараметрыШапки.Вставить("ТекстЗоны", ТекстЗоны);
ПараметрыШапки.Вставить("ПредставлениеЗоныПриемки", ЗонаПредставление);
ПараметрыШапки.Вставить("НомерВходящегоДокумента",СокрЛП(ВыборкаПоДокументам.НомерВходящегоДокумента));
ПараметрыШапки.Вставить("ДатаВходящегоДокумента", Формат(ВыборкаПоДокументам.ДатаВходящегоДокумента,"ДЛФ=D"));
ОбластьШапка.Параметры.Заполнить(ПараметрыШапки);
Если Не ЗначениеЗаполнено(ВыборкаПоДокументам.РаспоряжениеДата)
Или Не ЗначениеЗаполнено(ВыборкаПоДокументам.РаспоряжениеНомер) Тогда
ОбластьШапка.Параметры.ПредставлениеРаспоряжения = ВыборкаПоДокументам.РаспоряжениеПредставление;
Иначе
РеквизитыДокумента.Дата = ВыборкаПоДокументам.РаспоряжениеДата;
РеквизитыДокумента.Номер = ВыборкаПоДокументам.РаспоряжениеНомер;
РеквизитыДокумента.Префикс = ВыборкаПоДокументам.РаспоряжениеПрефикс;
РеквизитыДокумента.Представление = ВыборкаПоДокументам.РаспоряжениеПредставление;
ОбластьШапка.Параметры.ПредставлениеРаспоряжения = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьШапка);
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыНачало);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаТоваров);
ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКонец);
ВсегоНаименований = 0;
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(Новый Структура("НомерСтроки", ВсегоНаименований + 1));
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
КонецЕсли;
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
Если ВыборкаПоСтрокамТЧ.ЭтоУпаковочныйЛист Тогда
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = ВыборкаПоСтрокамТЧ.УпаковочныйЛист;
Иначе
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры,
ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики,
,
,
ДопПараметрыПредставлениеНоменклатуры);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);
ОбластьСтрокаТаблицыКонец.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
Если ВыборкаПоСтрокамТЧ.ЭтоУпаковочныйЛист Тогда
ОбластьСтрокаТаблицыКонец.Параметры.ЕдиницаИзмеренияПредставление = НСтр("ru = 'место'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКонец);
Если ВыборкаПоСтрокамТЧ.СтатусУказанияСерий <> 0 Тогда
НадписьСерии = "";
Если ВыборкаПоСтрокамТЧ.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров Тогда
Если ВыборкаПоСтрокамТЧ.ИспользоватьНомерСерии
И ВыборкаПоСтрокамТЧ.ИспользоватьСрокГодностиСерии Тогда
НадписьСерии = НСтр("ru = 'Серии (номер, годен до, количество):'", ОбщегоНазначения.КодОсновногоЯзыка());
ИначеЕсли ВыборкаПоСтрокамТЧ.ИспользоватьНомерСерии Тогда
НадписьСерии = НСтр("ru = 'Серии (номер, количество):'", ОбщегоНазначения.КодОсновногоЯзыка());
Иначе
НадписьСерии = НСтр("ru = 'Серии (годен до, количество):'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ИначеЕсли ВыборкаПоСтрокамТЧ.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
НадписьСерии = НСтр("ru = 'Серийные номера:'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ОбластьСтрокаСерийНачало.Параметры.НадписьСерии = НадписьСерии;
ТабличныйДокумент.Вывести(ОбластьСтрокаСерийНачало);
ПредставлениеСерии = "";
Если ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Серия) Тогда
ПредставлениеСерии = НСтр("ru = '%1, %2 %3'", ОбщегоНазначения.КодОсновногоЯзыка());
ПредставлениеСерии = СтрШаблон(ПредставлениеСерии,
ВыборкаПоСтрокамТЧ.ПредставлениеСерии,
ВыборкаПоСтрокамТЧ.Количество,
ВыборкаПоСтрокамТЧ.ЕдиницаИзмеренияПредставление);
КонецЕсли;
ПараметрыСерии = Новый Структура("Серия", ПредставлениеСерии);
ОбластьСтрокаСерийКолонкаСерий.Параметры.Заполнить(ПараметрыСерии);
ТабличныйДокумент.Присоединить(ОбластьСтрокаСерийКолонкаСерий);
КонецЕсли;
ВсегоНаименований = ВсегоНаименований + 1;
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаТоваров);
ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКонец);
ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%'", ОбщегоНазначения.КодОсновногоЯзыка());
ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
ОбластьПодписей.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
ОбластьПодписей.Параметры.ПредставлениеОтветственного = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный, ВыборкаПоДокументам.Дата);
ОбластьПодписей.Параметры.ПредставлениеИсполнителя = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Исполнитель, ВыборкаПоДокументам.Дата);
ТабличныйДокумент.Вывести(ОбластьПодписей);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Функция ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров(ПараметрыПечати, МассивОбъектов) Экспорт
ИспользуетсяМаркируемаяПродукция = ПриходныйОрдерНаТоварыЛокализация.ИспользуетсяМаркируемаяПродукция();
УчитыватьУпаковки = Не ПараметрыПечати.Свойство("БезДопКолонки");
ТекстЗапроса = ТекстЗапросаТоварыЗаданияОтборРазмещениеТоваров(УчитыватьУпаковки)
+ ОбщегоНазначения.РазделительПакетаЗапросов() +
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| МИНИМУМ(ТаблицаТовары.НомерСтроки) КАК НомерСтроки,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия
| КОНЕЦ КАК Серия,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ КАК Упаковка,
| СУММА(ТаблицаТовары.Количество) КАК Количество,
| СУММА(ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ТаблицаТовары.Количество
| ИНАЧЕ ТаблицаТовары.КоличествоУпаковок
| КОНЕЦ) КАК КоличествоУпаковок,
| ТаблицаТовары.МаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТаблицаТоваровСуммированная
|ИЗ
| ТоварыЗадания КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| ТаблицаТовары.Склад,
| ТаблицаТовары.Помещение,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ТОГДА ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Серия
| КОНЕЦ,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| ИЛИ ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ,
| ТаблицаТовары.МаркируемаяПродукция
|;
|
|
|ВЫБРАТЬ
| ДанныеЗадания.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Ссылка) КАК СсылкаПредставление,
| ДанныеЗадания.Номер КАК Номер,
| ДанныеЗадания.Дата КАК Дата,
| ДанныеЗадания.Склад КАК Склад,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Склад) КАК СкладПредставление,
| ПРЕДСТАВЛЕНИЕ(ДанныеЗадания.Помещение) КАК ПомещениеПредставление,
| ЛОЖЬ КАК ЭтоНакладная,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ДанныеЗадания.Помещение.ИспользоватьАдресноеХранение
| И ДанныеЗадания.Дата >= ДанныеЗадания.Помещение.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьАдресноеХранение
| И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользуетсяАдресноеХранение,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ДанныеЗадания.Помещение.ИспользоватьАдресноеХранениеСправочно
| И (НЕ ДанныеЗадания.Помещение.ИспользоватьАдресноеХранение
| ИЛИ ДанныеЗадания.Дата < ДанныеЗадания.Помещение.ДатаНачалаАдресногоХраненияОстатков)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьАдресноеХранениеСправочно
| И (НЕ ДанныеЗадания.Склад.ИспользоватьАдресноеХранение
| ИЛИ ДанныеЗадания.Дата < ДанныеЗадания.Склад.ДатаНачалаАдресногоХраненияОстатков)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользуетсяСправочноеХранение,
| ВЫБОР
| КОГДА ДанныеЗадания.Склад.ИспользоватьСкладскиеПомещения
| И ДанныеЗадания.Дата >= ДанныеЗадания.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ДанныеЗадания.Помещение.ИспользованиеРабочихУчастков
| ИНАЧЕ ДанныеЗадания.Склад.ИспользованиеРабочихУчастков
| КОНЕЦ КАК ИспользованиеРабочихУчастков,
| ЛОЖЬ КАК ИспользуетсяОрдернаяСхема
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ДанныеЗадания
|
|ГДЕ
| ДанныеЗадания.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Склад КАК Склад,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию) КАК РабочийУчасток,
| ПРЕДСТАВЛЕНИЕ(ОсновныеЯчейки.Ячейка.РабочийУчасток) КАК ПредставлениеРабочегоУчастка,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.ПорядокОбхода, 0) КАК ПорядокОбхода,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка, &ЯчейкаПоУмолчанию) КАК ОсновнаяЯчейка,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.Код, """") КАК ОсновнаяЯчейкаПредставление,
| ЕСТЬNULL(ОстальныеЯчейки.Ячейка.ПорядокОбхода, 0) КАК ПорядокОбходаДополнительнаяЯчейка,
| ЕСТЬNULL(ОстальныеЯчейки.Ячейка.Код, """") КАК ЯчейкаПредставление,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура.Код КАК Код,
| ТаблицаТоваров.Номенклатура.Артикул КАК Артикул,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики,
| Товары.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Упаковка) КАК ПредставлениеЕдиницыИзмеренияУпаковки,
| ПРЕДСТАВЛЕНИЕ(Товары.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ТаблицаТоваров.Количество КАК Количество,
| ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок,
| ТаблицаТоваров.МаркируемаяПродукция КАК МаркируемаяПродукция
|ИЗ
| ТаблицаТоваровСуммированная КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
| ПО ТаблицаТоваров.Номенклатура = Товары.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО ТаблицаТоваров.Упаковка = Упаковки.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
| И ОсновныеЯчейки.ОсновнаяЯчейка
| И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
| И ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
| ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОстальныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОстальныеЯчейки.Номенклатура
| И НЕ ОстальныеЯчейки.ОсновнаяЯчейка
| И ТаблицаТоваров.Склад = ОстальныеЯчейки.Склад
| И ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОстальныеЯчейки.Помещение
| ИНАЧЕ ОстальныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад,
| РабочийУчасток,
| НомерСтроки,
| Номенклатура,
| Характеристика,
| Серия
|
|ИТОГИ ПО
| Ссылка,
| Склад,
| РабочийУчасток
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Склад КАК Склад,
| ЕСТЬNULL(ОсновныеЯчейки.Ячейка.РабочийУчасток, &РабочийУчастокПоУмолчанию) КАК РабочийУчасток,
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии,
| ТаблицаТоваров.МаркируемаяПродукция КАК МаркируемаяПродукция
|ИЗ
| ТоварыЗадания КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК ОсновныеЯчейки
| ПО ТаблицаТоваров.Номенклатура = ОсновныеЯчейки.Номенклатура
| И ОсновныеЯчейки.ОсновнаяЯчейка
| И ТаблицаТоваров.Склад = ОсновныеЯчейки.Склад
| И ВЫБОР
| КОГДА ТаблицаТоваров.Склад.ИспользоватьСкладскиеПомещения
| И ТаблицаТоваров.Ссылка.Дата >= ТаблицаТоваров.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ТаблицаТоваров.Помещение = ОсновныеЯчейки.Помещение
| ИНАЧЕ ОсновныеЯчейки.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| КОНЕЦ
|
|ГДЕ
| ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = &НастройкаИспользованияСерий
| И ТаблицаТоваров.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| Склад,
| РабочийУчасток,
| НомерСтроки,
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ТоварыЗадания.Ссылка,
| МАКСИМУМ(ТоварыЗадания.МаркируемаяПродукция) КАК ЕстьМаркируемаяПродукция
|ИЗ
| ТоварыЗадания КАК ТоварыЗадания
|СГРУППИРОВАТЬ ПО
| ТоварыЗадания.Ссылка";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&НастройкаИспользованияСерий",
"ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&РабочийУчастокПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.РабочиеУчастки.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ЯчейкаПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка)");
Если ИспользуетсяМаркируемаяПродукция Тогда
ОпределениеМаркируемаяПродукция = ПриходныйОрдерНаТоварыЛокализация.ОпределениеПризнакаМаркируемаяПродукцияТекстаЗапроса("ТоварыДокумента.Номенклатура");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпределениеПризнакаМаркируемаяПродукция", ОпределениеМаркируемаяПродукция);
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпределениеПризнакаМаркируемаяПродукция", "ЛОЖЬ");
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
МаксимальныйИндекс = Результат.ВГраница();
ДанныеЗадания = Новый Структура;
ДанныеЗадания.Вставить("РезультатПоОшибкам", Неопределено);
ДанныеЗадания.Вставить("РезультатПоРаспоряжениям", Неопределено);
ДанныеЗадания.Вставить("РезультатПоШапке", Результат[МаксимальныйИндекс - 3]);
ДанныеЗадания.Вставить("РезультатПоТабличнойЧасти", Результат[МаксимальныйИндекс - 2]);
ДанныеЗадания.Вставить("РезультатПоУпаковкам", Неопределено);
ДанныеЗадания.Вставить("РезультатПоСериям", Результат[МаксимальныйИндекс - 1]);
ДанныеЗадания.Вставить("РезультатПоМаркам", Результат[МаксимальныйИндекс]);
Возврат ДанныеЗадания;
КонецФункции
Функция ТекстЗапросаТоварыЗаданияОтборРазмещениеТоваров(УчитыватьУпаковки)
Если УчитыватьУпаковки Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Серия КАК Серия,
| ТоварыДокумента.Упаковка КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТоварыЗадания
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК ДанныеДокумента
| ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
|
|ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
| И НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Серия,
| ТоварыДокумента.Упаковка,
| &ОпределениеПризнакаМаркируемаяПродукция";
Иначе
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Серия КАК Серия,
| &УпаковкаПоУмолчанию КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ПОМЕСТИТЬ ТоварыЗадания
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК ДанныеДокумента
| ПО ТоварыДокумента.Ссылка = ДанныеДокумента.Ссылка
|
|ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
| И НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
| И ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Серия,
| &УпаковкаПоУмолчанию
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.Помещение КАК Помещение,
| МИНИМУМ(ТоварыДокумента.НомерСтроки) КАК НомерСтроки,
| ТоварыБезУпаковок.Номенклатура КАК Номенклатура,
| ТоварыБезУпаковок.Характеристика КАК Характеристика,
| ТоварыБезУпаковок.Серия КАК Серия,
| &УпаковкаПоУмолчанию КАК Упаковка,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.Количество) КАК КоличествоУпаковок,
| &ОпределениеПризнакаМаркируемаяПродукция КАК МаркируемаяПродукция
|ИЗ
| (ВЫБРАТЬ
| ТоварыДокумента.Ссылка КАК Ссылка,
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ТоварыДокумента.Серия КАК Серия,
| МАКСИМУМ(ТоварыДокумента.Упаковка) КАК Упаковка
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТоварыДокумента
|
| ГДЕ
| ТоварыДокумента.Ссылка В(&МассивОбъектов)
| И НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
| И ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
| СГРУППИРОВАТЬ ПО
| ТоварыДокумента.Ссылка,
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Назначение,
| ТоварыДокумента.Серия
|
| ) КАК ТоварыБезУпаковок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары.Товары КАК ТоварыДокумента
| ПО ТоварыБезУпаковок.Ссылка = ТоварыДокумента.Ссылка
| И ТоварыБезУпаковок.Номенклатура = ТоварыДокумента.Номенклатура
| И ТоварыБезУпаковок.Характеристика = ТоварыДокумента.Характеристика
| И ТоварыБезУпаковок.Назначение = ТоварыДокумента.Назначение
| И ТоварыБезУпаковок.Серия = ТоварыДокумента.Серия
| И ТоварыБезУпаковок.Упаковка = ТоварыДокумента.Упаковка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК ДанныеДокумента
| ПО ТоварыБезУпаковок.Ссылка = ДанныеДокумента.Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Склад,
| ДанныеДокумента.Помещение,
| ТоварыБезУпаковок.Номенклатура,
| ТоварыБезУпаковок.Характеристика,
| ТоварыБезУпаковок.Серия,
| &УпаковкаПоУмолчанию,
| &ОпределениеПризнакаМаркируемаяПродукция";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&УпаковкаПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)");
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ДанныеДляПечатиЭтикеток(МассивДокументов) Экспорт
УстановитьПривилегированныйРежим(Истина);
ДатаЦенообразования = ОбщегоНазначенияУТ.ПолучитьМаксимальнуюДатуДокументов(МассивДокументов);
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ДатаЦенообразования);
Запрос = Новый Запрос;
Если ИспользуетсяЦенообразование25 Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ПриходныйОрдерНаТоварыТовары.Номенклатура КАК Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика КАК Характеристика,
| ПриходныйОрдерНаТоварыТовары.Серия КАК Серия,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.УпаковкаЦО
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ КАК Упаковка,
| МИНИМУМ(ПриходныйОрдерНаТоварыТовары.НомерСтроки) КАК Порядок,
| СУММА(ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок * (ЕСТЬNULL(&Коэффициент1, 1) / ЕСТЬNULL(&Коэффициент2, 1))
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок
| КОНЕЦ) КАК Количество
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры25.СрезПоследних КАК ЦеныНоменклатуры
| ПО (ЦеныНоменклатуры.Номенклатура = ПриходныйОрдерНаТоварыТовары.Номенклатура)
| И (ЦеныНоменклатуры.ХарактеристикаЦО = ПриходныйОрдерНаТоварыТовары.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования)
| И (ЦеныНоменклатуры.ВидЦены = ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.РозничныйВидЦены)
|ГДЕ
| ПриходныйОрдерНаТоварыТовары.Ссылка В(&МассивДокументов)
| И НЕ ПриходныйОрдерНаТоварыТовары.ЭтоУпаковочныйЛист
|
|СГРУППИРОВАТЬ ПО
| ПриходныйОрдерНаТоварыТовары.Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика,
| ПриходныйОрдерНаТоварыТовары.Серия,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.УпаковкаЦО
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеквизитыРаспряжения.Организация КАК Организация,
| ПриходныйОрдерНаТовары.Склад КАК Склад,
| ПриходныйОрдерНаТовары.Склад.РозничныйВидЦены КАК ВидЦены
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеквизитыРаспряжения
| ПО (НЕ РеквизитыРаспряжения.ДополнительнаяЗапись
| И ПриходныйОрдерНаТовары.Распоряжение = РеквизитыРаспряжения.Ссылка)
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка В(&МассивДокументов)";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| ПриходныйОрдерНаТоварыТовары.Номенклатура КАК Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ КАК Упаковка,
| МИНИМУМ(ПриходныйОрдерНаТоварыТовары.НомерСтроки) КАК Порядок,
| СУММА(ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок * (ЕСТЬNULL(&Коэффициент1, 1) / ЕСТЬNULL(&Коэффициент2, 1))
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок
| КОНЕЦ) КАК Количество
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатуры
| ПО (ЦеныНоменклатуры.Номенклатура = ПриходныйОрдерНаТоварыТовары.Номенклатура)
| И (ЦеныНоменклатуры.Характеристика = ПриходныйОрдерНаТоварыТовары.Характеристика)
| И (ЦеныНоменклатуры.ВидЦены = ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.РозничныйВидЦены)
|ГДЕ
| ПриходныйОрдерНаТоварыТовары.Ссылка В(&МассивДокументов)
| И НЕ ПриходныйОрдерНаТоварыТовары.ЭтоУпаковочныйЛист
|
|СГРУППИРОВАТЬ ПО
| ПриходныйОрдерНаТоварыТовары.Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика,
| ВЫБОР
| КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеквизитыРаспряжения.Организация КАК Организация,
| ПриходныйОрдерНаТовары.Склад КАК Склад,
| ПриходныйОрдерНаТовары.Склад.РозничныйВидЦены КАК ВидЦены
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеквизитыРаспряжения
| ПО (НЕ РеквизитыРаспряжения.ДополнительнаяЗапись
| И ПриходныйОрдерНаТовары.Распоряжение = РеквизитыРаспряжения.Ссылка)
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка В(&МассивДокументов)";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Коэффициент1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ПриходныйОрдерНаТоварыТовары.Упаковка",
"ПриходныйОрдерНаТоварыТовары.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Коэффициент2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатуры.Упаковка",
"ЦеныНоменклатуры.Номенклатура"));
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
МассивРезультатов = Запрос.ВыполнитьПакет();
ТаблицаРеквизитыДокументов = МассивРезультатов[1].Выгрузить();
МассивОрганизаций = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "Организация");
МассивСкладов = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "Склад");
МассивВидовЦен = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "ВидЦены");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", ?(МассивОрганизаций.Количество() = 1, МассивОрганизаций[0], Неопределено));
СтруктураДействий.Вставить("ЗаполнитьСклад", ?(МассивСкладов.Количество() = 1, МассивСкладов[0], МассивСкладов));
СтруктураДействий.Вставить("ЗаполнитьВидЦены", ?(МассивВидовЦен.Количество() = 1, МассивВидовЦен[0], Неопределено));
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Истина);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЭтикеток");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЭтикетокПоДокументу");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", МассивРезультатов[0].Выгрузить());
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
СтруктураРезультат.Вставить("Дата", ДатаЦенообразования);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
Функция ДанныеДляПечатиЦенников(МассивДокументов) Экспорт
УстановитьПривилегированныйРежим(Истина);
ДатаЦенообразования = ОбщегоНазначенияУТ.ПолучитьМаксимальнуюДатуДокументов(МассивДокументов);
ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(ДатаЦенообразования);
Запрос = Новый Запрос;
Если ИспользуетсяЦенообразование25 Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ПриходныйОрдерНаТоварыТовары.Номенклатура КАК Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика КАК Характеристика,
| ПриходныйОрдерНаТоварыТовары.Серия КАК Серия,
|
| ВЫБОР КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин) ТОГДА
| ЦеныНоменклатуры.УпаковкаЦО
| ИНАЧЕ
| ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ КАК Упаковка,
|
| МИНИМУМ(ПриходныйОрдерНаТоварыТовары.НомерСтроки) КАК Порядок,
| СУММА(
| ВЫБОР КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин) ТОГДА
| ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок * (ЕСТЬNULL(&Коэффициент1, 1) / ЕСТЬNULL(&Коэффициент2, 1))
| ИНАЧЕ
| ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок
| КОНЕЦ) КАК Количество
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры25.СрезПоследних КАК ЦеныНоменклатуры
| ПО ЦеныНоменклатуры.Номенклатура = ПриходныйОрдерНаТоварыТовары.Номенклатура
| И ЦеныНоменклатуры.ХарактеристикаЦО = ПриходныйОрдерНаТоварыТовары.Характеристика
| И ЦеныНоменклатуры.ВидЦены = ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.РозничныйВидЦены
|
|ГДЕ
| ПриходныйОрдерНаТоварыТовары.Ссылка В(&МассивДокументов)
| И (НЕ ПриходныйОрдерНаТоварыТовары.ЭтоУпаковочныйЛист)
|
|СГРУППИРОВАТЬ ПО
| ПриходныйОрдерНаТоварыТовары.Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика,
| ПриходныйОрдерНаТоварыТовары.Серия,
| ВЫБОР КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин) ТОГДА
| ЦеныНоменклатуры.УпаковкаЦО
| ИНАЧЕ
| ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеквизитыРаспряжения.Организация КАК Организация,
| ПриходныйОрдерНаТовары.Склад КАК Склад,
| ПриходныйОрдерНаТовары.Склад.РозничныйВидЦены КАК ВидЦены
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеквизитыРаспряжения
| ПО (НЕ РеквизитыРаспряжения.ДополнительнаяЗапись
| И ПриходныйОрдерНаТовары.Распоряжение = РеквизитыРаспряжения.Ссылка)
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка В(&МассивДокументов)";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| ПриходныйОрдерНаТоварыТовары.Номенклатура КАК Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика КАК Характеристика,
|
| ВЫБОР КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин) ТОГДА
| ЦеныНоменклатуры.Упаковка
| ИНАЧЕ
| ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ КАК Упаковка,
|
| МИНИМУМ(ПриходныйОрдерНаТоварыТовары.НомерСтроки) КАК Порядок,
| СУММА(
| ВЫБОР КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин) ТОГДА
| ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок * (ЕСТЬNULL(&Коэффициент1, 1) / ЕСТЬNULL(&Коэффициент2, 1))
| ИНАЧЕ
| ПриходныйОрдерНаТоварыТовары.КоличествоУпаковок
| КОНЕЦ) КАК Количество
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатуры
| ПО ЦеныНоменклатуры.Номенклатура = ПриходныйОрдерНаТоварыТовары.Номенклатура
| И ЦеныНоменклатуры.Характеристика = ПриходныйОрдерНаТоварыТовары.Характеристика
| И ЦеныНоменклатуры.ВидЦены = ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.РозничныйВидЦены
|
|ГДЕ
| ПриходныйОрдерНаТоварыТовары.Ссылка В(&МассивДокументов)
| И (НЕ ПриходныйОрдерНаТоварыТовары.ЭтоУпаковочныйЛист)
|
|СГРУППИРОВАТЬ ПО
| ПриходныйОрдерНаТоварыТовары.Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Характеристика,
| ВЫБОР КОГДА ПриходныйОрдерНаТоварыТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин) ТОГДА
| ЦеныНоменклатуры.Упаковка
| ИНАЧЕ
| ПриходныйОрдерНаТоварыТовары.Упаковка
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеквизитыРаспряжения.Организация КАК Организация,
| ПриходныйОрдерНаТовары.Склад КАК Склад,
| ПриходныйОрдерНаТовары.Склад.РозничныйВидЦены КАК ВидЦены
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеестрДокументов КАК РеквизитыРаспряжения
| ПО (НЕ РеквизитыРаспряжения.ДополнительнаяЗапись
| И ПриходныйОрдерНаТовары.Распоряжение = РеквизитыРаспряжения.Ссылка)
|ГДЕ
| ПриходныйОрдерНаТовары.Ссылка В(&МассивДокументов)";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Коэффициент1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ПриходныйОрдерНаТоварыТовары.Упаковка",
"ПриходныйОрдерНаТоварыТовары.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Коэффициент2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатуры.Упаковка",
"ЦеныНоменклатуры.Номенклатура"));
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
МассивРезультатов = Запрос.ВыполнитьПакет();
ТаблицаРеквизитыДокументов = МассивРезультатов[1].Выгрузить();
МассивОрганизаций = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "Организация");
МассивСкладов = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "Склад");
МассивВидовЦен = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "ВидЦены");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", ?(МассивОрганизаций.Количество() = 1, МассивОрганизаций[0], Неопределено));
СтруктураДействий.Вставить("ЗаполнитьСклад", ?(МассивСкладов.Количество() = 1, МассивСкладов[0], МассивСкладов));
СтруктураДействий.Вставить("ЗаполнитьВидЦены", ?(МассивВидовЦен.Количество() = 1, МассивВидовЦен[0], Неопределено));
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Истина);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЦенников");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЦенниковПоДокументу");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", МассивРезультатов[0].Выгрузить());
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
СтруктураРезультат.Вставить("Дата", ДатаЦенообразования);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
#КонецОбласти
#Область Прочее
Функция ОрдерныеСклады(Объект) Экспорт
ДатаОрдера = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДатаСеанса());
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаОрдера", ДатаОрдера);
МассивСкладов = Новый Массив;
МетаданныеРаспоряжение = Объект.Распоряжение.Метаданные();
ТипРаспоряжения = МетаданныеРаспоряжение.Имя;
Если ТипРаспоряжения = "СоглашенияСПоставщиками" Тогда
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("Склад", "Склад");
СтруктураРеквизитов.Вставить("ЭтоГруппа", "Склад.ЭтоГруппа");
СтруктураРеквизитов.Вставить("ИспользоватьОрдернуюСхемуПриПоступлении",
"Склад.ИспользоватьОрдернуюСхемуПриПоступлении");
СтруктураРеквизитов.Вставить("ДатаНачалаОрдернойСхемыПриПоступлении",
"Склад.ДатаНачалаОрдернойСхемыПриПоступлении");
РеквизитыСклада = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Распоряжение, СтруктураРеквизитов);
Если ЗначениеЗаполнено(РеквизитыСклада.Склад) Тогда
Если РеквизитыСклада.ЭтоГруппа Тогда
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.Ссылка В ИЕРАРХИИ(&ГруппаСкладов)
| И Склады.ИспользоватьОрдернуюСхемуПриПоступлении
| И &ДатаОрдера >= Склады.ДатаНачалаОрдернойСхемыПриПоступлении
| И (НЕ Склады.ПометкаУдаления)
| И (НЕ Склады.ЭтоГруппа)";
Запрос.УстановитьПараметр("ГруппаСкладов", РеквизитыСклада.Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивСкладов.Добавить(Выборка.Склад);
КонецЦикла;
ИначеЕсли РеквизитыСклада.ИспользоватьОрдернуюСхемуПриПоступлении
И ДатаОрдера >= РеквизитыСклада.ДатаНачалаОрдернойСхемыПриПоступлении Тогда
МассивСкладов.Добавить(РеквизитыСклада.Склад);
КонецЕсли;
Иначе
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.ИспользоватьОрдернуюСхемуПриПоступлении
| И &ДатаОрдера >= Склады.ДатаНачалаОрдернойСхемыПриПоступлении
| И (НЕ Склады.ПометкаУдаления)
| И (НЕ Склады.ЭтоГруппа)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивСкладов.Добавить(Выборка.Склад);
КонецЦикла;
КонецЕсли;
Иначе
Запрос.УстановитьПараметр("Ссылка", Объект.Распоряжение);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ТоварыКПоступлению.Склад
|ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
|ГДЕ
| ТоварыКПоступлению.ДокументПоступления = &Ссылка";
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Пока Выборка.Следующий() Цикл
МассивСкладов.Добавить(Выборка.Склад);
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Склад)
И МассивСкладов.Найти(Объект.Склад) = Неопределено Тогда
МассивСкладов.Добавить(Объект.Склад);
КонецЕсли;
Возврат МассивСкладов;
КонецФункции
Функция ЗаполнитьСерииПоРаспоряжению(Объект, ВыдаватьОшибки) Экспорт
Если Не ВозможноЗаполнениеСерийПоРаспоряжению(Объект, ВыдаватьОшибки) Тогда
Возврат Ложь;
КонецЕсли;
Если Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПоПеремещению Тогда
Серии = ТаблицаСерийПоОтгрузкеПриПеремещении(Объект);
ИначеЕсли Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПродукцииИзПроизводства Тогда
Серии = ТаблицаСерийВыпущеннойПродукции(Объект);
ИначеЕсли Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПоПрочемуОприходованию Тогда
Серии = ТаблицаСерийПриПриемкеПоПрочемуОприходованию(Объект);
Иначе
Серии = ТаблицаФинансовыхСерийИзРаспоряжения(Объект);
КонецЕсли;
Если Серии.Количество() = 0 Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'По распоряжению нет серий, которые можно перенести в ордер.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ПриходныйОрдерНаТовары);
НоменклатураСервер.ДополнитьТаблицуКолонкамиПоПолямПараметровУказанияСерий(ПараметрыУказанияСерий, Серии,, Истина);
Действия = Новый Структура;
Действия.Вставить("ОбновлятьКоличествоТоваровПриРегистрацииСерий", Истина);
Если ПараметрыУказанияСерий.ПоляСвязи.Найти("Упаковка") <> Неопределено Тогда
Действия.Вставить("ПересчитатьКоличествоЕдиниц");
Иначе
Действия.Вставить("ПересчитатьКоличествоУпаковок");
КонецЕсли;
НоменклатураСервер.ЗаполнитьСерииВТЧПоТаблицеСерий(Объект,
ПараметрыУказанияСерий,
Серии,
Действия);
Возврат Истина;
КонецФункции
Функция ВозможноЗаполнениеСерийПоРаспоряжению(Объект, ВыдаватьОшибки) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад",Новый Структура("Склад",Объект.Склад)) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе не ведется учет серий.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если СкладыСервер.ИспользоватьСкладскиеПомещения(Объект.Склад,Объект.Дата)
И Не ЗначениеЗаполнено(Объект.Помещение) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'Не заполнено поле ""Помещение""'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,"Помещение","Объект");
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПоПеремещению Тогда
СкладОтправитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Распоряжение,"СкладОтправитель");
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад",Новый Структура("Склад",СкладОтправитель)) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе-отправителе не ведется учет по сериям'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(СкладОтправитель,Объект.Дата) Тогда
Если СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата)
И Не СкладыСервер.ИспользоватьАдресноеХранение(СкладОтправитель, Справочники.СкладскиеПомещения.ПустаяСсылка(),Объект.Дата)
И Не СкладыСервер.ИспользоватьСкладскиеПомещения(СкладОтправитель,Объект.Дата) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе ""%Склад%"" ведется учет остатков в разрезе складских ячеек, поэтому серии нужно указывать в разрезе упаковок. На складе-отправителе учет в разрезе складских ячеек не ведется, поэтому серии учитываются без разреза упаковок. Заполнить серии по данным отгрузки нельзя.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Склад%", СкладыСервер.ПолучитьПредставлениеСклада(Объект.Склад, Объект.Помещение));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если СкладыСервер.ИспользоватьСкладскиеПомещения(СкладОтправитель,Объект.Дата)
И СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТоварыПоРаспоряжениям.Ссылка
|ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
|ГДЕ
| ТоварыПоРаспоряжениям.Распоряжение = &Распоряжение
| И ТоварыПоРаспоряжениям.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Отгружен)
| И ТоварыПоРаспоряжениям.Ссылка.Проведен
| И (НЕ (ТоварыПоРаспоряжениям.Ссылка.Помещение.ИспользоватьАдресноеХранение)
| ИЛИ ТоварыПоРаспоряжениям.Ссылка.Дата < ТоварыПоРаспоряжениям.Ссылка.Помещение.ДатаНачалаАдресногоХраненияОстатков)";
Запрос.УстановитьПараметр("Распоряжение", Объект.Распоряжение);
Если Не Запрос.Выполнить().Пустой() Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе ""%Склад%"" ведется учет остатков в разрезе складских ячеек, поэтому серии нужно указывать в разрезе упаковок. Отгрузка производилась из помещений склада-отправителя, на которых учет в разрезе складския ячеек не ведется, поэтому серии учитываются без разреза упаковок. Заполнить серии по данным отгрузки нельзя.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Склад%", СкладыСервер.ПолучитьПредставлениеСклада(Объект.Склад, Объект.Помещение));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Иначе
Если СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе ""%Склад%"" ведется учет остатков в разрезе складских ячеек, поэтому серии нужно указывать в разрезе упаковок. На складе-отправителе учет в разрезе складских ячеек не ведется, поэтому серии учитываются без разреза упаковок. Заполнить серии по данным отгрузки нельзя.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Склад%", СкладыСервер.ПолучитьПредставлениеСклада(Объект.Склад, Объект.Помещение));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ИначеЕсли Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ПриемкаПродукцииИзПроизводства Тогда
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыПроизводство")
И Не ПолучитьФункциональнуюОпцию("УчитыватьСебестоимостьПоСериямСклад", Новый Структура("Склад", Объект.Склад))
Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На настроено указание серий в производственных документах.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата)
И Объект.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПередачаПродукцииИзПроизводства Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе ""%Склад%"" ведется учет остатков в разрезе складских ячеек, поэтому серии нужно указывать в разрезе упаковок. В производстве серии заполняются без учета упаковок. Заполнить серии по данным выпуска продукции нельзя.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Склад%", СкладыСервер.ПолучитьПредставлениеСклада(Объект.Склад, Объект.Помещение));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
ИначеЕсли Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваров
Или Объект.СкладскаяОперация = Перечисления.СкладскиеОперации.ВозвратНепринятыхТоваровУстарел Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'В операциях при приемке по возврату непринятых получателем товаров заполнение серий по распоряжению не поддерживается.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
Иначе
Если Не ПолучитьФункциональнуюОпцию("УчитыватьСебестоимостьПоСериямСклад", Новый Структура("Склад",Объект.Склад)) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'В распоряжении могут быть указаны только серии, по которым учитывается себестоимость, но складе не настроено использование таких серий.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата) Тогда
Если ВыдаватьОшибки Тогда
ТекстСообщения = НСтр("ru = 'На складе ""%Склад%"" ведется учет остатков в разрезе складских ячеек. Серии могут быть заполнены по распоряжению только при перемещении товаров с адресного склада. По другим типам распоряжений заполнение серий на этом складе не поддерживается.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Склад%", СкладыСервер.ПолучитьПредставлениеСклада(Объект.Склад, Объект.Помещение));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
Функция ТаблицаСерийПоОтгрузкеПриПеремещении(Объект)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.Назначение) КАК Назначение
|ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
|ГДЕ
| ТоварыКПоступлению.ДокументПоступления = &Распоряжение
| И ТоварыКПоступлению.КОформлениюОрдеров > 0
| И ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|
|СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Номенклатура
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыКПоступлению.Назначение) > 1";
Запрос.УстановитьПараметр("Распоряжение", Объект.Распоряжение);
ОдноНазначениеПоТовару = Запрос.Выполнить().Пустой();
СкладОтправитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Распоряжение, "СкладОтправитель");
УстановитьПривилегированныйРежим(Истина);
Если ОдноНазначениеПоТовару
И СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(СкладОтправитель, Объект.Дата) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА &ИспользоватьАдресноеХранение
| ТОГДА ВЫРАЗИТЬ(ТоварыДокумента.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| ТоварыДокумента.Количество КАК Количество,
| ВЫБОР
| КОГДА &ИспользоватьАдресноеХранение
| ТОГДА ТоварыДокумента.КоличествоУпаковок
| ИНАЧЕ ТоварыДокумента.Количество
| КОНЕЦ КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТоварыОрдераДляЗапроса
|ИЗ
| &ТаблицаТовары КАК ТоварыДокумента
|ГДЕ
| НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ОтгружаемыеТовары.Характеристика КАК Характеристика,
| ОтгружаемыеТовары.Серия КАК Серия,
| СУММА(ОтгружаемыеТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ОтгружаемыеТовары
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК ОтгружаемыеТовары
|ГДЕ
| ОтгружаемыеТовары.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыПоРаспоряжениям.Ссылка КАК Ссылка
| ИЗ
| Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК ТоварыПоРаспоряжениям
| ГДЕ
| ТоварыПоРаспоряжениям.Ссылка.Проведен
| И ТоварыПоРаспоряжениям.Распоряжение В(&Распоряжение)
| И ТоварыПоРаспоряжениям.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.Отгружен))
| И НЕ ОтгружаемыеТовары.ЭтоУпаковочныйЛист
| И ОтгружаемыеТовары.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСоСтрокамиОрдеровНаОтгрузку.Отгрузить)
|
|СГРУППИРОВАТЬ ПО
| ОтгружаемыеТовары.Номенклатура,
| ОтгружаемыеТовары.Характеристика,
| ОтгружаемыеТовары.Серия
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Серия
|;
|
|
|ВЫБРАТЬ
| ТоварыОрдера.Номенклатура КАК Номенклатура,
| ТоварыОрдера.Характеристика КАК Характеристика,
| ТоварыОрдера.Серия КАК Серия,
| СУММА(ТоварыОрдера.Количество) КАК Количество
|ПОМЕСТИТЬ ОприходованныеТовары
|ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТоварыОрдера
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтгружаемыеТовары КАК ОтгружаемыеТовары
| ПО ТоварыОрдера.Номенклатура = ОтгружаемыеТовары.Номенклатура
| И ТоварыОрдера.Характеристика = ОтгружаемыеТовары.Характеристика
|ГДЕ
| ТоварыОрдера.Ссылка.Проведен
| И ТоварыОрдера.Ссылка <> &ТекущийПриходныйОрдер
| И ТоварыОрдера.Ссылка.Распоряжение В(&Распоряжение)
| И ТоварыОрдера.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
|СГРУППИРОВАТЬ ПО
| ТоварыОрдера.Номенклатура,
| ТоварыОрдера.Характеристика,
| ТоварыОрдера.Серия
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Серия
|;
|
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Серия КАК Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество
|ПОМЕСТИТЬ ОтгружаемыеТоварыССериями
|ИЗ
| (ВЫБРАТЬ
| ОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ОтгружаемыеТовары.Характеристика КАК Характеристика,
| ОтгружаемыеТовары.Серия КАК Серия,
| ОтгружаемыеТовары.Количество КАК Количество
| ИЗ
| ОтгружаемыеТовары КАК ОтгружаемыеТовары
| ГДЕ
| ОтгружаемыеТовары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыОрдера.Номенклатура КАК Номенклатура,
| ТоварыОрдера.Характеристика КАК Характеристика,
| ТоварыОрдера.Серия КАК Серия,
| -ТоварыОрдера.Количество КАК Количество
| ИЗ
| ОприходованныеТовары КАК ТоварыОрдера
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтгружаемыеТовары КАК ОтгружаемыеТовары
| ПО ТоварыОрдера.Номенклатура = ОтгружаемыеТовары.Номенклатура
| И ТоварыОрдера.Характеристика = ОтгружаемыеТовары.Характеристика
| И ТоварыОрдера.Серия = ОтгружаемыеТовары.Серия
|
| ) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Серия
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Назначение КАК Назначение
|ПОМЕСТИТЬ НазначенияТоваров
|ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
|ГДЕ
| ТоварыКПоступлению.КОформлениюОрдеров > 0
| И ТоварыКПоступлению.ДокументПоступления В(&Распоряжение)
| И ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Серия КАК Серия,
| СУММА(ТоварыКПоступлению.Количество) КАК Количество
|ПОМЕСТИТЬ ТоварыКПоступлениюССериями
|ИЗ
| (ВЫБРАТЬ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Серия КАК Серия,
| -ТоварыКПоступлению.КОформлениюПоступленийПоОрдерамОстаток КАК Количество
| ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| &ДатаОстатков,
| Склад = &Склад
| И Отправитель = &Отправитель
| И Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ДокументПоступления В(&Распоряжение)
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ОтгружаемыеТовары.Характеристика КАК Характеристика
| ИЗ
| ОтгружаемыеТовары КАК ОтгружаемыеТовары
| ГДЕ
| ОтгружаемыеТовары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка))
| ) КАК ТоварыКПоступлению
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Серия КАК Серия,
| ВЫБОР
| КОГДА ТоварыКПоступлению.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА ТоварыКПоступлению.КОформлениюПоступленийПоОрдерам
| ИНАЧЕ -ТоварыКПоступлению.КОформлениюПоступленийПоОрдерам
| КОНЕЦ КАК Количество
| ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
| ГДЕ
| ТоварыКПоступлению.Активность
| И ТоварыКПоступлению.Склад = &Склад
| И ТоварыКПоступлению.Регистратор = &ТекущийПриходныйОрдер
| И ТоварыКПоступлению.ДокументПоступления В(&Распоряжение)
| И ТоварыКПоступлению.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтгружаемыеТовары.Номенклатура КАК Номенклатура,
| ОтгружаемыеТовары.Характеристика КАК Характеристика
| ИЗ
| ОтгружаемыеТовары КАК ОтгружаемыеТовары
| ГДЕ
| ОтгружаемыеТовары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка))
|
| ) КАК ТоварыКПоступлению
|
|СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Серия
|
|ИМЕЮЩИЕ
| СУММА(ТоварыКПоступлению.Количество) > 0
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ЕСТЬNULL(НазначенияТоваров.Назначение, ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК Назначение,
| ТоварыДокумента.Упаковка КАК Упаковка,
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК КоэффициентУпаковки,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| ТоварыОрдераДляЗапроса КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ НазначенияТоваров КАК НазначенияТоваров
| ПО ТоварыДокумента.Номенклатура = НазначенияТоваров.Номенклатура
| И ТоварыДокумента.Характеристика = НазначенияТоваров.Характеристика
|
|ГДЕ
| ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|СГРУППИРОВАТЬ ПО
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ЕСТЬNULL(НазначенияТоваров.Назначение, ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)),
| ТоварыДокумента.Упаковка,
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1)
|
|УПОРЯДОЧИТЬ ПО
| КоэффициентУпаковки
|;
|
|
|ВЫБРАТЬ
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ЕСТЬNULL(НазначенияТоваров.Назначение, ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК Назначение,
| ТоварыКПоступлению.Серия КАК Серия,
| ТоварыКПоступлению.Количество КАК Количество,
| ТоварыКПоступлению.Количество КАК КоличествоУпаковок
|ИЗ
| ТоварыКПоступлениюССериями КАК ТоварыКПоступлению
| ЛЕВОЕ СОЕДИНЕНИЕ НазначенияТоваров КАК НазначенияТоваров
| ПО ТоварыКПоступлению.Номенклатура = НазначенияТоваров.Номенклатура
| И ТоварыКПоступлению.Характеристика = НазначенияТоваров.Характеристика
|;
|
|
|ВЫБРАТЬ
| ТаблицаСерии.Номенклатура КАК Номенклатура,
| ТаблицаСерии.Характеристика КАК Характеристика,
| ЕСТЬNULL(НазначенияТоваров.Назначение, ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК Назначение,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| ТаблицаСерии.Серия КАК Серия,
| ТаблицаСерии.Количество КАК Количество,
| ТаблицаСерии.Количество КАК КоличествоУпаковок
|ИЗ
| ОтгружаемыеТоварыССериями КАК ТаблицаСерии
| ЛЕВОЕ СОЕДИНЕНИЕ НазначенияТоваров КАК НазначенияТоваров
| ПО ТаблицаСерии.Номенклатура = НазначенияТоваров.Номенклатура
| И ТаблицаСерии.Характеристика = НазначенияТоваров.Характеристика";
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ТоварыДокумента.Упаковка",
"ТоварыДокумента.Номенклатура"));
Если ТипЗнч(Объект.Распоряжение) = Тип("ДокументСсылка.ПеремещениеТоваров")
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Распоряжение, "ПеремещениеПоЗаказам") Тогда
РаспоряжениеНаПеремещение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Распоряжение, "ЗаказНаПеремещение");
Если Не ЗначениеЗаполнено(РаспоряжениеНаПеремещение) Тогда
РаспоряжениеНаПеремещение = ОбщегоНазначения.ВыгрузитьКолонку(
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Распоряжение, "Товары").Выгрузить(),
"ЗаказНаПеремещение",
Истина);
КонецЕсли;
Иначе
РаспоряжениеНаПеремещение = Объект.Распоряжение;
КонецЕсли;
ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата);
Запрос.УстановитьПараметр("ТекущийПриходныйОрдер", Объект.Ссылка);
Запрос.УстановитьПараметр("Распоряжение", РаспоряжениеНаПеремещение);
Запрос.УстановитьПараметр("ДатаОстатков", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Отправитель", Объект.Отправитель);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Запрос.УстановитьПараметр("ИспользоватьАдресноеХранение", ИспользоватьАдресноеХранение);
Запрос.УстановитьПараметр("ТаблицаТовары", Объект.Товары.Выгрузить());
РезультатЗапроса = Запрос.ВыполнитьПакет();
ТоварыДокумента = РезультатЗапроса[РезультатЗапроса.ВГраница() - 2].Выгрузить();
СерииПоРаспоряжениям = РезультатЗапроса[РезультатЗапроса.ВГраница() - 1].Выгрузить();
СерииПоОтгрузке = РезультатЗапроса[РезультатЗапроса.ВГраница()].Выгрузить();
ТоварыДокумента.Индексы.Добавить("Номенклатура, Характеристика, Назначение");
Серии = СерииПоОтгрузке.СкопироватьКолонки();
ЗаполнитьТаблицуСерийПеремещения(Серии, СерииПоОтгрузке, ТоварыДокумента);
ЗаполнитьТаблицуСерийПеремещения(Серии, СерииПоРаспоряжениям, ТоварыДокумента);
Иначе
Если ТипЗнч(Объект.Распоряжение) = Тип("ДокументСсылка.ЗаказНаПеремещение") Тогда
ТекстЗапросаПоРаспоряжениям =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПеремещениеТоваров.Ссылка КАК Распоряжение
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Проведен
| И ПеремещениеТоваров.Товары.ЗаказНаПеремещение = &Распоряжение";
Иначе
ТекстЗапросаПоРаспоряжениям = "&Распоряжение";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ВЫБОР
| КОГДА &ИспользоватьАдресноеХранение
| ТОГДА ВЫРАЗИТЬ(ТоварыДокумента.Упаковка КАК Справочник.УпаковкиЕдиницыИзмерения)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| ТоварыДокумента.Количество КАК Количество,
| ВЫБОР
| КОГДА &ИспользоватьАдресноеХранение
| ТОГДА ТоварыДокумента.КоличествоУпаковок
| ИНАЧЕ ТоварыДокумента.Количество
| КОНЕЦ КАК КоличествоУпаковок
|ПОМЕСТИТЬ ТоварыОрдераДляЗапроса
|ИЗ
| &ТаблицаТовары КАК ТоварыДокумента
|ГДЕ
| НЕ ТоварыДокумента.ЭтоУпаковочныйЛист
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение
|;
|
|
|ВЫБРАТЬ
| ТоварыДокумента.Номенклатура КАК Номенклатура,
| ТоварыДокумента.Характеристика КАК Характеристика,
| ТоварыДокумента.Назначение КАК Назначение,
| ТоварыДокумента.Упаковка КАК Упаковка,
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК КоэффициентУпаковки,
| СУММА(ТоварыДокумента.Количество) КАК Количество,
| СУММА(ТоварыДокумента.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| ТоварыОрдераДляЗапроса КАК ТоварыДокумента
|
|ГДЕ
| ЕСТЬNULL(ТоварыДокумента.Упаковка.ТипУпаковки, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|СГРУППИРОВАТЬ ПО
| ТоварыДокумента.Номенклатура,
| ТоварыДокумента.Характеристика,
| ТоварыДокумента.Назначение,
| ТоварыДокумента.Упаковка,
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1)
|
|УПОРЯДОЧИТЬ ПО
| КоэффициентУпаковки
|;
|
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| ВложенныйЗапрос.Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| СУММА(ВложенныйЗапрос.КоличествоУпаковок) КАК КоличествоУпаковок
|ИЗ
| (ВЫБРАТЬ
| ПеремещениеТоваровСерии.Номенклатура КАК Номенклатура,
| ПеремещениеТоваровСерии.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ПеремещениеТоваровСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ПеремещениеТоваровСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ПеремещениеТоваровСерии.Серия КАК Серия,
| ПеремещениеТоваровСерии.Количество КАК Количество,
| ПеремещениеТоваровСерии.Количество КАК КоличествоУпаковок
| ИЗ
| Документ.ПеремещениеТоваров.Серии КАК ПеремещениеТоваровСерии
| ГДЕ
| ПеремещениеТоваровСерии.Ссылка В(&ТекстЗапросаПоРаспоряжениям)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ПеремещениеТоваровТовары.Номенклатура,
| ПеремещениеТоваровТовары.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ПеремещениеТоваровТовары.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ПеремещениеТоваровТовары.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ,
| ПеремещениеТоваровТовары.Серия,
| ПеремещениеТоваровТовары.Количество,
| ПеремещениеТоваровТовары.КоличествоУпаковок
| ИЗ
| Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
| ГДЕ
| ПеремещениеТоваровТовары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ПеремещениеТоваровТовары.Ссылка В(&ТекстЗапросаПоРаспоряжениям)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ПриходныйОрдерНаТоварыСерии.Номенклатура,
| ПриходныйОрдерНаТоварыСерии.Характеристика,
| ПриходныйОрдерНаТоварыСерии.Назначение,
| ПриходныйОрдерНаТоварыСерии.Серия,
| -ПриходныйОрдерНаТоварыСерии.Количество,
| -ПриходныйОрдерНаТоварыСерии.КоличествоУпаковок
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыСерии
| ГДЕ
| ПриходныйОрдерНаТоварыСерии.Ссылка.Распоряжение = &Распоряжение
| И ПриходныйОрдерНаТоварыСерии.Ссылка <> &ТекущийПриходныйОрдер
| И ПриходныйОрдерНаТоварыСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ПриходныйОрдерНаТоварыСерии.Ссылка.Проведен) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение,
| ВложенныйЗапрос.Серия
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаПоРаспоряжениям", ТекстЗапросаПоРаспоряжениям);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ТоварыДокумента.Упаковка",
"ТоварыДокумента.Номенклатура"));
ИспользоватьАдресноеХранение = СкладыСервер.ИспользоватьАдресноеХранение(Объект.Склад,Объект.Помещение,Объект.Дата);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ТаблицаТовары", Объект.Товары.Выгрузить());
Запрос.УстановитьПараметр("ИспользоватьАдресноеХранение", ИспользоватьАдресноеХранение);
Запрос.УстановитьПараметр("Распоряжение", Объект.Распоряжение);
Запрос.УстановитьПараметр("ТекущийПриходныйОрдер", Объект.Ссылка);
РезультатЗапроса = Запрос.ВыполнитьПакет();
ТоварыДокумента = РезультатЗапроса[РезультатЗапроса.ВГраница() - 1].Выгрузить();
СерииПоРаспоряжению = РезультатЗапроса[РезультатЗапроса.ВГраница()].Выгрузить();
ТоварыДокумента.Индексы.Добавить("Номенклатура, Характеристика, Назначение");
Серии = СерииПоРаспоряжению.СкопироватьКолонки();
ЗаполнитьТаблицуСерийПеремещения(Серии, СерииПоРаспоряжению, ТоварыДокумента);
КонецЕсли;
Возврат Серии;
КонецФункции
Функция ТаблицаСерийВыпущеннойПродукции(Объект)
Если Ложь Тогда
ИначеЕсли ТипЗнч(Объект.Распоряжение) = Тип("ДокументСсылка.ВыпускПродукции") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ВложенныйЗапрос.Серия КАК Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Назначение КАК Назначение
|ИЗ
| (ВЫБРАТЬ
| ВыходныеИзделия.Серия КАК Серия,
| ВыходныеИзделия.Количество КАК Количество,
| ВыходныеИзделия.Номенклатура КАК Номенклатура,
| ВыходныеИзделия.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВыходныеИзделия.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ВыходныеИзделия.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.ВыпускПродукции.Товары КАК ВыходныеИзделия
| ГДЕ
| ВыходныеИзделия.Ссылка = &Распоряжение
| И ВыходныеИзделия.Склад = &Склад
| И ВыходныеИзделия.Ссылка.Проведен
| И ВыходныеИзделия.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
| ИЗ
| Документ.ВыпускПродукции.Серии КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка = &Распоряжение
| И ТаблицаСерии.Склад = &Склад
| И ТаблицаСерии.Ссылка.Проведен
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| -ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ТаблицаСерии.Назначение
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка.Распоряжение = &Распоряжение
| И ТаблицаСерии.Ссылка <> &ТекущийПриходныйОрдер
| И ТаблицаСерии.Ссылка.Склад = &Склад
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ТаблицаСерии.Ссылка.Проведен) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0";
ИначеЕсли ТипЗнч(Объект.Распоряжение) = Тип("ДокументСсылка.ДвижениеПродукцииИМатериалов") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ВложенныйЗапрос.Серия КАК Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Назначение КАК Назначение
|ИЗ
| (ВЫБРАТЬ
| ВыходныеИзделия.Серия КАК Серия,
| ВыходныеИзделия.Количество КАК Количество,
| ВыходныеИзделия.Номенклатура КАК Номенклатура,
| ВыходныеИзделия.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВыходныеИзделия.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ВыходныеИзделия.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.ДвижениеПродукцииИМатериалов.Товары КАК ВыходныеИзделия
| ГДЕ
| ВыходныеИзделия.Ссылка = &Распоряжение
| И ВыходныеИзделия.Ссылка.Получатель = &Склад
| И ВыходныеИзделия.Ссылка.Проведен
| И ВыходныеИзделия.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
| ИЗ
| Документ.ДвижениеПродукцииИМатериалов.Серии КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка = &Распоряжение
| И ТаблицаСерии.Ссылка.Получатель = &Склад
| И ТаблицаСерии.Ссылка.Проведен
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| -ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ТаблицаСерии.Назначение
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка.Распоряжение = &Распоряжение
| И ТаблицаСерии.Ссылка <> &ТекущийПриходныйОрдер
| И ТаблицаСерии.Ссылка.Склад = &Склад
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ТаблицаСерии.Ссылка.Проведен) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0";
ИначеЕсли ТипЗнч(Объект.Распоряжение) = Тип("ДокументСсылка.ПроизводствоБезЗаказа") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ВложенныйЗапрос.Серия КАК Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Назначение КАК Назначение
|ИЗ
| (ВЫБРАТЬ
| ВыходныеИзделия.Серия КАК Серия,
| ВыходныеИзделия.Количество КАК Количество,
| ВыходныеИзделия.Номенклатура КАК Номенклатура,
| ВыходныеИзделия.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВыходныеИзделия.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ВыходныеИзделия.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.ПроизводствоБезЗаказа.ВыходныеИзделия КАК ВыходныеИзделия
| ГДЕ
| ВыходныеИзделия.Ссылка = &Распоряжение
| И ВыходныеИзделия.Получатель = &Склад
| И ВыходныеИзделия.Ссылка.Проведен
| И ВыходныеИзделия.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
| ИЗ
| Документ.ПроизводствоБезЗаказа.ВыходныеИзделияСерии КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка = &Распоряжение
| И ТаблицаСерии.Получатель = &Склад
| И ТаблицаСерии.Ссылка.Проведен
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВыходныеИзделия.Серия КАК Серия,
| ВыходныеИзделия.Количество КАК Количество,
| ВыходныеИзделия.Номенклатура КАК Номенклатура,
| ВыходныеИзделия.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВыходныеИзделия.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ВыходныеИзделия.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.ПроизводствоБезЗаказа.ПобочныеИзделия КАК ВыходныеИзделия
| ГДЕ
| ВыходныеИзделия.Ссылка = &Распоряжение
| И ВыходныеИзделия.Получатель = &Склад
| И ВыходныеИзделия.Ссылка.Проведен
| И ВыходныеИзделия.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
| ИЗ
| Документ.ПроизводствоБезЗаказа.ПобочныеИзделияСерии КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка = &Распоряжение
| И ТаблицаСерии.Получатель = &Склад
| И ТаблицаСерии.Ссылка.Проведен
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| -ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ТаблицаСерии.Назначение
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка.Распоряжение = &Распоряжение
| И ТаблицаСерии.Ссылка <> &ТекущийПриходныйОрдер
| И ТаблицаСерии.Ссылка.Склад = &Склад
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ТаблицаСерии.Ссылка.Проведен) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0";
ИначеЕсли ТипЗнч(Объект.Распоряжение) = Тип("ДокументСсылка.РаспределениеВозвратныхОтходов") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ВложенныйЗапрос.Серия КАК Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Назначение КАК Назначение
|ИЗ
| (ВЫБРАТЬ
| ВыходныеИзделия.Серия КАК Серия,
| ВыходныеИзделия.Количество КАК Количество,
| ВыходныеИзделия.Номенклатура КАК Номенклатура,
| ВыходныеИзделия.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВыходныеИзделия.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ВыходныеИзделия.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.РаспределениеВозвратныхОтходов КАК ВыходныеИзделия
| ГДЕ
| ВыходныеИзделия.Ссылка = &Распоряжение
| И ВыходныеИзделия.Получатель = &Склад
| И ВыходныеИзделия.Ссылка.Проведен
| И ВыходныеИзделия.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаСерии.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаСерии.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
| ИЗ
| Документ.РаспределениеВозвратныхОтходов.Серии КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка = &Распоряжение
| И ТаблицаСерии.Ссылка.Получатель = &Склад
| И ТаблицаСерии.Ссылка.Проведен
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаСерии.Серия,
| -ТаблицаСерии.Количество,
| ТаблицаСерии.Номенклатура,
| ТаблицаСерии.Характеристика,
| ТаблицаСерии.Назначение
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК ТаблицаСерии
| ГДЕ
| ТаблицаСерии.Ссылка.Распоряжение = &Распоряжение
| И ТаблицаСерии.Ссылка <> &ТекущийПриходныйОрдер
| И ТаблицаСерии.Ссылка.Склад = &Склад
| И ТаблицаСерии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| И ТаблицаСерии.Ссылка.Проведен) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0";
Иначе
ТекстИсключения = НСтр("ru = 'Тип распоряжения не поддерживается.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Распоряжение", Объект.Распоряжение);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Запрос.УстановитьПараметр("ТекущийПриходныйОрдер", Объект.Ссылка);
Серии = Запрос.Выполнить().Выгрузить();
Возврат Серии;
Возврат Новый ТаблицаЗначений;
КонецФункции
Функция ТаблицаСерийПриПриемкеПоПрочемуОприходованию(Объект)
Если Объект.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ВозвратИзЭксплуатации Тогда
Возврат ТаблицаФинансовыхСерийИзРаспоряжения(Объект);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Серия КАК Серия,
| СУММА(ВложенныйЗапрос.Количество) КАК Количество,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Назначение КАК Назначение
|ИЗ
| (ВЫБРАТЬ
| Товары.Серия КАК Серия,
| Товары.Количество КАК Количество,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(Товары.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА Товары.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.ПрочееОприходованиеТоваров.Серии КАК Товары
|
| ГДЕ
| Товары.Ссылка = &Распоряжение
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Товары.Серия КАК Серия,
| Товары.Количество КАК Количество,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(Товары.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА Товары.Назначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| Документ.ПрочееОприходованиеТоваров.Товары КАК Товары
|
| ГДЕ
| Товары.Ссылка = &Распоряжение
| И Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Серии.Серия КАК Серия,
| -Серии.Количество КАК Количество,
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика,
| Серии.Назначение КАК Назначение
| ИЗ
| Документ.ПриходныйОрдерНаТовары.Товары КАК Серии
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдер
| ПО Серии.Ссылка = ПриходныйОрдер.Ссылка
|
| ГДЕ
| ПриходныйОрдер.Проведен
| И ПриходныйОрдер.Распоряжение = &Распоряжение
| И ПриходныйОрдер.Ссылка <> &ТекущийПриходныйОрдер
| И Серии.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
|
| ) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение
|
|ИМЕЮЩИЕ
| СУММА(ВложенныйЗапрос.Количество) > 0";
Запрос.УстановитьПараметр("Распоряжение", Объект.Распоряжение);
Запрос.УстановитьПараметр("ТекущийПриходныйОрдер", Объект.Ссылка);
Серии = Запрос.Выполнить().Выгрузить();
Возврат Серии;
КонецФункции
Функция ТаблицаФинансовыхСерийИзРаспоряжения(Объект)
ТекстЗапроса =
"ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика,
| ВложенныйЗапрос.Назначение КАК Назначение,
| ВложенныйЗапрос.Серия КАК Серия,
| -СУММА(ВложенныйЗапрос.Количество) КАК Количество
|ИЗ
| (ВЫБРАТЬ
| ТоварыКОформлениюПоступленияОстатки.Номенклатура КАК Номенклатура,
| ТоварыКОформлениюПоступленияОстатки.Характеристика КАК Характеристика,
| ТоварыКОформлениюПоступленияОстатки.Назначение КАК Назначение,
| ТоварыКОформлениюПоступленияОстатки.Серия КАК Серия,
| ТоварыКОформлениюПоступленияОстатки.КОформлениюПоступленийПоОрдерамОстаток КАК Количество
| ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &Распоряжение
| И НЕ &ЭтоТоварыВПути
| И Склад = &Склад
| И Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК ТоварыКОформлениюПоступленияОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКОформлениюПоступленияОстатки.Номенклатура КАК Номенклатура,
| ТоварыКОформлениюПоступленияОстатки.Характеристика КАК Характеристика,
| ТоварыКОформлениюПоступленияОстатки.Назначение КАК Назначение,
| ТоварыКОформлениюПоступленияОстатки.Серия КАК Серия,
| -ТоварыКОформлениюПоступленияОстатки.КОформлениюПоступленийПоНакладнымОстаток КАК Количество
| ИЗ
| РегистрНакопления.ТоварыКПоступлению.Остатки(
| ,
| ДокументПоступления = &Распоряжение
| И &ЭтоТоварыВПути
| И Склад = &Склад
| И Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК ТоварыКОформлениюПоступленияОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыКОформлениюПоступления.Номенклатура,
| ТоварыКОформлениюПоступления.Характеристика,
| ТоварыКОформлениюПоступления.Назначение,
| ТоварыКОформлениюПоступления.Серия,
| ВЫБОР
| КОГДА ТоварыКОформлениюПоступления.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА ТоварыКОформлениюПоступления.КОформлениюПоступленийПоОрдерам
| ИНАЧЕ -ТоварыКОформлениюПоступления.КОформлениюПоступленийПоОрдерам
| КОНЕЦ
| ИЗ
| РегистрНакопления.ТоварыКПоступлению КАК ТоварыКОформлениюПоступления
| ГДЕ
| ТоварыКОформлениюПоступления.Регистратор = &ТекущийПриходныйОрдер) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Назначение,
| ВложенныйЗапрос.Серия
|
|ИМЕЮЩИЕ
| -СУММА(ВложенныйЗапрос.Количество) > 0";
ОперацииТоварыВПути = Новый Массив();
ОперацииТоварыВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути);
ОперацииТоварыВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути);
ОперацииТоварыВПути.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути);
ЭтоТоварыВПути = ОперацииТоварыВПути.Найти(Объект.ХозяйственнаяОперация) <> Неопределено;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Распоряжение", Объект.Распоряжение);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Запрос.УстановитьПараметр("ТекущийПриходныйОрдер", Объект.Ссылка);
Запрос.УстановитьПараметр("ЭтоТоварыВПути", ЭтоТоварыВПути);
Серии = Запрос.Выполнить().Выгрузить();
Возврат Серии;
КонецФункции
Процедура ЗаполнитьТаблицуСерийПеремещения(Серии, СерииПоРаспоряжениям, ТоварыДокумента)
ОтборСтрок = Новый Структура("Номенклатура, Характеристика, Назначение");
Для Каждого СтрокаСерии Из СерииПоРаспоряжениям Цикл
КоличествоКРаспределению = СтрокаСерии.Количество;
УдаляемыеСтрокиТоваров = Новый Массив;
ЗаполнитьЗначенияСвойств(ОтборСтрок, СтрокаСерии);
СтрокиТовары = ТоварыДокумента.НайтиСтроки(ОтборСтрок);
Для Каждого СтрокаТовары Из СтрокиТовары Цикл
Если КоличествоКРаспределению <= 0 Тогда
Прервать;
КонецЕсли;
НоваяСтрока = Серии.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовары);
НоваяСтрока.Серия = СтрокаСерии.Серия;
Если КоличествоКРаспределению > СтрокаТовары.Количество Тогда
НоваяСтрока.Количество = СтрокаТовары.Количество;
КоличествоУпаковок = СтрокаТовары.КоличествоУпаковок;
Иначе
НоваяСтрока.Количество = СтрокаСерии.Количество;
КоличествоУпаковок = КоличествоКРаспределению / СтрокаТовары.КоэффициентУпаковки;
КонецЕсли;
НоваяСтрока.КоличествоУпаковок = ?(ЗначениеЗаполнено(НоваяСтрока.Упаковка),
Цел(КоличествоУпаковок),
КоличествоУпаковок);
КоличествоКРаспределению = КоличествоКРаспределению - НоваяСтрока.Количество;
СтрокаТовары.Количество = СтрокаТовары.Количество - НоваяСтрока.Количество;
СтрокаТовары.КоличествоУпаковок = СтрокаТовары.КоличествоУпаковок - НоваяСтрока.КоличествоУпаковок;
Если СтрокаТовары.Количество <= 0 Тогда
УдаляемыеСтрокиТоваров.Добавить(СтрокаТовары);
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемаяСтрока Из УдаляемыеСтрокиТоваров Цикл
ТоварыДокумента.Удалить(УдаляемаяСтрока);
КонецЦикла;
УдаляемыеСтрокиТоваров.Очистить();
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
ПолноеИмяДокумента = "Документ.ПриходныйОрдерНаТовары";
ТекстыЗапросаВременныхТаблиц = Новый Соответствие();
ПереопределениеРасчетаПараметров = Новый Структура;
ПереопределениеРасчетаПараметров.Вставить("ВозвратНепринятыхТоваров",
" ВЫБОР
| КОГДА ТаблицаТовары.Ссылка.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВозвратНеПринятыхТоваров)
| ИЛИ ТаблицаТовары.Ссылка.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ВозвратНеПринятыхТоваровУстарел)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ ");
ПереопределениеРасчетаПараметров.Вставить("ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач",
" ВЫБОР
| КОГДА ТаблицаТовары.Ссылка.Склад.ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач
| И ТаблицаТовары.Ссылка.Дата >= ТаблицаТовары.Ссылка.Склад.ДатаНачалаОрдернойСхемыПриОтраженииИзлишковНедостач
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ ");
ПереопределениеРасчетаПараметров.Вставить("ДокументПоступления", "ТаблицаТовары.Ссылка.Распоряжение");
Если ИмяРегистра = "ДвиженияСерийТоваров" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, ИмяРегистра);
ТекстыЗапросаВременныхТаблиц.Вставить("ВтТаблицаТовары", ТекстЗапросаВТТаблицаТовары(Запрос, ТекстыЗапроса));
СинонимТаблицыДокумента = "ТаблицаТовары";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросМеханизмаПроведения(ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров,
ТекстыЗапросаВременныхТаблиц);
Результат.ЗначенияПараметров.Вставить("ТипыОжидаемоеПоступление", Метаданные.ОпределяемыеТипы.ОжидаемоеПоступление.Тип.Типы());
Возврат Результат;
КонецФункции
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "Документы.ПриходныйОрдерНаТовары.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "11.5.25.7";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("a07d2ef3-6091-4ea1-9e4e-8a145862fc1f");
Обработчик.Многопоточный = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ПриходныйОрдерНаТовары.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Некритичный;
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Обновление документов ""Приходный ордер на товары"":'"));
СписокОписаний.Добавить(НСтр("ru = '- перезаполняет реквизит ""Отправитель"" в документах, распоряжениями для которых выступает ""Производство без заказа"".'"));
Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
Читаемые = Новый Массив;
Читаемые.Добавить(Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя());
Читаемые.Добавить(Метаданные.Документы.ПроизводствоБезЗаказа.ПолноеИмя());
Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
Изменяемые = Новый Массив;
Изменяемые.Добавить(Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя());
Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
Блокируемые = Новый Массив;
Блокируемые.Добавить(Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя());
Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПараметрыВыборки = Параметры.ПараметрыВыборки;
ПараметрыВыборки.ПолныеИменаОбъектов = "Документ.ПриходныйОрдерНаТовары";
ПараметрыВыборки.ПоляУпорядочиванияПриРаботеПользователей.Добавить("Дата УБЫВ");
ПараметрыВыборки.ПоляУпорядочиванияПриОбработкеДанных.Добавить("Дата УБЫВ");
ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеквизитыДокумента.Ссылка КАК Ссылка
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК РеквизитыДокумента
|ГДЕ
| ЛОЖЬ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеквизитыДокумента.Ссылка КАК Ссылка
|ИЗ
| Документ.ПриходныйОрдерНаТовары КАК РеквизитыДокумента
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПроизводствоБезЗаказа КАК РеквизитыПбЗ
| ПО РеквизитыПбЗ.Ссылка = РеквизитыДокумента.Распоряжение
|
|ГДЕ
| НЕ РеквизитыДокумента.Отправитель = РеквизитыПбЗ.Подразделение
|";
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПолноеИмяОбъекта = "Документ.ПриходныйОрдерНаТовары";
ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
Если ОбновляемыеДанные.Количество() = 0 Тогда
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОбновляемыеДанные.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ОбновляемыеДанные
|ИЗ
| &ОбновляемыеДанные КАК ОбновляемыеДанные
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ОбновляемыеДанные.Ссылка КАК Ссылка,
| РеквизитыПбЗ.Подразделение КАК Отправитель,
| РеквизитыДокумента.ВерсияДанных КАК ВерсияДанных
|ИЗ
| ОбновляемыеДанные КАК ОбновляемыеДанные
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК РеквизитыДокумента
| ПО ОбновляемыеДанные.Ссылка = РеквизитыДокумента.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПроизводствоБезЗаказа КАК РеквизитыПбЗ
| ПО РеквизитыПбЗ.Ссылка = РеквизитыДокумента.Распоряжение
|";
Запрос.УстановитьПараметр("ОбновляемыеДанные", ОбновляемыеДанные);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПричинаИсключения = 0;
НачатьТранзакцию();
Попытка
ПричинаИсключения = 1;
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить(ПолноеИмяОбъекта).УстановитьЗначение("Ссылка", Выборка.Ссылка);
Блокировка.Заблокировать();
ДокументОбъект = ОбновлениеИнформационнойБазыУТ.ПроверитьПолучитьОбъект(Выборка.Ссылка, Выборка.ВерсияДанных, Параметры.Очередь);
ОбъектИзменен = Ложь;
Если ДокументОбъект <> Неопределено Тогда
ДокументОбъект.Отправитель = Выборка.Отправитель;
ОбъектИзменен = Истина;
КонецЕсли;
ПричинаИсключения = 2;
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Выборка.Ссылка);
Если ПричинаИсключения = 2 Тогда
ВызватьИсключение НСтр("ru = 'Не удалось обработать обновление документов ""Приходный ордер на товары"".'");
КонецЕсли;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли
#КонецЕсли