public void ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_Перемещение(/*СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ*/)
{
//ЕстьХарактеристика = МетаданныеТабЧасти.Реквизиты.Найти("ХарактеристикаНоменклатуры") <> Неопределено;
//ЕстьСерия = МетаданныеТабЧасти.Реквизиты.Найти("СерияНоменклатуры") <> Неопределено;
//ЕстьКачество = МетаданныеТабЧасти.Реквизиты.Найти("Качество") <> Неопределено;
//ЕстьКоэффициент = МетаданныеТабЧасти.Реквизиты.Найти("Коэффициент") <> Неопределено;
/*// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
*/
/*СтруктураУсловий = Новый Структура(
"ЕстьХарактеристика,ЕстьКачество",
ЕстьХарактеристика,
ЕстьКачество);*/
//СтруктураУсловий.Вставить("ИспользоватьСерииНоменклатуры", СтруктураПараметров.ИспользоватьСерииНоменклатуры);
//СтруктураУсловий.Вставить("ИспользоватьХарактеристикиНоменклатуры", СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
/*УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
СтруктураПараметров.ИмяДокумента,
СтруктураПараметров.ИмяТаблицы,
Новый Структура("Полное,БезКачества"),
СтруктураУсловий);*/
//Запрос = Новый Запрос;
/*// Установим параметры запроса
*/
//Запрос.УстановитьПараметр("ДокументСсылка", СтруктураШапкиДокумента.Ссылка);
//Запрос.УстановитьПараметр("ПустаяСерия" , Справочники.СерииНоменклатуры.ПустаяСсылка());
//Запрос.УстановитьПараметр("ПустойОрдер", Документы.ПриходныйОрдерНаТовары.ПустаяСсылка());
//Запрос.УстановитьПараметр("Склад", СтруктураШапкиДокумента.СкладОтправитель);
//МассивПустыхСсылок = ОбщегоНазначения.МассивПустыхЗначений(МетаданныеТабЧасти.Реквизиты.ДокументРезерва.Тип);
//Запрос.УстановитьПараметр("МассивПустыхЗаказов", МассивПустыхСсылок);
/*ТекстЗапроса = "
|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
| Док.Номенклатура.Представление КАК НоменклатураПредставление,
| Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
| Неопределено КАК СерияНоменклатуры,
| %ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
| %ПОЛЕ_Док_Качество% КАК Качество,
| &Склад КАК Склад,
| %ПОЛЕ_Док_Количество% КАК ДокументКоличество,
| ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) КАК РезервыКоличество,
| ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0) КАК РезервыПоСделкеКоличество,
| ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0) КАК КПолучению,
| МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
| + ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) КАК ОстаткиКоличество,
| ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0) КАК КПередачеКоличество
|ИЗ
| Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
|ПО
| ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
| //СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыНаСкладахОстатки.Качество = Док.Качество
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыВРознице.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
|ПО
| ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
| //СОЕДИНЕНИЕ_Качество_Остатки// И ТоварыВРозницеОстатки.Качество = Док.Качество
|
//таблица товаров в резерве на складе (определяется для строк, которые списываются за счет свободного остатка)
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК Резервы
|ПО
| Резервы.Номенклатура = Док.Номенклатура
| И Док.ДокументРезерва В (&МассивПустыхЗаказов)
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| (ВЫБРАТЬ
| ТЧ.Номенклатура
| //ПОЛЕ_ТЧ_Характеристика
| //количество, списываемое за счет резерва, не может превышать количество указанное в документе
| ,ВЫБОР КОГДА Сумма(ТЧ.ДокументКоличество)<Сумма(ВремРезервы.КоличествоОстаток)
| ТОГДА Сумма(ТЧ.ДокументКоличество)
| ИНАЧЕ Сумма(ВремРезервы.КоличествоОстаток)
| КОНЕЦ КАК КоличествоОстаток
| ИЗ
| //сгруппированная табличная часть документа с отбором строк которые списываются из резерва
| (ВЫБРАТЬ
| Номенклатура,
| ДокументРезерва,
| %ПОЛЕ_Количество% КАК ДокументКоличество
| //ПОЛЕ_Характеристика
| ИЗ
| Документ." + СтруктураПараметров.ИмяТаблицы +"
| ГДЕ
| Ссылка = &ДокументСсылка
| И ДокументРезерва НЕ В (&МассивПустыхЗаказов)
| СГРУППИРОВАТЬ ПО
| Номенклатура,
| ДокументРезерва
| //ПОЛЕ_Характеристика
| ) КАК ТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, " + УсловияТаблицыОстатков.БезКачества + ") КАК ВремРезервы
| ПО
| ТЧ.Номенклатура = ВремРезервы.Номенклатура
| И ВремРезервы.ДокументРезерва = ТЧ.ДокументРезерва
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И ТЧ.ХарактеристикаНоменклатуры = ВремРезервы.ХарактеристикаНоменклатуры
| СГРУППИРОВАТЬ ПО
| ТЧ.Номенклатура
| //ПОЛЕ_ТЧ_Характеристика
|) КАК РезервыПоСделке
|ПО
| РезервыПоСделке.Номенклатура = Док.Номенклатура
| И Док.ДокументРезерва НЕ В (&МассивПустыхЗаказов)
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И РезервыПоСделке.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
|ПО
| КПередаче.Номенклатура = Док.Номенклатура
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
| //СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(," + УсловияТаблицыОстатков.Полное + "
| // Документ получения может быть только ордером, причем ордера без права продажи не учитываем,
| // поскольку они уже учтены в регистре резервов
| И ДокументПолучения ССЫЛКА Документ.ПриходныйОрдерНаТовары
| И НЕ ДокументПолучения.БезПраваПродажи) КАК КПолучению
|ПО
| КПолучению.Номенклатура = Док.Номенклатура
| И (Док.ДокументРезерва = &ПустойОрдер ИЛИ НЕ Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары)
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПолучению.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
| //СОЕДИНЕНИЕ_Качество_Остатки// И КПолучению.Качество = Док.Качество
|
|ГДЕ
| Док.Ссылка = &ДокументСсылка
|
|СГРУППИРОВАТЬ ПО
| Док.Номенклатура,
| %ПОЛЕ_Док_Характеристика%,
| %ПОЛЕ_Док_Качество%,
| &Склад
|
|ИМЕЮЩИЕ
| МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
| + ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
| - ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0)
| - ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
| - ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0)
| + ЕСТЬNULL(МАКСИМУМ(РезервыПоСделке.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
|
|ДЛЯ ИЗМЕНЕНИЯ
| РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы"
+ ?(ЕстьСерия, "
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
| Док.Номенклатура.Представление КАК НоменклатураПредставление,
| Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
| Док.СерияНоменклатуры КАК СерияНоменклатуры,
| %ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
| %ПОЛЕ_Док_Качество% КАК Качество,
| &Склад КАК Склад,
| %ПОЛЕ_Док_Количество% КАК ДокументКоличество,
| 0 КАК РезервыКоличество,
| 0 КАК РезервыПоСделкеКоличество,
| ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0) КАК КПолучению,
| МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
| + ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0)) КАК ОстаткиКоличество,
| ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0) КАК КПередачеКоличество
|ИЗ
| Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыНаСкладах.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК ТоварыНаСкладахОстатки
|ПО
| ТоварыНаСкладахОстатки.Склад = &Склад
| И ТоварыНаСкладахОстатки.Номенклатура = Док.Номенклатура
| И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
| И ТоварыНаСкладахОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
| И ТоварыНаСкладахОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыВРознице.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК ТоварыВРозницеОстатки
|ПО
| ТоварыВРозницеОстатки.Склад = &Склад
| И ТоварыВРозницеОстатки.Номенклатура = Док.Номенклатура
| И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
| И ТоварыВРозницеОстатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
| И ТоварыВРозницеОстатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(," + УсловияТаблицыОстатков.Полное + ") КАК КПередаче
|ПО
| КПередаче.Номенклатура = Док.Номенклатура
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПередаче.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
| //СОЕДИНЕНИЕ_Серия_Остатки// И КПередаче.СерияНоменклатуры = Док.СерияНоменклатуры
| //СОЕДИНЕНИЕ_Качество_Остатки// И КПередаче.Качество = Док.Качество
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(, " + УсловияТаблицыОстатков.Полное + "
| // Документ получения может быть только ордером, причем ордера без права продажи не учитываем,
| // поскольку они уже учтены в регистре резервов
| И ДокументПолучения ССЫЛКА Документ.ПриходныйОрдерНаТовары
| И НЕ ДокументПолучения.БезПраваПродажи) КАК КПолучению
|ПО
| КПолучению.Номенклатура = Док.Номенклатура
| //СОЕДИНЕНИЕ_Характеристика_Остатки// И КПолучению.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры
| //СОЕДИНЕНИЕ_Серия_Остатки// И КПолучению.СерияНоменклатуры = Док.СерияНоменклатуры
| //СОЕДИНЕНИЕ_Качество_Остатки// И КПолучению.Качество = Док.Качество
| И (Док.ДокументРезерва = &ПустойОрдер ИЛИ Не Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары)
|
|ГДЕ
| Док.Ссылка = &ДокументСсылка
| И Док.СерияНоменклатуры <> &ПустаяСерия
|
|СГРУППИРОВАТЬ ПО
| Док.Номенклатура,
| Док.СерияНоменклатуры,
| %ПОЛЕ_Док_Характеристика%,
| %ПОЛЕ_Док_Качество%,
| &Склад
|
|ИМЕЮЩИЕ
| МАКСИМУМ(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
| + ЕСТЬNULL(ТоварыВРозницеОстатки.КоличествоОстаток, 0))
| - ЕСТЬNULL(МАКСИМУМ(КПередаче.КоличествоОстаток), 0)
| - ЕСТЬNULL(МАКСИМУМ(КПолучению.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
|
|ДЛЯ ИЗМЕНЕНИЯ
| РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
|", "");*/
//ТоварыКПередачеСоСкладовДополнитьТекстЗапроса(ТекстЗапроса, СтруктураПараметров, ЕстьХарактеристика, ЕстьСерия, ЕстьКачество, ЕстьКоэффициент, Ложь);
//Запрос.Текст = ТекстЗапроса;
//Выборка = Запрос.Выполнить().Выбрать();
while(true/*Выборка.Следующий()*/)
{
//СвободныйОстаток = Выборка.ОстаткиКоличество - Выборка.РезервыКоличество - Выборка.КПередачеКоличество - Выборка.КПолучению + Выборка.РезервыПоСделкеКоличество;
/*СтрокаСообщения = "Свободного остатка для резервирования " +
УправлениеЗапасами.ПредставлениеНоменклатуры(
Выборка.НоменклатураПредставление,
?(ЕстьХарактеристика, Выборка.ХарактеристикаНоменклатуры, ""),
?(ЕстьСерия, Выборка.СерияНоменклатуры, "")) +
" на складе """ + СокрЛП(Выборка.Склад) + """" +
?(ЕстьКачество, " с качеством " + Выборка.Качество, "") + " недостаточно.";*/
/*УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, СвободныйОстаток, Выборка.ДокументКоличество,
Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);*/
}
//;;
}