[Специалист профессионал 1С 8.2 8.3 ]

15:43
Задача 1.14
В этой задачи про партии не слова 

Про отчеты не слова , но в документе расходная нужно будет сделать печатную форму  при чем так .чтобы она открывалась когда проводишь сам документ.

и так добавим в регистр  накопления остатки  пару измерений Стеллаж ,Ряд

Их же сразу добавим в табличную часть приходной колонки стеллаж Ряд.  тип число,3


в приходной в шапку добавим  поле Склад
В Расходной в шапку  добавим поле Вид Отгрузки  ПеречислениеСсылка.ВидыОтгрузки которое имеет два значения Сразу ,Сдоставкой

Код модуля объекта Приходной:



Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| ПриходнаяНакладнаяСписокНоменклатуры.Стеллаж,
| ПриходнаяНакладнаяСписокНоменклатуры.Ряд,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| ПриходнаяНакладнаяСписокНоменклатуры.Стеллаж,
| ПриходнаяНакладнаяСписокНоменклатуры.Ряд";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Стеллаж = ВыборкаДетальныеЗаписи.Стеллаж;
Движение.Ряд = ВыборкаДетальныеЗаписи.Ряд;
Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
КонецЦикла;

КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры


Код Модуля объекта Расходной:


Процедура ОбработкаПроведения(Отказ, Режим)
// очистка движений
Движения.ОстаткиНоменклатуры.Записать();
Движения.ОстаткиНоменклатуры.Записывать = Истина;

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



Создаем Форму документа у Расходной

вставляем код:



&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если Объект.Проведен Тогда
ТабДок = Новый ТабличныйДокумент;
Печать(ТабДок, Объект.Ссылка);

ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();

КонецЕсли; 
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
Документы.РасходнаяНакладная.Печать(ТабДок, ПараметрКоманды);
КонецПроцедуры


вот такой запрос будет в конструкторе печати :


ВЫБРАТЬ
ОстаткиНоменклатуры.Регистратор,
ОстаткиНоменклатуры.НомерСтроки,
ОстаткиНоменклатуры.Стеллаж,
ОстаткиНоменклатуры.Ряд,
ОстаткиНоменклатуры.Количество,
РасходнаяНакладнаяСписокНоменклатуры.Цена,
ОстаткиНоменклатуры.Номенклатура,
РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Номер,
РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Дата
ИЗ
РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
ПО ОстаткиНоменклатуры.Номенклатура = РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
ГДЕ
ОстаткиНоменклатуры.Регистратор = &Ссылка
И РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка


Закладка Вычисляемые поля Сумма, Цена*Количество, Сумма   путь выраж заголовок .

закладка параметры: имя ссылка заголов ссылка  тип ДокументСсылка.РасходнаяНакладная  значение Документ.РасходнаяНакладная.ПустаяСсылка

группировки: Детальные записи(Заголовок)
Номенклатура
Детальные записи

выбранные  поля:  Номнен,Стеллаж,Ячейка(Ряд),Количество,Цена,Сумма




Просмотров: 1975 | Добавил: moshefoo | Рейтинг: 0.0/0
Всего комментариев: 1
1 bearyman  
Зачем добавлять склад, если в задаче про него ничего не сказано?

Имя *:
Email *:
Код *: