grumagargler / tester

Тестер 1С
http://tester.help
BSD 2-Clause "Simplified" License
178 stars 31 forks source link

Ошибка при записи сценария выбора в поле с несколькими типами #22

Closed vandalsvq closed 2 years ago

vandalsvq commented 2 years ago

Открываем любую форму, где есть реквизит с несколькими типами (платформа 1С при выборе значения в данном поле, обычно предлагает выбрать тип).

Получаем ошибку:

Преобразование значения к типу Число не может быть выполнено
{DataProcessor.TranspilerTester.ObjectModule(315)}:         return TopDescriptor.Attributes [ "name" ] + "." + method;
{DataProcessor.TranspilerTester.ObjectModule(242)}:         addCall ( buildMethod () );
{DataProcessor.TranspilerTester.ObjectModule(135)}:             callMethod ();
{DataProcessor.TranspilerTester.ObjectModule(25)}:  build ();
{DataProcessor.TranspilerTester.ManagerModule(7)}:  return obj.Perform ();
{Catalog.Scenarios.Form.Form.Form(1144)}:       return DataProcessors.TranspilerTester.Perform(Data.Log, Data.Lang, findConnect(Script));
{Catalog.Scenarios.Form.Form.Form(1135)}:   Items.Script.SelectedText = transpile(Data, Object.Script);
{Catalog.Scenarios.Form.Record.Form(151)}:  Close ( getLog () );
vandalsvq commented 2 years ago

Я пока написал себе общий метод для выбора типа. Вызывается с параметром = тестовому представлению целевого типа значения. Возвращает Истина если тип выбран, Ложь - если не найден или выбор типа не дождался (хотя тут наверное лучше возвращать Неопределено)

Если НЕ Дождаться("Выбор типа данных") Тогда
    Возврат Ложь;
КонецЕсли;

Форма   = Здесь ( "Выбор типа данных" );
Таблица = Фокус ( "!TypeTree" );

Найдено = НайтиСтрокуПоТипу(Таблица, _);

Если Найдено Тогда
    Нажать ( "!OK" );
    Возврат Истина;
Иначе
    Нажать ( "!Cancel" );
    Возврат Ложь;
КонецЕсли;  

Функция НайтиСтрокуПоТипу(Таблица, ТипСтрока)
    Таблица.ПерейтиКПервойСтроке();
    Текст = Таблица.ПолучитьТекстЯчейки("Колонка1");

    Если Текст = ТипСтрока Тогда
        Возврат Истина;
    КонецЕсли;

    ПредыдущийТекст = Текст;                
    Пока Истина Цикл
        Попытка
            Таблица.ПерейтиКСледующейСтроке();
        Исключение
            Прервать;
        КонецПопытки;

        Текст = Таблица.ПолучитьТекстЯчейки("Колонка1");

        Если Текст = ТипСтрока Тогда
            Возврат Истина;
        КонецЕсли;

        Если ПредыдущийТекст = Текст Тогда
            Прервать;
        КонецЕсли;

        ПредыдущийТекст = Текст;
    КонецЦикла;

    Возврат Ложь;
КонецФункции

Критика принимается )))

grumagargler commented 2 years ago

спасибо за подробное описание, попробуйте пожалуйста приложенный вариант. 1Cv8.cf.zip

grumagargler commented 2 years ago

Критика принимается )))

по коду есть два предложения:

vandalsvq commented 2 years ago

подтверждаю работоспособность !!!!! спасибо