Здравствуйте. Есть такой вот код:
Если в реквизите ТЧ "Источник" выбрать тип документа "СметаЗатрат" он при выборе дока, в реквизит тч "цфо" подставляет ЦФО из сметы затрат.
Всё работает отлично, но потребовалось расширить функционал, и нужно что бы при выборе другого типа дока, он так же подставлял из него значение реквизита "ЦФО".
Пишу так :
И условие не выполняется. Т.е.: если выбрать "сметы затрат" то всё работает как нужно, если же "АктВыполненныхСметЗатрат" то нет. Уже переписывал так и эдак, но желаемого результата достичь не удается. Поставил точку останова, но она не срабатывает при выборе "АктВыполненныхСметЗатрат". Можете подсказать в чём тут ошибка?
Процедура ОтражениеИсточникПриИзменении(Элемент)
ТекущаяСтрока = ЭлементыФормы.Отражение.ТекущаяСтрока;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Источник) Или Не ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.СметаЗатрат") Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ЦФО) Или Не ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО Тогда
ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО;
КонецЕсли;
ПоказатьЕсли в реквизите ТЧ "Источник" выбрать тип документа "СметаЗатрат" он при выборе дока, в реквизит тч "цфо" подставляет ЦФО из сметы затрат.
Всё работает отлично, но потребовалось расширить функционал, и нужно что бы при выборе другого типа дока, он так же подставлял из него значение реквизита "ЦФО".
Пишу так :
ТекущаяСтрока = ЭлементыФормы.Отражение.ТекущаяСтрока;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Источник) Или Не ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.СметаЗатрат") Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ЦФО) Или Не ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО Тогда
ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО;
КонецЕсли;
//с измененным реквизитом ЦФО
Если ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.АктВыполненныхСметЗатрат") Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ЦФО) Или Не ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО Тогда
ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО;
КонецЕсли;
ПоказатьИ условие не выполняется. Т.е.: если выбрать "сметы затрат" то всё работает как нужно, если же "АктВыполненныхСметЗатрат" то нет. Уже переписывал так и эдак, но желаемого результата достичь не удается. Поставил точку останова, но она не срабатывает при выборе "АктВыполненныхСметЗатрат". Можете подсказать в чём тут ошибка?
По теме из базы знаний
- Сравнение 1С8 и Navision
- "Процессы 3.0: CRM, Бизнес-процессы, Управление по целям". Универсальная система управления процессами и показателями для любой конфигурации 1С
- Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
- Описание формата контейнера 1С (CF, EPF, ERF, CFE) с помощью БНФ. Предлагается внешняя компонента на С
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4)
во-первых: не бойтесь скобок в логических выражениях:
во-вторых: если заменить "равно" на "не равно", будет читаться легче:
во-первых: не бойтесь скобок в логических выражениях:
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Источник) Или Не(ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.СметаЗатрат") или ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.АктВыполненныхСметЗатрат")) Тогда
во-вторых: если заменить "равно" на "не равно", будет читаться легче:
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Источник) Или (ТипЗнч(ТекущаяСтрока.Источник) <> Тип("ДокументСсылка.СметаЗатрат") и ТипЗнч(ТекущаяСтрока.Источник) <> Тип("ДокументСсылка.АктВыполненныхСметЗатрат")) Тогда
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Источник) Или Не ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.СметаЗатрат") Тогда
Возврат;
КонецЕсли;
У вас Источник заполнен поэтому условие Ложь через логическое отрицание, следовательно далее по логическому сложению ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.СметаЗатрат") у вас Ложь так как Источник в вашем случае это ДокументСсылка.АктВыполненныхСметЗатрат, и так как логическое отрицание то условие выполняется. Следовательно Возврат.
Если у вас код написан в такой же последовательности как вы и приложили выше:
ТекущаяСтрока = ЭлементыФормы.Отражение.ТекущаяСтрока;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Источник) Или Не ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.СметаЗатрат") Тогда
Возврат; //всё назад так как у нас документ имеет тип ДокументСсылка.АктВыполненныхСметЗатрат
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ЦФО) Или Не ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО Тогда
ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО;
КонецЕсли;
//с измененным реквизитом ЦФО
Если ТипЗнч(ТекущаяСтрока.Источник) = Тип("ДокументСсылка.АктВыполненныхСметЗатрат") Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ЦФО) Или Не ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО Тогда
ТекущаяСтрока.ЦФО = ТекущаяСтрока.Источник.ЦФО;
КонецЕсли;
Показать
(11)
ругается, туже самую ошибку выдаёт. Начну искать что это за источник, потом отпишусь о результате
ист = ТекущаяСтрока.Источник;
Если ЗначениеЗаполнено(ТекущаяСтрока) И (ТипЗнч(ист)=Тип("ДокументСсылка.СметаЗатрат") или ТипЗнч(ист)=Тип("ДокументСсылка.АктВыполненныхСметЗатрат")) Тогда
ТекущаяСтрока.ЦФО = ист.ЦФО
КонецЕсли;
ругается, туже самую ошибку выдаёт. Начну искать что это за источник, потом отпишусь о результате
(7) многообразие условий запутывает, лучше поделить на кирпичики.
ист = ТекСтрока.Источник;
проверка1 = ТипЗнч(ист)=Тип("док1");
проверка2 = ТипЗнч(ист)=Тип("док2");
Если не ЗначениеЗаполнено(ист) тогда
продолжить;
конецесли;
Если проверка1 или проверка2 Тогда
ТекСтрока.ЦФО = ист.ЦФО;
КонецЕсли;
Показать
(17) Медленнее выполняется. А если во вложенном цикле, то разница становится ощутимой. Можно делать так:
Процедура ОтражениеИсточникПриИзменении(Элемент)
ТекущаяСтрока = ЭлементыФормы.Отражение.ТекущаяСтрока;
Если (ТекущаяСтрока=Неопределено)
ИЛИ Не(ЗначениеЗаполнено(ТекущаяСтрока.Источник))
ИЛИ (
ТипЗнч(ТекущаяСтрока.Источник) <> Тип("ДокументСсылка.СметаЗатрат")
И ТипЗнч(ТекущаяСтрока.Источник) <> Тип("ДокументСсылка.АктВыполненныхСметЗатрат")
)
Тогда
Возврат;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот