8.х Возврат; Почему не работает или в чем причина?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем burbon, 9 сен 2009.

  1. TopicStarter Overlay
    burbon
    Offline

    burbon Опытный в 1С

    Регистрация:
    5 май 2009
    Сообщения:
    228
    Симпатии:
    0
    Баллы:
    26
    Всем доброго времени суток. Есть такая задачка.
    В поле код нельзя вводить цифры и если их всё же ввели и нажала либо записать, либо "ОК" -> Записать и Закрыть, необходимо вывести предупреждение и вернуть форму в первоначальное состояние для повторного ввода корректного значения. Я это сделал так:

    Процедура ПриЗаписи(Отказ)
    ПервыйСимвол = Лев(Код,1);
    ВторойСимвол = Прав(Код,1);
    Массив = Новый Массив();
    Массив.Вставить(0,1);
    Массив.Вставить(1,2);
    Массив.Вставить(2,3);
    Массив.Вставить(3,4);
    Массив.Вставить(4,5);
    Массив.Вставить(5,6);
    Массив.Вставить(6,7);
    Массив.Вставить(7,8);
    Массив.Вставить(8,9);
    Массив.Вставить(9,0);
    Для Каждого ЭлементМассива Из Массив Цикл
    Если Строка(ЭлементМассива) = Строка(ПервыйСимвол) или Строка(ЭлементМассива) = Строка(ВторойСимвол) Тогда
    Предупреждение("Индекс стены содержит цифру" + Символы.ПС + "Введите корректное значение");
    Возврат;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

    Но вот в чем вся беда, ВОЗВРАТ; не помогает. Что подскажите?
  2. koshak
    Offline

    koshak Опытный в 1С

    Регистрация:
    28 май 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Обрати внимание, что процедура ПриЗаписи имеет параметр "Отказ". По умолчанию этот параметр имеет значение ЛОЖЬ, для того чтобы отменить транзакцию записи документа нужно установить этому параметру значение ИСТИНА. Т.е. так:

    Код:
    Отказ = Истина;
    
    А еще лучше использовать обработчик события ПередЗаписью
  3. TopicStarter Overlay
    burbon
    Offline

    burbon Опытный в 1С

    Регистрация:
    5 май 2009
    Сообщения:
    228
    Симпатии:
    0
    Баллы:
    26
    Так?

    Процедура ПриЗаписи(Отказ)
    ПервыйСимвол = Лев(Код,1);
    ВторойСимвол = Прав(Код,1);
    Массив = Новый Массив();
    Массив.Вставить(0,1);
    Массив.Вставить(1,2);
    Массив.Вставить(2,3);
    Массив.Вставить(3,4);
    Массив.Вставить(4,5);
    Массив.Вставить(5,6);
    Массив.Вставить(6,7);
    Массив.Вставить(7,8);
    Массив.Вставить(8,9);
    Массив.Вставить(9,0);
    Для Каждого ЭлементМассива Из Массив Цикл
    Если Строка(ЭлементМассива) = Строка(ПервыйСимвол) или Строка(ЭлементМассива) = Строка(ВторойСимвол) Тогда
    Предупреждение("Индекс стены содержит цифру" + Символы.ПС + "Введите корректное значение");
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
  4. TopicStarter Overlay
    burbon
    Offline

    burbon Опытный в 1С

    Регистрация:
    5 май 2009
    Сообщения:
    228
    Симпатии:
    0
    Баллы:
    26
    Сделал так и всё заработало:

    Процедура ПриЗаписи(Отказ)
    ПервыйСимвол = Лев(Код,1);
    ВторойСимвол = Прав(Код,1);
    Массив = Новый Массив();
    Массив.Вставить(0,1);
    Массив.Вставить(1,2);
    Массив.Вставить(2,3);
    Массив.Вставить(3,4);
    Массив.Вставить(4,5);
    Массив.Вставить(5,6);
    Массив.Вставить(6,7);
    Массив.Вставить(7,8);
    Массив.Вставить(8,9);
    Массив.Вставить(9,0);
    Для Каждого ЭлементМассива Из Массив Цикл
    Если Строка(ЭлементМассива) = Строка(ПервыйСимвол) или Строка(ЭлементМассива) = Строка(ВторойСимвол) Тогда
    Предупреждение("Индекс стены не должен содержать цифр." + Символы.ПС + "Введите корректное значение и повторите запись.");
    Отказ = Истина;
    СтандартнаяОбработка = Ложь;
    ПередЗакрытием(Отказ, СтандартнаяОбработка);
    Возврат;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

    Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    КонецПроцедуры
  5. koshak
    Offline

    koshak Опытный в 1С

    Регистрация:
    28 май 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    А по моему лучше бы сделать так:

    Код:
    Процедура ПередЗаписью(Отказ)
    
    // Обработчик проверки
    // бла-бла-бла
    Цикл тыры-пыры
    Если ЕстьКосячныесимволы Тогда
    Отказ = Истина;
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры
    
    И все. Ни какие ПередЗакрытием использовать в этом случае не нада

Поделиться этой страницей