Предлагаю вашему вниманию несколько процедур для изменения текста запроса, замена(добавление) полей в ВЫБРАТЬ, добавление (замена) условия в запрос. Так же можно заменить исходную таблицу в запросе.
Ограничение одно он не может править вложенные запросы, зато все остальные, будь то пакет или объединение можно исправить, добавить.
Написал это в связи с тем, что иногда в расширении меняются тексты запросов для проведения документов., а вот после обновления конфигурации доработки которые были вставлены могут начать некорректно работать.
Если же использовать метод который я предлагаю, то при обновлении конфигурации данный исправленный запрос или выдаст ошибку, или отработает корректно, даже если запрос был исправлен в обновлении.
Во всяком случае меньше вероятность получения некорректных записей в регистрах...
Процедуры с комментариями, поэтому не должно доставить много проблем. Так же ниже пример изменения запроса и процедуры которые есть в данном модуле.
// заменить поля в колноках
// in( out ) ТекстЗапроса - Текст заменяемого запроса
// in ПараметрыЗамены - Структура
// ДанныеЗамены - Структура, ключ Имя колонки, Значение Новое выражение поля
// ДоступныеПоля Структура Ключ ИмяИсточника, Значение - Массив строки с добавляемыми досупными полями( эта хрень нужня для выборки из временной таблицы, без них добавленные поля выдадут ошибку)
// НомерПакета - Номер пакета в пакете запросов, (для пакета, по умолчанию 0)
// Номераполей - Массив с номерами полей для замены, если неопределено то все поля, по умолчанию неопределено
Процедура ЗаменитьПоляЗапроса(ТекстЗапроса,ПараметрыЗамены) Экспорт
....
Процедура ЗаменитьИсходныеДанные(ТекстЗапроса,ПараметрыЗамены) Экспорт
Процедура ДобавитьПоляВЗапрос(ТекстЗапроса,ПараметрыДобавления)
Процедура ДобавитьУсловиеВЗапрос(ТекстЗапроса,ПараметрыУсловия) Экспорт
Процедура ЗаменитьУсловиеВЗапросе(ТекстЗапроса,ПараметрыУсловия)
Процедура ДобавитьСоединениеВЗапрос(ТекстЗапроса,ПараметрыСоединения)
Вместо("ТекстЗапросаТаблицаЗакупки")
Функция NF_ТекстЗапросаТаблицаЗакупки(Запрос, ТекстыЗапроса, Регистры)
// Вставить содержимое метода.
Результат = ПродолжитьВызов(Запрос, ТекстыЗапроса, Регистры);
Если Результат = "" Тогда
Возврат Результат;
КонецЕсли;
НайдЭлемент = ТекстыЗапроса.НайтиПоЗначению(Результат);
ТекстыЗапроса.Удалить(НайдЭлемент);
ПараметрыЗамены = Новый Структура;
ДанныеЗамены = Новый Структура("Партнер,Контрагент"," ВЫБОР
| КОГДА &РасчетыЧерезОтдельногоКонтрагента ТОГДА
| ВЫБОР КОГДА &NF_ДопРасчетыЧерезОтдельногоКонтрагента ТОГДА
| &NF_ПоставщикПартнер
| ИНАЧЕ
| &Партнер
| КОНЕЦ
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
| КОНЕЦ","ВЫБОР
| КОГДА &РасчетыЧерезОтдельногоКонтрагента ТОГДА
| ВЫБОР КОГДА &NF_ДопРасчетыЧерезОтдельногоКонтрагента ТОГДА
| &NF_ПоставщикКонтрагент
| ИНАЧЕ
| &Контрагент
| КОНЕЦ
| ИНАЧЕ &Организация
| КОНЕЦ ");
ПараметрыЗамены.Вставить("ДанныеЗамены",ДанныеЗамены);
ПараметрыЗамены.Вставить("НомерПакета",0);
//МассивПолей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("Партнер,Контрагент");
NF_РаботаСЗапросамиСлужебный.ЗаменитьПоляЗапроса(Результат,ПараметрыЗамены);
ТекстыЗапроса.Добавить(Результат,"Закупки");
Возврат Результат;
КонецФункции
Все тестировалось на платформе 8.3.13.1865 конфигурация ЕРП 2.4.6.207
Но должно работать везде, где есть Схема Запросов.
P.S. Процедуры из модуля обработки необходимо будет перенести в общий серверный модуль.