|
Как программно вытащить свойства номенклатуры | ☑ | ||
---|---|---|---|---|
0
discant
20.06.12
✎
11:59
|
Добрый день!
Речь идет об УПП. Есть документ ЗаказНаПроизводство. В нем заполнены номенклатурой ТЧ Продукция и Материалы. Подскажите, пожалуйста, как программно можно вытащить свойства элементов номенклатуры? |
|||
1
aspirant
20.06.12
✎
12:02
|
РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект,Свойство",Номенклатура,ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ИмяВашегоСвойства"))).Значение;
|
|||
2
Нуф-Нуф
20.06.12
✎
12:03
|
(1) а запросом некошерно?
|
|||
3
aspirant
20.06.12
✎
12:09
|
запросом тоже запросто, но я для форм использую такую конструкцию. Она короче.
|
|||
4
aspirant
20.06.12
✎
12:10
|
(2) запросом конечно еще проще, но фиг его знает, что за задача у ТС (что он далее собирается делать)
|
|||
5
discant
20.06.12
✎
12:12
|
Хорошо тогда так...
Делаю ввод на основании основного заказа для каждой подсборки... Как получить в поле подразделения шапки дочернего заказа свойство "Цех" элемента ТЯ Материалы? |
|||
6
Maxus43
20.06.12
✎
12:13
|
Подразделение = (1);
|
|||
7
discant
20.06.12
✎
12:14
|
Пасибо. Попробую...
|
|||
8
alextom81
20.06.12
✎
12:14
|
В УПП есть обработка "ЗначенияСвойствОбъекта" - в ней всё есть для счастья. Если даже ей не пользоваться, то большинство методов, которые можно применить - там есть.
|
|||
9
discant
20.06.12
✎
12:57
|
Ребят, вот такой код... Выдает ошибку, что переменная Номенклатура неопределена.
// Создаем документ на основании основного заказа ЗП = Неопределено; мт = ПроизвЗаказ.Материалы.Количество(); Для Каждого мт Из ПроизвЗаказ.Материалы Цикл ЗП = Документы.ЗаказНаПроизводство.СоздатьДокумент(); ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЗП, ПроизвЗаказ); ЗП.ОсновнойЗаказНаПроизводство = ПроизвЗаказ; ЗП.Подразделение = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект,Свойство",Номенклатура,ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цех"))).Значение; |
|||
10
aspirant
20.06.12
✎
13:00
|
да уж. А номенклатура у тебя в данном случае чему равна?
|
|||
11
discant
20.06.12
✎
13:03
|
Так вот я и спрашиваю... Нужно вытащить элементы из материалы, которую обходит цикл.
|
|||
12
discant
20.06.12
✎
13:04
|
Сорри, свойства из элементов
|
|||
13
aspirant
20.06.12
✎
13:06
|
Для Каждого Мт Из ПроизвЗаказ.Материалы Цикл
Номенклатура = Мт.Материал (или Мт.Номенклатура - как там в метаданных) а далее - как у тебя. И никаких мт=ПроизвЗаказ.Материалы.Количество(); - вычеркни |
|||
14
zinch
20.06.12
✎
13:06
|
Попробуй
Номенклатура = мт.Номенклатура =) |
|||
15
aspirant
20.06.12
✎
13:07
|
а ты в цикле на каждый материал создаешь отдельный док?
|
|||
16
discant
20.06.12
✎
13:26
|
Да.
|
|||
17
discant
20.06.12
✎
13:31
|
Ошибка вываливается...
{Форма.Форма.Форма(57)}: Поле объекта не обнаружено (Материалы) Номенклатура = Мт.Материалы; |
|||
18
aspirant
20.06.12
✎
13:32
|
А как называется поле с материалом в таблице Материалы?
|
|||
19
discant
20.06.12
✎
13:36
|
Заработало с номенклатурой
|
|||
20
discant
20.06.12
✎
13:41
|
Не сочтите за наглость, есть еще вопрос...
Есть задача по каждому материалу создавать отдельный документ, а после выполнения нижеследующего кода создаются 8 одинаковых документов (кол-во материалов в основном заказе 8). Процедура КнопкаВыполнитьНажатие(Кнопка) Если НЕ ЗначениеЗаполнено(ПроизвЗаказ) Тогда Предупреждение("Выберите главный документ <<Заказы на производство>>!"); Возврат; КонецЕсли; Если ПроизвЗаказ.Материалы.Количество() = 0 Тогда Предупреждение("Заполните табличную часть "+"""Материалы"""); Возврат; КонецЕсли; Для каждого Объект Из РегистрыНакопления Цикл Объект.УстановитьИспользованиеИтогов(Истина); КонецЦикла; ДопПараметры = Новый Структура; МассивПолуфабрикаты = Новый Массив; МассивПолуфабрикаты.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Производство); ДопПараметры.Вставить("ВидВоспроизводства", МассивПолуфабрикаты); ДопПараметры.Вставить("ИмяРеквЗаказТабЧасть", "Заказ"); ДопПараметры.Вставить("ВернутьРезультатЗапроса", Истина); РезЗапроса = Неопределено; ЗаказыНаПроизводствоИПереработку.ЗаполнитьТабличнуюЧастьПоПотребностямЗаказаНаПроизводство(РезЗапроса, ПроизвЗаказ, ДопПараметры); // Создаем список значений подразделений. СписокПодр = Новый СписокЗначений; Обход = РезЗапроса.Выбрать(); Пока Обход.СледующийПоЗначениюПоля("Подразделение") Цикл Если СписокПодр.НайтиПоЗначению(Обход.Подразделение)=неопределено Тогда СписокПодр.Добавить(Обход.Подразделение); КонецЕсли; КонецЦикла; ВыбрПодр = Неопределено; // Подставляем подразделение из шапки Если СписокПодр.Количество() > 1 Тогда СписокПодр.Вставить(0, Неопределено, "<Все подразделения>"); ВыбрПодр = СписокПодр[0].Значение; // По умолчанию значение - <Все подразделения> ВыбрПодр = СписокПодр.ВыбратьЭлемент("Выберите подразделение...", СписокПодр[0]); Если ВыбрПодр <> Неопределено Тогда // Пользователь отказался от выбора ВыбрПодр = ВыбрПодр.Значение; КонецЕсли; ИначеЕсли СписокПодр.Количество() = 1 Тогда ВыбрПодр = СписокПодр[0].Значение; КонецЕсли; Если ВыбрПодр <> Неопределено Тогда // Пользователь выбрал конкретное подразделение Подразделение = ВыбрПодр; КонецЕсли; // Создаем документ на основании основного заказа ЗП = Неопределено; Для Каждого мт Из ПроизвЗаказ.Материалы Цикл Номенклатура = Мт.Номенклатура; ЗП = Документы.ЗаказНаПроизводство.СоздатьДокумент(); ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЗП, ПроизвЗаказ); ЗП.ОсновнойЗаказНаПроизводство = ПроизвЗаказ; ЗП.Подразделение = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект,Свойство",Номенклатура,ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цех"))).Значение; ЗП.Дата = ТекущаяДата(); ЗП.ДатаЗапуска = ПроизвЗаказ.ДатаЗапуска; ЗП.ДатаИсполнения = ПроизвЗаказ.ДатаЗапуска -1; ЗП.УстановитьНовыйНомер(ПроизвЗаказ.Организация.Префикс); ЗП.Ответственный = глЗначениеПеременной("глТекущийПользователь"); //Вытаскиваем № - Цифры. Если НЕ ЗначениеЗаполнено(ЗП.ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(ЗП.Номер); ии = длинаНомера; Пока ии > 0 Цикл Если Найти(цц,Сред(ЗП.Номер,ии,1)) > 0 Тогда ном = Сред(ЗП.Номер,ии,1) + ном; Иначе Прервать; КонецЕсли; ии = ии - 1; КонецЦикла; ном = СокрЛП(ПроизвЗаказ.ДеревоЗаказов)+"_"+Строка(Формат(Число(ном),"ЧГ=0")); ЗП.ДеревоЗаказов = ном; КонецЕсли; Обход = РезЗапроса.Выбрать(); Пока Обход.Следующий() Цикл Если ВыбрПодр = Неопределено ИЛИ ВыбрПодр = Обход.Подразделение Тогда // Заполняем таб. часть Продукция НоваяСтрока = ЗП.Продукция.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Обход); НоваяСтрока.Количество = Обход.Количество * Обход.КоэффициентХраненияОстатков / Обход.Коэффициент; НоваяСтрока.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, ЗП.Дата, ЗП.Подразделение); КонецЕсли; Обход = РезЗапроса.Выбрать(); Пока Обход.Следующий() Цикл Если ВыбрПодр = Неопределено ИЛИ ВыбрПодр = Обход.Подразделение Тогда // Заполняем таб. часть Продукция НоваяСтрока = ЗП.Продукция.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Обход); НоваяСтрока.Количество = Обход.Количество * Обход.КоэффициентХраненияОстатков / Обход.Коэффициент; НоваяСтрока.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, ЗП.Дата, ЗП.Подразделение); КонецЕсли; КонецЦикла; //Заполняем Табл. часть Материалы: ТаблицаИсходныеКомплектующие = ЗП.Материалы.Выгрузить(); Параметры = Новый Структура("ПараметрыВыпуска, КоличествоУровнейРазузлования, ДатаСпецификации"); Для Каждого СтрокаТабличнойЧасти Из ЗП.Продукция Цикл Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Спецификация) Тогда Продолжить; КонецЕсли; РезультатРазузлования = Новый Структура("ИсходныеКомплектующие"); СтруктураИсточник = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, Количество, Спецификация"); ЗаполнитьЗначенияСвойств(СтруктураИсточник, СтрокаТабличнойЧасти); ПараметрыВыпуска = Новый Соответствие; Для Каждого ПараметрВыпуска из ЗП.ПараметрыВыпускаПродукции Цикл Если ПараметрВыпуска.КлючСвязи = СтрокаТабличнойЧасти.КлючСвязи Тогда ПараметрыВыпуска.Вставить(ПараметрВыпуска.ВидПараметра.Наименование, ПараметрВыпуска.Значение); КонецЕсли; КонецЦикла; Параметры.ПараметрыВыпуска = ПараметрыВыпуска; Параметры.КоличествоУровнейРазузлования = 1; Параметры.ДатаСпецификации = ЗП.Дата; МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(СтруктураИсточник, РезультатРазузлования, Параметры); Если МассивОшибок.Количество() > 0 Тогда Для каждого Ошибка из МассивОшибок Цикл ОбщегоНазначения.Сообщение("Ошибка: " + Ошибка.Причина, Ошибка.СтатусОшибки); ОбщегоНазначения.Сообщение(" Спецификация: " + Ошибка.Спецификация); ОбщегоНазначения.Сообщение(" Номер строки: " + Ошибка.НомерСтроки); ОбщегоНазначения.Сообщение(" Описание ошибки: " + Ошибка.ОписаниеОшибки); КонецЦикла; КонецЕсли; Если РезультатРазузлования.ИсходныеКомплектующие = Неопределено Тогда Продолжить; КонецЕсли; ИсходныеКомплектующие = РезультатРазузлования.ИсходныеКомплектующие; ИсходныеКомплектующие.ЗаполнитьЗначения(ВыбрПодр, "Подразделение"); //заполним подразделение по основной спецификации полуфабрикатов Для каждого Строка из ИсходныеКомплектующие цикл ПодразделениеНоменклатуры = ЗаказыНаПроизводствоИПереработку.ПолучитьПодразделениеИзСпецификации(Строка.Спецификация,Строка.Номенклатура,Строка.ХарактеристикаНоменклатуры); Если ЗначениеЗаполнено(ПодразделениеНоменклатуры) Тогда Строка.Подразделение = ПодразделениеНоменклатуры; КонецЕсли; КонецЦикла; ИсходныеКомплектующие.Колонки.Добавить("Продукция"); ИсходныеКомплектующие.Колонки.Добавить("ХарактеристикаПродукции"); ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Номенклатура, "Продукция"); ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, "ХарактеристикаПродукции"); ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Спецификация, "Спецификация"); ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ИсходныеКомплектующие, ТаблицаИсходныеКомплектующие); КонецЦикла; ТаблицаИсходныеКомплектующие.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, ВидВоспроизводства, Спецификация, Подразделение, Продукция, ХарактеристикаПродукции", "Количество"); ЗП.Материалы.Загрузить(ТаблицаИсходныеКомплектующие); Для Каждого СтрокаТабличнойЧасти Из ЗП.Материалы Цикл ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь); КонецЦикла; ЗП.Записать(); Сообщить("Документ "+СокрЛП(ЗП)); КонецЦикла; КонецЦикла; КонецПроцедуры //************************************************************************* |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |