Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Себестоимость (http://forums.kuban.ru/f1040/sebestoimost--3634420.html)

pantherochka 31.01.2013 19:12

Себестоимость
 
Подскажите, пожалуйста, как расчитать среднюю себестоимость для формирования цен в рознице

VZ 31.01.2013 20:34

Суммируем все затраты, и делим на количество.
Затраты известны?

Reaper 31.01.2013 21:33

0-pantherochka > Укажите какая у вас оборачиваемость товара в днях и сколько дней требуется на получение всех документов о затратах после поступления товаров.

zaic 01.02.2013 08:33

(0) в экселе удобно мастером формул пользоваться.

pantherochka 06.02.2013 13:03

Решила сама..может кому-нубудь пригодится. Дополнительно добавить в справочник ТипыЦенНоменклатуры: Предопределенные элементы справочника "Себестоимость" и в обработку "Формирование цен" в процедуру "РассчетПоФормуле" добавить небольшой запрос. Полный листинг процедуры: Процедура КнопкаВыполнитьНажатиеРассчитатьЦеныПоФормуле(Элемент)

// Должен быть выбран базовый тип цен
Если НЕ ЗначениеЗаполнено(ВариантЗначения) Тогда

Предупреждение("Не выбран базовый тип цен!", 60, "Формирование цен");
ТекущийЭлемент = ЭлементыФормы.ПолеВводаВариантаЗначения;
Возврат;

КонецЕсли;

// Должен быть выбран знак
Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ПолеВыбораЗнакаИзменения.Значение) Тогда

Предупреждение("Не выбран знак изменения!", 60, "Формирование цен");
ТекущийЭлемент = ЭлементыФормы.ПолеВыбораЗнакаИзменения;
Возврат;

КонецЕсли;

// Должен быть выбрана единица изменения
Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ПолеВыбораЕдиницыИзменения.Значение) Тогда

Предупреждение("Не выбрана единица изменения!", 60, "Формирование цен");
ТекущийЭлемент = ЭлементыФормы.ПолеВыбораЕдиницыИзменения;
Возврат;

КонецЕсли;

// Надо получить цены выбранного типа и пересчитать их по заданной формуле.
// Цены базового типа достанем запросом.

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

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


//Рассчет себестоимости

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

КонецЕсли;

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


//Возврат Результат;


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

// Найдем у данной номенклатуры значение базовой цены
Для каждого СтрокаТабличнойЧасти Из Товары Цикл
Если СтрокаТабличнойЧасти.Пометка Тогда

// Сбросим выборку для последующего поиска.
ВыборкаИзЗапроса.Сбросить();

СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры);
СтруктураПоиска.Вставить("Номенклатура", СтрокаТабличнойЧасти.Номенклатура);

// Ищем в выборке номенклатуру.
Если ВыборкаИзЗапроса.НайтиСледующий(СтруктураПоиска) Тогда

// Нашли базовую цену.
// Пересчитываем ее в валюту заданного типа цен,
// единицы цены.
ЦенаБазовая = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(ВыборкаИзЗапроса.Цена, ВыборкаИзЗапроса.Валюта,
СтрокаТабличнойЧасти.Валюта, , , ДатаЦенСкидок);

ЦенаБазовая = Ценообразование.ПересчитатьЦенуПриИзмененииЕдиницы(ЦенаБазовая, ВыборкаИзЗапроса.ЕдиницаИзмерения,
СтрокаТабличнойЧасти.ЕдиницаИзмерения);
Иначе
ЦенаБазовая = 0;
КонецЕсли;

// Теперь применим формулу
Если СокрЛП(ЕдиницаИзменения) = "%" Тогда
СтрокаТабличнойЧасти.Цена = ЦенаБазовая * (100 + ЗнакИзменения * ВеличинаИзменения) / 100;
Иначе // надо просто прибавить
СтрокаТабличнойЧасти.Цена = ЦенаБазовая + ЗнакИзменения * ВеличинаИзменения;
КонецЕсли;

// Не забудем округлить.
СтрокаТабличнойЧасти.Цена = Ценообразование.ОкруглитьЦену(СтрокаТабличнойЧасти.Цена,
ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону);
КонецЕсли;
КонецЦикла;

ДействиеНеВыполнено = Ложь;

КонецПроцедуры // КнопкаВыполнитьНажатиеРассчитатьЦеныПоФормуле()


Текущее время: 06:35. Часовой пояс GMT +3.