Реализация учета стоимости товаров по методам FIFO и LIFO
Рисунок 3.49 — Окно списка констант Откроем журнал «Учет материалов» и сделаем Расходные накладные № 2 и № 6 не проведенной, а после перепроведем все приходные накладные и с помощью отчета «Универсальная таблица итогов» посмотрим состояние таблицы итогов регистра «Партии материалов» (рисунок 3.50): Рисунок 3.48 — Модуль документа «Приходная накладная ТМЦ» с методом списания Метод «ДвижениеПриход… Читать ещё >
Реализация учета стоимости товаров по методам FIFO и LIFO (реферат, курсовая, диплом, контрольная)
Создадим новый регистр (рисунок 3.47) «Партии материалов». Структура регистра должна быть следующей: Измерения — Материалы, Партия (тип значения — документ Приходная накладная); Ресурсы — Количество, Стоимость.
Кроме регистра необходимо создать перечисление, которое будет хранить информацию о методе ведения суммового учета. Перечисление должно содержать три значения: По среднему (в нашей конфигурации уже реализовано), FIFO, LIFO.
Рисунок 3.47 — Регистр «Партии материалов».
В модуле документа «Приходная накладная ТМЦ» опишем движения по новому регистру (рисунок 3.48):
Рисунок 3.48 — Модуль документа «Приходная накладная ТМЦ» с методом списания Метод «ДвижениеПриход ()» позволяет и описать движение, и выполнить его что называется «одной строкой», однако порядок аргументов метода жестко зависит от структуры регистра.
Теперь запустим 1С: Предприятие в пользовательском режиме и проверим движения документов.
Для начала установим значение константы «Метод списания» — FIFO (рисунок 3.49):
Рисунок 3.49 — Окно списка констант Откроем журнал «Учет материалов» и сделаем Расходные накладные № 2 и № 6 не проведенной, а после перепроведем все приходные накладные и с помощью отчета «Универсальная таблица итогов» посмотрим состояние таблицы итогов регистра «Партии материалов» (рисунок 3.50):
Рисунок 3.50 -Окно отчета «Универсальная таблица итогов» партии материалов В расходной накладной опишем процедуру списания партий, в процедуре воспользуемся механизмом выгрузки таблицы итогов регистра в таблицу значений:
Процедура СписатьПартии ().
РегПартии=СоздатьОбъект («Регистр.ПартииМатериалов»);
СЗ=СоздатьОбъект («СписокЗначений»);
//Получим список материалов из документа.
ВыгрузитьТабличнуюЧасть (СЗ," Материалы");
//Ограничим выгрузку итогов только теми материалами, которые присутствуют в док-те.
РегПартии.УстановитьЗначениеФильтра («Материалы», СЗ, 2);
//Выгрузим итоги в таблицу значений.
ТЗ=СоздатьОбъект («ТаблицаЗначений»);
РегПартии.ВыгрузитьИтоги (ТЗ, 1);
//Отсортируем таблицу по материалам и партии.
Если Константа. МетодСписания=Перечисление.МетодыСписания.FIFO Тогда.
Направление="+" ;
Иначе.
Направление="-" ;
КонецЕсли;
ТЗ.Сортировать («+Материалы,» +Направление+" Партия", 1);
//Переберем строки документа.
ВыбратьСтроки ();
Пока ПолучитьСтроку ()=1 Цикл.
//Запомним количество материала, которое надо списать.
ОсталосьСписать=Количество;
//Найдем в ТЗ первую строку, в которой присутствует нужный материал.
ТЗСтрока=0;
ТЗ.НайтиЗначение (Материалы, ТЗСтрока," Материалы");
//Переберем таблицу значений с найденной строки.
Для Ном=ТЗСтрока По ТЗ. КоличествоСтрок () Цикл.
ТЗ.ПолучитьСтрокуПоНомеру (Ном);
//Получим остаток по партии.
ОстКол=ТЗ.Количество;
ОстСум=ТЗ.Сумма;
//Проверим, можно ли списать всю партию или только часть.
Списать=МИН (ОстКол, ОсталосьСписать);
//Рассчитаем себестоимость.
СебестоимостьСписания=Списать/ОстКол*ОстСум;
//Спишем партию.
Регистр.ПартииМатериалов.Материалы=Материалы;
Регистр.ПартииМатериалов.Партия.=ТЗ.Партия;
Регистр.ПартииМатериалов.Количество=Списать;
Регистр.ПартииМатериалов.Сумма=СебестоимостьСписания;
Регистр.ПартииМатериалов.ПривязыватьСтроку (НомерСтроки);
Регистр.ПартииМатериалов.ДвижениеРасходВыполнить ();
//Посчитаем, сколько осталось списать.
ОсталосьСписать=ОсталосьСписать-Списать;
//Проверим нужно ли списывать следующую партию.
Если ОсталосьСписать=0 Тогда.
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры В процедуре никаких проверок на остаток материала мы не делаем, так как они все уже произведены в процедуре «ОбработкаПроведения ()».
Осталось только вызвать процедуру из «Обработки проведения»: изменим условие в самом конце процедуры «ОбработкаПроведения ()».
Если СтатусВозврата ()1 Тогда.
Сообщить («Документ» +ТекущийДокумент ()+" не проведен!");
Иначе Если Константа.МетодСписанияПеречисление.МетодыСписания.ПоСреднему Тогда.
СписатьПартии ();
КонецЕсли;
КонецЕсли;
Проверим работоспособность модуля. Проведем расходную накладную № 2 и посмотрим, как изменилась таблица итогов (рисунок 3.51).
Рисунок 3.51 — Окно отчета «Универсальная таблица итогов» после проведения.
Видим, что в строках с материалами: «Арматура А3 д.12», «Болт 12*70» и «А/лампа 12−21−3» изменилось количество, т. е. материалы расходовались.