V82.ОбщиеМодули.ПроцедурыКонтроляОстатков.ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_Реализация C# (CSharp) Method

ТоварыКПередачеСоСкладовКонтрольСвободныхОстатков_Реализация() public method

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