Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 12:05

ФИФО и ЛИФО

Автор asmut, 02 фев 2014, 12:55

0 Пользователей и 1 гость просматривают эту тему.

asmut

Приветствую.


Есть проблема. Я не могу понять как реализовать списание документом Расходная по ФИФО или ЛИФО.


Проблема именно при проводке. Я не пойму как запрос составить.




Процедура ОбработкаПроведения(Отказ, Режим)
   
   //Получаем вид списания
   Выборка=РегистрыСведений.МетодСписания.СрезПоследних(ТекущаяДата());
   ФИФО=Перечисления.МетодСписания.ФИФО;
   ЛИФО=Перечисления.МетодСписания.ЛИФО;
   ВидСписанияФИФО=Выборка.Найти(ФИФО,"МетодСписания");
   ВидСписанияЛИФО=Выборка.Найти(ЛИФО,"МетодСписания");
   
   //Исходя из политики списания проводим списание
   Если ВидСписанияЛИФО<>Неопределено Тогда
         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!


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


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


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


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


   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


   ИначеЕсли ВидСписанияФИФО<>Неопределено Тогда
         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!


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


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


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


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


   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


   //Если не установлена политика даем форму для заполнения
   ИначеЕсли ВидСписанияЛИФО=Неопределено И ВидСписанияФИФО=Неопределено Тогда
      Отказ=Истина;
      Сообщить("Политика списания не установлена. Выберите политику списания в открывшемся окне!");
      ОткрытьФорму("РегистрСведений.МетодСписания.ФормаЗаписи");
   Иначе
   КонецЕсли;
КонецПроцедуры



Besart

УП = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(МоментВремени()).УчетнаяПолитика;
Если УП = Перечисления.УчетнаяПолитика.ЛИФО Тогда
Порядок = "УБЫВ";
ИначеЕсли УП = Перечисления.УчетнаяПолитика.ФИФО Тогда
                Порядок = "ВОЗР";
        ИначеЕсли УП = Перечисления.УучетнаяПолитика.ПустаяСсылка() Тогда
          Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не установлена учетная
Сообщение.Сообщить();
        Возврат;
КонецЕсли;

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск