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