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

Расчёт себестоимости проданных товаров - ЛИФО и ФИФО

Автор Shkerin, 17 янв 2012, 14:32

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

Shkerin

Добрый день, уважаемые!

Разрабатываю тестовую конфигурацию для складского учёта и хочу включить расчёт себестоимости по методам Lifo и Fifo. Подскажите, как изменить в коде проводку или регистры:

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

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

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

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

Пока Выборка.Следующий() Цикл

// Проверить остаток при оперативном проведении
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Остаток = Выборка.КоличествоОстатокНаСкладе;
Остаток = ?(Остаток = Null, 0, Остаток);
Если Остаток < Выборка.Количество Тогда
Сообщить("Остаток товара " + СокрЛП(Выборка.Номенклатура) + " на складе " + Остаток);
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЕсли;

// Рассчитать стоимость товара по среднему
СтоимостьТовара = ?(Выборка.КоличествоОстаток = Null, 0,
Выборка.СтоимостьОстаток / Выборка.КоличествоОстаток);
// Сформировать движения
// регистр ОстаткиТоваров Расход
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = Выборка.Количество;
// регистр СтоимостьТоваров Расход
Движение = Движения.СтоимостьТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Стоимость = СтоимостьТовара * Выборка.Количество;
// регистр ПродажиТоваров Расход
Движение = Движения.ПродажиТоваров.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Контрагент = Покупатель;
Движение.Количество = Выборка.Количество;
Движение.Выручка = Выборка.Сумма;
Движение.Стоимость = СтоимостьТовара * Выборка.Количество;
// регистр Управленчесткий (бух.учет)
// Первая проводка:
// Д 62 (РасчетыСПокупателями) - К 90 (Капитал)
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.РасчетыСПокупателями;
Движение.СчетКт = ПланыСчетов.Основной.Капитал;
Движение.Период = Дата;
Движение.Сумма = Выборка.Сумма;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Покупатели]= Покупатель;
// Вторая проводка:
// Д 90 (Капитал) - К 41 (Товары) - себестоимость
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.Капитал;
Движение.СчетКт = ПланыСчетов.Основной.Товары;
Движение.Период = Дата;
Движение.Сумма = СтоимостьТовара * Выборка.Количество;
Движение.КоличествоКт = Выборка.Количество;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Товары]= Выборка.Номенклатура;

КонецЦикла;

// Записать движения регистров.
Движения.ОстаткиТоваров.Записать();
Движения.СтоимостьТоваров.Записать();
Движения.ПродажиТоваров.Записать();
Движения.Управленческий.Записать();


В интернете подробно расписаны сами методы расчёта себестоимости, но примеров на 1С почти нет.
Если у кого есть литература или лекции, поделитесь.

Буду очень признателен всем, кто поможет!

Shkerin

Неужели никто не знает?
Укажите хоть книгу или лекцию, где подобное встречается!

has


Shkerin

Цитата: has от 18 янв 2012, 08:37
У Радченко вроде есть, не помню точно.

Благодарю за ответ.

tagepa


Теги:

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

Рейтинг@Mail.ru

Поиск