Имя: Пароль:
1C
1С v8
УТ 11.4 Отключить обязательную проверку в реквизитах с помощью расширения
,
0 letovd
 
14.07.22
13:21
Ребят, добрый день.
Нужно откорректировать несколько дублей "Приобретений услуг и прочих активов" годовалой давности. Решил это сделать с помощью "корректировки приобретения" указав нулевую сумму.
Так как Товары.Цена и Товары.Сумма проверяются на заполнение, решил подключить расширение конфы, добавить процедуру модуля объекта документа "корректировка приобретения" в расширение и добавил две строчки перед процедурой:

&Перед("ОбработкаПроверкиЗаполнения")
Процедура РасшО_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    // Вставить содержимое метода.
    ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Цена"));
    ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Сумма"));
КонецПроцедуры

Задача выполнена, так как не программирую, хотел уточнить, имеет ли место быть такая доработка?
Решение проблемы адекватное вообще получилось? Или на костылях?
1 6awkup_true
 
14.07.22
13:24
Если вдруг реквизиты удалят или переименуют, то твой код выдаст ошибку, т.к. если не найдет реквизит - будет неопределено. лучше сделать проверку на то, что реквизит найден. если проверка пройдена - удалять
2 6awkup_true
 
14.07.22
13:27
а еще твоим кодом отключается проверка на весь столбец. если нужно выборочно(в одной строке проверять, а в другой нет), то код не подходит
3 letovd
 
14.07.22
13:53
(1) Понял, нужна обработка ошибки, забыл про это, спасибо!
(2)Слушай, правильнее было бы выборочно, если в строке статья расходов имеет номер "N", надо подумать как это сделать
4 letovd
 
14.07.22
13:58
(1) Исправил

&Перед("ОбработкаПроверкиЗаполнения")
Процедура РасшО_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    // Вставить содержимое метода.
    РеквизитЦена = ПроверяемыеРеквизиты.Найти("Товары.Цена");
    РеквизитСумма = ПроверяемыеРеквизиты.Найти("Товары.Сумма");
    Если (РеквизитЦена <> Неопределено) И (РеквизитСумма <> Неопределено) Тогда  
        ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Цена"));
        ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары.Сумма"));
    КонецЕсли;
КонецПроцедуры
5 letovd
 
14.07.22
13:59
Ой, забыл с методе удалить вставить переменные, ну суть в общем такая
6 6awkup_true
 
14.07.22
14:03
(4) &Перед("ОбработкаПроверкиЗаполнения")
Процедура РасшО_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    // Вставить содержимое метода.

    РеквизитЦена = ПроверяемыеРеквизиты.Найти("Товары.Цена");
    Если не РеквизитЦена = Неопределено тогда
       ПроверяемыеРеквизиты.Удалить(РеквизитЦена);
    КонецЕсли;
    РеквизитСумма = ПроверяемыеРеквизиты.Найти("Товары.Сумма");
    Если не РеквизитСумма = Неопределено тогда
       ПроверяемыеРеквизиты.Удалить(РеквизитСумма);
    КонецЕсли;
  
КонецПроцедуры
7 letovd
 
14.07.22
15:06
(6) Спасибо, так действительно красивее
8 6awkup_true
 
14.07.22
15:09
(7) не красивее. если у тебя один параметр найдет, а второй нет, то вообще ни у одного не отключит проверку. найденный все равно будет проверяться
9 letovd
 
14.07.22
15:24
(8) Слушай, в (2) полезный совет, но я боюсь использовать контекст "Вместо", я читал, что это опасно с кривыми руками...
10 6awkup_true
 
14.07.22
15:32
Если использовать вместо в типовой конфе, то тебе нужно перетащить весь код из процедуры в свою и доработать. если перед, то может быть ситуация, что ты удалил реквизиты, а потом в типовой функции прошла проверка на их наличие и их снова добавило)