14:53 Задача 1.13 | |
Стелажи закупка Приход накладной ,продажа Расходной накладной Стелаж это набор комплектующих к примеру 5 болтов или 10 коробок 30 стоек надо обеспечить уникальность деталей,одна и та же деталь не может принадлежать разным стеллажам. учет остатков в разрезе складов . в шапках приходной и расходной добавим поле склад. Списание при продаже может быть как всех стелажей так и отдельных деталей 2 отчета Наличие стелажей на дату наличие деталей на дату Приступим Добавляем поле Склад в регистр остатки и в шапку документов приходная расходная. Изменяем справочник номенклатура добавим в него поле стелаж- флажокОбъект.Стелаж ( да нет) добавим таблицу Комплектующие две колонки Комплектующие Количество создадим форму элемента справочника . добавим поле родитель в форму В форму добавим код: &НаКлиенте Процедура ПриОткрытии(Отказ) ОтборНаСервере(); КонецПроцедуры &НаСервере Процедура ОтборНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Комплекты.Комплектуюшее, | Комплекты.Стелаж, | Комплекты.Количество |ИЗ | РегистрСведений.Комплекты КАК Комплекты |ГДЕ | Комплекты.Стелаж = &Стелаж"; Запрос.УстановитьПараметр("Стелаж", Объект.Ссылка); Комплектующие.Загрузить(Запрос.Выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() ЗаписьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗаписьНаСервере() //мплектующие КонецПроцедуры Иерархический иерархия групп и элементов создадим форму элемента .добавим реквизит Комплектующие Тип РегистрСведенийНаборЗаписей.Комплекты Создадим непериодический регистр сведений Комплекты: Измерение Комплектующие ,Ресурсы Стеллаж ,Количество Документы: Приходная в модуле объекта: Процедура ОбработкаПроведения(Отказ, Режим) // регистр ОстаткиНоменклатуры Приход Движения.ОстаткиНоменклатуры.Записывать = Истина; Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура; Движение.Склад = Склад; Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество; КонецЦикла; КонецПроцедуры Расходная: в модуле объекта код: Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; // блокировка по всем записям в момент записи //ПЕРЕВОДИМ ВСЮ ТАБЛИЧНУЮ ЧАСТЬ В КОМПЛЕКТУЮЩИЕ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Склад КАК Склад, | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Количество |ПОМЕСТИТЬ ТЧ |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |ИНДЕКСИРОВАТЬ ПО | Номенклатура, | Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(Комплекты.Комплектуюшее, ТЧ.Номенклатура) КАК Номенклатура, | СУММА(ВЫБОР | КОГДА Комплекты.Количество ЕСТЬ NULL | ТОГДА ТЧ.Количество | ИНАЧЕ Комплекты.Количество * ТЧ.Количество | КОНЕЦ) КАК Требуется |ИЗ | ТЧ КАК ТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Комплекты КАК Комплекты | ПО ТЧ.Номенклатура = Комплекты.Стелаж | |СГРУППИРОВАТЬ ПО | ЕСТЬNULL(Комплекты.Комплектуюшее, ТЧ.Номенклатура)"; Запрос.Параметры.Вставить("Ссылка",Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); МассивНоменклатуры = Новый Массив; //ВЫПОЛНЯЕМ ЗАПИСИ В РЕГИСТР Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Требуется; МассивНоменклатуры.Добавить(ВыборкаДетальныеЗаписи.Номенклатура); КонецЦикла; Движения.Записать(); //ПРОВЕРЯЕМ ОТРИЦАТЕЛЬНЫЕ ОСТАТКИ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиНоменклатурыОстатки.Номенклатура, | ОстаткиНоменклатурыОстатки.Склад, | ОстаткиНоменклатурыОстатки.КоличествоОстаток, | ОстаткиНоменклатурыОстатки.Номенклатура.Представление |ИЗ | РегистрНакопления.ОстаткиНоменклатуры.Остатки( | , | Номенклатура В (&Номенклатура) | И Склад = &Склад) КАК ОстаткиНоменклатурыОстатки |ГДЕ | ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0"; Запрос.УстановитьПараметр("Номенклатура", МассивНоменклатуры); Запрос.УстановитьПараметр("Склад", Склад); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ВыборкаДетальныеЗаписи.НоменклатураПредставление+": "+ВыборкаДетальныеЗаписи.КоличествоОстаток; Сообщение.УстановитьДанные(Ссылка); Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецПроцедуры Обратите внимание хитро работаем с массивом набора данных,чтобы оптимизировать второй запрос для контроля остатков. 2 отчета наличие стеллажей наличие деталей 1) Запрос к двум регистрам Комплекты и ОстаткиНоменклатурыОстатки функция с выражением в выбранных полях ОстаткиНоменклатурыОстатки.КоличествоОстаток / Комплекты.Количество связь по левому соединению по условию ОстаткиНоменклатурыОстатки.Номенклатура= Комплекты.Комплектуюшее сам запрос: ВЫБРАТЬ ОстаткиНоменклатурыОстатки.Склад, Комплекты.Стелаж, МИНИМУМ(ОстаткиНоменклатурыОстатки.КоличествоОстаток / Комплекты.Количество) КАК Количество ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки(, ) КАК ОстаткиНоменклатурыОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Комплекты КАК Комплекты ПО ОстаткиНоменклатурыОстатки.Номенклатура = Комплекты.Комплектуюшее ГДЕ НЕ Комплекты.Стелаж ЕСТЬ NULL СГРУППИРОВАТЬ ПО Комплекты.Стелаж, ОстаткиНоменклатурыОстатки.Склад в объед псевдонимах функцию переименовываем в количество Группировки Склад ,Детальные записи выбранные поля : Склад, Стелаж ,Количество Отчет наличие деталей : В запросе выбираем регистр сведений Комплекты и Регистр накопления остатки связь по левому условие связи ОстаткиНоменклатурыОстатки.Номенклатура=Комплекты.Комплектуюшее Сам запрос отчета: ВЫБРАТЬ ОстаткиНоменклатурыОстатки.Склад, Комплекты.Стелаж, ОстаткиНоменклатурыОстатки.Номенклатура, ОстаткиНоменклатурыОстатки.КоличествоОстаток ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Комплекты КАК Комплекты ПО ОстаткиНоменклатурыОстатки.Номенклатура = Комплекты.Комплектуюшее Параметры : период дата выбранные поля склад .Стелаж.номенклатура .КоличествоОстаток Группировки: Склад. Стелаж.Детальные записи Другие настройки располож полей группировок отдельно и только в итогах галочка стоит
| |
|
Всего комментариев: 2 | ||
| ||