0
- 31.01.2013 - 19:12
|
Подскажите, пожалуйста, как расчитать среднюю себестоимость для формирования цен в рознице
| |
1
- 31.01.2013 - 20:34
|
Суммируем все затраты, и делим на количество. Затраты известны? | |
2
- 31.01.2013 - 21:33
| 0-pantherochka > Укажите какая у вас оборачиваемость товара в днях и сколько дней требуется на получение всех документов о затратах после поступления товаров. | |
3
- 01.02.2013 - 08:33
| (0) в экселе удобно мастером формул пользоваться. | |
4
- 06.02.2013 - 13:03
|
Решила сама..может кому-нубудь пригодится. Дополнительно добавить в справочник ТипыЦенНоменклатуры: Предопределенные элементы справочника "Себестоимость" и в обработку "Формирование цен" в процедуру "РассчетПоФормуле" добавить небольшой запрос. Полный листинг процедуры: Процедура КнопкаВыполнитьНажатиеРассчитатьЦеныПоФормуле(Элем ент) // Должен быть выбран базовый тип цен Если НЕ ЗначениеЗаполнено(ВариантЗначения) Тогда Предупреждение("Не выбран базовый тип цен!", 60, "Формирование цен"); ТекущийЭлемент = ЭлементыФормы.ПолеВводаВариантаЗначения; Возврат; КонецЕсли; // Должен быть выбран знак Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ПолеВыбораЗнакаИзм енения.Значение) Тогда Предупреждение("Не выбран знак изменения!", 60, "Формирование цен"); ТекущийЭлемент = ЭлементыФормы.ПолеВыбораЗнакаИзменения; Возврат; КонецЕсли; // Должен быть выбрана единица изменения Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ПолеВыбораЕдиницыИ зменения.Значение) Тогда Предупреждение("Не выбрана единица изменения!", 60, "Формирование цен"); ТекущийЭлемент = ЭлементыФормы.ПолеВыбораЕдиницыИзменения; Возврат; КонецЕсли; // Надо получить цены выбранного типа и пересчитать их по заданной формуле. // Цены базового типа достанем запросом. Запрос = Новый Запрос; Запрос.УстановитьПараметр("Номенклатура" , Товары.ВыгрузитьКолонку("Номенклатура")); Запрос.УстановитьПараметр("ТипЦен", ВариантЗначения); Запрос.УстановитьПараметр("ДатаЦен" , ДатаЦенСкидок); Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Цена, | ЦеныНоменклатурыСрезПоследних.Валюта, | ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЦеныНоменклатурыСрезПоследних.Номенклатура, | ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменк латуры |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Да таЦен, Номенклатура В(&Номенклатура) И ТипЦен =&ТипЦен) | КАК ЦеныНоменклатурыСрезПоследних"; //Рассчет себестоимости Если ТипЗнч(ВариантЗначения)=Тип("СправочникСсылка.Типы ЦенНоменклатуры") И ЗначениеЗаполнено(ВариантЗначения) И ВариантЗначения=Справочники.ТипыЦенНоменклатуры.Се бестоимость Тогда Запрос.Текст = "ВЫБРАТЬ | ПартииТоваровНаСкладахОстатки.Номенклатура, | Константы.ВалютаРегламентированногоУчета КАК Валюта, | ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменк латуры, | ПартииТоваровНаСкладахОстатки.Номенклатура.Единица ХраненияОстатков КАК ЕдиницаИзмерения, | ВЫБОР | КОГДА ЕСТЬNULL(ПартииТоваровНаСкладахОстатки.КоличествоО статок, 0) = 0 | ТОГДА 0 | ИНАЧЕ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток / ПартииТоваровНаСкладахОстатки.КоличествоОстаток | КОНЕЦ КАК Цена |ИЗ | | РегистрНакопления.ПартииТоваровНаСкладах.Остатки(& ДатаЦен, Номенклатура В(&Номенклатура)) | КАК ПартииТоваровНаСкладахОстатки, | Константы КАК Константы"; КонецЕсли; //Параметры запроса //Результат = Запрос.Выполнить(); Запрос.УстановитьПараметр("Номенклатура" , Товары.ВыгрузитьКолонку("Номенклатура")); Запрос.УстановитьПараметр("ТипЦен", ВариантЗначения); Запрос.УстановитьПараметр("ДатаЦен" , ДатаЦенСкидок); //Возврат Результат; ВыборкаИзЗапроса = Запрос.Выполнить().Выбрать(); // Найдем у данной номенклатуры значение базовой цены Для каждого СтрокаТабличнойЧасти Из Товары Цикл Если СтрокаТабличнойЧасти.Пометка Тогда // Сбросим выборку для последующего поиска. ВыборкаИзЗапроса.Сбросить(); СтруктураПоиска = Новый Структура(); СтруктураПоиска.Вставить("ХарактеристикаНоменклату ры", СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры); СтруктураПоиска.Вставить("Номенклатура", СтрокаТабличнойЧасти.Номенклатура); // Ищем в выборке номенклатуру. Если ВыборкаИзЗапроса.НайтиСледующий(СтруктураПоиска) Тогда // Нашли базовую цену. // Пересчитываем ее в валюту заданного типа цен, // единицы цены. ЦенаБазовая = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты( ВыборкаИзЗапроса.Цена, ВыборкаИзЗапроса.Валюта, СтрокаТабличнойЧасти.Валюта, , , ДатаЦенСкидок); ЦенаБазовая = Ценообразование.ПересчитатьЦенуПриИзмененииЕдиницы (ЦенаБазовая, ВыборкаИзЗапроса.ЕдиницаИзмерения, СтрокаТабличнойЧасти.ЕдиницаИзмерения); Иначе ЦенаБазовая = 0; КонецЕсли; // Теперь применим формулу Если СокрЛП(ЕдиницаИзменения) = "%" Тогда СтрокаТабличнойЧасти.Цена = ЦенаБазовая * (100 + ЗнакИзменения * ВеличинаИзменения) / 100; Иначе // надо просто прибавить СтрокаТабличнойЧасти.Цена = ЦенаБазовая + ЗнакИзменения * ВеличинаИзменения; КонецЕсли; // Не забудем округлить. СтрокаТабличнойЧасти.Цена = Ценообразование.ОкруглитьЦену(СтрокаТабличнойЧасти .Цена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону); КонецЕсли; КонецЦикла; ДействиеНеВыполнено = Ложь; КонецПроцедуры // КнопкаВыполнитьНажатиеРассчитатьЦеныПоФормуле() | |
| Интернет-форум Краснодарского края и Краснодара |