При разработке расширений конфигурации 1С часто возникают задачи по изменению логики заполнения документов. Одной из частых проблем является необходимость замены стандартных данных, например, цен или номенклатуры, на специфические поля, добавленные в расширении. Рассмотрим, как грамотно реализовать такую задачу, не нарушая работу системы и сохраняя чистоту кода.
Вместо того чтобы пытаться полностью переписать или «заимствовать» сложный запрос типового заполнения, мы рекомендуем использовать подход дозаполнения. Суть его заключается в использовании аннотации &После для стандартной процедуры ОбработкаЗаполнения.
Рассмотрим пошагово, как это реализовать:
Пример реализации в модуле объекта расширения:
&После("ОбработкаЗаполнения")
Процедура ЕВ_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
// 1. Сначала отрабатывает типовой механизм
// 2. После этого корректируем данные в ТЧ "Товары"
Для Каждого ТекСтрока Из Объект.Товары Цикл
// Допустим, нам нужно переопределить цену из нашего нового реквизита
Если ЗначениеЗаполнено(ТекСтрока.ЦенаПоставщика) Тогда
ТекСтрока.Цена = ТекСтрока.ЦенаПоставщика;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот метод является наиболее безопасным, так как он минимально инвазивен и не требует сложного манипулирования запросами в коде расширения.
Если задача требует получения сложных данных, которые нельзя получить простым перебором строк, вам все же потребуется написать запрос внутри расширения. Многие программисты сталкиваются с трудностями при оформлении длинных строковых констант (необходимость добавления символов |). Разберем, как упростить этот процесс.
Использование Консоли запросов:
Не пытайтесь сразу писать сложный запрос в Конфигураторе. Сначала отладьте его во внешней Консоли запросов. Когда запрос готов и проверен, скопируйте текст запроса в буфер обмена.
Перенос текста в модуль:
Чтобы не расставлять символы переноса строк и кавычки вручную, в редакторе кода 1С существуют удобные инструменты:
При доработке типовых документов с помощью расширений всегда помните о следующих правилах:
Придерживаясь метода пост-обработки (&После), вы обеспечиваете высокую надежность своего решения. Система сначала выполняет типовую логику, а вы лишь «подправляете» результат под свои нужды. Это исключает ошибки, связанные с неправильной передачей контекста данных при вводе на основании, и делает процесс разработки значительно быстрее.