#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("Обеспечение");
МеханизмыДокумента.Добавить("ОборотныеРегистрыУправленческогоУчета");
МеханизмыДокумента.Добавить("ОперативныйУчетТоваровОрганизаций");
МеханизмыДокумента.Добавить("СебестоимостьИПартионныйУчет");
МеханизмыДокумента.Добавить("АдресныйСклад");
МеханизмыДокумента.Добавить("УчетПрочихАктивовПассивов");
МеханизмыДокумента.Добавить("УчетНДС");
МеханизмыДокумента.Добавить("РеестрДокументов");
КорректировкаНазначенияТоваровЛокализация.ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента);
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.КорректировкаНазначенияТоваров") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаТоварыОрганизаций(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаДатыПоступленияТоваровОрганизаций(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаТоварыНаСкладах(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаТоварыВЯчейках(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаДвиженияНоменклатураНоменклатура(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры);
РасчетСебестоимостиПроведениеДокументов.ОтразитьВМеханизмеУчетаЗатратИСебестоимости(ДокументСсылка, Запрос, ТекстыЗапроса, Регистры);
КорректировкаНазначенияТоваровЛокализация.ДополнитьТекстыЗапросовПроведения(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры);
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
Если Константы.ВыводитьДопКолонкиНаправлениеДеятельностиИГК.Получить() Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ.КорректировкаНазначенияТоваров";
КомандаПечати.Идентификатор = "КорректировкаНазначенияТоваров";
КомандаПечати.Представление = НСтр("ru = 'Корректировка назначения товаров'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецЕсли;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КорректировкаНазначенияТоваров") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
"КорректировкаНазначенияТоваров",
НСтр("ru = 'Корректировка назначения товаров'"),
ПечатнаяФормаКорректировкаНазначенияТоваров(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
КорректировкаНазначенияТоваровЛокализация.ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.КорректировкаНазначенияТоваров) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.КорректировкаНазначенияТоваров.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.КорректировкаНазначенияТоваров);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьОбособленноеОбеспечениеЗаказов";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КорректировкаНазначенияТоваровЛокализация.ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры);
КонецПроцедуры
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Дата";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.КорректировкаНазначенияТоваров";
ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПолучитьФункциональнуюОпцию("УчитыватьСебестоимостьПоСериямСклад");
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад");
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ПустаяСсылка());
ПараметрыУказанияСерий.ИменаПолейДополнительные.Добавить("Склад");
ПараметрыУказанияСерий.ИменаПолейДополнительные.Добавить("ИсходноеНазначение");
ПараметрыУказанияСерий.ИменаПолейДополнительные.Добавить("НовоеНазначение");
ПараметрыУказанияСерий.ЭтоНакладная = Истина;
ПараметрыУказанияСерий.Дата = Объект.Дата;
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Номенклатура,
| ВЫРАЗИТЬ(Товары.ИсходноеНазначение КАК Справочник.Назначения) КАК ИсходноеНазначение,
| ВЫРАЗИТЬ(Товары.НовоеНазначение КАК Справочник.Назначения) КАК НовоеНазначение,
| Товары.Склад,
| Товары.Серия,
| Товары.СтатусУказанияСерий,
| Товары.НомерСтроки
|ПОМЕСТИТЬ ТоварыДляЗапроса
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.Номенклатура,
| ВЫБОР
| КОГДА ЕСТЬNULL(Товары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(Товары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьСкладскиеДвижения,
| Товары.Склад,
| Товары.Серия,
| Товары.СтатусУказанияСерий,
| Товары.НомерСтроки
|ПОМЕСТИТЬ Товары
|ИЗ
| ТоварыДляЗапроса КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА Товары.ЕстьСкладскиеДвижения
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА ВЫБОР
| КОГДА Товары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 13
| ИНАЧЕ 14
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Товары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 9
| ИНАЧЕ 10
| КОНЕЦ
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтбора
| ТОГДА ВЫБОР
| КОГДА Товары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 7
| ИНАЧЕ 8
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора
| И ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий
| ТОГДА ВЫБОР
| КОГДА Товары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 3
| ИНАЧЕ 4
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА ВЫБОР
| КОГДА Товары.Серия = ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 13
| ИНАЧЕ 14
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК СтатусУказанияСерий
|ПОМЕСТИТЬ ТаблицаСтатусов
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады
| ПО ПолитикиУчетаСерий.Склад = Склады.Ссылка
| ПО (ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка)
| И (ПолитикиУчетаСерий.Склад = Товары.Склад)
|;
|
|
|ВЫБРАТЬ
| ТаблицаСтатусов.НомерСтроки КАК НомерСтроки,
| ТаблицаСтатусов.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| ТаблицаСтатусов КАК ТаблицаСтатусов
|ГДЕ
| ТаблицаСтатусов.СтарыйСтатусУказанияСерий <> ТаблицаСтатусов.СтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаИспользованиеПомещенийИАдресногоХранения(ИмяВременнойТаблицы = "") Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ТаблицаТоваров.Склад КАК Справочник.Склады).ИспользоватьСкладскиеПомещения
| И &Период >= ВЫРАЗИТЬ(ТаблицаТоваров.Склад КАК Справочник.Склады).ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ВЫРАЗИТЬ(ТаблицаТоваров.Помещение КАК Справочник.СкладскиеПомещения).ИспользоватьАдресноеХранение
| И &Период >= ВЫРАЗИТЬ(ТаблицаТоваров.Помещение КАК Справочник.СкладскиеПомещения).ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВЫРАЗИТЬ(ТаблицаТоваров.Склад КАК Справочник.Склады).ИспользоватьАдресноеХранение
| И &Период >= ВЫРАЗИТЬ(ТаблицаТоваров.Склад КАК Справочник.Склады).ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользоватьАдресноеХранение,
| ВЫБОР
| КОГДА ВЫРАЗИТЬ(ТаблицаТоваров.Склад КАК Справочник.Склады).ИспользоватьСкладскиеПомещения
| И &Период >= ВЫРАЗИТЬ(ТаблицаТоваров.Склад КАК Справочник.Склады).ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ИспользоватьСкладскиеПомещения
|ПОМЕСТИТЬ ИмяВременнойТаблицыПереопределяемый
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров";
Если Не ПустаяСтрока(ИмяВременнойТаблицы) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяВременнойТаблицыПереопределяемый", ИмяВременнойТаблицы);
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПОМЕСТИТЬ ИмяВременнойТаблицыПереопределяемый", "");
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
Функция ДоступныеДействия(Назначение = Неопределено) Экспорт
ЧастичныеПрава = Ложь;
Если Не Пользователи.РолиДоступны("ДополнительныеОперацииКорректировкиНазначенияТоваров") Тогда
ЧастичныеПрава = Истина;
КонецЕсли;
ЭтоДавальческийМатериал = Ложь;
Если ЗначениеЗаполнено(Назначение) Тогда
ТипНазначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "ТипНазначения");
Если ТипНазначения = Перечисления.ТипыНазначений.ДавальческоеМатериалыПодЭтап22
Или ТипНазначения = Перечисления.ТипыНазначений.ДавальческоеМатериалы22
Или ТипНазначения = Перечисления.ТипыНазначений.Давальческое21
Или Ложь Тогда
ЭтоДавальческийМатериал = Истина;
КонецЕсли;
КонецЕсли;
Массив = Новый Массив();
Если Не ЭтоДавальческийМатериал Тогда
Массив.Добавить(Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать);
КонецЕсли;
Если Не ЧастичныеПрава Тогда
Массив.Добавить(Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать);
КонецЕсли;
Массив.Добавить(Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв);
Если Не ЧастичныеПрава Тогда
Массив.Добавить(Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям);
КонецЕсли;
Если Не ЧастичныеПрава Тогда
Массив.Добавить(Перечисления.ВидыОперацийКорректировкиНазначения.ПроизвольнаяКорректировкаНазначений);
КонецЕсли;
Возврат Массив;
КонецФункции
Функция НазначениеЗаказа(Заказ) Экспорт
Если Не ЗначениеЗаполнено(Заказ) Тогда
Возврат Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
ПутьКПолюНазначение = "Назначение";
Назначение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Заказ, ПутьКПолюНазначение);
Если ТипЗнч(Заказ) = Тип("ДокументСсылка.ЗаказНаСборку") Тогда
Назначение = Документы.ЗаказНаСборку.НазначениеЗаказа(Заказ);
Иначе
Назначение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Заказ, ПутьКПолюНазначение);
КонецЕсли;
Если ЗначениеЗаполнено(Назначение) Тогда
ЗаказНазначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "Заказ");
Если ЗначениеЗаполнено(ЗаказНазначения) И ЗаказНазначения = Заказ Тогда
Возврат Назначение;
Иначе
Возврат Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
Иначе
Возврат Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецФункции
Функция ДоступнаВозможностьИзменения(Ссылка) Экспорт
ЕстьДоступ = Истина;
ВидОперацииДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ВидОперации");
Если Не ПравоДоступа("Изменение", Метаданные.Документы.КорректировкаНазначенияТоваров) Тогда
ЕстьДоступ = Ложь;
ИначеЕсли Не Пользователи.РолиДоступны("ДополнительныеОперацииКорректировкиНазначенияТоваров") Тогда
ВидОперацииДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ВидОперации");
Если ВидОперацииДокумента = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям
Или ВидОперацииДокумента = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать Тогда
ЕстьДоступ = Ложь;
КонецЕсли;
КонецЕсли;
Возврат ЕстьДоступ;
КонецФункции
#Область ПроводкиРеглУчета
Функция ТекстОтраженияВРеглУчете() Экспорт
Возврат КорректировкаНазначенияТоваровЛокализация.ТекстОтраженияВРеглУчете();
КонецФункции
Функция ТекстЗапросаВТОтраженияВРеглУчете() Экспорт
Возврат КорректировкаНазначенияТоваровЛокализация.ТекстЗапросаВТОтраженияВРеглУчете();
КонецФункции
#КонецОбласти
Функция МакетФормыВыбораНазначений() Экспорт
МакетФормы = Справочники.Назначения.МакетФормыВыбораНазначений();
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеПродукция22));
ШаблонНазначения.Договор = "&Договор";
ШаблонНазначения.УсловиеИспользования = "Объект.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.СнятьРезерв)";
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеПродукция22));
ШаблонНазначения.Договор = "&Договор";
ШаблонНазначения.УсловиеИспользования = "Объект.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать)";
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеПродукция22));
ШаблонНазначения.УсловиеИспользования = "Объект.ВидОперации В(
|ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям),
|ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.Резервировать),
|ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.ПроизвольнаяКорректировкаНазначений),
|ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка),
|ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.ПустаяСсылка))";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.ИсходноеНазначение", "ВНаличии");
ОписаниеКолонок.Колонки.НайтиПоЗначению("ВНаличии").Пометка = Истина;
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Товары.Склад";
ОписаниеКолонок.ПутиКДанным.ИсключаемыеНазначения = "Объект.Назначение";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.НовоеНазначение", "Потребность");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Товары.Склад";
ОписаниеКолонок.ПутиКДанным.ИсключаемыеНазначения = "Объект.Назначение";
Возврат МакетФормы;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)";
КонецПроцедуры
#КонецОбласти
Функция ДобавитьКомандуСоздатьНаОснованииЗаказаКлиента(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.КорректировкаНазначенияТоваров) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.КорректировкаНазначенияТоваров.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.КорректировкаНазначенияТоваров);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьОбособленноеОбеспечениеЗаказов";
КомандаСоздатьНаОсновании.Обработчик = "СозданиеНаОснованииУТКлиент.СоздатьКорректировкуНазначенияТоваровНаОснованииЗаказаКлиента";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция КоллекцияТабличныхЧастейТоваров() Экспорт
ТаблицыДокумента = Новый Структура("Товары");
Возврат ТаблицыДокумента;
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура ЗаполнитьНазначениеПоВидуОперации(Назначение, Заказ, ВидОперации, СтрокаТаблицы, ЭтоНазначениеШапки) Экспорт
Если ЭтоНазначениеШапки Тогда
Если ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.Резервировать") Тогда
СтрокаТаблицы.НовоеНазначение = Назначение;
СтрокаТаблицы.НовыйЗаказ = Заказ;
ИначеЕсли ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать") Тогда
СтрокаТаблицы.НовоеНазначение = Назначение;
СтрокаТаблицы.НовыйЗаказ = Заказ;
ИначеЕсли ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.СнятьРезерв") Тогда
СтрокаТаблицы.ИсходноеНазначение = Назначение;
СтрокаТаблицы.ИсходныйЗаказ = Заказ;
КонецЕсли;
Иначе
Если ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать") Тогда
СтрокаТаблицы.ИсходноеНазначение = Назначение;
ИначеЕсли ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям") Тогда
СтрокаТаблицы.ИсходноеНазначение = Назначение;
КонецЕсли;
СтрокаТаблицы.ИсходныйЗаказ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "Заказ");
КонецЕсли;
КонецПроцедуры
#Область ЗаполнениеПоОстаткам
Функция ТаблицаСнятияРезерва(Назначение, Товары, Регистратор) Экспорт
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Назначение", Назначение);
Запрос.УстановитьПараметр("Товары", Товары);
Запрос.УстановитьПараметр("ВсеТовары", Товары.Количество() = 0);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ОстатокНаСкладе", Истина);
Запрос.УстановитьПараметр("СвернутьНазначения", Ложь);
Запрос.УстановитьПараметр("ПустойКлючСвязи", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ПОМЕСТИТЬ РазрешенныеСклады
|ИЗ
| Справочник.Склады КАК Склады
|ИНДЕКСИРОВАТЬ ПО
| Склад";
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| &ПолеНазначениеОтборТоваров КАК Назначение
|ПОМЕСТИТЬ ОтборТоваров
|ИЗ
| &Товары КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика
|;
|
|
|ВЫБРАТЬ
| &Назначение КАК Назначение
|ПОМЕСТИТЬ ОтборНазначений";
ПолеНазначениеОтборТоваров = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
Если Товары.Колонки.Найти("Назначение") <> Неопределено Тогда
ПолеНазначениеОтборТоваров = "Таблица.Назначение";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолеНазначениеОтборТоваров", ПолеНазначениеОтборТоваров);
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаИсточникДанных(Ложь);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ОтборТоваровИсточникаДанных
|ИЗ
| ИсточникДанных КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика";
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаСвободныеОстатки();
Запрос.Выполнить();
ДобавитьВременнуюТаблицуСортировкаСкладов(Запрос, "ИсточникДанных", "ИсточникДанных");
Запрос.Текст =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.СнятьРезерв) КАК ВидОперации,
| &Назначение КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Назначение КАК ИсходноеНазначение,
| Таблица.Назначение.Заказ КАК ИсходныйЗаказ,
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК НовоеНазначение,
| НЕОПРЕДЕЛЕНО КАК НовыйЗаказ,
| Таблица.Потребность КАК Потребность,
| Таблица.Запас КАК Запас,
| Таблица.Резерв КАК Резерв,
| ЕСТЬNULL(СвободныеОстатки.Свободно, 0) КАК Свободно,
| ЕСТЬNULL(ТаблицаСортировкиСкладов.ПриоритетСклада, 0) КАК СортировкаСклада,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки
|ИЗ
| ИсточникДанных КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
| ПО СвободныеОстатки.Склад = Таблица.Склад
| И СвободныеОстатки.Номенклатура = Таблица.Номенклатура
| И СвободныеОстатки.Характеристика = Таблица.Характеристика
| И СвободныеОстатки.Свободно > 0
|
| ЛЕВОЕ СОЕДИНЕНИЕ СортировкаСкладов КАК ТаблицаСортировкиСкладов
| ПО ТаблицаСортировкиСкладов.Склад = Таблица.Склад
| И ТаблицаСортировкиСкладов.Назначение = Таблица.Назначение
| И ТаблицаСортировкиСкладов.Номенклатура = Таблица.Номенклатура
| И ТаблицаСортировкиСкладов.Характеристика = Таблица.Характеристика
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузки КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
| И ТаблицаСкладовОтгрузки.Назначение = Таблица.Назначение
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = Таблица.Склад
|ГДЕ
| Таблица.Запас > 0
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| ЭтоСкладОтгрузки,
| СортировкаСклада,
| Запас УБЫВ";
ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
Ключ = "ИсходноеНазначение,Номенклатура,Характеристика,Склад";
ТаблицаСкорректировано = ТаблицаТоваров.Скопировать(Новый Массив(), Ключ);
ТаблицаСкорректировано.Колонки.Добавить("Количество",
ОбщегоНазначения.ОписаниеТипаЧисло(15, 3, ДопустимыйЗнак.Неотрицательный));
Запрос.УстановитьПараметр("ТаблицаСкорректировано", ТаблицаСкорректировано);
Тексты = Новый Массив();
Текст =
"ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Количество КАК Количество
|ПОМЕСТИТЬ ТаблицаСкорректировано
|ИЗ
| &ТаблицаСкорректировано КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад
|;
|
|
|ВЫБРАТЬ
| &Назначение КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| ВЫБОР
| КОГДА Таблица.Запас - ЕСТЬNULL(ТаблицаСкорректировано.Количество, 0) > 0
| ТОГДА Таблица.Запас - ЕСТЬNULL(ТаблицаСкорректировано.Количество, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК ВНаличии,
| ВЫБОР
| КОГДА Таблица.Потребность - Таблица.КЗаказу - ЕСТЬNULL(ТаблицаСкорректировано.Количество, 0) > 0
| ТОГДА Таблица.Потребность - Таблица.КЗаказу - ЕСТЬNULL(ТаблицаСкорректировано.Количество, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК Обеспечено,
| ВЫБОР
| КОГДА Таблица.Потребность - ЕСТЬNULL(ТаблицаСкорректировано.Количество, 0) > 0
| ТОГДА Таблица.Потребность - ЕСТЬNULL(ТаблицаСкорректировано.Количество, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК Потребность,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки
|ПОМЕСТИТЬ ТаблицаИтогов
|ИЗ
| ИсточникДанных КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаСкорректировано КАК ТаблицаСкорректировано
| ПО ТаблицаСкорректировано.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкорректировано.Характеристика = Таблица.Характеристика
| И ТаблицаСкорректировано.Склад = Таблица.Склад
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузки КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
| И ТаблицаСкладовОтгрузки.Назначение = Таблица.Назначение
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад";
Тексты.Добавить(Текст);
Текст = ВременнаяТаблицаЗаказыНаПеремещение(Ложь);
Тексты.Добавить(Текст);
Текст =
"ВЫБРАТЬ
| &Назначение КАК НазначениеДляИтогов,
| ТаблицаИтогов.Номенклатура КАК Номенклатура,
| ТаблицаИтогов.Характеристика КАК Характеристика,
| СУММА(ТаблицаИтогов.ВНаличии) КАК ВНаличии,
| СУММА(ТаблицаИтогов.Обеспечено) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Обеспечено,
| СУММА(ТаблицаИтогов.Потребность) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Потребность
|ИЗ
| ТаблицаИтогов КАК ТаблицаИтогов
|
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыНаПеремещение КАК ЗаказыНаПеремещение
| ПО ЗаказыНаПеремещение.Номенклатура = ТаблицаИтогов.Номенклатура
| И ЗаказыНаПеремещение.Характеристика = ТаблицаИтогов.Характеристика
|СГРУППИРОВАТЬ ПО
| ТаблицаИтогов.Номенклатура,
| ТаблицаИтогов.Характеристика";
Тексты.Добавить(Текст);
Запрос.Текст = СтрСоединить(Тексты, ОбщегоНазначения.РазделительПакетаЗапросов());
СтруктураВозврата = Новый Структура();
СтруктураВозврата.Вставить("ТаблицаТоваров", ТаблицаТоваров);
СтруктураВозврата.Вставить("ТаблицаИтоговСводно", Запрос.Выполнить().Выгрузить());
СтруктураВозврата.Вставить("ТаблицаИтогов", Запрос.МенеджерВременныхТаблиц.Таблицы["ТаблицаИтогов"].ПолучитьДанные().Выгрузить());
Возврат СтруктураВозврата;
КонецФункции
Функция ТаблицаСнятияРезерваПоМногимНазначениям(Организация, Товары, Регистратор, Назначения) Экспорт
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ВсеОрганизации", Организация = Неопределено);
Запрос.УстановитьПараметр("Товары", Товары);
Запрос.УстановитьПараметр("ВсеТовары", Товары.Количество() = 0);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ОстатокНаСкладе", Истина);
Запрос.УстановитьПараметр("Назначения", Назначения);
Запрос.УстановитьПараметр("ЕстьОтборНазначений", Назначения.Количество() > 0);
Запрос.УстановитьПараметр("СвернутьНазначения", Ложь);
Запрос.УстановитьПараметр("ПустойКлючСвязи", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ПОМЕСТИТЬ РазрешенныеСклады
|ИЗ
| Справочник.Склады КАК Склады
|ИНДЕКСИРОВАТЬ ПО
| Склад";
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| &ПолеНазначениеОтборТоваров КАК Назначение
|ПОМЕСТИТЬ ОтборТоваров
|ИЗ
| &Товары КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика";
НазначенияЕстьВТоварах = Товары.Колонки.Найти("Назначение") <> Неопределено;
ПолеНазначениеОтборТоваров = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
Если НазначенияЕстьВТоварах Тогда
ПолеНазначениеОтборТоваров = "Таблица.Назначение";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолеНазначениеОтборТоваров", ПолеНазначениеОтборТоваров);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Таблица.Назначение КАК Назначение
|ПОМЕСТИТЬ НазначенияИзОстатков
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И (НЕ &ЕстьОтборНазначений ИЛИ Назначение В(&Назначения))) КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Назначение
|;
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Таблица.Назначение КАК Назначение
|ПОМЕСТИТЬ ОтборНазначений
|ИЗ
| НазначенияИзОстатков КАК Таблица
|ГДЕ
| (&ВсеОрганизации ИЛИ Таблица.Назначение.Заказ.Организация = &Организация)
| И НЕ Таблица.Назначение.ТипНазначения В(
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Давальческое21),
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ПоставкаПодПринципала))
|ИНДЕКСИРОВАТЬ ПО
| Назначение
|;
|УНИЧТОЖИТЬ НазначенияИзОстатков";
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаИсточникДанных(НазначенияЕстьВТоварах);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ОтборТоваровИсточникаДанных
|ИЗ
| ИсточникДанных КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика";
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаСвободныеОстатки();
Запрос.Выполнить();
ДобавитьВременнуюТаблицуСортировкаСкладов(Запрос, "ИсточникДанных", "ИсточникДанных");
Запрос.Текст =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.СнятьРезерв) КАК ВидОперации,
| Таблица.Назначение КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Назначение КАК ИсходноеНазначение,
| Таблица.Назначение.Заказ КАК ИсходныйЗаказ,
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК НовоеНазначение,
| НЕОПРЕДЕЛЕНО КАК НовыйЗаказ,
| ЕСТЬNULL(СвободныеОстатки.Свободно, 0) КАК Свободно,
| Таблица.Потребность КАК Потребность,
| Таблица.Запас КАК Запас,
| Таблица.Резерв КАК Резерв,
| ЕСТЬNULL(ТаблицаСортировкиСкладов.ПриоритетСклада, 0) КАК СортировкаСклада,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки
|ИЗ
| ИсточникДанных КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
| ПО СвободныеОстатки.Склад = Таблица.Склад
| И СвободныеОстатки.Номенклатура = Таблица.Номенклатура
| И СвободныеОстатки.Характеристика = Таблица.Характеристика
| И СвободныеОстатки.Свободно > 0
|
| ЛЕВОЕ СОЕДИНЕНИЕ СортировкаСкладов КАК ТаблицаСортировкиСкладов
| ПО ТаблицаСортировкиСкладов.Склад = Таблица.Склад
| И ТаблицаСортировкиСкладов.Назначение = Таблица.Назначение
| И ТаблицаСортировкиСкладов.Номенклатура = Таблица.Номенклатура
| И ТаблицаСортировкиСкладов.Характеристика = Таблица.Характеристика
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузки КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
| И ТаблицаСкладовОтгрузки.Назначение = Таблица.Назначение
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = Таблица.Склад
|ГДЕ
| Таблица.Запас > 0
|УПОРЯДОЧИТЬ ПО
| ИсходноеНазначение,
| Номенклатура,
| Характеристика,
| ЭтоСкладОтгрузки,
| СортировкаСклада,
| Запас УБЫВ";
ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
Тексты = Новый Массив();
Текст =
"ВЫБРАТЬ
| Таблица.Назначение КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Запас КАК ВНаличии,
| Таблица.Потребность - Таблица.КЗаказу КАК Обеспечено,
| Таблица.Потребность КАК Потребность,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки
|ПОМЕСТИТЬ ТаблицаИтогов
|ИЗ
| ИсточникДанных КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузки КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
| И ТаблицаСкладовОтгрузки.Назначение = Таблица.Назначение
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад";
Тексты.Добавить(Текст);
Текст = ВременнаяТаблицаЗаказыНаПеремещение(Истина);
Тексты.Добавить(Текст);
Текст =
"ВЫБРАТЬ
| ТаблицаИтогов.НазначениеДляИтогов КАК НазначениеДляИтогов,
| ТаблицаИтогов.Номенклатура КАК Номенклатура,
| ТаблицаИтогов.Характеристика КАК Характеристика,
| СУММА(ТаблицаИтогов.ВНаличии) КАК ВНаличии,
| СУММА(ТаблицаИтогов.Обеспечено) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Обеспечено,
| СУММА(ТаблицаИтогов.Потребность) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Потребность
|ИЗ
| ТаблицаИтогов КАК ТаблицаИтогов
|
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыНаПеремещение КАК ЗаказыНаПеремещение
| ПО ЗаказыНаПеремещение.Номенклатура = ТаблицаИтогов.Номенклатура
| И ЗаказыНаПеремещение.Характеристика = ТаблицаИтогов.Характеристика
| И ЗаказыНаПеремещение.Назначение = ТаблицаИтогов.НазначениеДляИтогов
|СГРУППИРОВАТЬ ПО
| ТаблицаИтогов.Номенклатура,
| ТаблицаИтогов.Характеристика,
| ТаблицаИтогов.НазначениеДляИтогов";
Тексты.Добавить(Текст);
Запрос.Текст = СтрСоединить(Тексты, ОбщегоНазначения.РазделительПакетаЗапросов());
СтруктураВозврата = Новый Структура();
СтруктураВозврата.Вставить("ТаблицаТоваров", ТаблицаТоваров);
СтруктураВозврата.Вставить("ТаблицаИтоговСводно", Запрос.Выполнить().Выгрузить());
СтруктураВозврата.Вставить("ТаблицаИтогов", Запрос.МенеджерВременныхТаблиц.Таблицы["ТаблицаИтогов"].ПолучитьДанные().Выгрузить());
Возврат СтруктураВозврата;
КонецФункции
Функция ТаблицаРезервирования(Назначение, Источники, ТолькоСкладОтгрузки, Организация, Товары, Регистратор) Экспорт
НесколькоНазначений = ТипЗнч(Назначение) = Тип("Массив");
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Назначение", Назначение);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ВсеОрганизации", Организация = Неопределено);
Запрос.УстановитьПараметр("Товары", Товары);
Запрос.УстановитьПараметр("ВсеТовары", Товары.Количество() = 0);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ОстатокНаСкладе", Источники.ОстатокНаСкладе);
Запрос.УстановитьПараметр("РезервыПодНазначения", Источники.РезервыПодНазначения);
Запрос.УстановитьПараметр("ТолькоСкладОтгрузки", ТолькоСкладОтгрузки);
Запрос.УстановитьПараметр("СвернутьНазначения", НесколькоНазначений);
Запрос.УстановитьПараметр("ПустойКлючСвязи", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ПОМЕСТИТЬ РазрешенныеСклады
|ИЗ
| Справочник.Склады КАК Склады
|ИНДЕКСИРОВАТЬ ПО
| Склад";
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| &ПолеНазначениеОтборТоваров КАК Назначение
|ПОМЕСТИТЬ ОтборТоваров
|ИЗ
| &Товары КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика
|;
|
|
|ВЫБРАТЬ
| Назначения.Ссылка КАК Назначение
|ПОМЕСТИТЬ ОтборНазначений
|ИЗ
| Справочник.Назначения КАК Назначения
|ГДЕ
| Назначения.Ссылка В (&Назначение)
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Назначения.Назначение.ТипНазначения КАК ТипНазначения,
| ВЫБОР
| КОГДА Назначения.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Давальческое21) ТОГДА
| Назначения.Назначение.Заказ.Партнер
| КОГДА ИСТИНА
| ТОГДА Назначения.Назначение.Партнер
| КОНЕЦ КАК Партнер,
| ВЫБОР
| КОГДА Назначения.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Давальческое21) ТОГДА
| Назначения.Назначение.Заказ.Договор
| КОГДА ИСТИНА
| ТОГДА Назначения.Назначение.Договор
| КОНЕЦ КАК Договор
|ИЗ
| ОтборНазначений КАК Назначения";
ПолеНазначениеОтборТоваров = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
Если Товары.Колонки.Найти("Назначение") <> Неопределено Тогда
ПолеНазначениеОтборТоваров = "Таблица.Назначение";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолеНазначениеОтборТоваров", ПолеНазначениеОтборТоваров);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Запрос.УстановитьПараметр("ТипНазначения", Выборка.ТипНазначения);
Запрос.УстановитьПараметр("Партнер", Выборка.Партнер);
Запрос.УстановитьПараметр("Договор", Выборка.Договор);
Запрос.Текст = ТекстЗапросаИсточникДанных(Ложь);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ОтборТоваровИсточникаДанных
|ИЗ
| ИсточникДанных КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика";
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаСвободныеОстатки();
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Назначение КАК Назначение
|ПОМЕСТИТЬ НазначенияИзРегистра
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| &РезервыПодНазначения
| И Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И Назначение НЕ В(&Назначение)) КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Назначение
|;
|ВЫБРАТЬ
| Таблица.Назначение КАК Назначение
|ПОМЕСТИТЬ ОтборНазначенийИсточников
|ИЗ
| НазначенияИзРегистра КАК Таблица
|ГДЕ
| ВЫБОР
| КОГДА &ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Давальческое21)
| ТОГДА
| Таблица.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Давальческое21)
| И &Партнер = Таблица.Назначение.Заказ.Партнер
| И &Договор = Таблица.Назначение.Заказ.Договор
| ИЛИ Таблица.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| КОГДА
| &ТипНазначения В(
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ДавальческоеМатериалы22),
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ДавальческоеМатериалыПодЭтап22))
| ТОГДА
| Таблица.Назначение.ТипНазначения В(
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ДавальческоеМатериалы22),
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ДавальческоеМатериалыПодЭтап22))
| И &Партнер = Таблица.Назначение.Партнер
| И &Договор = Таблица.Назначение.Договор
| ИЛИ Таблица.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ИНАЧЕ
| НЕ Таблица.Назначение.ТипНазначения В(
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ДавальческоеПродукция22),
| ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ПоставкаПодПринципала))
| КОНЕЦ
| И (&ВсеОрганизации ИЛИ Таблица.Назначение.Заказ.Организация = &Организация)
|ИНДЕКСИРОВАТЬ ПО
| Назначение";
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаОбеспечениеЗаказов();
Запрос.Выполнить();
Если НесколькоНазначений Тогда
Запрос.УстановитьПараметр("Назначение", Справочники.Назначения.ПустаяСсылка());
КонецЕсли;
Запрос.Текст =
"ВЫБРАТЬ
| &Назначение КАК Назначение,
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК НазначениеИсточник,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Потребность КАК Потребность,
| Таблица.Запас КАК Запас,
| Таблица.Резерв КАК Резерв
|ПОМЕСТИТЬ ТаблицаЗаполненияКорректировки
|ИЗ
| СвободныеОстатки КАК Таблица
|ГДЕ
| Таблица.Запас > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &Назначение КАК Назначение,
| ТаблицаНазначенийИсточников.Назначение КАК НазначениеИсточник,
| ТаблицаНазначенийИсточников.Номенклатура КАК Номенклатура,
| ТаблицаНазначенийИсточников.Характеристика КАК Характеристика,
| ТаблицаНазначенийИсточников.Склад КАК Склад,
| ТаблицаНазначенийИсточников.Потребность КАК Потребность,
| ТаблицаНазначенийИсточников.Запас КАК Запас,
| ТаблицаНазначенийИсточников.Резерв КАК Резерв
|ИЗ
| ОбеспечениеЗаказов КАК ТаблицаНазначенийИсточников
|ГДЕ
| ТаблицаНазначенийИсточников.Запас > 0";
Запрос.Выполнить();
ИмяТаблицыИсточникДанных = "ИсточникДанных";
Если НесколькоНазначений Тогда
ИмяТаблицыИсточникДанных = "ИсточникДанных1";
Текст = ТекстЗапросаИсточникДанных(Ложь);
Запрос.Текст = СтрЗаменить(Текст, "ИсточникДанных", ИмяТаблицыИсточникДанных);
Запрос.УстановитьПараметр("СвернутьНазначения", Ложь);
Запрос.Выполнить();
КонецЕсли;
ДобавитьВременнуюТаблицуСортировкаСкладов(Запрос, ИмяТаблицыИсточникДанных, "ТаблицаЗаполненияКорректировки");
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад
|ПОМЕСТИТЬ СкладыОтгрузкиСвернутые
|ИЗ
| СкладыОтгрузки КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад
|;
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| МИНИМУМ(Таблица.ПриоритетСклада) КАК ПриоритетСклада
|ПОМЕСТИТЬ СортировкаСкладовСвернутая
|ИЗ
| СортировкаСкладов КАК Таблица
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Склад
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад";
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.Резервировать) КАК ВидОперации,
| Таблица.Назначение КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.НазначениеИсточник КАК ИсходноеНазначение,
| Таблица.НазначениеИсточник.Заказ КАК ИсходныйЗаказ,
| Таблица.Назначение КАК НовоеНазначение,
| Таблица.Назначение.Заказ КАК НовыйЗаказ,
| Таблица.Потребность КАК Потребность,
| Таблица.Запас КАК Запас,
| Таблица.Резерв КАК Резерв,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки,
| ЕСТЬNULL(ТаблицаСортировкиСкладов.ПриоритетСклада, 0) КАК СортировкаСклада
|ИЗ
| ТаблицаЗаполненияКорректировки КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СортировкаСкладовСвернутая КАК ТаблицаСортировкиСкладов
| ПО ТаблицаСортировкиСкладов.Склад = Таблица.Склад
| И ТаблицаСортировкиСкладов.Номенклатура = Таблица.Номенклатура
| И ТаблицаСортировкиСкладов.Характеристика = Таблица.Характеристика
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузкиСвернутые КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = Таблица.Склад
|ГДЕ
| НЕ &ТолькоСкладОтгрузки ИЛИ НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| ЭтоСкладОтгрузки УБЫВ,
| СортировкаСклада УБЫВ,
| НазначениеИсточник";
ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
Тексты = Новый Массив();
Текст =
"ВЫБРАТЬ
| &Назначение КАК НазначениеДляИтогов,
| Набор.Номенклатура КАК Номенклатура,
| Набор.Характеристика КАК Характеристика,
| Набор.Склад КАК Склад,
| СУММА(Набор.ВНаличии) КАК ВНаличии,
| СУММА(Набор.Обеспечено) КАК Обеспечено,
| СУММА(Набор.Потребность) КАК Потребность,
| МАКСИМУМ(Набор.ЭтоСкладОтгрузки) КАК ЭтоСкладОтгрузки
|ПОМЕСТИТЬ ТаблицаИтогов
|ИЗ(
| ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Запас КАК ВНаличии,
| Таблица.Потребность - Таблица.КЗаказу КАК Обеспечено,
| Таблица.Потребность КАК Потребность,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки
| ИЗ
| ИсточникДанных КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузкиСвернутые КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = Таблица.Склад
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| 0 КАК ВНаличии,
| 0 КАК Обеспечено,
| 0 КАК Потребность,
| НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL КАК ЭтоСкладОтгрузки
| ИЗ
| ТаблицаЗаполненияКорректировки КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузкиСвернутые КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика) КАК Набор
|СГРУППИРОВАТЬ ПО
| Набор.Номенклатура,
| Набор.Характеристика,
| Набор.Склад
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад";
Тексты.Добавить(Текст);
Текст = ВременнаяТаблицаЗаказыНаПеремещение(Ложь);
Тексты.Добавить(Текст);
Текст =
"ВЫБРАТЬ
| &Назначение КАК НазначениеДляИтогов,
| ТаблицаИтогов.Номенклатура КАК Номенклатура,
| ТаблицаИтогов.Характеристика КАК Характеристика,
| СУММА(ТаблицаИтогов.ВНаличии) КАК ВНаличии,
| СУММА(ТаблицаИтогов.Обеспечено) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Обеспечено,
| СУММА(ТаблицаИтогов.Потребность) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Потребность
|ИЗ
| ТаблицаИтогов КАК ТаблицаИтогов
|
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыНаПеремещение КАК ЗаказыНаПеремещение
| ПО ЗаказыНаПеремещение.Номенклатура = ТаблицаИтогов.Номенклатура
| И ЗаказыНаПеремещение.Характеристика = ТаблицаИтогов.Характеристика
|СГРУППИРОВАТЬ ПО
| ТаблицаИтогов.Номенклатура,
| ТаблицаИтогов.Характеристика";
Тексты.Добавить(Текст);
Запрос.Текст = СтрСоединить(Тексты, ОбщегоНазначения.РазделительПакетаЗапросов());
СтруктураВозврата = Новый Структура();
СтруктураВозврата.Вставить("ТаблицаТоваров", ТаблицаТоваров);
СтруктураВозврата.Вставить("ТаблицаИтоговСводно", Запрос.Выполнить().Выгрузить());
СтруктураВозврата.Вставить("ТаблицаИтогов", Запрос.МенеджерВременныхТаблиц.Таблицы["ТаблицаИтогов"].ПолучитьДанные().Выгрузить());
Тексты = Новый Массив();
Текст =
"УНИЧТОЖИТЬ ТаблицаИтогов;
|УНИЧТОЖИТЬ ЗаказыНаПеремещение;
|
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Потребность КАК Потребность,
| Таблица.Запас КАК Запас
|ПОМЕСТИТЬ ТаблицаИтогов
|
|ИЗ
| СвободныеОстатки КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = Таблица.Склад
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаНазначенийИсточников.Назначение КАК НазначениеДляИтогов,
| ТаблицаНазначенийИсточников.Номенклатура КАК Номенклатура,
| ТаблицаНазначенийИсточников.Характеристика КАК Характеристика,
| ТаблицаНазначенийИсточников.Склад КАК Склад,
| ТаблицаНазначенийИсточников.Потребность КАК Потребность,
| ТаблицаНазначенийИсточников.Запас КАК Запас
|ИЗ
| ОбеспечениеЗаказов КАК ТаблицаНазначенийИсточников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = ТаблицаНазначенийИсточников.Склад
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, НазначениеДляИтогов";
Тексты.Добавить(Текст);
Текст = ВременнаяТаблицаЗаказыНаПеремещение(Истина);
Тексты.Добавить(Текст);
Текст =
"ВЫБРАТЬ
| &Назначение КАК Назначение,
| ТаблицаИтогов.НазначениеДляИтогов КАК ИсходноеНазначение,
| ТаблицаИтогов.Номенклатура КАК Номенклатура,
| ТаблицаИтогов.Характеристика КАК Характеристика,
| СУММА(ТаблицаИтогов.Потребность) - МАКСИМУМ(ЕСТЬNULL(ЗаказыНаПеремещение.Количество, 0)) КАК Потребность,
| СУММА(ТаблицаИтогов.Запас) КАК Запас
|ИЗ
| ТаблицаИтогов КАК ТаблицаИтогов
|
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыНаПеремещение КАК ЗаказыНаПеремещение
| ПО ЗаказыНаПеремещение.Номенклатура = ТаблицаИтогов.Номенклатура
| И ЗаказыНаПеремещение.Характеристика = ТаблицаИтогов.Характеристика
| И ЗаказыНаПеремещение.Назначение = ТаблицаИтогов.НазначениеДляИтогов
|СГРУППИРОВАТЬ ПО
| ТаблицаИтогов.Номенклатура,
| ТаблицаИтогов.Характеристика,
| ТаблицаИтогов.НазначениеДляИтогов";
Тексты.Добавить(Текст);
Запрос.Текст = СтрСоединить(Тексты, ОбщегоНазначения.РазделительПакетаЗапросов());
СтруктураВозврата.Вставить("ТаблицаИтоговИсточниковОбеспечения", Запрос.Выполнить().Выгрузить());
Возврат СтруктураВозврата;
КонецФункции
Функция ТаблицаПоМногимНазначениям(Назначения, ТолькоСкладОтгрузки, Товары, Регистратор) Экспорт
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Назначение", Назначения);
Запрос.УстановитьПараметр("Товары", Товары);
Запрос.УстановитьПараметр("ВсеТовары", Товары.Количество() = 0);
Запрос.УстановитьПараметр("ТолькоСкладОтгрузки", ТолькоСкладОтгрузки);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("СвернутьНазначения", Ложь);
Запрос.УстановитьПараметр("ПустойКлючСвязи", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Склад
|ПОМЕСТИТЬ РазрешенныеСклады
|ИЗ
| Справочник.Склады КАК Склады
|ИНДЕКСИРОВАТЬ ПО
| Склад";
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Назначение КАК Назначение
|ПОМЕСТИТЬ ОтборТоваров
|ИЗ
| &Товары КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика
|;
|
|
|ВЫБРАТЬ
| Назначения.Ссылка КАК Назначение
|ПОМЕСТИТЬ ОтборНазначений
|ИЗ
| Справочник.Назначения КАК Назначения
|ГДЕ
| Назначения.Ссылка В (&Назначение)";
Запрос.Выполнить();
Запрос.Текст = ТекстЗапросаИсточникДанных(Истина);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Назначение КАК Назначение,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| Таблица.Запас КАК ВНаличии,
| Таблица.Потребность - Таблица.КЗаказу КАК Обеспечено,
| Таблица.Потребность КАК Потребность
|ПОМЕСТИТЬ ТаблицаЗаполненияКорректировки
|ИЗ
| ИсточникДанных КАК Таблица";
Запрос.Выполнить();
ДобавитьВременнуюТаблицуСортировкаСкладов(Запрос, "ИсточникДанных", "ИсточникДанных");
Запрос.Текст =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийКорректировкиНазначения.ПустаяСсылка) КАК ВидОперации,
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК НазначениеДляИтогов,
| Таблица.Номенклатура КАК Номенклатура,
| МАКСИМУМ(Таблица.Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
| Таблица.Характеристика КАК Характеристика,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК Склад,
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) КАК ИсходноеНазначение,
| НЕОПРЕДЕЛЕНО КАК ИсходныйЗаказ,
| Таблица.Назначение КАК НовоеНазначение,
| МАКСИМУМ(Таблица.Назначение.Заказ) КАК НовыйЗаказ,
| СУММА(Таблица.ВНаличии) КАК ВНаличии,
| СУММА(Таблица.Обеспечено) КАК Обеспечено,
| СУММА(Таблица.Потребность) КАК Потребность
|ИЗ
| ТаблицаЗаполненияКорректировки КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ СкладыОтгрузки КАК ТаблицаСкладовОтгрузки
| ПО ТаблицаСкладовОтгрузки.Склад = Таблица.Склад
| И ТаблицаСкладовОтгрузки.Номенклатура = Таблица.Номенклатура
| И ТаблицаСкладовОтгрузки.Характеристика = Таблица.Характеристика
| И ТаблицаСкладовОтгрузки.Назначение = Таблица.Назначение
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазрешенныеСклады КАК РазрешенныеСклады
| ПО РазрешенныеСклады.Склад = Таблица.Склад
|ГДЕ
| НЕ &ТолькоСкладОтгрузки ИЛИ НЕ ТаблицаСкладовОтгрузки.Склад ЕСТЬ NULL
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| НовоеНазначение";
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат;
КонецФункции
Функция ТоварныеМестаПоПеречнюНоменклатуры(ПереченьНоменклатуры) Экспорт
ТекстЗапросаУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"Упаковки.Ссылка", "СписокНоменклатуры.Ссылка");
ТекстЗапроса =
"ВЫБРАТЬ
| СписокНоменклатуры.Ссылка КАК Ссылка,
| Упаковки.Ссылка КАК Упаковка,
| ЕСТЬNULL(&ТекстЗапросаКоэффициентаУпаковки, 1) КАК Коэффициент
|ИЗ
| Справочник.Номенклатура КАК СписокНоменклатуры
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыУпаковок КАК Наборы
| ПО Наборы.Ссылка = СписокНоменклатуры.НаборУпаковок
| И Наборы.Ссылка <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры)
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
| ПО Упаковки.Владелец = ЕСТЬNULL(Наборы.Ссылка, СписокНоменклатуры.Ссылка)
|ГДЕ
| СписокНоменклатуры.Ссылка В(&ПереченьНоменклатуры)
| И СписокНоменклатуры.НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка)
| И Упаковки.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| И НЕ Упаковки.ПометкаУдаления";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентаУпаковки", ТекстЗапросаУпаковки);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ПереченьНоменклатуры", ПереченьНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Результат = Новый Соответствие();
ТекущаяНоменклатура = Неопределено;
Упаковки = Неопределено;
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка <> ТекущаяНоменклатура Тогда
ТекущаяНоменклатура = Выборка.Ссылка;
Упаковки = Новый Соответствие();
Результат.Вставить(ТекущаяНоменклатура, Упаковки);
КонецЕсли;
Упаковки.Вставить(Выборка.Упаковка, Выборка.Коэффициент);
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ОбслуживаниеОбработкиЗаполненияКорректировкиНазначения
Функция СоздатьЗаполнитьИПровестиДокумент(РеквизитыШапки, Таблица) Экспорт
Результат = Новый Структура("Документ,Проведен,Ошибки");
Документ = Документы.КорректировкаНазначенияТоваров.СоздатьДокумент();
ДанныеЗаполнения = Новый Структура("РеквизитыШапки,Товары", РеквизитыШапки, Таблица);
Документ.Заполнить(ДанныеЗаполнения);
Ошибка = Не Документ.ПроверитьЗаполнение();
Если Не Ошибка Тогда
Попытка
Документ.Записать(РежимЗаписиДокумента.Проведение);
Результат.Проведен = Истина;
Исключение
Результат.Ошибки = ПолучитьСообщенияПользователю(Истина);
Документ.Записать(РежимЗаписиДокумента.Запись);
Результат.Проведен = Ложь;
КонецПопытки;
Иначе
Результат.Ошибки = ПолучитьСообщенияПользователю(Истина);
Документ.Записать(РежимЗаписиДокумента.Запись);
Результат.Проведен = Ложь;
КонецЕсли;
Результат.Документ = Документ.Ссылка;
Возврат Результат;
КонецФункции
Функция УказаниеПомещенийЯчеекСерийДляСтроки(Таблица) Экспорт
Таблица.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("СтатусУказанияСерий", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
Для НомерСтроки = 1 По Таблица.Количество() Цикл
Таблица[НомерСтроки - 1].НомерСтроки = НомерСтроки;
КонецЦикла;
Запрос = Новый Запрос;
ТекстЗапросаТаблицаТоваров =
"ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки,
| ТаблицаТоваров.Склад КАК Склад
|ПОМЕСТИТЬ СтрокиТаблицы
|ИЗ
| &Товары КАК ТаблицаТоваров
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки,
| ТаблицаТоваров.Склад,
| ЕстьNULL(СкладскиеПомещения.Ссылка, ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)) КАК Помещение
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| СтрокиТаблицы КАК ТаблицаТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СкладскиеПомещения КАК СкладскиеПомещения
| ПО ТаблицаТоваров.Склад = СкладскиеПомещения.Владелец
| И СкладскиеПомещения.ПометкаУдаления = ЛОЖЬ";
ТекстОкончанияЗапроса =
"ВЫБРАТЬ
| Таблица.НомерСтроки,
| МАКСИМУМ(Таблица.ИспользоватьАдресноеХранение) КАК ИспользоватьАдресноеХранение,
| МАКСИМУМ(Таблица.ИспользоватьСкладскиеПомещения) КАК ИспользоватьСкладскиеПомещения,
| МАКСИМУМ(ВЫБОР КОГДА ЕСТЬNULL(ТаблицаСтатусов.СтатусУказанияСерий, 0) > 0 ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ) КАК ИспользоватьСерии
|ИЗ
| ВТИспользованиеПомещенийИАдресногоХранения КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаСтатусов КАК ТаблицаСтатусов
| ПО Таблица.НомерСтроки = ТаблицаСтатусов.НомерСтроки
|
|СГРУППИРОВАТЬ ПО
| Таблица.НомерСтроки";
ТекстАдресноеХранение = Документы.КорректировкаНазначенияТоваров.ТекстЗапросаИспользованиеПомещенийИАдресногоХранения(
"ВТИспользованиеПомещенийИАдресногоХранения");
ТекстСтатусыСерий = Документы.КорректировкаНазначенияТоваров.ТекстЗапросаЗаполненияСтатусовУказанияСерий(Неопределено);
ТекстыЗапросов = Новый Массив();
ТекстыЗапросов.Добавить(ТекстЗапросаТаблицаТоваров);
ТекстыЗапросов.Добавить(ТекстАдресноеХранение);
ТекстыЗапросов.Добавить(ТекстСтатусыСерий);
ТекстыЗапросов.Добавить(ТекстОкончанияЗапроса);
Запрос.Текст = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Товары", Таблица);
Выборка = Запрос.Выполнить().Выбрать();
Таблица.Колонки.Удалить("НомерСтроки");
Таблица.Колонки.Удалить("СтатусУказанияСерий");
Таблица.Колонки.Удалить("Серия");
Возврат Выборка;
КонецФункции
Функция РаспределитьТоварыВстречнойКорректировки(ТаблицаПолуфабрикатов, ТаблицаМатериалов) Экспорт
ТаблицаПолуфабрикатов.Колонки.Добавить("КоэффициентРаспределения", ОбщегоНазначения.ОписаниеТипаЧисло(15, 3));
ТаблицаПолуфабрикатов.Колонки.Добавить("КлючРаспределения", ОбщегоНазначения.ОписаниеТипаЧисло(10));
ИтогКоличество = ТаблицаПолуфабрикатов.Итог("Количество");
ИндексСтроки = ТаблицаПолуфабрикатов.Количество() - 1;
Пока ИндексСтроки > -1 Цикл
СтрокаТаблицы = ТаблицаПолуфабрикатов[ИндексСтроки];
СтрокаТаблицы.КлючРаспределения = ИндексСтроки;
СтрокаТаблицы.КоэффициентРаспределения = Цел(СтрокаТаблицы.Количество / ИтогКоличество * 1000) / 1000;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;
ТаблицаПолуфабрикатов.Сортировать("Количество Убыв");
ИтогКоэффициентРаспределения = ТаблицаПолуфабрикатов.Итог("КоэффициентРаспределения");
Если ИтогКоэффициентРаспределения <> 1 Тогда
СтрокаТаблицы = ТаблицаПолуфабрикатов[0];
СтрокаТаблицы.КоэффициентРаспределения =
СтрокаТаблицы.КоэффициентРаспределения + 1 - ИтогКоэффициентРаспределения;
КонецЕсли;
ТаблицаМатериалов.Колонки.Добавить("КлючРаспределения", ОбщегоНазначения.ОписаниеТипаЧисло(10));
ИндексСтроки = ТаблицаМатериалов.Количество() - 1;
Пока ИндексСтроки > -1 Цикл
СтрокаТаблицы = ТаблицаМатериалов[ИндексСтроки];
Если ЗначениеЗаполнено(СтрокаТаблицы.Упаковка) Тогда
ТипИзмеряемойВеличины = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
СтрокаТаблицы.Упаковка, "ТипИзмеряемойВеличины");
Иначе
ТипИзмеряемойВеличины = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
СтрокаТаблицы.Номенклатура, "ЕдиницаИзмерения.ТипИзмеряемойВеличины");
КонецЕсли;
РаспределитьШтучно = ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.КоличествоШтук;
ИтогКоличествоРаспределения = СтрокаТаблицы.Количество;
ИндексСтрокиСНаибольшимКоличеством = -1;
Для Каждого СтрокаИсходнойТаблицы Из ТаблицаПолуфабрикатов Цикл
КоличествоРаспределения =
Цел(СтрокаТаблицы.Количество * СтрокаИсходнойТаблицы.КоэффициентРаспределения * 1000) / 1000;
Если РаспределитьШтучно Тогда
КоличествоРаспределенияОкр = Окр(КоличествоРаспределения);
Если КоличествоРаспределения <> КоличествоРаспределенияОкр Тогда
КоличествоРаспределения = ?(КоличествоРаспределенияОкр = 0, 1, КоличествоРаспределенияОкр);
КонецЕсли;
КоличествоРаспределения = Мин(КоличествоРаспределения, ИтогКоличествоРаспределения);
ИначеЕсли КоличествоРаспределения = 0 Тогда
КоличествоРаспределения = ИтогКоличествоРаспределения;
КонецЕсли;
НоваяСтрокаТаблицы = ТаблицаМатериалов.Добавить();
НоваяСтрокаТаблицы.НовоеНазначение = СтрокаИсходнойТаблицы.ИсходноеНазначение;
НоваяСтрокаТаблицы.КлючРаспределения = СтрокаИсходнойТаблицы.КлючРаспределения;
НоваяСтрокаТаблицы.Количество = КоличествоРаспределения;
ЗаполнитьЗначенияСвойств(
НоваяСтрокаТаблицы, СтрокаТаблицы,, "НовоеНазначение, КлючРаспределения, Количество");
Если ИндексСтрокиСНаибольшимКоличеством = -1 Тогда
ИндексСтрокиСНаибольшимКоличеством = ТаблицаМатериалов.Количество() - 1;
КонецЕсли;
ИтогКоличествоРаспределения = ИтогКоличествоРаспределения - НоваяСтрокаТаблицы.Количество;
Если ИтогКоличествоРаспределения = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ИтогКоличествоРаспределения <> 0 Тогда
НоваяСтрокаТаблицы = ТаблицаМатериалов[ИндексСтрокиСНаибольшимКоличеством];
НоваяСтрокаТаблицы.Количество = НоваяСтрокаТаблицы.Количество + ИтогКоличествоРаспределения;
КонецЕсли;
ТаблицаМатериалов.Удалить(ИндексСтроки);
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;
Результат = ТаблицаМатериалов.СкопироватьКолонки();
ТаблицаМатериалов.Индексы.Добавить("КлючРаспределения");
Для Каждого СтрокаТаблицы Из ТаблицаПолуфабрикатов Цикл
НоваяСтрокаТаблицы = Результат.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицы, СтрокаТаблицы);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(
ТаблицаМатериалов.Скопировать(Новый Структура("КлючРаспределения", СтрокаТаблицы.КлючРаспределения)),
Результат);
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура СнятьРезервы(ТаблицаТовары, СнятьИзлишекРезервов, ИтогиПоТоварам) Экспорт
Если СнятьИзлишекРезервов Тогда
Если ТипЗнч(ТаблицаТовары) = Тип("ДанныеФормыКоллекция") Тогда
Таблица = ТаблицаТовары.Выгрузить();
Иначе
Таблица = ТаблицаТовары.Скопировать();
КонецЕсли;
Итоги = ИтогиПоТоварам;
Если ТипЗнч(Итоги) = Тип("ДанныеФормыКоллекция") Тогда
Итоги = Итоги.Выгрузить();
КонецЕсли;
ГруппировкиСтрок = "НазначениеДляИтогов,Номенклатура,Характеристика";
Итоги.Свернуть(ГруппировкиСтрок, "Потребность");
Итоги.Индексы.Добавить(ГруппировкиСтрок);
Таблица.Колонки.Добавить("РезервПоПотребности");
СтруктураКлючевыхПолей = Новый Структура(ГруппировкиСтрок);
Для Счетчик = 1 По Таблица.Количество() Цикл
Строка = Таблица[Счетчик - 1];
Если СтруктураКлючевыхПолей.НазначениеДляИтогов <> Строка.НазначениеДляИтогов
Или СтруктураКлючевыхПолей.Номенклатура <> Строка.Номенклатура
Или СтруктураКлючевыхПолей.Характеристика <> Строка.Характеристика Тогда
ЗаполнитьЗначенияСвойств(СтруктураКлючевыхПолей, Строка);
НайденныеСтроки = Итоги.НайтиСтроки(СтруктураКлючевыхПолей);
КонецЕсли;
Строка.РезервПоПотребности = Макс(0, Мин(Строка.Запас - Строка.Резерв, Строка.Потребность - Строка.Резерв));
НайденныеСтроки[0].Потребность = НайденныеСтроки[0].Потребность - Строка.РезервПоПотребности - Строка.Резерв;
КонецЦикла;
Для Счетчик = 1 По Таблица.Количество() Цикл
Строка = Таблица[Счетчик - 1];
Если СтруктураКлючевыхПолей.НазначениеДляИтогов <> Строка.НазначениеДляИтогов
Или СтруктураКлючевыхПолей.Номенклатура <> Строка.Номенклатура
Или СтруктураКлючевыхПолей.Характеристика <> Строка.Характеристика Тогда
ЗаполнитьЗначенияСвойств(СтруктураКлючевыхПолей, Строка);
НайденныеСтроки = Итоги.НайтиСтроки(СтруктураКлючевыхПолей);
КонецЕсли;
ТекПотребность = Макс(0, Мин(Строка.Запас - Строка.Резерв - Строка.РезервПоПотребности, НайденныеСтроки[0].Потребность));
Строка.РезервПоПотребности = Строка.РезервПоПотребности + ТекПотребность;
НайденныеСтроки[0].Потребность = НайденныеСтроки[0].Потребность - ТекПотребность;
ТаблицаТовары[Счетчик - 1].Количество = Макс(0, Строка.Запас - Строка.Резерв - Строка.РезервПоПотребности);
ТаблицаТовары[Счетчик - 1].Отметка = ТаблицаТовары[Счетчик - 1].Количество > 0;
КонецЦикла;
Иначе
Для Каждого Строка Из ТаблицаТовары Цикл
Строка.Количество = Макс(0, Строка.Запас - Строка.Резерв);
Строка.Отметка = Строка.Количество > 0;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьРезервы(Таблица, ТаблицаИтоги, РассчитыватьПотребностьПоВсемСкладам) Экспорт
Если РассчитыватьПотребностьПоВсемСкладам Тогда
ГруппировкиСтрок = "НазначениеДляИтогов,Номенклатура,Характеристика";
Иначе
ГруппировкиСтрок = "НазначениеДляИтогов,Номенклатура,Характеристика,Склад";
КонецЕсли;
СтрокиСоСкладом = Новый Массив();
Для Каждого Строка Из ТаблицаИтоги Цикл
Если Не Строка.Склад.Пустая() Тогда
СтрокиСоСкладом.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(ТаблицаИтоги) = Тип("ДанныеФормыКоллекция") Тогда
Итоги = ТаблицаИтоги.Выгрузить(СтрокиСоСкладом, ГруппировкиСтрок + ",Потребность,Обеспечено");
ИначеЕсли ТипЗнч(ТаблицаИтоги) = Тип("ТаблицаЗначений") Тогда
Итоги = ТаблицаИтоги.Скопировать(СтрокиСоСкладом, ГруппировкиСтрок + ",Потребность,Обеспечено");
КонецЕсли;
Итоги.Свернуть(ГруппировкиСтрок, "Потребность,Обеспечено");
Итоги.Колонки.НазначениеДляИтогов.Имя = "НовоеНазначение";
Если РассчитыватьПотребностьПоВсемСкладам Тогда
ГруппировкиСтрок = "НовоеНазначение,Номенклатура,Характеристика";
Иначе
ГруппировкиСтрок = "НовоеНазначение,Номенклатура,Характеристика,Склад";
КонецЕсли;
Итоги.Индексы.Добавить(ГруппировкиСтрок);
СтруктураКлючевыхПолей = Новый Структура(ГруппировкиСтрок);
Потребность = 0;
Для Каждого Строка Из Таблица Цикл
Если Строка.ВидОперации <> Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
Продолжить;
КонецЕсли;
Если СтруктураКлючевыхПолей.НовоеНазначение <> Строка.НовоеНазначение
Или СтруктураКлючевыхПолей.Номенклатура <> Строка.Номенклатура
Или СтруктураКлючевыхПолей.Характеристика <> Строка.Характеристика
Или Не РассчитыватьПотребностьПоВсемСкладам И СтруктураКлючевыхПолей.Склад <> Строка.Склад Тогда
ЗаполнитьЗначенияСвойств(СтруктураКлючевыхПолей, Строка);
НайденныеСтроки = Итоги.НайтиСтроки(СтруктураКлючевыхПолей);
Потребность = Макс(НайденныеСтроки[0].Потребность - НайденныеСтроки[0].Обеспечено, 0);
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка.ИсходноеНазначение) Тогда
Строка.Количество = Макс(Мин(Потребность, Строка.Запас - Строка.Резерв), 0);
Потребность = Потребность - Строка.Количество;
Строка.Отметка = Строка.Количество > 0;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбсуживающиеФормуДокумента
Процедура ЗаполнитьЗаказВТабличнойЧастиТовары(Объект, МассивСтрок = Неопределено) Экспорт
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("ИсходноеНазначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
Таблица.Колонки.Добавить("НовоеНазначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
Таблица.Колонки.Добавить("ИндексСтроки", Новый ОписаниеТипов("Число"));
Строки = ?(МассивСтрок = Неопределено, Объект.Товары, МассивСтрок);
Для Каждого Строка Из Строки Цикл
НоваяСтрока = Таблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
НоваяСтрока.ИндексСтроки = Объект.Товары.Индекс(Строка);
КонецЦикла;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| Строка.ИндексСтроки КАК ИндексСтроки,
| Строка.ИсходноеНазначение КАК ИсходноеНазначение,
| Строка.НовоеНазначение КАК НовоеНазначение
|ПОМЕСТИТЬ Строки
|ИЗ
| &Строки КАК Строка
|;
|ВЫБРАТЬ
| Строка.ИндексСтроки КАК ИндексСтроки,
| ЕСТЬNULL(ТаблицаИсходноеНазначение.Заказ, НЕОПРЕДЕЛЕНО) КАК ИсходныйЗаказ,
| ЕСТЬNULL(ТаблицаНовоеНазначение.Заказ, НЕОПРЕДЕЛЕНО) КАК НовыйЗаказ
|ИЗ
| Строки КАК Строка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Назначения КАК ТаблицаИсходноеНазначение
| ПО ТаблицаИсходноеНазначение.Ссылка = Строка.ИсходноеНазначение
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Назначения КАК ТаблицаНовоеНазначение
| ПО ТаблицаНовоеНазначение.Ссылка = Строка.НовоеНазначение";
Запрос.УстановитьПараметр("Строки", Таблица);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Строка = Объект.Товары[Выборка.ИндексСтроки];
ЗаполнитьЗначенияСвойств(Строка, Выборка, "ИсходныйЗаказ,НовыйЗаказ");
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ДопустимыНазначенияБезЗаказа() Экспорт
ДопустимыНазначенияБезЗаказа = ПолучитьФункциональнуюОпцию("ИспользоватьУчетЗатратПоНаправлениямДеятельности");
ДопустимыНазначенияБезЗаказа = ДопустимыНазначенияБезЗаказа
Или ПолучитьФункциональнуюОпцию("ИспользоватьПроизводствоНаСтороне")
Или ПолучитьФункциональнуюОпцию("ИспользоватьПроизводствоНаСтороне2_5");
Возврат ДопустимыНазначенияБезЗаказа;
КонецФункции
Функция СоздатьКорректировкуНазначенияТоваровНаОснованииЗаказаКлиентаПроверкаТипаНазначения(ОбъектОснование) Экспорт
РезультатПроверки = Новый Структура("ТекстОшибки", Неопределено);
Если ТипЗнч(ОбъектОснование) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Назначение = Документы.КорректировкаНазначенияТоваров.НазначениеЗаказа(ОбъектОснование);
Если ЗначениеЗаполнено(Назначение) Тогда
НазначениеТипНазначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "ТипНазначения");
Если НазначениеТипНазначения = Перечисления.ТипыНазначений.ПоставкаПодПринципала Тогда
РезультатПроверки.ТекстОшибки = НСтр("ru = 'Для данного типа назначения корректировка недоступна. Необходимо переделать исходные документы.'");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат РезультатПроверки;
КонецФункции
#КонецОбласти
#Область СтандартныеПодсистемы
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокумента.Дата КАК Период,
| ДанныеДокумента.Номер КАК Номер,
| ДанныеДокумента.ПометкаУдаления КАК ПометкаУдаления,
| ДанныеДокумента.Проведен КАК Проведен,
| ДанныеДокумента.Организация КАК Организация,
| ДанныеДокумента.Комментарий КАК Комментарий,
| ДанныеДокумента.Ссылка КАК Ссылка
|ИЗ
| Документ.КорректировкаНазначенияТоваров КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("Ссылка", Реквизиты.Ссылка);
Запрос.УстановитьПараметр("Период", Реквизиты.Период);
Запрос.УстановитьПараметр("ПометкаУдаления", Реквизиты.ПометкаУдаления);
Запрос.УстановитьПараметр("Номер", Реквизиты.Номер);
Запрос.УстановитьПараметр("Проведен", Реквизиты.Проведен);
Запрос.УстановитьПараметр("Комментарий", Реквизиты.Комментарий);
Запрос.УстановитьПараметр("Организация", Реквизиты.Организация);
Запрос.УстановитьПараметр("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.КорректировкаОбособленногоУчета);
Запрос.УстановитьПараметр("ИдентификаторМетаданных", ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(ДокументСсылка)));
Запрос.УстановитьПараметр("НомерНаПечать", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Реквизиты.Номер));
Запрос.УстановитьПараметр("НастройкаХозяйственнойОперации", Справочники.НастройкиХозяйственныхОпераций.КорректировкаОбособленногоУчета);
РасчетСебестоимостиПрикладныеАлгоритмы.ЗаполнитьПараметрыИнициализации(Запрос, Реквизиты);
КонецПроцедуры
Процедура ИнициализироватьКлючиАналитикиУчетаНоменклатуры(Запрос)
Если Запрос.Параметры.Свойство("КлючиАналитикиУчетаНоменклатурыИнициализированы") Тогда
Возврат;
КонецЕсли;
ЗапросАналитик = Новый Запрос("
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Ключи.Номенклатура КАК Номенклатура,
| Ключи.Характеристика КАК Характеристика,
| Ключи.Назначение КАК Назначение,
| Ключи.Серия КАК Серия,
| Ключи.МестоХранения КАК Склад
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| Товары.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| &ПустоеНазначение КАК Назначение,
| Товары.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| Товары.АналитикаУчетаНоменклатуры.МестоХранения КАК МестоХранения
| ИЗ
| Документ.КорректировкаНазначенияТоваров.ВидыЗапасов КАК Товары
| ГДЕ
| Товары.Ссылка = &Ссылка
| И НЕ &УчитыватьСебестоимостьТоваровПоНазначениям
| ) КАК Ключи
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
| ПО Ключи.Номенклатура = Аналитика.Номенклатура
| И Ключи.Характеристика = Аналитика.Характеристика
| И Ключи.Серия = Аналитика.Серия
| И ЗНАЧЕНИЕ(Справочник.СтатьиКалькуляции.ПустаяСсылка) = Аналитика.СтатьяКалькуляции
| И Ключи.МестоХранения = Аналитика.МестоХранения
| И Ключи.Назначение = Аналитика.Назначение
|ГДЕ
| Аналитика.Номенклатура ЕСТЬ NULL
|");
ЗапросАналитик.УстановитьПараметр("Ссылка", Запрос.Параметры.Ссылка);
ЗапросАналитик.УстановитьПараметр("УчитыватьСебестоимостьТоваровПоНазначениям", Запрос.Параметры.УчитыватьСебестоимостьТоваровПоНазначениям);
ЗапросАналитик.УстановитьПараметр("ПустоеНазначение", Справочники.Назначения.ПустаяСсылка());
Выборка = ЗапросАналитик.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
РегистрыСведений.АналитикаУчетаНоменклатуры.СоздатьКлючАналитики(Выборка);
КонецЦикла;
Запрос.УстановитьПараметр("КлючиАналитикиУчетаНоменклатурыИнициализированы", Истина);
КонецПроцедуры
Функция ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтВидыЗапасов";
ИнициализироватьКлючиАналитикиУчетаНоменклатуры(Запрос);
ТекстЗапроса =
"ВЫБРАТЬ
| ВЫБОР КОГДА ЕСТЬNULL(ВидыЗапасовВладельца.Организация, ЕСТЬNULL(ТаблицаВидыЗапасов.ВидЗапасов.Организация, ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) ТОГДА
| ЕСТЬNULL(ВидыЗапасовВладельца.Организация, ТаблицаВидыЗапасов.ВидЗапасов.Организация)
| ИНАЧЕ
| &Организация
| КОНЕЦ КАК Организация,
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.СкладскаяТерритория.ЦеховаяКладовая КАК ЦеховаяКладовая,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Назначение КАК Назначение,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование.Назначение КАК НовоеНазначение,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| АналитикаБезНазначения.КлючАналитики КАК АналитикаУчетаНоменклатурыБезНазначения,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| АналитикаБезНазначения.КлючАналитики КАК АналитикаУчетаНоменклатурыОприходованиеБезНазначения,
| ЕСТЬNULL(ВидыЗапасовВладельца.Ссылка, ТаблицаВидыЗапасов.ВидЗапасов) КАК ВидЗапасов,
| ВЫБОР КОГДА ТаблицаВидыЗапасов.ВидЗапасовОприходование = ЗНАЧЕНИЕ(Справочник.ВидыЗапасов.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(ВидыЗапасовВладельца.Ссылка, ТаблицаВидыЗапасов.ВидЗапасов.Ссылка)
| ИНАЧЕ ТаблицаВидыЗапасов.ВидЗапасовОприходование
| КОНЕЦ КАК ВидЗапасовОприходование,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки
|ПОМЕСТИТЬ ВтВидыЗапасов
|ИЗ
| Документ.КорректировкаНазначенияТоваров.ВидыЗапасов КАК ТаблицаВидыЗапасов
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК ВидыЗапасовВладельца
| ПО ТаблицаВидыЗапасов.ВидЗапасов.РеализацияЗапасовДругойОрганизации
| И ТаблицаВидыЗапасов.ВидЗапасов.ВидЗапасовВладельца = ВидыЗапасовВладельца.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаБезНазначения
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура = АналитикаБезНазначения.Номенклатура
| И ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Характеристика = АналитикаБезНазначения.Характеристика
| И ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Серия = АналитикаБезНазначения.Серия
| И ЗНАЧЕНИЕ(Справочник.СтатьиКалькуляции.ПустаяСсылка) = АналитикаБезНазначения.СтатьяКалькуляции
| И ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.МестоХранения = АналитикаБезНазначения.МестоХранения
| И ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка) = АналитикаБезНазначения.Назначение
|
|ГДЕ
| ТаблицаВидыЗапасов.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаТоварыОрганизаций(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ТоварыОрганизаций";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтВидыЗапасов", ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| 1 КАК Порядок,
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| &Период КАК Период,
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
| ТаблицаВидыЗапасов.Организация КАК Организация,
| ТаблицаВидыЗапасов.Организация КАК ОрганизацияОтгрузки,
| ТаблицаВидыЗапасов.Номенклатура КАК Номенклатура,
| ТаблицаВидыЗапасов.Характеристика КАК Характеристика,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование КАК КорВидЗапасов,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК КорАналитикаУчетаНоменклатуры
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2 КАК Порядок,
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| &Период КАК Период,
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| ТаблицаВидыЗапасов.Организация КАК Организация,
| НЕОПРЕДЕЛЕНО КАК ОрганизацияОтгрузки,
| ТаблицаВидыЗапасов.Номенклатура КАК Номенклатура,
| ТаблицаВидыЗапасов.Характеристика КАК Характеристика,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатуры,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ТаблицаВидыЗапасов.ВидЗапасов КАК КорВидЗапасов,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК КорАналитикаУчетаНоменклатуры
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| Порядок";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаДатыПоступленияТоваровОрганизаций(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДатыПоступленияТоваровОрганизаций";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтВидыЗапасов", ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| &Период КАК ДатаПоступления,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование КАК ВидЗапасов,
| ТаблицаВидыЗапасов.Номенклатура КАК Номенклатура,
| ТаблицаВидыЗапасов.Характеристика КАК Характеристика,
| ТаблицаВидыЗапасов.Серия КАК Серия,
| ТаблицаВидыЗапасов.НовоеНазначение КАК Назначение,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДатыПоступленияТоваровОрганизаций КАК ПоступленияТоваров
| ПО ТаблицаВидыЗапасов.ВидЗапасовОприходование = ПоступленияТоваров.ВидЗапасов
| И ТаблицаВидыЗапасов.Номенклатура = ПоступленияТоваров.Номенклатура
| И ТаблицаВидыЗапасов.Характеристика = ПоступленияТоваров.Характеристика
| И ТаблицаВидыЗапасов.Серия = ПоступленияТоваров.Серия
| И ТаблицаВидыЗапасов.НовоеНазначение = ПоступленияТоваров.Назначение
| И ТаблицаВидыЗапасов.НомерГТД = ПоступленияТоваров.НомерГТД
|
|ГДЕ
| (ПоступленияТоваров.ДатаПоступления ЕСТЬ NULL
| ИЛИ ПоступленияТоваров.ДатаПоступления < &Период)
|
|УПОРЯДОЧИТЬ ПО
| ТаблицаВидыЗапасов.ВидЗапасовОприходование,
| ТаблицаВидыЗапасов.Номенклатура,
| ТаблицаВидыЗапасов.Характеристика,
| ТаблицаВидыЗапасов.Серия,
| ТаблицаВидыЗапасов.НовоеНазначение,
| ТаблицаВидыЗапасов.НомерГТД";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаТоварыНаСкладах(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ТоварыНаСкладах";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Период КАК Период,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.Количество КАК ВНаличии,
| ТаблицаТовары.ИсходноеНазначение КАК ИсходноеНазначение,
| ТаблицаТовары.НовоеНазначение КАК НовоеНазначение
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| Документ.КорректировкаНазначенияТоваров.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И (ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ))
|;
|
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| ТаблицаТовары.Период КАК Период,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.ВНаличии КАК ВНаличии,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.НовоеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ЛОЖЬ КАК КонтролироватьОстатки
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ЕСТЬNULL(ТаблицаТовары.Упаковка.ТипУпаковки,
| НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
| ТаблицаТовары.Период,
| ТаблицаТовары.Склад,
| ТаблицаТовары.Помещение,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Серия,
| ТаблицаТовары.ВНаличии,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.ИсходноеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ,
| ИСТИНА
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| ЕСТЬNULL(ТаблицаТовары.Упаковка.ТипУпаковки,
| НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход),
| Подзапрос.Период,
| Подзапрос.Склад,
| Подзапрос.Помещение,
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Серия,
| МИНИМУМ(Подзапрос.ВНаличии),
| Подзапрос.Назначение,
| ЛОЖЬ
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТовары.Период КАК Период,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.Серия КАК Серия,
| СУММА(ТаблицаТовары.ВНаличии) КАК ВНаличии,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.НовоеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| ТаблицаТовары КАК ТаблицаТовары
| ГДЕ
| ТаблицаТовары.Упаковка.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Период,
| ТаблицаТовары.Склад,
| ТаблицаТовары.Помещение,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Упаковка,
| ТаблицаТовары.Серия,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.НовоеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ) КАК Подзапрос
|СГРУППИРОВАТЬ ПО
| Подзапрос.Период,
| Подзапрос.Склад,
| Подзапрос.Помещение,
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Серия,
| Подзапрос.Назначение,
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
| Подзапрос.Период,
| Подзапрос.Склад,
| Подзапрос.Помещение,
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Серия,
| МИНИМУМ(Подзапрос.ВНаличии),
| Подзапрос.Назначение,
| ИСТИНА
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТовары.Период КАК Период,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Помещение КАК Помещение,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.Серия КАК Серия,
| СУММА(ТаблицаТовары.ВНаличии) КАК ВНаличии,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.ИсходноеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
| ИЗ
| ТаблицаТовары КАК ТаблицаТовары
| ГДЕ
| ТаблицаТовары.Упаковка.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Период,
| ТаблицаТовары.Склад,
| ТаблицаТовары.Помещение,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Упаковка,
| ТаблицаТовары.Серия,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.ИсходноеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ) КАК Подзапрос
|СГРУППИРОВАТЬ ПО
| Подзапрос.Период,
| Подзапрос.Склад,
| Подзапрос.Помещение,
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Серия,
| Подзапрос.Назначение,
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаТоварыВЯчейках(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ТоварыВЯчейках";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &Период КАК Период,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
| ТаблицаТовары.Ячейка КАК Ячейка,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| ТОГДА ТаблицаТовары.Упаковка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| ТОГДА ТаблицаТовары.КоличествоУпаковок
| ИНАЧЕ ТаблицаТовары.Количество
| КОНЕЦ КАК ВНаличии,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.НовоеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение
|ИЗ
| Документ.КорректировкаНазначенияТоваров.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И (ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ))
| И ВЫБОР
| КОГДА ТаблицаТовары.Склад.ИспользоватьСкладскиеПомещения
| И &Период >= ТаблицаТовары.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ТаблицаТовары.Помещение.ИспользоватьАдресноеХранение
| И &Период >= ТаблицаТовары.Помещение.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОГДА ТаблицаТовары.Склад.ИспользоватьАдресноеХранение
| И &Период >= ТаблицаТовары.Склад.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
| &Период,
| ТаблицаТовары.НомерСтроки,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Серия,
| ТаблицаТовары.Ячейка,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| ТОГДА ТаблицаТовары.Упаковка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| ТОГДА ТаблицаТовары.КоличествоУпаковок
| ИНАЧЕ ТаблицаТовары.Количество
| КОНЕЦ,
| ВЫБОР
| КОГДА ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ТОГДА ТаблицаТовары.ИсходноеНазначение
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
|ИЗ
| Документ.КорректировкаНазначенияТоваров.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И (ЕСТЬNULL(ТаблицаТовары.НовоеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ)
| ИЛИ ЕСТЬNULL(ТаблицаТовары.ИсходноеНазначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ))
| И ВЫБОР
| КОГДА ТаблицаТовары.Склад.ИспользоватьСкладскиеПомещения
| И &Период >= ТаблицаТовары.Склад.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА ТаблицаТовары.Помещение.ИспользоватьАдресноеХранение
| И &Период >= ТаблицаТовары.Помещение.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОГДА ТаблицаТовары.Склад.ИспользоватьАдресноеХранение
| И &Период >= ТаблицаТовары.Склад.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаДвиженияНоменклатураНоменклатура(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ДвиженияНоменклатураНоменклатура";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтВидыЗапасов", ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Период КАК Период,
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ТаблицаВидыЗапасов.Организация, &Организация) КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.СкладскаяТерритория.Подразделение КАК Подразделение,
|
| ВЫБОР КОГДА &УчитыватьСебестоимостьТоваровПоНазначениям
| ТОГДА ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры
| ИНАЧЕ ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыБезНазначения
| КОНЕЦ КАК АналитикаУчетаНоменклатуры,
| ВЫБОР КОГДА &УчитыватьСебестоимостьТоваровПоНазначениям
| ТОГДА ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.Назначение.НаправлениеДеятельности
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК НаправлениеДеятельности,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.МестоХранения КАК Склад,
| ТаблицаВидыЗапасов.ВидЗапасов.ТипЗапасов КАК ТипЗапасов,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
|
| ВЫБОР КОГДА &УчитыватьСебестоимостьТоваровПоНазначениям
| ТОГДА ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование
| ИНАЧЕ ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходованиеБезНазначения
| КОНЕЦ КАК КорАналитикаУчетаНоменклатуры,
| ВЫБОР КОГДА &УчитыватьСебестоимостьТоваровПоНазначениям
| ТОГДА ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование.Назначение.НаправлениеДеятельности
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК КорНаправлениеДеятельности,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.МестоХранения КАК КорСклад,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование.ТипЗапасов КАК КорТипЗапасов,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование КАК КорВидЗапасов,
|
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.Количество КАК КорКоличество,
|
| 0 КАК Стоимость,
| 0 КАК СтоимостьБезНДС,
| 0 КАК СтоимостьРегл,
|
| ТаблицаВидыЗапасов.ВидЗапасов КАК ИсточникГФУНоменклатуры,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование КАК КорИсточникГФУНоменклатуры
|
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
|ГДЕ
| ТаблицаВидыЗапасов.ВидЗапасов.ТипЗапасов <> ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.ПолуфабрикатДавальца)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "РеестрДокументов";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Ссылка КАК Ссылка,
| &Период КАК ДатаДокументаИБ,
| &Номер КАК НомерДокументаИБ,
| &ИдентификаторМетаданных КАК ТипСсылки,
| &Организация КАК Организация,
| НЕОПРЕДЕЛЕНО КАК ХозяйственнаяОперация,
| НЕОПРЕДЕЛЕНО КАК Партнер,
| НЕОПРЕДЕЛЕНО КАК Контрагент,
| НЕОПРЕДЕЛЕНО КАК Договор,
| НЕОПРЕДЕЛЕНО КАК НаправлениеДеятельности,
| НЕОПРЕДЕЛЕНО КАК МестоХранения,
| НЕОПРЕДЕЛЕНО КАК Подразделение,
| НЕОПРЕДЕЛЕНО КАК Ответственный,
| &Комментарий КАК Комментарий,
| НЕОПРЕДЕЛЕНО КАК Валюта,
| НЕОПРЕДЕЛЕНО КАК Сумма,
| НЕОПРЕДЕЛЕНО КАК Статус,
| &Проведен КАК Проведен,
| &ПометкаУдаления КАК ПометкаУдаления,
| ЛОЖЬ КАК ДополнительнаяЗапись,
| НЕОПРЕДЕЛЕНО КАК Дополнительно,
| &Период КАК ДатаПервичногоДокумента,
| &НомерНаПечать КАК НомерПервичногоДокумента,
| &Период КАК ДатаОтраженияВУчете";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаВременнаяТаблицаТовары =
"ВЫБРАТЬ
| ТаблицаТоваров.Ссылка КАК Ссылка,
| ТаблицаТоваров.Ссылка.Дата КАК Период,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Склад КАК Склад,
| ТаблицаТоваров.ИсходноеНазначение КАК ИсходноеНазначение,
| ТаблицаТоваров.НовоеНазначение КАК НовоеНазначение,
| ТаблицаТоваров.Количество КАК Количество
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| Документ.КорректировкаНазначенияТоваров.Товары КАК ТаблицаТоваров
|ГДЕ
| ТаблицаТоваров.Ссылка = &Ссылка
| И ЕСТЬNULL(ТаблицаТоваров.Упаковка.ТипУпаковки,
| НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Подзапрос.Ссылка,
| Подзапрос.Ссылка.Дата,
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Склад,
| Подзапрос.ИсходноеНазначение,
| Подзапрос.НовоеНазначение,
| МИНИМУМ(Подзапрос.Количество)
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТоварныхМест.Ссылка КАК Ссылка,
| ТаблицаТоварныхМест.Номенклатура КАК Номенклатура,
| ТаблицаТоварныхМест.Характеристика КАК Характеристика,
| ТаблицаТоварныхМест.Упаковка КАК Упаковка,
| ТаблицаТоварныхМест.Склад КАК Склад,
| ТаблицаТоварныхМест.ИсходноеНазначение КАК ИсходноеНазначение,
| ТаблицаТоварныхМест.НовоеНазначение КАК НовоеНазначение,
| СУММА(ТаблицаТоварныхМест.Количество) КАК Количество
| ИЗ
| Документ.КорректировкаНазначенияТоваров.Товары КАК ТаблицаТоварныхМест
| ГДЕ
| ТаблицаТоварныхМест.Ссылка = &Ссылка
| И ТаблицаТоварныхМест.Упаковка.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
| СГРУППИРОВАТЬ ПО
| ТаблицаТоварныхМест.Ссылка,
| ТаблицаТоварныхМест.Номенклатура,
| ТаблицаТоварныхМест.Характеристика,
| ТаблицаТоварныхМест.Упаковка,
| ТаблицаТоварныхМест.Склад,
| ТаблицаТоварныхМест.ИсходноеНазначение,
| ТаблицаТоварныхМест.НовоеНазначение) КАК Подзапрос
|СГРУППИРОВАТЬ ПО
| Подзапрос.Ссылка,
| Подзапрос.Ссылка.Дата,
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Склад,
| Подзапрос.ИсходноеНазначение,
| Подзапрос.НовоеНазначение";
ТекстыЗапроса.Добавить(ТекстЗапросаВременнаяТаблицаТовары);
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Склад КАК Склад,
| ТабЧасть.ИсходноеНазначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| НЕОПРЕДЕЛЕНО КАК ЗапланированныйРасходРаспределенногоЗапаса,
| ИСТИНА КАК КонтрольСвободногоОстатка
|ИЗ
| ТаблицаТоваров КАК ТабЧасть";
РаспределениеЗапасовДвижения.РасходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть);
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Склад КАК Склад,
| ТабЧасть.НовоеНазначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| ЛОЖЬ КАК ПоГрафику,
| НЕОПРЕДЕЛЕНО КАК РаспоряжениеВГрафике
|ИЗ
| ТаблицаТоваров КАК ТабЧасть";
РаспределениеЗапасовДвижения.ПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть, Неопределено, Ложь);
КонецПроцедуры
#Область ПартионныйУчет
Функция ОписаниеРегистровУчетаЗатратИСебестоимости(Документ) Экспорт
ОписаниеРегистров = Новый Массив;
ОписаниеРегистров.Добавить(Метаданные.РегистрыНакопления.СебестоимостьТоваров);
Возврат ОписаниеРегистров;
КонецФункции
Функция УстановитьДополнительныеПараметрыОперацийУчетаЗатратИСебестоимости(Документ, Запрос = Неопределено) Экспорт
ДополнительныеПараметры = Новый Массив;
Если Запрос <> Неопределено Тогда
КонецЕсли;
Возврат ДополнительныеПараметры;
КонецФункции
Функция СформироватьДополнительныеТаблицыОперацийУчетаЗатратИСебестоимости(Документ, Запрос = Неопределено, ТекстыЗапроса = Неопределено) Экспорт
ДополнительныеТаблицы = Новый Массив;
ДополнительныеТаблицы.Добавить("ВтВидыЗапасов");
Если Запрос <> Неопределено Тогда
Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса(ДополнительныеТаблицы[0], ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыЗапасов(Запрос, ТекстыЗапроса);
КонецЕсли;
КонецЕсли;
Возврат ДополнительныеТаблицы;
КонецФункции
Функция ОписаниеОперацийУчетаСебестоимости(Документ) Экспорт
ОписаниеОпераций = Новый Массив;
#Область Перемещение_Товар
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаДокумента.Дата КАК Период,
| ТаблицаДокумента.Ссылка КАК Ссылка,
| НЕОПРЕДЕЛЕНО КАК КорректируемыйДокумент,
|
| ЕСТЬNULL(ТаблицаВидыЗапасов.Организация,
| ТаблицаДокумента.Организация) КАК Организация,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ВЫБОР КОГДА &ПартионныйУчетВерсии22
| ТОГДА ЕСТЬNULL(ТаблицаВидыЗапасов.НовоеНазначение.ВидДеятельностиНДС, ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка))
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка)
| КОНЕЦ КАК ВидДеятельностиНДС,
| ЕСТЬNULL(ТаблицаВидыЗапасов.НовоеНазначение.ВидДеятельностиНДС,
| ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка)) КАК ВидДеятельностиНДСДокумента,
|
| НЕОПРЕДЕЛЕНО КАК КорОрганизация,
| НЕОПРЕДЕЛЕНО КАК КорПартия,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК КорАналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.ВидЗапасовОприходование КАК КорВидЗапасов,
|
| НЕОПРЕДЕЛЕНО КАК Сделка,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры.СкладскаяТерритория.Подразделение КАК Подразделение,
| НЕОПРЕДЕЛЕНО КАК Менеджер,
| НЕОПРЕДЕЛЕНО КАК ГруппаПродукции,
|
| ТаблицаВидыЗапасов.Количество КАК Количество,
| НЕОПРЕДЕЛЕНО КАК ИдентификаторСтроки,
|
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КорректировкаОбособленногоУчета) КАК ХозяйственнаяОперация,
| ТаблицаВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторФинЗаписи,
| &НастройкаХозяйственнойОперации КАК НастройкаХозяйственнойОперации
|
|ИЗ
| Документ.КорректировкаНазначенияТоваров КАК ТаблицаДокумента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтВидыЗапасов КАК ТаблицаВидыЗапасов
| ПО ИСТИНА
|ГДЕ
| ТаблицаДокумента.Ссылка В (&Ссылка)
| И (&УчитыватьСебестоимостьТоваровПоНазначениям
| ИЛИ ТаблицаВидыЗапасов.ВидЗапасов <> ТаблицаВидыЗапасов.ВидЗапасовОприходование)
|";
РасчетСебестоимостиПроведениеДокументов.ДобавитьОписаниеОперацииДляОтраженияВУчетеСебестоимости(
ОписаниеОпераций,
Перечисления.ОперацииУчетаСебестоимости.Перемещение,
ТекстЗапроса);
#КонецОбласти
Возврат ОписаниеОпераций;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область ЗаполнениеТабличнойЧасти
#Область ЗаполнениеПоОстаткам
Функция ТекстЗапросаИсточникДанных(ВТалицеОтбораЕстьНазначение)
ТекстЗапроса =
"ВЫБРАТЬ
| Набор.Назначение КАК Назначение,
| Набор.Номенклатура КАК Номенклатура,
| Набор.Характеристика КАК Характеристика,
| Набор.Склад КАК Склад,
| СУММА(Набор.Запас) КАК Запас,
| СУММА(Набор.Резерв) КАК Резерв,
| СУММА(Набор.КЗаказу) КАК КЗаказу,
| СУММА(Набор.Потребность) КАК Потребность
|ПОМЕСТИТЬ ИсточникДанных
|ИЗ(
| ВЫБРАТЬ
| ВЫБОР КОГДА &СвернутьНазначения ТОГДА
| НЕОПРЕДЕЛЕНО
| ИНАЧЕ
| ТаблицаОстатков.Назначение
| КОНЕЦ КАК Назначение,
| ТаблицаОстатков.Номенклатура КАК Номенклатура,
| ТаблицаОстатков.Характеристика КАК Характеристика,
| ТаблицаОстатков.Склад КАК Склад,
| ТаблицаОстатков.ВНаличииОстаток КАК Запас,
| ТаблицаОстатков.ВНаличииОстаток
| - ВЫБОР
| КОГДА ТаблицаОстатков.ВНаличииОстаток
| - ТаблицаОстатков.РезервироватьНаСкладеОстаток
| - ТаблицаОстатков.РезервироватьПоМереПоступленияОстаток > 0
| ТОГДА
| ТаблицаОстатков.ВНаличииОстаток
| - ТаблицаОстатков.РезервироватьНаСкладеОстаток
| - ТаблицаОстатков.РезервироватьПоМереПоступленияОстаток
| ИНАЧЕ 0
| КОНЕЦ КАК Резерв,
| ТаблицаОстатков.РезервироватьНаСкладеОстаток
| + ТаблицаОстатков.РезервироватьПоМереПоступленияОстаток
| + ТаблицаОстатков.ОтложитьРезервированиеОстаток
| + ТаблицаОстатков.КОбеспечениюОстаток
| - ТаблицаОстатков.ВНаличииОстаток
| - ТаблицаОстатков.ЗаказаноОстаток КАК КЗаказу,
| ТаблицаОстатков.РезервироватьНаСкладеОстаток
| + ТаблицаОстатков.РезервироватьПоМереПоступленияОстаток
| + ТаблицаОстатков.ОтложитьРезервированиеОстаток
| + ТаблицаОстатков.КОбеспечениюОстаток КАК Потребность
| ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Склад ССЫЛКА Справочник.Склады
| И Назначение В(
| ВЫБРАТЬ
| Отбор.Назначение КАК Назначение
| ИЗ
| ОтборНазначений КАК Отбор)
| И (&ВсеТовары
| ИЛИ (Номенклатура, Характеристика, &ПолеНазначениеПараметровВиртуальныхТаблиц) В(
| ВЫБРАТЬ
| Отбор.Номенклатура КАК Номенклатура,
| Отбор.Характеристика КАК Характеристика,
| &ПолеНазначениеОтбора
| ИЗ
| ОтборТоваров КАК Отбор))) КАК ТаблицаОстатков
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВЫБОР КОГДА &СвернутьНазначения ТОГДА
| НЕОПРЕДЕЛЕНО
| ИНАЧЕ
| ТаблицаОстатков.Назначение
| КОНЕЦ КАК Назначение,
| ТаблицаОстатков.Номенклатура КАК Номенклатура,
| ТаблицаОстатков.Характеристика КАК Характеристика,
| ТаблицаОстатков.Склад КАК Склад,
| ВЫБОР
| КОГДА ТаблицаОстатков.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА
| ТаблицаОстатков.ВНаличии
| ИНАЧЕ -ТаблицаОстатков.ВНаличии
| КОНЕЦ КАК Запас,
| 0 КАК Резерв,
| ВЫБОР
| КОГДА ТаблицаОстатков.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА
| ТаблицаОстатков.ВНаличии
| ИНАЧЕ -ТаблицаОстатков.ВНаличии
| КОНЕЦ КАК КЗаказу,
| 0 КАК Потребность
| ИЗ
| РегистрНакопления.ЗапасыИПотребности КАК ТаблицаОстатков
| ГДЕ
| ТаблицаОстатков.Склад ССЫЛКА Справочник.Склады
| И ТаблицаОстатков.Назначение В(
| ВЫБРАТЬ
| Отбор.Назначение КАК Назначение
| ИЗ
| ОтборНазначений КАК Отбор)
| И (&ВсеТовары ИЛИ (ТаблицаОстатков.Номенклатура, ТаблицаОстатков.Характеристика, &ПолеНазначениеТаблицыОстатков) В(
| ВЫБРАТЬ
| Отбор.Номенклатура КАК Номенклатура,
| Отбор.Характеристика КАК Характеристика,
| &ПолеНазначениеОтбора
| ИЗ
| ОтборТоваров КАК Отбор))
| И ТаблицаОстатков.Активность
| И ТаблицаОстатков.Регистратор = &Регистратор
|) КАК Набор
|СГРУППИРОВАТЬ ПО
| Набор.Назначение,
| Набор.Номенклатура,
| Набор.Характеристика,
| Набор.Склад";
ПолеНазначениеПараметровВиртуальныхТаблиц = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
ПолеНазначениеТаблицыОстатков = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
ПолеНазначениеОтбора = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
Если ВТалицеОтбораЕстьНазначение Тогда
ПолеНазначениеТаблицыОстатков = "ТаблицаОстатков.Назначение";
ПолеНазначениеПараметровВиртуальныхТаблиц = "Назначение";
ПолеНазначениеОтбора = "Отбор.Назначение";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеНазначениеПараметровВиртуальныхТаблиц", ПолеНазначениеПараметровВиртуальныхТаблиц);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеНазначениеТаблицыОстатков", ПолеНазначениеТаблицыОстатков);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеНазначениеОтбора", ПолеНазначениеОтбора);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаСвободныеОстатки()
ТекстЗапроса =
"ВЫБРАТЬ
| Набор.Номенклатура КАК Номенклатура,
| Набор.Характеристика КАК Характеристика,
| Набор.Склад КАК Склад,
| СУММА(Набор.Потребность) КАК Потребность,
| СУММА(Набор.Запас) КАК Запас,
| СУММА(Набор.Резерв) КАК Резерв,
| СУММА(Набор.Свободно) КАК Свободно
|ПОМЕСТИТЬ СвободныеОстатки
|ИЗ(
| ВЫБРАТЬ
| ЗапасыИПотребности.Номенклатура КАК Номенклатура,
| ЗапасыИПотребности.Характеристика КАК Характеристика,
| ЗапасыИПотребности.Склад КАК Склад,
| ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| + ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток
| + ЗапасыИПотребности.ОтложитьРезервированиеОстаток
| + ЗапасыИПотребности.КОбеспечениюОстаток КАК Потребность,
| ВЫБОР
| КОГДА ЗапасыИПотребности.ВНаличииОстаток
| - ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| - ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток > 0
| ТОГДА
| ЗапасыИПотребности.ВНаличииОстаток
| - ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| - ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток
| ИНАЧЕ 0
| КОНЕЦ КАК Свободно,
| ЗапасыИПотребности.ВНаличииОстаток КАК Запас,
| ЗапасыИПотребности.ВНаличииОстаток
| - ВЫБОР
| КОГДА ЗапасыИПотребности.ВНаличииОстаток
| - ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| - ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток > 0
| ТОГДА
| ЗапасыИПотребности.ВНаличииОстаток
| - ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| - ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток
| ИНАЧЕ 0
| КОНЕЦ КАК Резерв
| ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| &ОстатокНаСкладе
| И (Номенклатура, Характеристика) В(
| ВЫБРАТЬ
| ОтборТоваров.Номенклатура КАК Номенклатура,
| ОтборТоваров.Характеристика КАК Характеристика
| ИЗ
| ОтборТоваровИсточникаДанных КАК ОтборТоваров)
| И Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК ЗапасыИПотребности
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДвиженияДокумента.Номенклатура КАК Номенклатура,
| ДвиженияДокумента.Характеристика КАК Характеристика,
| ДвиженияДокумента.Склад КАК Склад,
| 0 КАК Потребность,
| ВЫБОР
| КОГДА ДвиженияДокумента.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА
| ДвиженияДокумента.ВНаличии
| ИНАЧЕ -ДвиженияДокумента.ВНаличии
| КОНЕЦ КАК Свободно,
| ВЫБОР
| КОГДА ДвиженияДокумента.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА
| ДвиженияДокумента.ВНаличии
| ИНАЧЕ -ДвиженияДокумента.ВНаличии
| КОНЕЦ КАК Запас,
| 0 КАК Резерв
| ИЗ
| РегистрНакопления.ЗапасыИПотребности КАК ДвиженияДокумента
| ГДЕ
| &ОстатокНаСкладе
| И (ДвиженияДокумента.Номенклатура, ДвиженияДокумента.Характеристика) В(
| ВЫБРАТЬ
| ОтборТоваров.Номенклатура КАК Номенклатура,
| ОтборТоваров.Характеристика КАК Характеристика
| ИЗ
| ОтборТоваровИсточникаДанных КАК ОтборТоваров)
| И ДвиженияДокумента.Активность
| И ДвиженияДокумента.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И ДвиженияДокумента.Регистратор = &Регистратор
|) КАК Набор
|СГРУППИРОВАТЬ ПО
| Набор.Номенклатура,
| Набор.Характеристика,
| Набор.Склад";
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаОбеспечениеЗаказов()
ТекстЗапроса =
"ВЫБРАТЬ
| Набор.Назначение КАК Назначение,
| Набор.Номенклатура КАК Номенклатура,
| Набор.Характеристика КАК Характеристика,
| Набор.Склад КАК Склад,
| СУММА(Набор.Потребность) КАК Потребность,
| СУММА(Набор.Запас) КАК Запас,
| СУММА(Набор.Резерв) КАК Резерв
|ПОМЕСТИТЬ ОбеспечениеЗаказов
|ИЗ(
| ВЫБРАТЬ
| ЗапасыИПотребности.Назначение КАК Назначение,
| ЗапасыИПотребности.Номенклатура КАК Номенклатура,
| ЗапасыИПотребности.Характеристика КАК Характеристика,
| ЗапасыИПотребности.Склад КАК Склад,
| ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| + ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток
| + ЗапасыИПотребности.ОтложитьРезервированиеОстаток
| + ЗапасыИПотребности.КОбеспечениюОстаток КАК Потребность,
| ЗапасыИПотребности.ВНаличииОстаток КАК Запас,
| ЗапасыИПотребности.ВНаличииОстаток
| - ВЫБОР
| КОГДА ЗапасыИПотребности.ВНаличииОстаток
| - ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| - ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток > 0
| ТОГДА
| ЗапасыИПотребности.ВНаличииОстаток
| - ЗапасыИПотребности.РезервироватьНаСкладеОстаток
| - ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток
| ИНАЧЕ 0
| КОНЕЦ КАК Резерв
| ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Назначение В(
| ВЫБРАТЬ
| Отбор.Назначение КАК Назначение
| ИЗ
| ОтборНазначенийИсточников КАК Отбор)
| И (Номенклатура, Характеристика) В(
| ВЫБРАТЬ
| ОтборТоваров.Номенклатура КАК Номенклатура,
| ОтборТоваров.Характеристика КАК Характеристика
| ИЗ
| ОтборТоваровИсточникаДанных КАК ОтборТоваров)) КАК ЗапасыИПотребности
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДвиженияДокумента.Назначение КАК Назначение,
| ДвиженияДокумента.Номенклатура КАК Номенклатура,
| ДвиженияДокумента.Характеристика КАК Характеристика,
| ДвиженияДокумента.Склад КАК Склад,
| 0 КАК Потребность,
| ВЫБОР
| КОГДА ДвиженияДокумента.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА
| ДвиженияДокумента.ВНаличии
| ИНАЧЕ -ДвиженияДокумента.ВНаличии
| КОНЕЦ КАК Запас,
| 0 КАК Резерв
| ИЗ
| РегистрНакопления.ЗапасыИПотребности КАК ДвиженияДокумента
| ГДЕ
| ДвиженияДокумента.Назначение В(
| ВЫБРАТЬ
| Отбор.Назначение КАК Назначение
| ИЗ
| ОтборНазначенийИсточников КАК Отбор)
| И (ДвиженияДокумента.Номенклатура, ДвиженияДокумента.Характеристика) В(
| ВЫБРАТЬ
| ОтборТоваров.Номенклатура КАК Номенклатура,
| ОтборТоваров.Характеристика КАК Характеристика
| ИЗ
| ОтборТоваровИсточникаДанных КАК ОтборТоваров)
| И ДвиженияДокумента.Активность
| И ДвиженияДокумента.Регистратор = &Регистратор
|
|) КАК Набор
|СГРУППИРОВАТЬ ПО
| Набор.Назначение,
| Набор.Номенклатура,
| Набор.Характеристика,
| Набор.Склад";
Возврат ТекстЗапроса;
КонецФункции
Функция ВременнаяТаблицаЗаказыНаПеремещение(ВТаблицеИтоговЕстьНазначение)
Текст =
"ВЫБРАТЬ
| Таблица.Назначение КАК Назначение,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| СУММА(ВЫБОР КОГДА Таблица.КОбеспечению > Таблица.Запас Тогда
| Таблица.Запас
| ИНАЧЕ
| Таблица.КОбеспечению
| КОНЕЦ) КАК Количество
|ПОМЕСТИТЬ ЗаказыНаПеремещение
|ИЗ(
| ВЫБРАТЬ
| ТаблицаИтогов.Заказ КАК Заказ,
| &ЗапасыИПотребностиНазначениеВыборкаПереопределяемый КАК Назначение,
| ТаблицаИтогов.Номенклатура КАК Номенклатура,
| ТаблицаИтогов.Характеристика КАК Характеристика,
| ТаблицаИтогов.КОбеспечениюОстаток КАК КОбеспечению,
| ТаблицаИтогов.ЗаказаноОстаток КАК Запас
| ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| (Номенклатура, Характеристика, &ЗапасыИПотребностиНазначениеПереопределяемый) В(
| ВЫБРАТЬ
| ТаблицаИтогов.Номенклатура КАК Номенклатура,
| ТаблицаИтогов.Характеристика КАК Характеристика,
| &ТаблицаИтоговНазначениеПереопределяемый КАК Назначение
| ИЗ
| ТаблицаИтогов КАК ТаблицаИтогов)
| И (&ВТаблицеИтоговЕстьНазначениеПереопределяемый
| ИЛИ Назначение В(
| ВЫБРАТЬ
| ОтборНазначений.Назначение КАК Назначение
| ИЗ
| ОтборНазначений КАК ОтборНазначений))) КАК ТаблицаИтогов
| ГДЕ
| ТаблицаИтогов.КОбеспечениюОстаток <> 0 И ТаблицаИтогов.ЗаказаноОстаток <> 0
|) Таблица
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Назначение
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Назначение";
РаспределениеЗапасовНазначение = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
ЗапасыИПотребностиНазначение = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
ЗапасыИПотребностиНазначениеВыборка = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
ТаблицаИтоговНазначение = "ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)";
ВТаблицеИтоговЕстьНазначениеПереопределяемый = "ЛОЖЬ";
Если ВТаблицеИтоговЕстьНазначение Тогда
РаспределениеЗапасовНазначение = "РаспределениеЗапасов.Назначение";
ТаблицаИтоговНазначение = "ТаблицаИтогов.НазначениеДляИтогов";
ВТаблицеИтоговЕстьНазначениеПереопределяемый = "ИСТИНА";
ЗапасыИПотребностиНазначение = "Назначение";
ЗапасыИПотребностиНазначениеВыборка = "ТаблицаИтогов.Назначение";
КонецЕсли;
Текст = СтрЗаменить(Текст, "&ЗапасыИПотребностиНазначениеПереопределяемый", ЗапасыИПотребностиНазначение);
Текст = СтрЗаменить(Текст, "&РаспределениеЗапасовНазначениеПереопределяемый", РаспределениеЗапасовНазначение);
Текст = СтрЗаменить(Текст, "&ТаблицаИтоговНазначениеПереопределяемый", ТаблицаИтоговНазначение);
Текст = СтрЗаменить(Текст, "&ВТаблицеИтоговЕстьНазначениеПереопределяемый", ВТаблицеИтоговЕстьНазначениеПереопределяемый);
Текст = СтрЗаменить(Текст, "&ЗапасыИПотребностиНазначениеВыборкаПереопределяемый", ЗапасыИПотребностиНазначениеВыборка);
Возврат Текст;
КонецФункции
#КонецОбласти
Функция ТаблицаПомещенияЯчейкиПоТоварам(ТаблицаТовары, Ссылка, ТолькоОтмеченные = Истина) Экспорт
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(таб.ИсходноеНазначение КАК Справочник.Назначения) КАК Назначение,
| таб.Номенклатура КАК Номенклатура,
| таб.Характеристика КАК Характеристика,
| таб.Склад КАК Склад,
| таб.ИспользованиеСерий КАК ИспользованиеСерий,
| таб.ИспользованиеПомещенийЯчеек КАК ИспользованиеПомещенийЯчеек,
| таб.Запас - Таб.Резерв КАК СвободныйОстаток,
| таб.Количество КАК Количество
|ПОМЕСТИТЬ ВтТоварыЗаказа
|ИЗ
| &ТаблицаТовары КАК таб
|ИНДЕКСИРОВАТЬ ПО
| Назначение, Номенклатура, Характеристика, Склад
|;
|
|
|ВЫБРАТЬ
| Склады.Ссылка КАК Склад,
| ЕСТЬNULL(СкладыИПомещения.Ссылка, ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)) КАК Помещение,
| ВЫБОР
| КОГДА Склады.Ссылка.ИспользоватьСкладскиеПомещения
| И &Дата >= Склады.Ссылка.ДатаНачалаИспользованияСкладскихПомещений
| ТОГДА ВЫБОР
| КОГДА СкладыИПомещения.Ссылка.ИспользоватьАдресноеХранение
| И &Дата >= СкладыИПомещения.Ссылка.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Склады.Ссылка.ИспользоватьАдресноеХранение
| И &Дата >= Склады.Ссылка.ДатаНачалаАдресногоХраненияОстатков
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ИспользоватьАдресноеХранение
|ПОМЕСТИТЬ СкладыИПомещения
|ИЗ
| Справочник.Склады КАК Склады
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СкладскиеПомещения КАК СкладыИПомещения
| ПО СкладыИПомещения.Владелец = Склады.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтТоварыЗаказа КАК СкладыЗаказа
| ПО СкладыЗаказа.Склад = Склады.Ссылка
|ИНДЕКСИРОВАТЬ ПО
| Склад, Помещение, ИспользоватьАдресноеХранение
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВсеАналитики.КлючАналитики КАК АналитикаУчетаНоменклатуры
|ПОМЕСТИТЬ ТоварыОрганизацийОтбор
|ИЗ
| РегистрСведений.АналитикаУчетаНоменклатуры КАК ВсеАналитики
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтТоварыЗаказа КАК Фильтр
| ПО Фильтр.Назначение = ВсеАналитики.Назначение
| И Фильтр.Номенклатура = ВсеАналитики.Номенклатура
| И Фильтр.Характеристика = ВсеАналитики.Характеристика
| И Фильтр.Склад = ВсеАналитики.МестоХранения
|ГДЕ
| НЕ Фильтр.Назначение.ДвиженияПоСкладскимРегистрам
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Назначение КАК Назначение,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Ячейки.Ссылка КАК Ячейка
|ПОМЕСТИТЬ ТоварыВЯчейкахОтбор
|ИЗ
| ВтТоварыЗаказа КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкладскиеЯчейки КАК Ячейки
| ПО Ячейки.Владелец = Таблица.Склад
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ СкладыИПомещения КАК СкладыИПомещения
| ПО СкладыИПомещения.Помещение = Ячейки.Помещение
| И СкладыИПомещения.Склад = Ячейки.Владелец
|ГДЕ
| ЕСТЬNULL(Таблица.Назначение.ДвиженияПоСкладскимРегистрам, ИСТИНА)
| И СкладыИПомещения.ИспользоватьАдресноеХранение
|ИНДЕКСИРОВАТЬ ПО
| Назначение, Номенклатура, Характеристика, Ячейка
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Назначение КАК Назначение,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
| СкладыИПомещения.Помещение КАК Помещение
|ПОМЕСТИТЬ ТоварыНаСкладахОтбор
|ИЗ
| ВтТоварыЗаказа КАК Таблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ СкладыИПомещения КАК СкладыИПомещения
| ПО СкладыИПомещения.Склад = Таблица.Склад
|ГДЕ
| ЕСТЬNULL(Таблица.Назначение.ДвиженияПоСкладскимРегистрам, ИСТИНА)
| И НЕ СкладыИПомещения.ИспользоватьАдресноеХранение
|ИНДЕКСИРОВАТЬ ПО
| Назначение, Номенклатура, Характеристика, Склад, Помещение
|;
|
|
|ВЫБРАТЬ
| Остатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| Остатки.КоличествоОстаток КАК ВНаличии
|ПОМЕСТИТЬ ТоварыОрганизаций
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Остатки(,
| АналитикаУчетаНоменклатуры В(
| ВЫБРАТЬ
| Фильтр.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
| ИЗ
| ТоварыОрганизацийОтбор КАК Фильтр)) КАК Остатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Движения.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ВЫБОР
| КОГДА Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -Движения.Количество
| ИНАЧЕ Движения.Количество
| КОНЕЦ КАК ВНаличии
|ИЗ
| РегистрНакопления.ТоварыОрганизаций КАК Движения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыОрганизацийОтбор КАК Фильтр
| ПО Фильтр.АналитикаУчетаНоменклатуры = Движения.АналитикаУчетаНоменклатуры
|ГДЕ
| Движения.Регистратор = &Регистратор
| И Движения.Активность
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры
|;
|
|
|ВЫБРАТЬ
| Остатки.Назначение КАК Назначение,
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Характеристика КАК Характеристика,
| Остатки.Ячейка КАК Ячейка,
| Остатки.Упаковка КАК Упаковка,
| Остатки.Серия КАК Серия,
| Остатки.ВНаличииОстаток - Остатки.КОтборуОстаток КАК ВНаличии
|ПОМЕСТИТЬ ТоварыВЯчейках
|ИЗ
| РегистрНакопления.ТоварыВЯчейках.Остатки(,
| (Назначение, Номенклатура, Характеристика, Ячейка) В(
| ВЫБРАТЬ
| Фильтр.Назначение КАК Назначение,
| Фильтр.Номенклатура КАК Номенклатура,
| Фильтр.Характеристика КАК Характеристика,
| Фильтр.Ячейка КАК Ячейка
| ИЗ
| ТоварыВЯчейкахОтбор КАК Фильтр)) КАК Остатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Движения.Назначение КАК Назначение,
| Движения.Номенклатура КАК Номенклатура,
| Движения.Характеристика КАК Характеристика,
| Движения.Ячейка КАК Ячейка,
| Движения.Упаковка КАК Упаковка,
| Движения.Серия КАК Серия,
| ВЫБОР
| КОГДА Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -Движения.ВНаличии
| ИНАЧЕ Движения.ВНаличии
| КОНЕЦ КАК ВНаличии
|ИЗ
| РегистрНакопления.ТоварыВЯчейках КАК Движения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыВЯчейкахОтбор КАК Фильтр
| ПО Фильтр.Назначение = Движения.Назначение
| И Фильтр.Номенклатура = Движения.Номенклатура
| И Фильтр.Характеристика = Движения.Характеристика
| И Фильтр.Ячейка = Движения.Ячейка
|ГДЕ
| Движения.Регистратор = &Регистратор
| И Движения.Активность
|ИНДЕКСИРОВАТЬ ПО
| Ячейка
|;
|
|
|ВЫБРАТЬ
| Остатки.Назначение КАК Назначение,
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Характеристика КАК Характеристика,
| Остатки.Склад КАК Склад,
| Остатки.Помещение КАК Помещение,
| Остатки.Серия КАК Серия,
| Остатки.ВНаличииОстаток - Остатки.КОтгрузкеОстаток КАК ВНаличии
|ПОМЕСТИТЬ ТоварыНаСкладах
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(,
| (Назначение, Номенклатура, Характеристика, Склад, Помещение) В(
| ВЫБРАТЬ
| Фильтр.Назначение КАК Назначение,
| Фильтр.Номенклатура КАК Номенклатура,
| Фильтр.Характеристика КАК Характеристика,
| Фильтр.Склад КАК Склад,
| Фильтр.Помещение КАК Помещение
| ИЗ
| ТоварыНаСкладахОтбор КАК Фильтр)) КАК Остатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Движения.Назначение КАК Назначение,
| Движения.Номенклатура КАК Номенклатура,
| Движения.Характеристика КАК Характеристика,
| Движения.Склад КАК Склад,
| Движения.Помещение КАК Помещение,
| Движения.Серия КАК Серия,
| ВЫБОР
| КОГДА Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -Движения.ВНаличии
| ИНАЧЕ Движения.ВНаличии
| КОНЕЦ КАК ВНаличии
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК Движения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыНаСкладахОтбор КАК Фильтр
| ПО Фильтр.Назначение = Движения.Назначение
| И Фильтр.Номенклатура = Движения.Номенклатура
| И Фильтр.Характеристика = Движения.Характеристика
| И Фильтр.Склад = Движения.Склад
| И Фильтр.Помещение = Движения.Помещение
|ГДЕ
| Движения.Регистратор = &Регистратор
| И Движения.Активность
|;
|
|
|ВЫБРАТЬ
| Остатки.Назначение КАК Назначение,
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Характеристика КАК Характеристика,
| Остатки.Склад КАК Склад,
| Остатки.Серия КАК Серия,
| Остатки.ВРезервеОстаток КАК ВРезерве,
| Остатки.КОтгрузкеОстаток КАК КОтгрузке
|ПОМЕСТИТЬ ТоварыКОтгрузке
|ИЗ
| РегистрНакопления.ТоварыКОтгрузке.Остатки(,
| (Назначение, Номенклатура, Характеристика, Склад) В(
| ВЫБРАТЬ
| Фильтр.Назначение КАК Назначение,
| Фильтр.Номенклатура КАК Номенклатура,
| Фильтр.Характеристика КАК Характеристика,
| Фильтр.Склад КАК Склад
| ИЗ
| ВтТоварыЗаказа КАК Фильтр)
| И Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)) КАК Остатки
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад, Назначение
|;
|
|
|ВЫБРАТЬ
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Назначение КАК Назначение,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.МестоХранения КАК Склад,
| ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка) КАК Помещение,
| ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка) КАК Ячейка,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура.ЕдиницаИзмерения КАК Упаковка,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| СУММА(ТоварыОрганизаций.ВНаличии) КАК ВНаличии,
| МАКСИМУМ(ЕСТЬNULL(ТоварыКОтгрузке.ВРезерве, 0)) КАК СерииКОтгрузке
|ПОМЕСТИТЬ Остатки
|ИЗ
| ТоварыОрганизаций КАК ТоварыОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыКОтгрузке КАК ТоварыКОтгрузке
| ПО ТоварыКОтгрузке.Номенклатура = ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура
| И ТоварыКОтгрузке.Характеристика = ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Характеристика
| И ТоварыКОтгрузке.Склад = ТоварыОрганизаций.АналитикаУчетаНоменклатуры.МестоХранения
| И ТоварыКОтгрузке.Назначение = ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Назначение
| И ТоварыКОтгрузке.Серия = ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Серия
|СГРУППИРОВАТЬ ПО
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Назначение,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Номенклатура,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Характеристика,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.МестоХранения,
| ТоварыОрганизаций.АналитикаУчетаНоменклатуры.Серия
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыВЯчейках.Назначение КАК Назначение,
| ТоварыВЯчейках.Номенклатура КАК Номенклатура,
| ТоварыВЯчейках.Характеристика КАК Характеристика,
| МАКСИМУМ(ТоварыВЯчейках.Ячейка.Владелец) КАК Склад,
| МАКСИМУМ(ТоварыВЯчейках.Ячейка.Помещение) КАК Помещение,
| ТоварыВЯчейках.Ячейка КАК Ячейка,
| ТоварыВЯчейках.Упаковка КАК Упаковка,
| ТоварыВЯчейках.Серия КАК Серия,
| СУММА(ТоварыВЯчейках.ВНаличии) КАК ВНаличии,
| МАКСИМУМ(ЕСТЬNULL(ТоварыКОтгрузке.ВРезерве + ТоварыКОтгрузке.КОтгрузке, 0)) КАК СерииКОтгрузке
|ИЗ
| ТоварыВЯчейках КАК ТоварыВЯчейках
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыКОтгрузке КАК ТоварыКОтгрузке
| ПО ТоварыКОтгрузке.Номенклатура = ТоварыВЯчейках.Номенклатура
| И ТоварыКОтгрузке.Характеристика = ТоварыВЯчейках.Характеристика
| И ТоварыКОтгрузке.Склад = ТоварыВЯчейках.Ячейка.Владелец
| И ТоварыКОтгрузке.Назначение = ТоварыВЯчейках.Назначение
| И ТоварыКОтгрузке.Серия = ТоварыВЯчейках.Серия
|СГРУППИРОВАТЬ ПО
| ТоварыВЯчейках.Назначение,
| ТоварыВЯчейках.Номенклатура,
| ТоварыВЯчейках.Характеристика,
| ТоварыВЯчейках.Ячейка,
| ТоварыВЯчейках.Упаковка,
| ТоварыВЯчейках.Серия
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыНаСкладах.Назначение КАК Назначение,
| ТоварыНаСкладах.Номенклатура КАК Номенклатура,
| ТоварыНаСкладах.Характеристика КАК Характеристика,
| ТоварыНаСкладах.Склад КАК Склад,
| ТоварыНаСкладах.Помещение КАК Помещение,
| ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка) КАК Ячейка,
| ТоварыНаСкладах.Номенклатура.ЕдиницаИзмерения КАК Упаковка,
| ТоварыНаСкладах.Серия КАК Серия,
| СУММА(ТоварыНаСкладах.ВНаличии) КАК ВНаличии,
| МАКСИМУМ(ЕСТЬNULL(ТоварыКОтгрузке.ВРезерве + ТоварыКОтгрузке.КОтгрузке, 0)) КАК СерииКОтгрузке
|ИЗ
| ТоварыНаСкладах КАК ТоварыНаСкладах
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыКОтгрузке КАК ТоварыКОтгрузке
| ПО ТоварыКОтгрузке.Номенклатура = ТоварыНаСкладах.Номенклатура
| И ТоварыКОтгрузке.Характеристика = ТоварыНаСкладах.Характеристика
| И ТоварыКОтгрузке.Склад = ТоварыНаСкладах.Склад
| И ТоварыКОтгрузке.Назначение = ТоварыНаСкладах.Назначение
| И ТоварыКОтгрузке.Серия = ТоварыНаСкладах.Серия
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладах.Назначение,
| ТоварыНаСкладах.Номенклатура,
| ТоварыНаСкладах.Характеристика,
| ТоварыНаСкладах.Склад,
| ТоварыНаСкладах.Помещение,
| ТоварыНаСкладах.Серия
|ИНДЕКСИРОВАТЬ ПО
| Назначение, Номенклатура, Характеристика, Склад
|;
|
|
|ВЫБРАТЬ
| Остатки.Назначение КАК Назначение,
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Номенклатура.ЕдиницаИзмерения КАК НоменклатураЕдиницаИзмерения,
| Остатки.Характеристика КАК Характеристика,
| Остатки.Склад КАК Склад,
| Остатки.Помещение КАК Помещение,
| Остатки.Ячейка КАК Ячейка,
| ВЫБОР
| КОГДА Остатки.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| ТОГДА Остатки.Упаковка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| Остатки.Серия КАК Серия,
| Остатки.ВНаличии КАК Обеспечено,
| ЕСТЬNULL(Остатки.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ) КАК НазначениеДвиженияПоСкладскимРегистрам,
| Остатки.ВНаличии * ЕСТЬNULL(&ТекстЗапросаКоэффициентаУпаковки, 1) КАК ОбеспеченоЕдиниц,
| Остатки.СерииКОтгрузке КАК СерииКОтгрузке,
| Товары.ИспользованиеПомещенийЯчеек КАК ЕстьЯчейки,
| Товары.ИспользованиеСерий КАК ЕстьСерии,
| Товары.СвободныйОстаток КАК СвободныйОстаток,
| Товары.Количество КАК Количество
|ИЗ
| Остатки КАК Остатки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтТоварыЗаказа КАК Товары
| ПО Товары.Назначение = Остатки.Назначение
| И Товары.Номенклатура = Остатки.Номенклатура
| И Товары.Характеристика = Остатки.Характеристика
| И Товары.Склад = Остатки.Склад
|ГДЕ
| Остатки.ВНаличии > 0
| И (Остатки.Помещение <> ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| ИЛИ Остатки.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ИЛИ Остатки.Ячейка <> ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка))
|УПОРЯДОЧИТЬ ПО
| Назначение,
| Номенклатура,
| Характеристика,
| Склад,
| Серия,
| Помещение,
| Ячейка,
| Упаковка";
Если ОбщегоНазначения.РежимОтладки() Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
КонецЕсли;
Запрос.УстановитьПараметр("Регистратор", Ссылка);
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Если ТолькоОтмеченные Тогда
Запрос.УстановитьПараметр("ТаблицаТовары", ТаблицаТовары.Скопировать(Новый Структура("Отметка", Истина)));
Иначе
Запрос.УстановитьПараметр("ТаблицаТовары", ТаблицаТовары);
КонецЕсли;
ТекстЗапросаКоэффициентаУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"Остатки.Упаковка","Остатки.Номенклатура");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентаУпаковки", ТекстЗапросаКоэффициентаУпаковки);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат;
КонецФункции
Процедура СлитьТаблицыПоСкладуИПомещениям(ТаблицаПоСкладамВЦелом, ТаблицаПомещенияЯчейки)
ТаблицаПомещенияЯчейки.Колонки.Добавить("КлючТоварныеМеста", Новый ОписаниеТипов("УникальныйИдентификатор"));
ТаблицаТоварныеМеста = ТаблицаПомещенияЯчейки.СкопироватьКолонки();
ПереченьНоменклатуры = ТаблицаПомещенияЯчейки.ВыгрузитьКолонку("Номенклатура");
ТоварныеМеста = ТоварныеМестаПоПеречнюНоменклатуры(ПереченьНоменклатуры);
ТаблицаПомещенияЯчейки.Колонки.Добавить("Пропустить", Новый ОписаниеТипов("Булево"));
Если ТоварныеМеста.Количество() > 0 Тогда
КлючГруппировки = Новый Структура("Назначение,Номенклатура,Характеристика,Склад,Серия,Помещение");
КлючТоварныеМеста = Неопределено;
Для Индекс = 0 По ТаблицаПомещенияЯчейки.Количество() - 1 Цикл
СтрокаТаблицы = ТаблицаПомещенияЯчейки[Индекс];
СтрокаТаблицы.Пропустить = Ложь;
Упаковки = ТоварныеМеста[СтрокаТаблицы.Номенклатура];
Если Упаковки <> Неопределено И Упаковки[СтрокаТаблицы.Упаковка] <> Неопределено Тогда
Если КлючГруппировки.Назначение <> СтрокаТаблицы.Назначение
Или КлючГруппировки.Номенклатура <> СтрокаТаблицы.Номенклатура
Или КлючГруппировки.Характеристика <> СтрокаТаблицы.Характеристика
Или КлючГруппировки.Склад <> СтрокаТаблицы.Склад
Или КлючГруппировки.Серия <> СтрокаТаблицы.Серия
Или КлючГруппировки.Помещение <> СтрокаТаблицы.Помещение Тогда
ЗаполнитьЗначенияСвойств(КлючГруппировки, СтрокаТаблицы);
КлючТоварныеМеста = Новый УникальныйИдентификатор();
Иначе
СтрокаТаблицы.Пропустить = Истина;
КонецЕсли;
СтрокаТаблицы.КлючТоварныеМеста = КлючТоварныеМеста;
НоваяСтрока = ТаблицаТоварныеМеста.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы);
КонецЕсли;
КонецЦикла;
ТаблицаБезТоварныхМест = ТаблицаПомещенияЯчейки.Скопировать(Новый Структура("Пропустить", Ложь));
ТаблицаТоварныеМеста.Индексы.Добавить("КлючТоварныеМеста,Упаковка");
Для Индекс = 0 По ТаблицаБезТоварныхМест.Количество() - 1 Цикл
СтрокаТаблицы = ТаблицаБезТоварныхМест[Индекс];
Упаковки = ТоварныеМеста[СтрокаТаблицы.Номенклатура];
Если Упаковки <> Неопределено И Упаковки[СтрокаТаблицы.Упаковка] <> Неопределено Тогда
КоличествоКомплектов = СтрокаТаблицы.ОбеспеченоЕдиниц;
Для Каждого Упаковка Из Упаковки Цикл
НайденныеСтроки = ТаблицаТоварныеМеста.НайтиСтроки(
Новый Структура("КлючТоварныеМеста,Упаковка", СтрокаТаблицы.КлючТоварныеМеста, Упаковка.Ключ));
Если НайденныеСтроки.Количество() > 0 Тогда
КоличествоКомплектов = Мин(КоличествоКомплектов, НайденныеСтроки[0].ОбеспеченоЕдиниц);
Иначе
КоличествоКомплектов = 0;
КонецЕсли;
КонецЦикла;
СтрокаТаблицы.ОбеспеченоЕдиниц = КоличествоКомплектов;
КонецЕсли;
КонецЦикла;
Иначе
ТаблицаБезТоварныхМест = ТаблицаПомещенияЯчейки;
КонецЕсли;
ТаблицаПоСкладамВЦелом.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
ТаблицаПоСкладамВЦелом.Колонки.Добавить("Помещение", Новый ОписаниеТипов("СправочникСсылка.СкладскиеПомещения"));
ТаблицаПоСкладамВЦелом.Колонки.Добавить("Ячейка", Новый ОписаниеТипов("СправочникСсылка.СкладскиеЯчейки"));
КлючНазначение = Неопределено;
КлючНоменклатура = Неопределено;
КлючХарактеристика = Неопределено;
КлючСклад = Неопределено;
КлючСерия = Неопределено;
СерииКОтгрузке = 0;
ВсегоСтрок = ТаблицаБезТоварныхМест.Количество();
Для Счетчик = 1 По ВсегоСтрок Цикл
СтрокаТаблицы = ТаблицаБезТоварныхМест[ВсегоСтрок - Счетчик];
Если КлючНазначение <> СтрокаТаблицы.Назначение
Или КлючНоменклатура <> СтрокаТаблицы.Назначение
Или КлючХарактеристика <> СтрокаТаблицы.Характеристика
Или КлючСклад <> СтрокаТаблицы.Склад
Или КлючСерия <> СтрокаТаблицы.Серия Тогда
СерииКОтгрузке = СтрокаТаблицы.СерииКОтгрузке;
КонецЕсли;
Распределить = Мин(СерииКОтгрузке, СтрокаТаблицы.ОбеспеченоЕдиниц);
СтрокаТаблицы.ОбеспеченоЕдиниц = СтрокаТаблицы.ОбеспеченоЕдиниц - Распределить;
СерииКОтгрузке = СерииКОтгрузке - Распределить;
КонецЦикла;
СтруктураПоиска = Новый Структура("Назначение,Номенклатура,Характеристика,Склад");
СтрокиКУдалению = Новый Массив();
Для ИндексСтроки = 0 По ТаблицаПоСкладамВЦелом.Количество() - 1 Цикл
Строка = ТаблицаПоСкладамВЦелом[ИндексСтроки];
ЗаполнитьЗначенияСвойств(СтруктураПоиска, Строка);
СтруктураПоиска.Назначение = Строка.ИсходноеНазначение;
НайденныеСтроки = ТаблицаБезТоварныхМест.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() > 0 Тогда
КоличествоОстаток = Строка.Количество;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Если НайденнаяСтрока.ОбеспеченоЕдиниц = 0 Тогда
Продолжить;
КонецЕсли;
Количество = 0;
Если НайденнаяСтрока.ОбеспеченоЕдиниц > КоличествоОстаток Тогда
Количество = КоличествоОстаток;
КоличествоОстаток = 0;
Иначе
Количество = НайденнаяСтрока.ОбеспеченоЕдиниц;
КоличествоОстаток = КоличествоОстаток - НайденнаяСтрока.ОбеспеченоЕдиниц;
КонецЕсли;
Упаковки = ТоварныеМеста[НайденнаяСтрока.Номенклатура];
Если Упаковки <> Неопределено И Упаковки[НайденнаяСтрока.Упаковка] <> Неопределено Тогда
НайденныеСтрокиТоварныхМест = ТаблицаТоварныеМеста.НайтиСтроки(
Новый Структура("КлючТоварныеМеста", НайденнаяСтрока.КлючТоварныеМеста));
Для Каждого СтрокаТоварныеМеста Из НайденныеСтрокиТоварныхМест Цикл
НоваяСтрока = ТаблицаПоСкладамВЦелом.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТоварныеМеста, "Помещение,Ячейка,Серия,Упаковка");
НоваяСтрока.Количество = Количество;
КонецЦикла;
Иначе
НоваяСтрока = ТаблицаПоСкладамВЦелом.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяСтрока, "Помещение,Ячейка,Серия,Упаковка");
НоваяСтрока.Количество = Количество;
КонецЕсли;
КонецЦикла;
СтрокиКУдалению.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаКУдалению Из СтрокиКУдалению Цикл
ТаблицаПоСкладамВЦелом.Удалить(СтрокаКУдалению);
КонецЦикла;
ТаблицаПомещенияЯчейки.Колонки.Удалить("КлючТоварныеМеста");
КонецПроцедуры
Процедура ДобавитьВременнуюТаблицуСортировкаСкладов(Запрос, ИмяИсточникДанных, ИмяТаблицаЗаполненияКорректировки)
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| ПодстановкаИсточникДанных КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПодстановкаИсточникДанных", ИмяИсточникДанных);
Запрос.Выполнить();
Запрос.Текст = РегистрыСведений.СхемыОбеспечения.ВременнаяТаблицаСпособыОбеспеченияВсехСкладов(
Перечисления.ТипыОбеспечения.Перемещение);
УстановитьПривилегированныйРежим(Истина);
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК СкладПолучатель,
| Таблица.СпособОбеспеченияПотребностей.ИсточникОбеспеченияПотребностей КАК СкладОтправитель,
| 1 КАК Уровень
|ИЗ
| ВтСпособыОбеспечения КАК Таблица
|ГДЕ
| Таблица.Склад <> Таблица.СпособОбеспеченияПотребностей.ИсточникОбеспеченияПотребностей
| И (Таблица.Номенклатура, Таблица.Характеристика) В(
| ВЫБРАТЬ
| Отбор.Номенклатура КАК Номенклатура,
| Отбор.Характеристика КАК Характеристика
| ИЗ
| &ПодстановкаОтбораТоваров КАК Отбор)
|УПОРЯДОЧИТЬ ПО
| Номенклатура, Характеристика, СкладОтправитель, СкладПолучатель";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПодстановкаОтбораТоваров", ИмяТаблицаЗаполненияКорректировки);
ТаблицаИсходная = Запрос.Выполнить().Выгрузить();
ГруппировкиПоТоварам = ОбеспечениеСервер.РазбитьТаблицуПоЗначениюКлюча(ТаблицаИсходная, "Номенклатура, Характеристика", "");
Для Каждого Группировка Из ГруппировкиПоТоварам Цикл
Таблица = Группировка.Таблица;
Таблица.Индексы.Добавить("СкладПолучатель");
ОбработкаЗавершена = Ложь;
Пока Не ОбработкаЗавершена Цикл
ОбработкаЗавершена = Истина;
Для Каждого СтрокаТаблицы Из Таблица Цикл
НайденнаяСтрока = Таблица.Найти(СтрокаТаблицы.СкладОтправитель, "СкладПолучатель");
Если НайденнаяСтрока <> Неопределено
И СтрокаТаблицы.СкладПолучатель <> НайденнаяСтрока.СкладОтправитель Тогда
ОбработкаЗавершена = Ложь;
СтрокаТаблицы.Уровень = СтрокаТаблицы.Уровень + НайденнаяСтрока.Уровень;
СтрокаТаблицы.СкладОтправитель = НайденнаяСтрока.СкладОтправитель;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТаблицаИсходная.Очистить();
Для Каждого Группировка Из ГруппировкиПоТоварам Цикл
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ТаблицаИсходная, Группировка.Таблица);
КонецЦикла;
Запрос.УстановитьПараметр("ТаблицаИерархииСкладов", ТаблицаИсходная);
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.СкладПолучатель КАК СкладПолучатель,
| Таблица.СкладОтправитель КАК СкладОтправитель,
| Таблица.Уровень КАК Уровень
|ПОМЕСТИТЬ ИерархияСкладовВременный
|ИЗ
| &ТаблицаИерархииСкладов КАК Таблица
|;
|
|
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.СкладПолучатель КАК Склад,
| Таблица.СкладОтправитель КАК КорневойИсточник,
| Таблица.Уровень + 1 КАК Уровень
|ПОМЕСТИТЬ ИерархияСкладов
|ИЗ
| ИерархияСкладовВременный КАК Таблица
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.СкладОтправитель КАК Склад,
| Таблица.СкладОтправитель КАК КорневойИсточник,
| 1 КАК Уровень
|ИЗ
| ИерархияСкладовВременный КАК Таблица
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад";
Запрос.Выполнить();
ТекстЗапроса =
"ВЫБРАТЬ
| Таблица.Назначение КАК Назначение,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Склад КАК Склад,
|
| МАКСИМУМ(ЕСТЬNULL(ИерархияСкладов.Уровень, 0)
| + ВЫБОР КОГДА ИерархияСкладов.КорневойИсточник = ИерархияСкладовСкладДокумента.КорневойИсточник
| И ИерархияСкладов.Уровень <= ИерархияСкладовСкладДокумента.Уровень ТОГДА
| 1000
| ИНАЧЕ
| 0
| КОНЕЦ) КАК ПриоритетСклада
|ПОМЕСТИТЬ СортировкаСкладов
|ИЗ
| ПодстановкаТаблицаЗаполненияКорректировки КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ ПодстановкаИсточникДанных КАК ТаблицаДокумента
| ПО ТаблицаДокумента.Назначение = Таблица.Назначение
| И ТаблицаДокумента.Номенклатура = Таблица.Номенклатура
| И ТаблицаДокумента.Характеристика = Таблица.Характеристика
|
| ЛЕВОЕ СОЕДИНЕНИЕ ИерархияСкладов КАК ИерархияСкладовСкладДокумента
| ПО ИерархияСкладовСкладДокумента.Номенклатура = Таблица.Номенклатура
| И ИерархияСкладовСкладДокумента.Характеристика = Таблица.Характеристика
| И ИерархияСкладовСкладДокумента.Склад = ТаблицаДокумента.Склад
|
| ЛЕВОЕ СОЕДИНЕНИЕ ИерархияСкладов КАК ИерархияСкладов
| ПО ИерархияСкладов.Номенклатура = Таблица.Номенклатура
| И ИерархияСкладов.Характеристика = Таблица.Характеристика
| И ИерархияСкладов.Склад = Таблица.Склад
|СГРУППИРОВАТЬ ПО
| Таблица.Назначение,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| Таблица.Склад
|ИНДЕКСИРОВАТЬ ПО
| Назначение, Номенклатура, Характеристика, Склад";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПодстановкаТаблицаЗаполненияКорректировки", ИмяТаблицаЗаполненияКорректировки);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПодстановкаИсточникДанных", ИмяИсточникДанных);
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();
Текст =
"ВЫБРАТЬ
| Таблица.Склад КАК Склад,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| Таблица.Назначение КАК Назначение
|ПОМЕСТИТЬ СкладыОтгрузки
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| (Назначение, Склад, Номенклатура, Характеристика) В(
| ВЫБРАТЬ
| Отбор.Назначение КАК Назначение,
| Отбор.Склад КАК Склад,
| Отбор.Номенклатура КАК Номенклатура,
| Отбор.Характеристика КАК Характеристика
| ИЗ
| ИсточникДанных КАК Отбор)) КАК Таблица
|ГДЕ
| Таблица.РезервироватьНаСкладеОстаток > 0
| ИЛИ Таблица.РезервироватьПоМереПоступленияОстаток > 0
| ИЛИ Таблица.ОтложитьРезервированиеОстаток > 0
| ИЛИ Таблица.КОбеспечениюОстаток > 0
| ИЛИ Таблица.НеОбеспечиватьОстаток > 0
|ИНДЕКСИРОВАТЬ ПО
| Склад, Номенклатура, Характеристика, Назначение";
Запрос.Текст = СтрЗаменить(Текст, "ИсточникДанных", ИмяИсточникДанных);
Запрос.Выполнить();
КонецПроцедуры
Функция ЕстьТоварыКОбособленномуОбеспечению(Назначение, АдресТоваров = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Назначение) Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос();
Если Не ЭтоАдресВременногоХранилища(АдресТоваров) Тогда
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Назначение В(&Назначение)
| И Склад ССЫЛКА Справочник.Склады) КАК Остатки
|ГДЕ
| Остатки.ВНаличииОстаток <> 0
| ИЛИ Остатки.ЗаказаноОстаток <> 0
| ИЛИ Остатки.РезервироватьНаСкладеОстаток <> 0
| ИЛИ Остатки.РезервироватьПоМереПоступленияОстаток <> 0
| ИЛИ Остатки.ОтложитьРезервированиеОстаток <> 0
| ИЛИ Остатки.КОбеспечениюОстаток <> 0
| ИЛИ Остатки.НеОбеспечиватьОстаток <> 0";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика
|;
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Назначение В(&Назначение)
| И Склад ССЫЛКА Справочник.Склады
| И (Номенклатура, Характеристика) В(
| ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
| ИЗ
| Товары КАК Товары)) КАК Остатки
|ГДЕ
| Остатки.ВНаличииОстаток <> 0
| ИЛИ Остатки.ЗаказаноОстаток <> 0
| ИЛИ Остатки.РезервироватьНаСкладеОстаток <> 0
| ИЛИ Остатки.РезервироватьПоМереПоступленияОстаток <> 0
| ИЛИ Остатки.ОтложитьРезервированиеОстаток <> 0
| ИЛИ Остатки.КОбеспечениюОстаток <> 0
| ИЛИ Остатки.НеОбеспечиватьОстаток <> 0";
Запрос.УстановитьПараметр("Товары", ПолучитьИзВременногоХранилища(АдресТоваров));
КонецЕсли;
Запрос.УстановитьПараметр("Назначение", Назначение);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Функция ЕстьТоварыКСнятиюРезерва(Назначение, АдресТоваров = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Назначение) Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос();
Если Не ЭтоАдресВременногоХранилища(АдресТоваров) Тогда
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Назначение В(&Назначение)
| И Склад ССЫЛКА Справочник.Склады) КАК Остатки
|ГДЕ
| Остатки.ВНаличииОстаток <> 0";
Иначе
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика
|;
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Назначение В(&Назначение)
| И Склад ССЫЛКА Справочник.Склады
| И (Номенклатура, Характеристика) В(
| ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
| ИЗ
| Товары КАК Товары)) КАК Остатки
|ГДЕ
| Остатки.ВНаличииОстаток <> 0";
Запрос.УстановитьПараметр("Товары", ПолучитьИзВременногоХранилища(АдресТоваров));
КонецЕсли;
Запрос.УстановитьПараметр("Назначение", Назначение);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Процедура ЗаполнитьПоОснованию(Назначение, Организация, КорректировкаНазначения, ВидОперации, Товары, ТоварыОтбор = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Назначение) Тогда
Возврат;
КонецЕсли;
Если ТоварыОтбор = Неопределено Тогда
ТоварыОтбор = Новый ТаблицаЗначений();
ТоварыОтбор.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТоварыОтбор.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
КонецЕсли;
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям Тогда
РезультатСнятияРезервов = ТаблицаСнятияРезерваПоМногимНазначениям(Организация, ТоварыОтбор, КорректировкаНазначения, Назначение);
Таблица = РезультатСнятияРезервов.ТаблицаТоваров;
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв Тогда
РеквизитыНазначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Назначение, "Заказ");
РезультатСнятияРезервов = ТаблицаСнятияРезерва(Назначение, ТоварыОтбор, КорректировкаНазначения);
Таблица = РезультатСнятияРезервов.ТаблицаТоваров;
ИначеЕсли ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.РезервироватьИКорректировать
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.Резервировать Тогда
РезультатРезервирования = ТаблицаРезервирования(
Назначение,
Новый Структура("ОстатокНаСкладе,РезервыПодНазначения", Истина, Ложь),
Истина,
Организация,
ТоварыОтбор,
КорректировкаНазначения);
Таблица = РезультатРезервирования.ТаблицаТоваров;
Иначе
Возврат;
КонецЕсли;
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Отметка", Новый ОписаниеТипов("Булево"));
Таблица.Колонки.Добавить("ИспользованиеСерий", Новый ОписаниеТипов("Булево"));
Таблица.Колонки.Добавить("ИспользованиеПомещенийЯчеек", Новый ОписаниеТипов("Булево"));
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв Тогда
СнятьРезервы(Таблица, Истина, РезультатСнятияРезервов.ТаблицаИтогов);
Выборка = УказаниеПомещенийЯчеекСерийДляСтроки(Таблица);
Пока Выборка.Следующий() Цикл
Строка = Таблица[Выборка.НомерСтроки - 1];
Строка.ИспользованиеСерий = Выборка.ИспользоватьСерии;
Строка.ИспользованиеПомещенийЯчеек = Выборка.ИспользоватьСкладскиеПомещения
Или Выборка.ИспользоватьАдресноеХранение;
КонецЦикла;
ТаблицаПомещенияЯчейки = ТаблицаПомещенияЯчейкиПоТоварам(Таблица, КорректировкаНазначения, Ложь);
Таблица.Колонки.Добавить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
СлитьТаблицыПоСкладуИПомещениям(Таблица, ТаблицаПомещенияЯчейки);
Иначе
УстановитьРезервы(Таблица, РезультатРезервирования.ТаблицаИтогов, Истина);
КонецЕсли;
ВсегоСтрок = Таблица.Количество();
Для Счетчик = 1 По ВсегоСтрок Цикл
ТекСтрока = Таблица[ВсегоСтрок - Счетчик];
Если ТекСтрока.Количество <= 0 Тогда
Таблица.Удалить(ТекСтрока);
КонецЕсли;
КонецЦикла;
Товары.Загрузить(Таблица);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить(
"ПересчитатьКоличествоУпаковок",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаКоличестваУпаковок());
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, Неопределено);
КонецПроцедуры
Функция ЕстьТоварыКСтороннемуОбособленномуОбеспечению(Регистратор) Экспорт
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыИПотребности.Номенклатура КАК Номенклатура,
| ЗапасыИПотребности.Характеристика КАК Характеристика,
| ЗапасыИПотребности.Склад КАК Склад,
| ЗапасыИПотребности.Назначение КАК Назначение
|ПОМЕСТИТЬ Аналитики
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Заказ = &Регистратор
| И Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И Склад ССЫЛКА Справочник.Склады) КАК ЗапасыИПотребности
|ГДЕ
| ЗапасыИПотребности.РезервироватьНаСкладеОстаток <> 0
| ИЛИ ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток <> 0
| ИЛИ ЗапасыИПотребности.ОтложитьРезервированиеОстаток <> 0
| ИЛИ ЗапасыИПотребности.КОбеспечениюОстаток <> 0
| ИЛИ ЗапасыИПотребности.НеОбеспечиватьОстаток <> 0
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад, Назначение
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| (Номенклатура, Характеристика, Склад, Назначение) В(
| ВЫБРАТЬ
| Фильтр.Номенклатура КАК Номенклатура,
| Фильтр.Характеристика КАК Характеристика,
| Фильтр.Склад КАК Склад,
| Фильтр.Назначение КАК Назначение
| ИЗ
| Аналитики КАК Фильтр)) КАК ЗапасыИПотребности
|ГДЕ
| ЗапасыИПотребности.ВНаличииОстаток <> 0
| ИЛИ ЗапасыИПотребности.ЗаказаноОстаток <> 0
| ИЛИ ЗапасыИПотребности.РезервироватьНаСкладеОстаток <> 0
| ИЛИ ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток <> 0
| ИЛИ ЗапасыИПотребности.ОтложитьРезервированиеОстаток <> 0
| ИЛИ ЗапасыИПотребности.КОбеспечениюОстаток <> 0
| ИЛИ ЗапасыИПотребности.НеОбеспечиватьОстаток <> 0";
Запрос.УстановитьПараметр("Регистратор", Регистратор);
УстановитьПривилегированныйРежим(Истина);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Функция ЕстьТоварыКСтороннемуСнятиюРезерва(Регистратор) Экспорт
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыИПотребности.Номенклатура КАК Номенклатура,
| ЗапасыИПотребности.Характеристика КАК Характеристика,
| ЗапасыИПотребности.Склад КАК Склад,
| ЗапасыИПотребности.Назначение КАК Назначение
|ПОМЕСТИТЬ Аналитики
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| Заказ = &Регистратор
| И Назначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| И Склад ССЫЛКА Справочник.Склады) КАК ЗапасыИПотребности
|ГДЕ
| ЗапасыИПотребности.РезервироватьНаСкладеОстаток <> 0
| ИЛИ ЗапасыИПотребности.РезервироватьПоМереПоступленияОстаток <> 0
| ИЛИ ЗапасыИПотребности.ОтложитьРезервированиеОстаток <> 0
| ИЛИ ЗапасыИПотребности.КОбеспечениюОстаток <> 0
| ИЛИ ЗапасыИПотребности.НеОбеспечиватьОстаток <> 0
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура, Характеристика, Склад, Назначение
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| РегистрНакопления.ЗапасыИПотребности.Остатки(,
| (Номенклатура, Характеристика, Склад, Назначение) В(
| ВЫБРАТЬ
| Фильтр.Номенклатура КАК Номенклатура,
| Фильтр.Характеристика КАК Характеристика,
| Фильтр.Склад КАК Склад,
| Фильтр.Назначение КАК Назначение
| ИЗ
| Аналитики КАК Фильтр)) КАК ЗапасыИПотребности
|ГДЕ
| ЗапасыИПотребности.ВНаличииОстаток <> 0";
Запрос.УстановитьПараметр("Регистратор", Регистратор);
УстановитьПривилегированныйРежим(Истина);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
#КонецОбласти
#Область Печать
Функция ПечатнаяФормаКорректировкаНазначенияТоваров(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КОРРЕКТИРОВКА_НАЗНАЧЕНИЯ";
ДанныеДляПечати = ДанныеДляПечати(МассивОбъектов, ПараметрыПечати);
ЗаполнитьТабличныйДокументКорректировкаНазначенияТоваров(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати);
Возврат ТабличныйДокумент;
КонецФункции
Процедура ЗаполнитьТабличныйДокументКорректировкаНазначенияТоваров(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати)
ВыводитьСерии = Константы.ВыводитьСерииВПечатныхФормах.Получить()
И ДанныеДляПечати.РезультатПоТабличнойЧасти.Колонки.Найти("СерияНаименование") <> Неопределено;
ВыводитьНДИГК = Константы.ВыводитьДопКолонкиНаправлениеДеятельностиИГК.Получить();
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.КорректировкаНазначенияТоваров.ПФ_MXL_КорректировкаНазначенияТоваров");
Макет.КодЯзыка = Метаданные.Языки.Русский.КодЯзыка;
ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать();
ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл
СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
ВыборкаПоДокументам.Сбросить();
Если НЕ ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В документе %1 отсутствуют товары. Печать не требуется'"),
ДанныеПечати.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
Текст,
ДанныеПечати.Ссылка);
Продолжить;
КонецЕсли;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
ЗаполнитьРеквизитыШапки(ДанныеПечати, Макет, ТабличныйДокумент);
ВыборкаПоНДИГКОтправителя = ВыборкаПоДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
КоличествоРазныхОтправителей = ВыборкаПоНДИГКОтправителя.Количество();
ПервыйЗаголовокТаблицы = Истина;
НомерСтраницы = 1;
НомерСтроки = 0;
МассивВыводимыхОбластей = Новый Массив;
ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
Пока ВыборкаПоНДИГКОтправителя.Следующий() Цикл
ВыборкаПоНДИГКПолучателя = ВыборкаПоНДИГКОтправителя.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
КоличествоРазныхПолучателей = ВыборкаПоНДИГКПолучателя.Количество();
НДИГКСовпадают = Ложь;
Если КоличествоРазныхОтправителей = 1 И КоличествоРазныхПолучателей = 1 Тогда
НДИГКСовпадают = Истина;
КонецЕсли;
Если ВыводитьНДИГК Тогда
Если НДИГКСовпадают Тогда
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
Иначе
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицыНДИГК");
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаНДИГК");
КонецЕсли;
Иначе
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
КонецЕсли;
Пока ВыборкаПоНДИГКПолучателя.Следующий() Цикл
Если ВыводитьНДИГК И НДИГКСовпадают Тогда
ШапкаТаблицы.Параметры.Заполнить(ВыборкаПоНДИГКПолучателя);
ТабличныйДокумент.Вывести(ШапкаТаблицы);
КонецЕсли;
Если ПервыйЗаголовокТаблицы Тогда
ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
КонецЕсли;
ПервыйЗаголовокТаблицы = Ложь;
СтрокаТовары = ВыборкаПоНДИГКПолучателя.Выбрать();
КоличествоСтрок = СтрокаТовары.Количество();
Пока СтрокаТовары.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
ЗаполнитьРеквизитыСтрокиТовара(СтрокаТовары, ОбластьМакета, НомерСтроки,,ВыводитьСерии);
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьМакета);
Если НомерСтроки = КоличествоСтрок Тогда
МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
КонецЕсли;
Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
НомерСтраницы = НомерСтраницы + 1;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
УстановитьПараметр(ЗаголовокТаблицы, "НомерСтраницы", "Страница " + НомерСтраницы);
ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПодвала);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
ТабличныйДокумент,
НомерСтрокиНачало,
ОбъектыПечати,
ДанныеПечати.Ссылка);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьРеквизитыШапки(ДанныеПечати, Макет, ТабличныйДокумент)
СведенияОбОрганизации = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Организация, ДанныеПечати.Дата);
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(
ТабличныйДокумент,
Макет,
ОбластьМакета,
ДанныеПечати.Ссылка);
ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
УстановитьПараметр(ОбластьМакета, "ПредставлениеОрганизации", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации));
УстановитьПараметр(ОбластьМакета, "ДатаДокумента", ДанныеПечати.ДатаДокумента);
УстановитьПараметр(ОбластьМакета, "НомерДокумента", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер));
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецПроцедуры
Процедура ЗаполнитьРеквизитыСтрокиТовара(СтрокаТовары, ОбластьМакета, НомерСтроки, ВыводитьКодНоменклатуры = Истина, ВыводитьСерии = Ложь)
ОбластьМакета.Параметры.Заполнить(СтрокаТовары);
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("НоменклатураКод", "");
ЗаполнитьЗначенияСвойств(СтруктураПараметров, СтрокаТовары);
СтруктураПараметров.Вставить("НомерСтроки", НомерСтроки);
ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДополнительныеПараметрыПолученияНаименованияДляПечати.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
СерияНаименование = Неопределено;
Если ВыводитьСерии Тогда
СерияНаименование = СтрокаТовары.СерияНаименование;
КонецЕсли;
ПредставлениеНоменклатуры = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
Строка(СтрокаТовары.НоменклатураНаименование),
СтрокаТовары.ХарактеристикаНаименование,
,
СерияНаименование,
ДополнительныеПараметрыПолученияНаименованияДляПечати);
СтруктураПараметров.Вставить("ПредставлениеНоменклатуры", ПредставлениеНоменклатуры);
Если Не ВыводитьКодНоменклатуры Тогда
СтруктураПараметров.НоменклатураКод = "";
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
КонецПроцедуры
Процедура УстановитьПараметр(ОбластьМакета, ИмяПараметра, ЗначениеПараметра)
ОбластьМакета.Параметры.Заполнить(Новый Структура(ИмяПараметра, ЗначениеПараметра));
КонецПроцедуры
Функция ДанныеДляПечати(МассивОбъектов, ПараметрыПечати)
УстановитьПривилегированныйРежим(Истина);
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов().ИмяКолонки;
Если НЕ ЗначениеЗаполнено(КолонкаКодов) Тогда
КолонкаКодов = "Код";
КонецЕсли;
Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Номер КАК Номер,
| ДанныеДокумента.Дата КАК Дата,
| ДанныеДокумента.Дата КАК ДатаДокумента,
| ДанныеДокумента.Организация КАК Организация,
| ДанныеДокумента.Организация.Префикс КАК Префикс
|ИЗ
| Документ.КорректировкаНазначенияТоваров КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Ссылка В(&МассивДокументов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Номенклатура.НаименованиеПолное КАК НоменклатураНаименование,
| ТаблицаТовары.Номенклатура." + КолонкаКодов + " КАК НоменклатураКод,
| ТаблицаТовары.Характеристика.НаименованиеПолное КАК ХарактеристикаНаименование,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия.Наименование КАК СерияНаименование,
| ТаблицаТовары.Серия КАК Серия,
| &ТекстЗапросаНаименованиеЕдиницыИзмерения КАК ЕдиницаИзмеренияНаименование,
| &ТекстЗапросаКодЕдиницыИзмерения КАК ЕдиницаИзмеренияКод,
| &ТекстЗапросаНаименованиеЕдиницыИзмерения КАК ВидУпаковки,
| СУММА(ТаблицаТовары.КоличествоУпаковок) КАК Количество,
| МИНИМУМ(ТаблицаТовары.НомерСтроки) КАК НомерСтроки,
| &ТекстПоляНДИГКОтправителя КАК НДИГКОтправителя,
| &ТекстПоляНДИГКПолучателя КАК НДИГКПолучателя
|ИЗ
| Документ.КорректировкаНазначенияТоваров.Товары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Назначения КАК ИсходныеНазначения
| ПО ТаблицаТовары.ИсходноеНазначение = ИсходныеНазначения.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаправленияДеятельности КАК НДОтправитель
| ПО ИсходныеНазначения.НаправлениеДеятельности = НДОтправитель.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Назначения КАК НовыеНазначения
| ПО ТаблицаТовары.НовоеНазначение = НовыеНазначения.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаправленияДеятельности КАК НДПолучатель
| ПО НовыеНазначения.НаправлениеДеятельности = НДПолучатель.Ссылка
|
|ГДЕ
| ТаблицаТовары.Ссылка В(&МассивДокументов)
| И ТаблицаТовары.Номенклатура.ТипНоменклатуры В (
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| )
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Ссылка,
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Серия,
| ТаблицаТовары.Упаковка,
| &ТекстЗапросаНаименованиеЕдиницыИзмерения,
| &ТекстЗапросаКодЕдиницыИзмерения,
| &ТекстПоляНДИГКОтправителя,
| &ТекстПоляНДИГКПолучателя
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки
|
|ИТОГИ ПО
| Ссылка,
| НДИГКОтправителя,
| НДИГКПолучателя";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаНаименованиеЕдиницыИзмерения",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"Наименование",
"ТаблицаТовары.Упаковка",
"ТаблицаТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКодЕдиницыИзмерения",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения(
"Код",
"ТаблицаТовары.Упаковка",
"ТаблицаТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПоляНДИГКОтправителя",
ВнутреннееТовародвижение.ТекстПоляНДИГК(
"НДОтправитель"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПоляНДИГКПолучателя",
ВнутреннееТовародвижение.ТекстПоляНДИГК(
"НДПолучатель"));
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивДокументов", МассивОбъектов);
МассивРезультатов = Запрос.ВыполнитьПакет();
РезультатПоШапке = МассивРезультатов[0];
РезультатПоТабличнойЧасти = МассивРезультатов[1];
СтруктураДанныхДляПечати = Новый Структура(
"РезультатПоШапке, РезультатПоТабличнойЧасти",
РезультатПоШапке,
РезультатПоТабличнойЧасти);
Возврат СтруктураДанныхДляПечати;
КонецФункции
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
СинонимТаблицыДокумента = "";
ПолноеИмяДокумента = "Документ.КорректировкаНазначенияТоваров";
ПереопределениеРасчетаПараметров = Новый Структура;
ВЗапросеЕстьИсточник = Истина;
ЗначенияПараметров = Новый Структура;
ЗначенияПараметров.Вставить("ИдентификаторМетаданных",
ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяДокумента));
Если ИмяРегистра = "РеестрДокументов" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, ИмяРегистра);
ВЗапросеЕстьИсточник = Ложь;
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросПроведенияПоНезависимомуРегистру(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ВЗапросеЕстьИсточник,
ПереопределениеРасчетаПараметров);
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров = ЗначенияПараметров;
Результат.ТекстЗапроса = ТекстЗапроса;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли