Опрос пользователя в цикле с оповещением (управляемые формы)

01.06.22

Задачи пользователя - Адаптация типовых решений

Пример вопроса пользователю по каждой строке при обходе таблицы значений в цикле с помощью оповещения.

В новых и последних конфигурациях нежелательно использовать модальные окна, но требуется в цикле опрашивать пользователя. Как решить такую задачу и не использовать модальные окна?  Решил поделиться примером обхода таблицы значения и опроса пользователя по оповещению (управляемые формы).

Задача:

1. Проверить в заказе покупателя доступность необходимого количества.

2. По каждой строке товара, у которого недостаточно на остатке, предложить пользователю оприходовать или разукомплектовать комплект.

Решение: Сделать опрос пользователя в процедуре оповещения.

// Кнопка проверки остатков
&НаКлиенте
Процедура РасшАВ_ПроверитьОстаткиПосле(Команда)	
	
	ТаблицаСОстатками.Очистить();
	РасшАВ_ПроверитьОстаткиПослеНаСервере(); // Заполнение таблицы с остатками
	Если не ТаблицаСОстатками.Количество() = 0 Тогда 
		ПараметрыОбхода = Новый Структура;
		ПараметрыОбхода.Вставить("НомерСтроки", -1);
		ПараметрыОбхода.Вставить("Комплектация",Ложь);
		ПараметрыОбхода.Вставить("Оприходование",Ложь);
		РаботаСОтрицательнымиОстатками(КодВозвратаДиалога.Нет,ПараметрыОбхода);	// Запуск обхода таблицы	
	КонецЕсли;
	
КонецПроцедуры

// Циклическая процедура с вопросами
&НаКлиенте
Процедура РаботаСОтрицательнымиОстатками(Результат, ПараметрыОбхода) Экспорт  
	
	// Пришел ответ "да" - комплектуем или оприходуем
	Если Результат = КодВозвратаДиалога.Да Тогда 
		ст = ТаблицаСОстатками[ПараметрыОбхода.НомерСтроки];
		Если ПараметрыОбхода.Комплектация Тогда // Комплектуем 
			АртикулРулона = Лев(СокрЛП(ст.НоменклатураАртикул),Найти(ст.НоменклатураАртикул,"m")-1);
			Если СоздатьКомплектацию(АртикулРулона) Тогда
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = "Разукомплектовали для товара: ("+ст.НоменклатураАртикул+") "+ст.НоменклатураНаименование;
				Сообщение.Сообщить();
			КонецЕсли;			
		ИначеЕсли ПараметрыОбхода.Оприходование Тогда // Оприходуем
			КоличествоНужно = ст.Количество - (ст.КоличествоОстаток * ст.Коэффициент);
			Если СоздатьОприходование(ст.НоменклатураАртикул, КоличествоНужно) Тогда
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = "Оприходовали товар: ("+ст.НоменклатураАртикул+") "+ст.НоменклатураНаименование+" в количестве: "+Строка(КоличествоНужно); 
				Сообщение.Сообщить();
			КонецЕсли;
		КонецЕсли;
	ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда 
		Возврат;
	КонецЕсли;
	
	// Это была последняя строка, прерываем выполнение
	Если ПараметрыОбхода.НомерСтроки+1 = ТаблицаСОстатками.Количество() Тогда
		Возврат;
	КонецЕсли;
	
	ст = ТаблицаСОстатками[ПараметрыОбхода.НомерСтроки+1];
	КоличествоНужно = ст.Количество - (ст.КоличествоОстаток * ст.Коэффициент);
	ПараметрыОбходаНовый = Новый Структура;
	Если не СтрНайти(ст.НоменклатураАртикул,"m") = 0 Тогда 
		ОстатокРулона = 0;
		АртикулРулона = Лев(СокрЛП(ст.НоменклатураАртикул),Найти(ст.НоменклатураАртикул,"m")-1);
		ОстатокРулона = ПолучитьОстатокРулоны(АртикулРулона);
		Если не ОстатокРулона = 0 Тогда
			// Спросим разкомплектовать?			
			ПараметрыОбходаНовый.Вставить("НомерСтроки",ТаблицаСОстатками.Индекс(ст));
			ПараметрыОбходаНовый.Вставить("Комплектация",Истина);
			ПараметрыОбходаНовый.Вставить("Оприходование",Ложь);
			Режим = РежимДиалогаВопрос.ДаНетОтмена;
			СтрокаВопроса = "Разукомплектовать для товара: ("+ст.НоменклатураАртикул+") "+ст.НоменклатураНаименование;
			Оповещение = Новый ОписаниеОповещения("РаботаСОтрицательнымиОстатками", ЭтаФорма, ПараметрыОбходаНовый);
			ПоказатьВопрос(Оповещение, СтрокаВопроса, Режим, 0); // Вызываем эту же процедуру и передаем в неё параметры
		Иначе 
			// Спросим оприходовать? 
			ПараметрыОбходаНовый.Вставить("НомерСтроки",ТаблицаСОстатками.Индекс(ст));
			ПараметрыОбходаНовый.Вставить("Комплектация",Ложь);
			ПараметрыОбходаНовый.Вставить("Оприходование",Истина);
			Режим = РежимДиалогаВопрос.ДаНетОтмена; 
			СтрокаВопроса = "Оприходовать товар: ("+ст.НоменклатураАртикул+") "+ст.НоменклатураНаименование+" в количестве: "+Строка(КоличествоНужно); 
			Оповещение = Новый ОписаниеОповещения("РаботаСОтрицательнымиОстатками", ЭтаФорма, ПараметрыОбходаНовый);
			ПоказатьВопрос(Оповещение, СтрокаВопроса, Режим, 0); // Вызываем эту же процедуру и передаем в неё параметры
		КонецЕсли;
	Иначе // Если это не метры
		// Спросим оприходовать? 
		ПараметрыОбходаНовый.Вставить("НомерСтроки",ТаблицаСОстатками.Индекс(ст));
		ПараметрыОбходаНовый.Вставить("Комплектация",Ложь);
		ПараметрыОбходаНовый.Вставить("Оприходование",Истина);
		Режим = РежимДиалогаВопрос.ДаНетОтмена; 
		СтрокаВопроса = "Оприходовать товар: ("+ст.НоменклатураАртикул+") "+ст.НоменклатураНаименование+" в количестве: "+Строка(КоличествоНужно); 
		Оповещение = Новый ОписаниеОповещения("РаботаСОтрицательнымиОстатками", ЭтаФорма, ПараметрыОбходаНовый);
		ПоказатьВопрос(Оповещение, СтрокаВопроса, Режим, 0); // Вызываем эту же процедуру и передаем в неё параметры
	КонецЕсли;		
	
КонецПроцедуры 

Думаю, такой простой пример кому-то пригодится. Если есть какие-то замечания или предложения по улучшению такого кода - комментируйте.

Вступайте в нашу телеграмм-группу Инфостарт

цикл вопрос в цикле оповещение

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Адаптация типовых решений Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    1634    12    13    

16

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    1445    4    0    

3

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    13664    120    25    

76

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

9760 руб.

17.06.2025    4074    10    0    

9

Адаптация типовых решений 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Расширение, которое в форму списка и форму выбора справочника «Номенклатура» добавляет табличную часть в виде дерева, в которую выводится информация об остатках и доступности выбранной номенклатурной позиции.

6710 руб.

20.04.2026    495    1    0    

3

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    8455    26    5    

41

Адаптация типовых решений 1С 8.3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Беларусь Россия Платные (руб)

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    1625    1    8    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. booksfill 01.06.22 18:06 Сейчас в теме
Я правильно понял, что рекомендуется просто организовать рекурсию в методе "ПоказатьВопрос", а фишка в том, что все это запихали именно в один метод?

Если, да, то мне кажется более структурированным решение, приводимое в
https://forum.infostart.ru/forum9/topic213234/. Там, правда, не один метод, а два, но так , по-моему, правильнее, все-таки убираем анализ запросов в свой метод..

P.S.
А метод ПоказатьВопросАсинх не рассматривается, или я неверно понимаю как он работает?
3. nikolasx 64 02.06.22 18:15 Сейчас в теме
(1) Да, цель была запихнуть именно в один метод и вызывать эту же процедуру в процедуре для компактности. Вариант с двумя методами аналогичный. Этот пример как вариант использования в разных ситуациях и на свой вкус.
triviumfan; +1 Ответить
6. nikolasx 64 02.06.22 19:15 Сейчас в теме
(1)
А метод ПоказатьВопросАсинх не рассматривается, или я неверно понимаю как он работает?
Что касается этого метода - это хорошо, но не у всех платформа выше 8.3.18.1128. Я даже не сталкивался с асинхронными методами. Но вы мне дали подсказку разобраться с асинхронными методами и попробовать их в деле. Спасибо.
2. malikov_pro 1356 01.06.22 20:09 Сейчас в теме
Не мучайте пользователей, выведите форму блокирующую текущую с таблицей строк товаров и ошибками, + кнопками для решения по выделенным.
marku; ixijixi; ltfriend; +3 Ответить
4. nikolasx 64 02.06.22 18:23 Сейчас в теме
(2) Что вы имеете ввиду "Не мучайте пользователей"? Цель была именно отдать решение пользователю по вопросу возникновение отрицательных остатков по каждому такому товару, оприходовать или разукомплектовать, а так же пропустить (ответив Нет) или прервать цикл (ответив Отменить) и разобраться с остатками.
5. ltfriend 02.06.22 19:09 Сейчас в теме
(4) Имеется в виду, что вместо того, чтобы заставлять пользователя нажимать кнопки по каждой строке (а если таких строк 10, 20 и т.д.?), лучше собрать проблемные товары все вместе, вывести отдельную форму с этими товарами с возможностью выделения строк и кнопками, что нужно сделать сразу со всеми выделенными строками. А ваша реализация - это реальное мучение для пользователей. По несколько раз нажимать "Да/Нет/Отмена".
7. booksfill 03.06.22 09:34 Сейчас в теме
(5) Это, конечно, все правильно, но вопросы не обязаны быть взаимонезависимыми.
Иногда от ответа пользователя на один вопрос меняется текст следующего и сама необходимость в нем.

- Вам больше 18 лет?
- Да.
- Сколько бутылок водки хотите взять?

- Вам больше 18 лет?
- Нет.
- Иди, девочка, отсюда!

Или, в примере близком к авторскому:
- Разукомплектовать товар N?
- Да
- Образовались зап. части, доукомплектовать товар N1?
8. ltfriend 03.06.22 10:12 Сейчас в теме
(7) К самой реализации показа нескольких вопросов подряд претензий, по сути, нет. Действительно, бывают ситуации, когда это необходимо. Вопросы вызвало то, для чего такая возможность была использована автором. Как правильно написал malikov_pro - это мучение пользователей ))
9. nikolasx 64 03.06.22 11:47 Сейчас в теме
(5) Я согласен с тем когда 10, 20 и т.д. - это не лучший вариант реализации обходом, но в данной ситуации таких строк 1-5 и то редкость, больше сделано для проверки и быстрого решения, не пересматривать и сопоставлять колонки количество и остаток (в голове вычислять, сколько не хватает), а потом еще и самому делать и заполнять документы оприходования и комплектации.
10. DrAku1a 1799 04.06.22 07:32 Сейчас в теме
(4) Сразу представил некую Марь Ивановну, которая так подтверждает список из 100 позиций и где-то на второй половине её отвлекают каким-то вопросом... В этом плане, ИМХО, лучше сделать список с пометками.
Для отправки сообщения требуется регистрация/авторизация