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