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

14:29
Задача 1.3 Оперативный учет
 партию для списания в расходной мы теперь указываем в табличной части документа. об учетной политике в задании не слова поэтому списывать товар будем по средней и отчеты у нас стали посложнее

1)в приходной в модуле объекта пишем след код:

тут попробуем загрузить данные в регистр сразу из таб части документа 


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

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



В Расходной накладной:

в таб часть СписокНоменклатуры  добавляем колонку Партия с целкой на документы Приходная накладная.


в модуле объекта пишем след код:



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

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

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

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



Отчеты

Остатки такой же как в задачах 11 1.2



Продажи

пишем такой запрос:

ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.СуммаОборот,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот
ПОМЕСТИТЬ Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты
;

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

СГРУППИРОВАТЬ ПО
РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Продажи.Номенклатура,
Продажи.СуммаОборот,
Продажи.КоличествоОборот,
Продажи.СтоимостьОборот,
ВЫБОР
КОГДА Отгрузки.КоличествоОтгрузок = 1
ТОГДА "Разовая"
ИНАЧЕ РАЗНОСТЬДАТ(Отгрузки.ДатаМин, Отгрузки.ДатаМакс, ДЕНЬ) / Отгрузки.КоличествоОтгрузок
КОНЕЦ КАК Интервал,
РАЗНОСТЬДАТ(Отгрузки.ДатаМакс, &КОнецПериода, ДЕНЬ) КАК Срок
ИЗ
Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ Отгрузки КАК Отгрузки
ПО (Отгрузки.Номенклатура = Продажи.Номенклатура)



2) в закладке вычисл поля  пишем выражение путь к данн Прибыль  выыраж СуммаОборот - СтоимостьОборот  заголовок Прибыль

3)Ресурсы выбираем все возможные

4)Параметры НачПериода КонПериода  с типом дата

5) группировки  Детальные  записи


задача решена.








Просмотров: 3344 | Добавил: moshefoo | Рейтинг: 5.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: