Имя: Пароль:
1C
1С v8
Открытие псевдомодального окна в цикле
,
0 Юрий П
 
04.12.19
07:47
Задача такая. В обработке делается обход таблицы и для каждой строки с пустой номенклатурой нужно открыть форму из которой нужно выбрать номенклатуру и подставить в текущую строку.

&НаКлиенте
Процедура МояПроцедура(Команда)
  Для каждого стр из ТаблицаДанных Цикл
    Если стр.Номенклатура.Пустая() Тогда
      Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, стр);
      ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", стр.Наименование), ЭтаФорма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);      
    КонецЕсли;
  КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(Результат, СтокаТаблицы) Экспорт
  Если ЗначениеЗаполнено(Результат) Тогда
    СтокаТаблицы.Номенклатура = Результат;
  КонецЕсли;
КонецПроцедуры

Значение выбирается и подставляется, но из-за отсутствия модальности цикл не останавливается при открытии формы. Формы открывается лишь раз и выбранное значение подставляется в последнюю строку.

Как решить эту проблему?
1 Тихий омут
 
04.12.19
07:56
Головой и руками, не?

*Прочувствуйте всю мощь и удобство асинхронных методов!

ЗЫ. Извините за троллизм, не удержался. Муки эти были пережиты полной мерой при переходе с 7.7 сразу на УФ, такси, с жестким запретом на модальность... То, что требовало трёх строчек кода, превращается... внезапно превращается... И как руководству, ни бум бум не смыслящему в 1с, объяснить, почему вместо трёх минут нужно полчаса...
2 Юрий П
 
04.12.19
08:03
(1) Ваша ирония мне понятна и близка. Но все же хотелось бы услышать что-то конкретное.
3 MyNick
 
04.12.19
08:05
(1) А вы попробуйте освоить и закодить хотя бы простое веб приложение. С АПИшкой на стороне сервера, принимающей и отдающей данные в JSON (да хотя бы PHP) и клиентской частью на JS с динамической подгрузкой данных, отсутствием блокирования интерфейса и вот этим всем.
Тогда ирония будет не по поводу асинхронных методов, а по поводу их нелепости применения там, где они совсем никаким боком.
4 MyNick
 
04.12.19
08:07
(0) Обработка выбора должна управлять следующей итерацией выбора. Цикл естественно убрать.
5 Лефмихалыч
 
04.12.19
08:08
ОбработкаВыбора()
   ПодставитьВТаблицуВсюХерню();
   ЗапуститьПодставлятор();
Конец

ЗапуститьПодставлятор()
   НайтиПервуюБольнуюСтрокуВТаблице();
   ПоказатьВопрос("", ОбработкаВыбора);
Конец
6 Лефмихалыч
 
04.12.19
08:08
классека
7 MyNick
 
04.12.19
08:09
В МояПроцедура вызываем НайтиСтрокуСПустойНоменклатуройИВыбрать.
В Обработке выбора делаем то же самое.
Когда пустые номенклатуры закончатся, все остановится. Нафиг циклы?
8 Лефмихалыч
 
04.12.19
08:10
надо не псевдомодальные городить а псевдоцикл
9 acht
 
04.12.19
08:11
(0) В параметрах оповещения протягивай таблицу и текущий итератор цикла. В обработке выбора принимай решение что делать.
10 MyNick
 
04.12.19
08:11
(9) цикл нафиг не нужен
11 Тихий омут
 
04.12.19
08:14
Помимо всего перечисленного есть ещё вариант изменить подход к UI - показать форму с табличкой/списком только тех строк, где юзер должен прощёлкать и выбрать/подобрать нужные значения. Плюс в том, что юзеру сразу будет виден весь объём предстоящей работы, а в цикле - хз когда оно закончится
12 Тихий омут
 
04.12.19
08:16
(3) падаю ниц пред Вашим скиллом... не претендую:)
13 Юрий П
 
04.12.19
08:33
(4) Благодарю. Так и сделал.
14 Сияющий в темноте
 
04.12.19
08:55
ну,в 1с еще есть асинхронность-а попробуйте тоже самое на чистом webe сделать.

что такое цикл-это повтор вызова функции при завершении диалога(формы)
условие выхода из цикла-окончание таблицы,то есть,ТекущаяСтрока>КоличествоСтрок.
не забываем сместить текущую строку.
на самом деле,проверяем текущую,если ошибка,то показываем пользователю диалог,если ошибок нет-переход на новую строку.
при показе диалога мы ввходим из функции цикла,сохраняя в параметрах номер текущей строки.
15 MyNick
 
04.12.19
09:31
(14) а что там на чистом вебе не сделать? Асинхронность?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.