Как правильно лучше сделать алгоритм замены материала
Получаю состав материалов продукции, потом хочу добавить все аналоги в эту табличную часть и только потом получить по каждой строке остатки.
нужно это для того чтобы потом я мог пройти по всем строкам не аналога и посмотреть хватает ли его если нет то взять из аналога
нужно это для того чтобы потом я мог пройти по всем строкам не аналога и посмотреть хватает ли его если нет то взять из аналога
ТаблицаСостава = ПроизводствоСервер.СоставСпецификаций(Продукция.Выгрузить(), Истина, , , Ложь);
//добавим колонку аналог и установим признак
//установим для всех колонок материала признак что это не аналог
ТаблицаСостава.Колонки.Добавить("Аналог", Новый ОписаниеТипов("Булево"));
ТаблицаСостава.ЗаполнитьЗначения(Ложь,"Аналог");
Для Каждого СтрокаМатериалов Из ТаблицаСостава Цикл
ТаблицаАналогов = ПолучитьАналогиНоменклатуры(НоваяСтрокаМатериалов);
КонецЦикла;
ТаблицаСостава = ПолучитьОстаткиНоменклатуры(ТаблицаСостава);
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Аналоги нужны обычно для номенклатуры по которой не хватает остатка для выпуска всей партии. Я бы сначала получил дефицит и только по нему получал аналоги, но если задача другая или спецификации состоят из небольшого количество строк то можно и так оставить.
(5)
Вот смотрите что я хочу еще раз объясню.
1. Я получил состав по всей продукции по ключу связи. (ТаблицаСостава)
2. Я хочу получить все аналоги номенклатуры по данной (ТаблицаАналоги)
3. Я Хочу получить остатки по номенклатуре и поместить их в отдельную (ТаблицаОстаткиМатериалаИАналогов)
4. Потом уже распределение ..
Просто что то правильно все в кучу собрать не получается
1.
Вот так получил состав материалов
ТаблицаСостава = ПроизводствоСервер.СоставСпецификаций(Продукция.Выгрузить(), Истина, , , Ложь);
2.Вот так получаю аналоги для каждой Строки
3. вот так получил остатки
Вот смотрите что я хочу еще раз объясню.
1. Я получил состав по всей продукции по ключу связи. (ТаблицаСостава)
2. Я хочу получить все аналоги номенклатуры по данной (ТаблицаАналоги)
3. Я Хочу получить остатки по номенклатуре и поместить их в отдельную (ТаблицаОстаткиМатериалаИАналогов)
4. Потом уже распределение ..
Просто что то правильно все в кучу собрать не получается
1.
Вот так получил состав материалов
ТаблицаСостава = ПроизводствоСервер.СоставСпецификаций(Продукция.Выгрузить(), Истина, , , Ложь);
2.Вот так получаю аналоги для каждой Строки
Функция ПолучитьАМ_АналогиМатериалов(СтрокаМатериалов)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| АМ_АналогиМатериалов.АМ_Номенклатура КАК АМ_Номенклатура,
| АМ_АналогиМатериалов.АМ_Аналог КАК АМ_Аналог,
| АМ_АналогиМатериалов.АМ_Приоритет КАК АМ_Приоритет,
| АМ_АналогиМатериалов.АМ_Характеристика КАК Характеристика,
| АМ_АналогиМатериалов.АМ_ХарактеристикаАналога КАК ХарактеристикаАналога
|ИЗ
| РегистрСведений.АМ_АналогиМатериалов КАК АМ_АналогиМатериалов
|ГДЕ
| АМ_АналогиМатериалов.АМ_Номенклатура = &Номенклатура
| И АМ_АналогиМатериалов.АМ_Характеристика = &Характеристика
|
|УПОРЯДОЧИТЬ ПО
| АМ_АналогиМатериалов.АМ_Приоритет
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| АМ_АналогиМатериалов.АМ_Номенклатура КАК АМ_Номенклатура,
| АМ_АналогиМатериалов.АМ_Аналог КАК АМ_Аналог,
| АМ_АналогиМатериалов.АМ_Приоритет КАК АМ_Приоритет,
| АМ_АналогиМатериалов.АМ_Характеристика КАК Характеристика,
| АМ_АналогиМатериалов.АМ_ХарактеристикаАналога КАК ХарактеристикаАналога
|ИЗ
| РегистрСведений.АМ_АналогиМатериалов КАК АМ_АналогиМатериалов
|ГДЕ
| АМ_АналогиМатериалов.АМ_Номенклатура = &Номенклатура
| И АМ_АналогиМатериалов.АМ_Характеристика = &ПустаяХарактеристика
|
|УПОРЯДОЧИТЬ ПО
| АМ_АналогиМатериалов.АМ_Приоритет");
Запрос.УстановитьПараметр("Номенклатура", СтрокаМатериалов.НоменклатураСостава);
Запрос.УстановитьПараметр("Характеристика", СтрокаМатериалов.ХарактеристикаСостава);
Запрос.УстановитьПараметр("ПустаяХарактеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
МассивРезультатов = Запрос.ВыполнитьПакет();
Если НЕ МассивРезультатов[0].Пустой() Тогда
ТаблицаЗначений = МассивРезультатов[0].Выгрузить();
Иначе
ТаблицаЗначений = МассивРезультатов[1].Выгрузить();
КонецЕсли;
Возврат ТаблицаЗначений;
КонецФункции // ПолучитьАМ_АналогиМатериалов(НоваяСтрокаМатериалов)
Показать3. вот так получил остатки
Процедура ПолучитьОстаткиНоменклатуры()
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Партия,
| СУММА(ВложенныйЗапрос.Остаток) КАК Остаток,
| ВложенныйЗапрос.ЕдиницаИзмерения
|ИЗ
| (ВЫБРАТЬ
| ЗапасыОстатки.Номенклатура КАК Номенклатура,
| ЗапасыОстатки.Характеристика КАК Характеристика,
| ЗапасыОстатки.Партия КАК Партия,
| ЗапасыОстатки.КоличествоОстаток КАК Остаток,
| ЗапасыОстатки.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения
| ИЗ
| РегистрНакопления.Запасы.Остатки(
| &Дата,
| Организация = &Организация
| И Номенклатура В (&МассивНоменклатуры)
| И ВЫБОР
| КОГДА &ИспользоватьСклад
| ТОГДА СтруктурнаяЕдиница = &Склад
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)) КАК ЗапасыОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗапасыОстатки.Номенклатура,
| ЗапасыОстатки.Характеристика,
| ЗапасыОстатки.Партия,
| -ЗапасыОстатки.КоличествоОстаток,
| ЗапасыОстатки.Номенклатура.ЕдиницаИзмерения
| ИЗ
| РегистрНакопления.Запасы.Остатки(
| &Дата,
| Организация = &Организация
| И Номенклатура В (&МассивНоменклатуры)
| И ВЫБОР
| КОГДА &ИспользоватьСклад
| ТОГДА СтруктурнаяЕдиница = &Склад
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ЗаказПокупателя <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)) КАК ЗапасыОстатки) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Партия,
| ВложенныйЗапрос.ЕдиницаИзмерения,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Характеристика
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура");
Запрос.УстановитьПараметр("Дата", Объект.Дата);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Если ЗначениеЗаполнено(Объект.СкладОстатков) Тогда
ИспользоватьСклад = Истина;
Иначе
ИспользоватьСклад = Ложь;
КонецЕсли;
Запрос.УстановитьПараметр("ИспользоватьСклад", ИспользоватьСклад);
Запрос.УстановитьПараметр("Склад",Объект.СкладОстатков);
Запрос.УстановитьПараметр("МассивНоменклатуры", СписокНоменклатуры);
ТаблицаОстаткиМатериалаИАналогов.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры // ПолучитьОстаткиНоменклатуры(мМассивНоменклатуры)()
ПоказатьПрикрепленные файлы:

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