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

ТоварыНаСкладахКонтрольОстатков_СкладВШапке_ЗаказВШапке() public method

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

            |ИЗ
            |	Документ." + СтруктураПараметров.ИмяТаблицы + " КАК Док
            |
            //таблица остатков товаров с учетом серий
            |ЛЕВОЕ СОЕДИНЕНИЕ
            |	РегистрНакопления.ТоварыНаСкладах.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК Остатки
            |ПО
            |	Остатки.Склад = %СОЕДИНЕНИЕ_Склад_Остатки%
            |	И Остатки.Номенклатура = Док.Номенклатура
            |	И Остатки.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
            |	И Остатки.Качество = %СОЕДИНЕНИЕ_Качество_Остатки%
            |	И Остатки.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
            |
            //таблица остатков товаров без учета серий
            |//ЗАПРОС_ОстаткиБезСерии
            |
            //таблица товаров в резерве на складе без учета серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
            |//ЗАПРОС_Резервы

            //таблица товаров в резерве на складе с учетом серий номенклатуры (определяется для строк, которые списываются за счет свободного остатка)
            |//ЗАПРОС_РезервыПоСерии

            //таблица резервов по документу без учета серий: количество, которое списывается за счет резерва
            |//ЗАПРОС_РезервыПоДокументуБезСерии

            //таблица резервов по документу: количество, которое списывается за счет резерва
            |//ЗАПРОС_РезервыПоДокументу

            //товары к передаче со складов
            |ЛЕВОЕ СОЕДИНЕНИЕ
            |	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, " + УсловияТаблицыОстатков.Полное + ") КАК ТоварыКПередаче
            |ПО
            |	ТоварыКПередаче.Склад = &Склад И
            |	Док.Номенклатура                = ТоварыКПередаче.Номенклатура
            |   //СОЕДИНЕНИЕ_Характеристика_ТоварыКПередаче
            |   //СОЕДИНЕНИЕ_Серия_ТоварыКПередаче

            //товары к передаче со складов без учета серий
            |//ЗАПРОС_ТоварыКПередачеБезСерии

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