![]() |
Себестоимость Подскажите, пожалуйста, как расчитать среднюю себестоимость для формирования цен в рознице |
Суммируем все затраты, и делим на количество. Затраты известны? |
0-pantherochka > Укажите какая у вас оборачиваемость товара в днях и сколько дней требуется на получение всех документов о затратах после поступления товаров. |
(0) в экселе удобно мастером формул пользоваться. |
Решила сама..может кому-нубудь пригодится. Дополнительно добавить в справочник ТипыЦенНоменклатуры: Предопределенные элементы справочника "Себестоимость" и в обработку "Формирование цен" в процедуру "РассчетПоФормуле" добавить небольшой запрос. Полный листинг процедуры: Процедура КнопкаВыполнитьНажатиеРассчитатьЦеныПоФормуле(Элемент) // Должен быть выбран базовый тип цен Если НЕ ЗначениеЗаполнено(ВариантЗначения) Тогда Предупреждение("Не выбран базовый тип цен!", 60, "Формирование цен"); ТекущийЭлемент = ЭлементыФормы.ПолеВводаВариантаЗначения; Возврат; КонецЕсли; // Должен быть выбран знак Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ПолеВыбораЗнакаИзменения.Значение) Тогда Предупреждение("Не выбран знак изменения!", 60, "Формирование цен"); ТекущийЭлемент = ЭлементыФормы.ПолеВыбораЗнакаИзменения; Возврат; КонецЕсли; // Должен быть выбрана единица изменения Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ПолеВыбораЕдиницыИзменения.Значение) Тогда Предупреждение("Не выбрана единица изменения!", 60, "Формирование цен"); ТекущийЭлемент = ЭлементыФормы.ПолеВыбораЕдиницыИзменения; Возврат; КонецЕсли; // Надо получить цены выбранного типа и пересчитать их по заданной формуле. // Цены базового типа достанем запросом. Запрос = Новый Запрос; Запрос.УстановитьПараметр("Номенклатура" , Товары.ВыгрузитьКолонку("Номенклатура")); Запрос.УстановитьПараметр("ТипЦен", ВариантЗначения); Запрос.УстановитьПараметр("ДатаЦен" , ДатаЦенСкидок); Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Цена, | ЦеныНоменклатурыСрезПоследних.Валюта, | ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЦеныНоменклатурыСрезПоследних.Номенклатура, | ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦен, Номенклатура В(&Номенклатура) И ТипЦен =&ТипЦен) | КАК ЦеныНоменклатурыСрезПоследних"; //Рассчет себестоимости Если ТипЗнч(ВариантЗначения)=Тип("СправочникСсылка.ТипыЦенНоменклатуры") И ЗначениеЗаполнено(ВариантЗначения) И ВариантЗначения=Справочники.ТипыЦенНоменклатуры.Себестоимость Тогда Запрос.Текст = "ВЫБРАТЬ | ПартииТоваровНаСкладахОстатки.Номенклатура, | Константы.ВалютаРегламентированногоУчета КАК Валюта, | ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры, | ПартииТоваровНаСкладахОстатки.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, | ВЫБОР | КОГДА ЕСТЬNULL(ПартииТоваровНаСкладахОстатки.КоличествоОстаток, 0) = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток / ПартииТоваровНаСкладахОстатки.КоличествоОстаток | КОНЕЦ КАК Цена |ИЗ | | РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаЦен, Номенклатура В(&Номенклатура)) | КАК ПартииТоваровНаСкладахОстатки, | Константы КАК Константы"; КонецЕсли; //Параметры запроса //Результат = Запрос.Выполнить(); Запрос.УстановитьПараметр("Номенклатура" , Товары.ВыгрузитьКолонку("Номенклатура")); Запрос.УстановитьПараметр("ТипЦен", ВариантЗначения); Запрос.УстановитьПараметр("ДатаЦен" , ДатаЦенСкидок); //Возврат Результат; ВыборкаИзЗапроса = Запрос.Выполнить().Выбрать(); // Найдем у данной номенклатуры значение базовой цены Для каждого СтрокаТабличнойЧасти Из Товары Цикл Если СтрокаТабличнойЧасти.Пометка Тогда // Сбросим выборку для последующего поиска. ВыборкаИзЗапроса.Сбросить(); СтруктураПоиска = Новый Структура(); СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры); СтруктураПоиска.Вставить("Номенклатура", СтрокаТабличнойЧасти.Номенклатура); // Ищем в выборке номенклатуру. Если ВыборкаИзЗапроса.НайтиСледующий(СтруктураПоиска) Тогда // Нашли базовую цену. // Пересчитываем ее в валюту заданного типа цен, // единицы цены. ЦенаБазовая = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(ВыборкаИзЗапроса.Цена, ВыборкаИзЗапроса.Валюта, СтрокаТабличнойЧасти.Валюта, , , ДатаЦенСкидок); ЦенаБазовая = Ценообразование.ПересчитатьЦенуПриИзмененииЕдиницы(ЦенаБазовая, ВыборкаИзЗапроса.ЕдиницаИзмерения, СтрокаТабличнойЧасти.ЕдиницаИзмерения); Иначе ЦенаБазовая = 0; КонецЕсли; // Теперь применим формулу Если СокрЛП(ЕдиницаИзменения) = "%" Тогда СтрокаТабличнойЧасти.Цена = ЦенаБазовая * (100 + ЗнакИзменения * ВеличинаИзменения) / 100; Иначе // надо просто прибавить СтрокаТабличнойЧасти.Цена = ЦенаБазовая + ЗнакИзменения * ВеличинаИзменения; КонецЕсли; // Не забудем округлить. СтрокаТабличнойЧасти.Цена = Ценообразование.ОкруглитьЦену(СтрокаТабличнойЧасти.Цена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону); КонецЕсли; КонецЦикла; ДействиеНеВыполнено = Ложь; КонецПроцедуры // КнопкаВыполнитьНажатиеРассчитатьЦеныПоФормуле() |
Текущее время: 06:01. Часовой пояс GMT +3. |