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