|
Помогите, пожалуйста с вводом на основании | ☑ | ||
---|---|---|---|---|
0
discant
20.06.12
✎
13:58
|
Товарищи, такая проблема... Есть необходимость с каждого заказа на производства создавать подчиненные заказы для каждой подсборки. То есть, для каждого элемента закладки материалы.
Получился такой код Процедура КнопкаВыполнитьНажатие(Кнопка) Если НЕ ЗначениеЗаполнено(ПроизвЗаказ) Тогда Предупреждение("Выберите главный документ <<Заказы на производство>>!"); Возврат; КонецЕсли; Если ПроизвЗаказ.Материалы.Количество() = 0 Тогда Предупреждение("Заполните табличную часть "+"""Материалы"""); Возврат; КонецЕсли; Для каждого Объект Из РегистрыНакопления Цикл Объект.УстановитьИспользованиеИтогов(Истина); КонецЦикла; ДопПараметры = Новый Структура; МассивПолуфабрикаты = Новый Массив; МассивПолуфабрикаты.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Производство); ДопПараметры.Вставить("ВидВоспроизводства", МассивПолуфабрикаты); ДопПараметры.Вставить("ИмяРеквЗаказТабЧасть", "Заказ"); ДопПараметры.Вставить("ВернутьРезультатЗапроса", Истина); РезЗапроса = Неопределено; ЗаказыНаПроизводствоИПереработку.ЗаполнитьТабличнуюЧастьПоПотребностямЗаказаНаПроизводство(РезЗапроса, ПроизвЗаказ, ДопПараметры); // Создаем список значений подразделений. СписокПодр = Новый СписокЗначений; Обход = РезЗапроса.Выбрать(); Пока Обход.СледующийПоЗначениюПоля("Подразделение") Цикл Если СписокПодр.НайтиПоЗначению(Обход.Подразделение)=неопределено Тогда СписокПодр.Добавить(Обход.Подразделение); КонецЕсли; КонецЦикла; ВыбрПодр = Неопределено; // Подставляем подразделение из шапки Если СписокПодр.Количество() > 1 Тогда СписокПодр.Вставить(0, Неопределено, "<Все подразделения>"); ВыбрПодр = СписокПодр[0].Значение; // По умолчанию значение - <Все подразделения> ВыбрПодр = СписокПодр.ВыбратьЭлемент("Выберите подразделение...", СписокПодр[0]); Если ВыбрПодр <> Неопределено Тогда // Пользователь отказался от выбора ВыбрПодр = ВыбрПодр.Значение; КонецЕсли; ИначеЕсли СписокПодр.Количество() = 1 Тогда ВыбрПодр = СписокПодр[0].Значение; КонецЕсли; Если ВыбрПодр <> Неопределено Тогда // Пользователь выбрал конкретное подразделение Подразделение = ВыбрПодр; КонецЕсли; // Создаем документ на основании основного заказа ЗП = Неопределено; Для Каждого мт Из ПроизвЗаказ.Материалы Цикл Номенклатура = Мт.Номенклатура; ЗП = Документы.ЗаказНаПроизводство.СоздатьДокумент(); ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЗП, ПроизвЗаказ); ЗП.ОсновнойЗаказНаПроизводство = ПроизвЗаказ; ЗП.Подразделение = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект,Свойство",Номенклатура,ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цех"))).Значение; ЗП.Дата = ТекущаяДата(); ЗП.ДатаЗапуска = ПроизвЗаказ.ДатаЗапуска; ЗП.ДатаИсполнения = ПроизвЗаказ.ДатаЗапуска -1; ЗП.УстановитьНовыйНомер(ПроизвЗаказ.Организация.Префикс); ЗП.Ответственный = глЗначениеПеременной("глТекущийПользователь"); //Вытаскиваем № - Цифры. Если НЕ ЗначениеЗаполнено(ЗП.ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(ЗП.Номер); ии = длинаНомера; Пока ии > 0 Цикл Если Найти(цц,Сред(ЗП.Номер,ии,1)) > 0 Тогда ном = Сред(ЗП.Номер,ии,1) + ном; Иначе Прервать; КонецЕсли; ии = ии - 1; КонецЦикла; ном = СокрЛП(ПроизвЗаказ.ДеревоЗаказов)+"_"+Строка(Формат(Число(ном),"ЧГ=0")); ЗП.ДеревоЗаказов = ном; КонецЕсли; Обход = РезЗапроса.Выбрать(); Пока Обход.Следующий() Цикл Если ВыбрПодр = Неопределено ИЛИ ВыбрПодр = Обход.Подразделение Тогда // Заполняем таб. часть Продукция НоваяСтрока = ЗП.Продукция.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Обход); НоваяСтрока.Количество = Обход.Количество * Обход.КоэффициентХраненияОстатков / Обход.Коэффициент; НоваяСтрока.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, ЗП.Дата, ЗП.Подразделение); КонецЕсли; Обход = РезЗапроса.Выбрать(); Пока Обход.Следующий() Цикл Если ВыбрПодр = Неопределено ИЛИ ВыбрПодр = Обход.Подразделение Тогда // Заполняем таб. часть Продукция НоваяСтрока = ЗП.Продукция.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Обход); НоваяСтрока.Количество = Обход.Количество * Обход.КоэффициентХраненияОстатков / Обход.Коэффициент; НоваяСтрока.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, ЗП.Дата, ЗП.Подразделение); КонецЕсли; КонецЦикла; //Заполняем Табл. часть Материалы: ТаблицаИсходныеКомплектующие = ЗП.Материалы.Выгрузить(); Параметры = Новый Структура("ПараметрыВыпуска, КоличествоУровнейРазузлования, ДатаСпецификации"); Для Каждого СтрокаТабличнойЧасти Из ЗП.Продукция Цикл Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Спецификация) Тогда Продолжить; КонецЕсли; РезультатРазузлования = Новый Структура("ИсходныеКомплектующие"); СтруктураИсточник = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, Количество, Спецификация"); ЗаполнитьЗначенияСвойств(СтруктураИсточник, СтрокаТабличнойЧасти); ПараметрыВыпуска = Новый Соответствие; Для Каждого ПараметрВыпуска из ЗП.ПараметрыВыпускаПродукции Цикл Если ПараметрВыпуска.КлючСвязи = СтрокаТабличнойЧасти.КлючСвязи Тогда ПараметрыВыпуска.Вставить(ПараметрВыпуска.ВидПараметра.Наименование, ПараметрВыпуска.Значение); КонецЕсли; КонецЦикла; Параметры.ПараметрыВыпуска = ПараметрыВыпуска; Параметры.КоличествоУровнейРазузлования = 1; Параметры.ДатаСпецификации = ЗП.Дата; МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(СтруктураИсточник, РезультатРазузлования, Параметры); Если МассивОшибок.Количество() > 0 Тогда Для каждого Ошибка из МассивОшибок Цикл ОбщегоНазначения.Сообщение("Ошибка: " + Ошибка.Причина, Ошибка.СтатусОшибки); ОбщегоНазначения.Сообщение(" Спецификация: " + Ошибка.Спецификация); ОбщегоНазначения.Сообщение(" Номер строки: " + Ошибка.НомерСтроки); ОбщегоНазначения.Сообщение(" Описание ошибки: " + Ошибка.ОписаниеОшибки); КонецЦикла; КонецЕсли; Если РезультатРазузлования.ИсходныеКомплектующие = Неопределено Тогда Продолжить; КонецЕсли; ИсходныеКомплектующие = РезультатРазузлования.ИсходныеКомплектующие; ИсходныеКомплектующие.ЗаполнитьЗначения(ВыбрПодр, "Подразделение"); //заполним подразделение по основной спецификации полуфабрикатов Для каждого Строка из ИсходныеКомплектующие цикл ПодразделениеНоменклатуры = ЗаказыНаПроизводствоИПереработку.ПолучитьПодразделениеИзСпецификации(Строка.Спецификация,Строка.Номенклатура,Строка.ХарактеристикаНоменклатуры); Если ЗначениеЗаполнено(ПодразделениеНоменклатуры) Тогда Строка.Подразделение = ПодразделениеНоменклатуры; КонецЕсли; КонецЦикла; ИсходныеКомплектующие.Колонки.Добавить("Продукция"); ИсходныеКомплектующие.Колонки.Добавить("ХарактеристикаПродукции"); ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Номенклатура, "Продукция"); ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, "ХарактеристикаПродукции"); ИсходныеКомплектующие.ЗаполнитьЗначения(СтрокаТабличнойЧасти.Спецификация, "Спецификация"); ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ИсходныеКомплектующие, ТаблицаИсходныеКомплектующие); КонецЦикла; ТаблицаИсходныеКомплектующие.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Коэффициент, ВидВоспроизводства, Спецификация, Подразделение, Продукция, ХарактеристикаПродукции", "Количество"); ЗП.Материалы.Загрузить(ТаблицаИсходныеКомплектующие); Для Каждого СтрокаТабличнойЧасти Из ЗП.Материалы Цикл ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь); КонецЦикла; ЗП.Записать(); Сообщить("Документ "+СокрЛП(ЗП)); КонецЦикла; КонецЦикла; КонецПроцедуры //************************************************************************* После его выполнения создаются одинаковые документы. Из количество соответствует закладке материалы, но для каждого элемента заказа не получается. |
|||
1
zak555
20.06.12
✎
14:00
|
смешно, использовать общие модули и менеджеры РегистрыНакопления из клиентской процедуры
|
|||
2
discant
20.06.12
✎
14:01
|
У меня файловая база, так что взлетает пока
|
|||
3
zak555
20.06.12
✎
14:04
|
(2) перепиши этот ужас, который не пойми, что создаёт
|
|||
4
discant
20.06.12
✎
14:06
|
Это типовой алгоритм ввода на основании с циклом для обхода материалов...
|
|||
5
zak555
20.06.12
✎
18:17
|
(4) что за конфигурация и документ ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |