8.х Приостановка выполнения цикла до нажатия пользователем определенной кнопки на форме. Как?

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

  1. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Добрый день!
    Есть еще такая задача.
    Из файла получаем строку, разбиваем ее на части и помещаем в несколько полей формы отчета.
    После этого пользователь что-то с этими данными делает (редактирует/смотрит/читает) и принимает решение внести эту инфу (создать элементы справочников) или отклонить. При этом он нажимает 1 из 2-х кнопок на форме (первая создает несколько элементов разных справочников), вторая чистит форму. После этого вызывается вторая строка из файла и т.д.

    Вопрос. Как приостановить цикл в определенном месте пока не будут нажаты одна из двух кнопок и, соответсвенно, сдаланы определенные действия вызываемые этими кнопками?
  2. OlegSol
    Offline

    OlegSol

    Регистрация:
    9 июн 2008
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    А открыть форму модально - не прокатит?
  3. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    нет, она уже открыта и обработка вызывается процедурой данной формы.
  4. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    а вопрос
    в данном случаи не проканает?

    Вопрос (DoQueryBox)
    Синтаксис:
    Вопрос(<Текст вопроса>, <Режим>, <Таймаут>, <Кнопка по умолчанию>, <Заголовок>)
    Параметры:
    <Текст вопроса> (обязательный)
    Тип: Строка. Текст задаваемого вопроса.
    <Режим> (обязательный)
    Тип: РежимДиалогаВопрос. Задает состав кнопок диалога и возможные варианты ответов.
    <Таймаут> (необязательный)
    Тип: Число. Интервал времени в секундах, в течение которого система будет ожидать ответа пользователя. По истечении интервала окно вопроса будет закрыто. Если параметр не указан, то время ожидания не ограничено.
    Значение по умолчанию: 0
    <Кнопка по умолчанию> (необязательный)
    Тип: КодВозвратаДиалога. Определяет кнопку, которая должна быть назначена кнопкой по умолчанию.
    <Заголовок> (необязательный)
    Тип: Строка. Содержит заголовок окна вопроса.
    Возвращаемое значение:
    Тип: КодВозвратаДиалога. В зависимости от реакции пользователя возвращается одно из значений системного перечисления.
    Описание:
    Выводит на экран окно вопроса.
    Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
    Пример:
    Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Продолжить выполнение операции?", Режим, 0);
    Если Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
    КонецЕсли;
  5. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Этот вариант отпал сразу - смотри топик. Пользователь смотрит, редактирует, принимает решение и пр. а потом уже жмет кнопки
  6. OlegSol
    Offline

    OlegSol

    Регистрация:
    9 июн 2008
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1

    Если цикл по строкам таблицы значений - можно после каждого нажатия пользователем кнопки увеличивать значение счетчика на единицу и использовать ПолучитьСтрокуПоНомеру(счетчик)
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!

    Совсем неправильно Вы представляете себе программный код, что бы не случилось и какие бы завихренья Вы не придумали, программный код выполняется линейно, и только линейно, что значит что два обработчика не могут работать одновременно.

    На крайний случай, заведите себе глобальную переменную, которая будет итератором цикла, при выполнении условий выходите из цикла (Прервать), при повторном выполнении обработчика с Вашим циклом обработка начнется с прерванного ранее итератора, как Вы видите код линейный, но никто нам не запрещает варьировать параметрами, это наше преимущество, и именно его и надо использовать.
  8. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    согласен с последним высказыванием.... а цикл то в чем? Кто вам мешает получать след строку по нажатию 3-ей кнопки если вы с циклом получения строк разобраться не можете....
  9. veeb
    Offline

    veeb

    Регистрация:
    5 ноя 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Эту задачу можно реализовать заменив предложенный автором построчный на табличный механизм реализации. Создать обработку или документ (если пользователю потом может понадобиться пересмотреть или исправить свое творчество) с таблицей в которую будут залиты строки текстового файла с разбиением на нужные колонки. Пользователь редактирует эту таблицу как ему надо, а затем нажимает кнопку OK. В результате по всем строкам таблицы выполняются нужные действия. Если это будет документ, то можно дописать отмену проведения, которое вернет все в исходное состояние.
  10. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Спасибо за ответы, но, кроме одного варианта ни что не подошло.
    Таблица - тот же массив который перебирается в цикле, а как войти в цикл я так и не понял (перейти на мету в цикле не работает)
    Единственный вариант - еще одна форма и из цикла вызывается модальновторая, заполняется и там уже пользователь делает то, что нужно.
  11. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    В Вашей задаче цикл не требуется. Алгоритм обработки должен быть примерно такой:

    1. При открытии обработки или по нажатию какой-то кнопки инициализируем файл с данными. Узнаем в нем количество строк. В переменную НомерСтроки устанавливаем 1 и получаем строку по номеру НомерСтроки (т.е. первую) в качестве обрабатываемой . Заполняем реквизиты формы данными из обрабатываемой строки.

    2. Пользователь чего-то делает с данными и жмет одну из кнопок.

    3а. При нажатии первой кнопки создаем элементы справочников. Увеличиваем НомерСтроки на 1. Если НомерСтроки меньше или равен количеству строк в файле, тогда получаем строку по номеру НомерСтроки в качестве обрабатываемой . Заполняем реквизиты формы данными из обрабатываемой строки. Иначе завершаем работу.

    3б. При нажатии второй кнопки сразу увеличиваем НомерСтроки на 1. Если НомерСтроки меньше или равен количеству строк в файле, тогда получаем строку по номеру НомерСтроки в качестве обрабатываемой . Заполняем реквизиты формы данными из обрабатываемой строки. Иначе завершаем работу.
  12. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Да, спасибо, вариант должен быть рабочим. Но проблема уже решанадругим способом, а заодно и расширили возможности:)
    Спасибо!

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