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