Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 окт 2021, 04:37

Не работает двойное условие

Автор Explorer, 29 ноя 2016, 06:50

0 Пользователей и 1 гость просматривают эту тему.

Explorer

С бодрым утром.
В форме документа нужно установить обязательность заполнения даты, в зависимости от значения поля ЗаявкаТ. Сделал так в модуле формы:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если Объект.ЗаявкаТ <> Истина и Объект.ДатаО = Неопределено Тогда
Сообщить ("Не заполнено поле Дата окончания тендера", СтатусСообщения.Важное);
ПараметрыЗаписи.Вставить("Ответ","Нет");
Возврат;
КонецЕсли;
КонецПроцедуры


Все равно разрешает записывать с пустой датой. Ошибок не выдает. Сообщить не делает. Как будто проверки вообще нет.

Подскажите?



sertak

И Не ЗначениеЗаполнено(Объект. Дата0)

Explorer

Цитата: sertak от 29 ноя 2016, 07:08
И Не ЗначениеЗаполнено(Объект. Дата0)
Спасибо!
Теперь хоть ошибку выдает, что поле объекта не обнаружено, но все равно проводит и записывает.

cska-fanat-kz

канонически...
надо установить у реквизита Дата0 проверку в "Выдавать ошибку"
и в ОбработкеПроверкиЗаполнения() в модуле объекта проверять реквизит ЗаявкаТ и при соответствующем условии исключать реквизит Дата0 из списка проверяемых.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Explorer

Цитата: cska-fanat-kz от 29 ноя 2016, 07:20
канонически...
надо установить у реквизита Дата0 проверку в "Выдавать ошибку"
и в ОбработкеПроверкиЗаполнения() в модуле объекта проверять реквизит ЗаявкаТ и при соответствующем условии исключать реквизит Дата0 из списка проверяемых.

ОбработкаПроверкиЗаполненияНаСервере ?
Добавлено: 29 ноя 2016, 07:52


Цитата: cska-fanat-kz от 29 ноя 2016, 07:20
канонически...
надо установить у реквизита Дата0 проверку в "Выдавать ошибку"
и в ОбработкеПроверкиЗаполнения() в модуле объекта проверять реквизит ЗаявкаТ и при соответствующем условии исключать реквизит Дата0 из списка проверяемых.

Сделал ДатаО "Выдавать ошибку"
В обработке ОбработкаПроверкиЗаполненияНаСервере добавил
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если Объект.ЗаявкаТ = Истина Тогда
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Дата0"));
КонецЕсли;
КонецПроцедуры


При выполнении пишет

{Документ.Документ1.Форма.ФормаДокумента.Форма(77)}: Ошибка при вызове метода контекста (Удалить)
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Дата0"));
по причине:
Несоответствие типов (параметр номер '1')

cska-fanat-kz

ОбработкаПроверкиЗаполненияНаСервере() - это на форме
по идее можно и так, но обычно в модуле объекта.

значит по идее в проверяемых реквизитах не находит,
отлаживай, смотри что внутри ПроверяемыеРеквизиты...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Explorer

Цитата: cska-fanat-kz от 29 ноя 2016, 08:11
ОбработкаПроверкиЗаполненияНаСервере() - это на форме
по идее можно и так, но обычно в модуле объекта.

значит по идее в проверяемых реквизитах не находит,
отлаживай, смотри что внутри ПроверяемыеРеквизиты...

Уже прямо написал

ПроверяемыеРеквизиты.Удалить("ДатаО");


Добавил

Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Сообщить(Объект.ДатаО, СтатусСообщения.Внимание);
Если Объект.ЗаявкаТ = Истина Тогда
ПроверяемыеРеквизиты.Удалить("ДатаО");
КонецЕсли;
КонецПроцедуры


Сообщает 01.01.0001 0:00:00 и

Все равно Несоответствие типов (параметр номер '1')

cska-fanat-kz

да правильно пишет!

Цитата: Explorer от 29 ноя 2016, 08:51ПроверяемыеРеквизиты.Удалить("ДатаО")

ПроверяемыеРеквизиты - это массив, его метод Удалить() требует параметр типа ЧИСЛО - индекс удаляемого элемента.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Explorer

Цитата: cska-fanat-kz от 29 ноя 2016, 09:29
да правильно пишет!

Цитата: Explorer от 29 ноя 2016, 08:51ПроверяемыеРеквизиты.Удалить("ДатаО")

ПроверяемыеРеквизиты - это массив, его метод Удалить() требует параметр типа ЧИСЛО - индекс удаляемого элемента.

И как быть?
Добавлено: 30 ноя 2016, 07:29


Сделал вот так:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Если Объект.ЗаявкаТ <> Истина И Не ЗначениеЗаполнено(Объект.ДатаО) Тогда
        Сообщить ("Не заполнено поле Дата окончания тендера", СтатусСообщения.Важное);
Отказ = Истина;
        Возврат;
КонецЕсли;
КонецПроцедуры


Работает.
Добавлено: 30 ноя 2016, 07:32


Ставлю далее следующее условие не работает:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Если Объект.ЗаявкаТ <> Истина И Не ЗначениеЗаполнено(Объект.ДатаО) Тогда
        Сообщить ("Не заполнено поле Дата окончания тендера", СтатусСообщения.Важное);
Отказ = Истина;
        Возврат;
КонецЕсли;
Если Объект.Результат = "Отказ" И Не ЗначениеЗаполнено(Объект.ПричинаО) Тогда
        Сообщить ("Не заполнено поле Причина отказа", СтатусСообщения.Важное);
Отказ = Истина;
        Возврат;
КонецЕсли;
КонецПроцедуры


Если написать Сообщить (Объект.Результат), то слово "Отказ" выводит.
Добавлено: 30 ноя 2016, 08:43


Возможно дело в Объект.Результат = "Отказ"  ?
реквизит Результат выбирается из справочника Результат. Значение "Отказ" там есть, может синтаксис?
Добавлено: 30 ноя 2016, 11:49


Всё заработало! Всем спасибо!
Дело было в синтаксисе. Необходимо было использовать Строка(Объект.Результат) = "Отказ"

alex0402

Цитата: Explorer от 30 ноя 2016, 06:26Объект.Результат

какого типа?
пробуй
Если Строка(Объект.Результат) = "Отказ" И Не ЗначениеЗаполнено(Объект.ПричинаО) Тогда
Добавлено: 30 ноя 2016, 18:02


или Объект.Результат может быть с пробелами.
Спасибо за Сказать спасибо

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск