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