|
УНФ аналоги материалов | ☑ | ||
---|---|---|---|---|
0
Raideres
09.07.21
✎
15:47
|
Ребят помогите пожалуйста как в УНФ можно чтот сделать для работы с аналогами в производстве?
например Материал А и у него есть Аналог А-1 Аналог А-2 и Аналог А-3 когда не хватает Материала А тратится А-1 потом А-2 и так далее МБ кто то делал подобную доработку?????? |
|||
1
Krendel
09.07.21
✎
15:48
|
Разработчики УПП и ЕРП делали эту разработку ;-)
|
|||
2
Raideres
09.07.21
✎
16:01
|
(1) Сам чёрт ногу сломит хотел посмотреть как в ЕРП устроено хрен что разберешь
сейчас написал вот так но это неправильно в край и толком не работает) Процедура ЗаполнитьТабличнуюЧастьПоАналогам() Объект.Запасы.Очистить(); Объект.СерийныеНомера.Очистить(); ЭтоРазборка = (Объект.ВидОперации=Перечисления.ВидыОперацийСборкаЗапасов.Разборка); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ДобавитьВременныеТаблицы(Запрос); ДобавитьРаспределениеПоСпецификации(Запрос); ЗаполнитьЗапасыПоЭтапам(Запрос); СтатусПартии = Новый СписокЗначений; СтатусПартии.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыПартий.СобственныеЗапасы")); СтатусПартии.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыПартий.ДавальческоеСырье")); Организация = Константы.УчетПоКомпании.Компания(Объект.Организация); Для каждого СтрокаТабличнойЧасти Из Объект.Запасы Цикл ////1. Проверить хватает или нет + незабыть резерв если хватает продолжить и добавить резерв СтруктураОстатков = СвободныйОстатокПоСтруктурнойЕдинице(СтрокаТабличнойЧасти.СтруктурнаяЕдиница, СтрокаТабличнойЧасти.Номенклатура , СтрокаТабличнойЧасти.Характеристика, СтрокаТабличнойЧасти.Партия, СтрокаТабличнойЧасти.ЕдиницаИзмерения); ТребуетсяСписать= СтрокаТабличнойЧасти.Количество; ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв; Если ТребуетсяСписать> ОстатокПоФакту Тогда ////2. Проверить есть ли аналоги + свободные остатки по данным аналогам и отсортировать по приоритету Если Объект.ПоложениеСклада = ПредопределенноеЗначение("Перечисление.ПоложениеРеквизитаНаФорме.ВТабличнойЧасти") Тогда Запрос.Текст= СтрЗаменить(Запрос.Текст,"",""); Иначе Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтрокаТабличнойЧасти.СтруктурнаяЕдиница); КонецЕсли; Запрос.УстановитьПараметр("Номенклатура",СтрокаТабличнойЧасти.Номенклатура); Запрос.УстановитьПараметр("Характеристика",СтрокаТабличнойЧасти.Характеристика); Запрос.УстановитьПараметр("Организация",Организация); Запрос.Текст = "ВЫБРАТЬ | АМ_АналогиНоменклатуры.Номенклатура КАК Номенклатура, | АМ_АналогиНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | АМ_АналогиНоменклатуры.Аналог КАК Аналог, | АМ_АналогиНоменклатуры.ХарактеристикаАналога КАК ХарактеристикаАналога, | АМ_АналогиНоменклатуры.Количество КАК Количество, | АМ_АналогиНоменклатуры.КоличествоАналога КАК КоличествоАналога, | АМ_АналогиНоменклатуры.Приоритет КАК Приоритет |ПОМЕСТИТЬ ВТ_Аналог |ИЗ | РегистрСведений.АМ_АналогиНоменклатуры КАК АМ_АналогиНоменклатуры |ГДЕ | АМ_АналогиНоменклатуры.Номенклатура = &Номенклатура | И АМ_АналогиНоменклатуры.ХарактеристикаНоменклатуры = &Характеристика |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СУММА(ЗапасыОстаткиСвободные.КоличествоОстаток) КАК КоличествоСвободно, | ЗапасыОстаткиСвободные.Номенклатура КАК Номенклатура, | ЗапасыОстаткиСвободные.Характеристика КАК Характеристика, | ЗапасыОстаткиСвободные.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница |ПОМЕСТИТЬ ВТОстатокАналогов |ИЗ | РегистрНакопления.Запасы.Остатки( | , | Номенклатура В | (ВЫБРАТЬ | Вт_аналог.Аналог КАК номенклатура | ИЗ | Вт_аналог) | И ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка) | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница | И Характеристика = &Характеристика | И Организация = &Организация) КАК ЗапасыОстаткиСвободные | |СГРУППИРОВАТЬ ПО | ЗапасыОстаткиСвободные.Номенклатура, | ЗапасыОстаткиСвободные.Характеристика, | ЗапасыОстаткиСвободные.СтруктурнаяЕдиница |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Аналог.Аналог КАК Номенклатура, | ВТ_Аналог.ХарактеристикаАналога КАК Характеристика, | ВТ_Аналог.Количество КАК КоэффицентОсновной, | ВТ_Аналог.КоличествоАналога КАК КоэффицентАналога, | ВТ_Аналог.Приоритет КАК Приоритет, | ЕСТЬNULL(ВТОстатокАналогов.КоличествоСвободно, 0) КАК Количество, | ВТОстатокАналогов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница |ПОМЕСТИТЬ ВтИтоговая |ИЗ | ВТ_Аналог КАК ВТ_Аналог | ЛЕВОЕ СОЕДИНЕНИЕ ВТОстатокАналогов КАК ВТОстатокАналогов | ПО ВТ_Аналог.Аналог = ВТОстатокАналогов.Номенклатура | И ВТ_Аналог.ХарактеристикаАналога = ВТОстатокАналогов.Характеристика |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВтИтоговая.Номенклатура КАК Номенклатура, | ВтИтоговая.Характеристика КАК Характеристика, | ВтИтоговая.КоэффицентОсновной / ВтИтоговая.КоэффицентАналога КАК Коэффицент, | ВтИтоговая.Приоритет КАК Приоритет, | ВтИтоговая.Количество КАК Количество, | ВтИтоговая.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница |ИЗ | ВтИтоговая КАК ВтИтоговая |ГДЕ | ВтИтоговая.Количество > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТ_Аналог |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТОстатокАналогов |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВтИтоговая"; Выборка = Запрос.Выполнить().Выбрать(); ////3. Добавить аналоги и уменьшить количество в документе но перед этим проверим сколько есть для списания основного материала Нехватает = ТребуетсяСписать-(СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв); СтрокаТабличнойЧасти.Количество = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв; СтрокаТабличнойЧасти.Резерв = СтруктураОстатков.КоличествоРезерв; СчетчикДобавляемыхАналогов=0; НехватаетК=Нехватает; Пока Выборка.Следующий()и Нехватает >0 Цикл Списываем = Мин(Выборка.Количество, Нехватает/Окр(Выборка.Коэффицент,3)); //НоваяСтрока = ТаблицаДобавляемыхАналогов.Добавить(); //НоваяСтрока.НомерСтроки = СтрокаТабличнойЧасти.НомерСтроки; ////СчетчикДобавляемыхАналогов = СчетчикДобавляемыхАналогов + 1; //ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); //НоваяСтрока.Количество = Списываем; НоваяСтрока=Объект.Запасы.Вставить(СтрокаТабличнойЧасти.НомерСтроки+СчетчикДобавляемыхАналогов); СчетчикДобавляемыхАналогов = СчетчикДобавляемыхАналогов + 1; ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); НоваяСтрока.Количество = Списываем; Нехватает = Нехватает - Списываем*Окр(Выборка.Коэффицент,3); КонецЦикла; Иначе //количества хватает но надо заполнить резерв СтрокаТабличнойЧасти.Резерв=СтруктураОстатков.КоличествоРезерв; КонецЕсли; //типовые действия СтрокаТабличнойЧасти.Партия = ?(ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) , НоменклатураВДокументахСервер.ЗначенияПартийНоменклатурыПоУмолчанию(СтрокаТабличнойЧасти.Номенклатура,СтатусПартии) , Неопределено); Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.СтруктурнаяЕдиница) И Объект.ПоложениеСклада=Перечисления.ПоложениеРеквизитаНаФорме.ВТабличнойЧасти Тогда Продолжить; КонецЕсли; СтрокаТабличнойЧасти.СтруктурнаяЕдиница = ?(ЭтоРазборка, Объект.СтруктурнаяЕдиницаПродукции, Объект.СтруктурнаяЕдиницаЗапасов); СтрокаТабличнойЧасти.Ячейка = ?(ЭтоРазборка, Объект.ЯчейкаПродукции, Объект.ЯчейкаЗапасов); КонецЦикла; КонецПроцедуры |
|||
3
Raideres
09.07.21
✎
16:02
|
Функция СвободныйОстатокПоСтруктурнойЕдинице(СтруктурнаяЕдиница, Номенклатура, Характеристика, Партия, ЕдиницаИзмерения)
Коэффициент = ?(ТипЗнч(ЕдиницаИзмерения) = Тип("СправочникСсылка.ЕдиницыИзмерения"), ЕдиницаИзмерения.Коэффициент, 1); Организация = Константы.УчетПоКомпании.Компания(Объект.Организация); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Характеристика", Характеристика); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Партия", Партия); Запрос.УстановитьПараметр("СтруктурнаяЕдиница", СтруктурнаяЕдиница); ЕстьЗаказ = ЗначениеЗаполнено(Объект.ЗаказПокупателя); Если ЕстьЗаказ Тогда Запрос.УстановитьПараметр("Заказ", Объект.ЗаказПокупателя); Запрос.Текст = "ВЫБРАТЬ | СУММА(ЗапасыОстаткиСвободные.КоличествоОстаток) КАК КоличествоСвободно, | СУММА(ЗапасыОстаткиРезерв.КоличествоОстаток) КАК КоличествоРезерв |ИЗ | РегистрНакопления.Запасы.Остатки( | , | Номенклатура = &Номенклатура | И ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка) | И Организация = &Организация | И Характеристика = &Характеристика | И Партия = &Партия | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЗапасыОстаткиСвободные, | РегистрНакопления.Запасы.Остатки( | , | Номенклатура = &Номенклатура | И ЗаказПокупателя = &Заказ | И Организация = &Организация | И Характеристика = &Характеристика | И Партия = &Партия | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЗапасыОстаткиРезерв | |УПОРЯДОЧИТЬ ПО | КоличествоСвободно УБЫВ"; Иначе Запрос.Текст = "ВЫБРАТЬ | СУММА(ЗапасыОстаткиСвободные.КоличествоОстаток) КАК КоличествоСвободно |ИЗ | РегистрНакопления.Запасы.Остатки( | , | Номенклатура = &Номенклатура | И ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка) | И Организация = &Организация | И Характеристика = &Характеристика | И Партия = &Партия | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЗапасыОстаткиСвободные | |УПОРЯДОЧИТЬ ПО | КоличествоСвободно УБЫВ"; КонецЕсли; Результат = Запрос.Выполнить().Выбрать(); СтруктураВозврата = Новый Структура("КоличествоСвободно, КоличествоРезерв"); Пока Результат.Следующий() Цикл СтруктураВозврата.КоличествоСвободно = Результат.КоличествоСвободно/Коэффициент; СтруктураВозврата.КоличествоРезерв = ?(ЕстьЗаказ, Результат.КоличествоРезерв/Коэффициент, 0); КонецЦикла; Возврат СтруктураВозврата; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |