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