В начале каждого месяца вводится документ "Установка цен номенклатуры", который актуализирует плановые цены на номенклатурные позиции, выпускавшиеся в предыдущем месяце. Эта внешняя обработка автоматически заполняет документ "Установка цен номенклатуры" ценами, которые рассчитаны по себестоимости продукции, выпущенной в предыдущем месяце.
Ниже приведена процедура расчета цены.
&НаСервере
// Процедура заполнения цен по себестоимости предыдущего месяца
//
Процедура ЗаполнитьЦеныПоСебенстоимости(пОбъект, ИмяТабличнойЧасти)
Если пОбъект.Товары.Количество() > 0 Тогда
пОбъект.Товары.Очистить();
КонецЕсли;
лЗапрос = Новый Запрос;
лЗапрос.Текст = "ВЫБРАТЬ
| Выпуск.НоменклатураВыпуска КАК Номенклатура,
| МАКСИМУМ(ЕСТЬNULL(Выпуск.КоличествоВыпуска, 0)) КАК Количество,
| МАКСИМУМ(ЕСТЬNULL(Выпуск.СуммаВыпуска, 0)) КАК Сумма,
| ВЫБОР
| КОГДА ЕСТЬNULL(Выпуск.КоличествоВыпуска, 0) = 0
| ТОГДА ЕСТЬNULL(Выпуск.СуммаВыпуска, 0)
| ИНАЧЕ ЕСТЬNULL(Выпуск.СуммаВыпуска, 0) / ЕСТЬNULL(Выпуск.КоличествоВыпуска, 0)
| КОНЕЦ КАК Цена,
| &Валюта
|ИЗ
| (ВЫБРАТЬ
| ХозрасчетныйОбороты.Подразделение КАК ПодразделениеВыпуска,
| ХозрасчетныйОбороты.Субконто1 КАК НоменклатурнаяГруппаВыпуска,
| ХозрасчетныйОбороты.КорСубконто1 КАК НоменклатураВыпуска,
| ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаВыпуска,
| ХозрасчетныйОбороты.СуммаОборотКт КАК ОбщаяСуммаВыпуска,
| -ХозрасчетныйОбороты.КоличествоКорОборот КАК КоличествоВыпуска
| ИЗ
| РегистрБухгалтерии.Хозрасчетный.Обороты(&НачДата, &КонДата, , Счет В ИЕРАРХИИ (&СчетПрямЗатрат), , Организация = &Организация, (НЕ КорСчет В ИЕРАРХИИ (&Счет90)), ) КАК ХозрасчетныйОбороты
| ГДЕ
| ХозрасчетныйОбороты.СуммаОборотКт <> 0) КАК Выпуск
|
|СГРУППИРОВАТЬ ПО
| Выпуск.НоменклатураВыпуска,
| ВЫБОР
| КОГДА ЕСТЬNULL(Выпуск.КоличествоВыпуска, 0) = 0
| ТОГДА ЕСТЬNULL(Выпуск.СуммаВыпуска, 0)
| ИНАЧЕ ЕСТЬNULL(Выпуск.СуммаВыпуска, 0) / ЕСТЬNULL(Выпуск.КоличествоВыпуска, 0)
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
лЗапрос.УстановитьПараметр("Валюта", Константы.ВалютаРегламентированногоУчета.Получить());
СписокСчетов = Новый Массив;
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.ОсновноеПроизводство);
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.ВспомогательныеПроизводства);
ДатаНач = НачалоМесяца(ДобавитьМесяц(пОбъект.Дата, -1));
ДатаКон = КонецМесяца(ДобавитьМесяц(пОбъект.Дата, -1));
лЗапрос.УстановитьПараметр("НачДата", Новый Граница(НачалоДня(ДатаНач), ВидГраницы.Включая));
лЗапрос.УстановитьПараметр("КонДата", Новый Граница(КонецДня(ДатаКон), ВидГраницы.Включая));
лЗапрос.УстановитьПараметр("Организация", БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация"));
лЗапрос.УстановитьПараметр("СчетПрямЗатрат", СписокСчетов);
СписокСчетов90 = Новый Массив;
СписокСчетов90.Добавить(ПланыСчетов.Хозрасчетный.Продажи_РасходыНаПродажу);
СписокСчетов90.Добавить(ПланыСчетов.Хозрасчетный.Продажи_УправленческиеРасходы);
лЗапрос.УстановитьПараметр("Счет90", СписокСчетов90);
Выборка = лЗапрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураОтбора = Новый Структура();
СтруктураОтбора.Вставить("Номенклатура", Выборка.Номенклатура);
СтрокаТабличнойЧасти = ОбработкаТабличныхЧастейКлиентСервер.НайтиСтрокуТабЧасти(пОбъект, "Товары", СтруктураОтбора);
Если СтрокаТабличнойЧасти = Неопределено Тогда
СтрокаТабличнойЧасти = пОбъект.Товары.Добавить();
СтрокаТабличнойЧасти.Номенклатура = Выборка.Номенклатура;
КонецЕсли;
СтрокаТабличнойЧасти.Цена = Выборка.Цена;;
СтрокаТабличнойЧасти.Валюта = Выборка.Валюта;
КонецЦикла;
КонецПроцедуры
Тестировалось на релизе БП 3.0 (3.0.69.35).