Нужно было отобрать Реализации/Поступления по периоду и контрагенту и поменять цену в определенных позициях товара, подумал, может еще кому надо.
Обработка простая, работает как через файл открыть, так и через подключение через внешние обработки стандартно.
Две вкладки, абсолютно идентичные, одна Реализации, вторая Поступления.
Заполнение обрабатываемых документов:
Период обязательный, остальное нет. Если Контрагент не указан, будет отобрано по всем, если стоит галка "Только товары" в отбор попадут документы только с видом Товары и Товары и Услуги, если не стоит, то вид не учитывается, т.е. попадут и с видом Услуги.
Обращаю внимание! Обрабатывается только табличная часть Товары, на услуги не работает (если кому надо, легко доделает).
Итак - верхняя таблица - обрабатываемые документы, заполняем или заполняем вручную через "Добавить".
Нижняя таблица - товары у которых надо поменять цену. При нажатии кнопки "Заполнить товары" в нее попадут все товары из документов верхней таблицы с усредненной ценой, нам надо оставить только те, у которых надо изменить цену и указать новую цену. Или не заполнять а добавить руками нужную номенклатуру и указать новую цену.
По кнопке "Обновить цены" происходит обход документов из верхней таблицы по табличной части Товары и если там встречается номенклатура из нижней таблицы, то в документе заменяется цена для данной позиции с пересчетом суммы ндс и прочего.
В этой обработке реализован метод изменения цены через форму (есть вариант через свои процедуры), да, это замедляет процесс, зато это полная имитация интерактивного изменения цены, при котором программа делает все свои расчеты/пересчеты по своим заданным алгоритмам, а скорость, думаю в этой процедуре не сильно важна.
Привожу код
Для каждого Док из Реализации Цикл
Док.Изменен = Ложь;
форм = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", Новый Структура("Ключ", Док.Док));
Если форм.Элементы.Найти("Товары") = неопределено Тогда
Продолжить;
КонецЕсли;
Для каждого стр из форм.Объект.Товары Цикл
Фильтр = Новый Структура("Номенклатура", стр.Номенклатура);
Строки = Товары.НайтиСтроки(Фильтр);
Если строки.Количество() > 0 Тогда
НовТов = строки.Получить(0);
стр.Цена = НовТов.ЦенаНовая;
Док.Изменен = Истина;
Если НЕ форм.Открыта() Тогда
форм.Открыть();
КонецЕсли;
Форм.ТекущийЭлемент = форм.Элементы.Товары;
Форм.ТекущийЭлемент.ТекущаяСтрока = стр.ПолучитьИдентификатор();
ОбработкаТабличныхЧастейКлиентСервер.ПриИзмененииКоличествоЦена(форм, "Товары");
КонецЕсли;
КонецЦикла;
Если форм.Открыта() Тогда
форм.Закрыть();
КонецЕсли;
Если Док.Изменен Тогда
форм.Записать();
КонецЕсли;
КонецЦикла;
Здесь не очень сложная процедура общего модуля, но бывает много сложнее, в той-же ут11 с расчетом скидок и прочим, и чтобы не делать все это самому, очень неплохой метод сделать через форму, экономит кучу времени.
Тестировалось на БП 3.0 (3.0.154.17), но думаю, на других версиях тоже взлетит.