8.х РазузлованиеНоменклатуры

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mavaly, 10 фев 2010.

  1. TopicStarter Overlay
    mavaly
    Offline

    mavaly Опытный в 1С

    Регистрация:
    17 янв 2010
    Сообщения:
    233
    Симпатии:
    0
    Баллы:
    26
    Добрый День!
    Не могу разораться с разузлованием номенклатуры =(
    При заполнении требования-накладной используется метод "заполнить по спецификации", инженер выберает нужную спецификацию и в идеале т-н должна заполниться всей номенклатурой этой спецификации. Но в этой спецификации - узлы =(...а уже в узлах номенклатуры, естественно заполнение не проиходит (

    Помогите!
  2. TopicStarter Overlay
    mavaly
    Offline

    mavaly Опытный в 1С

    Регистрация:
    17 янв 2010
    Сообщения:
    233
    Симпатии:
    0
    Баллы:
    26
    Программный код основного модуля требования-накладной:

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

    ошибка:
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование
    Ошибка: Не указана номенклатура или спецификация для разузлования.
    Спецификация:
    Номер строки:
    Описание ошибки: Разузлование

Поделиться этой страницей