Форма в обработке для разных пользователей

1. BaronBegemot 11.03.24 09:46 Сейчас в теме
Добрый день! Есть обработка в которой есть форма "ФормаГВХ". В ней поля высота, ширина, длина, вес.
Эти поля автоматически заполняются по кнопке "ПолучитьГВХ". Через HTTP подключаемся к весам, забираем данные и заполняем форму.
Процедура ПолучитьГВХСВесовНажатие(Элемент)
	
	HTTP = Новый HTTPСоединение("ТутАдресВесов",,,,,,,);
	
	ЗаголовокЗапросаHTTP = Новый Соответствие();
	ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
	
	HTTPЗапрос = Новый HTTPЗапрос("/", ЗаголовокЗапросаHTTP);
	
	Ответ = HTTP.Получить(HTTPЗапрос);
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	НаборГВХ = ПрочитатьJSON(ЧтениеJSON);
	ЧтениеJSON.Закрыть();
		
	ЭтаФорма.ФШирина = Число(НаборГВХ["width"]);
	ЭтаФорма.ФВысота = Число(НаборГВХ["height"]);
	ЭтаФорма.ФДлина = Число(НаборГВХ["length"]); 
	ЭтаФорма.ФВес = Число(НаборГВХ["weight"]);
	
КонецПроцедуры

Показать


Все хорошо подтягивается, только одна проблема, если данная форма открыта у нескольких пользователей, то она заполняется у всех(хотя кнопку нажимает только 1 пользователь). Всегда думал, что у каждого пользователя открывается своя форма, что это зашито в платформу. А тут один пользователь 2 пользователя вбивают данные вручную, заходит 3, нажимает кнопку и заполняет и у себя данные, и у других тоже затирает. Как такое может быть? Что с этим можно сделать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. ElGatoGris 11.03.24 12:15 Сейчас в теме
(1) А пользователи работают с разными учётками? У формы есть подписка на события? Уникальность, как я понимаю, нужна для открытия другого экземпляра формы в сеансе клиента. Так-то сеансы пользователей на сервере должны быть "изолированы".
2. Saioko 11.03.24 11:01 Сейчас в теме
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>
По передаваемому здесь идентификатору контролировать при заполнении данных в форму - заполнять только в ту, у которой он совпадает.
3. soft_wind 11.03.24 11:28 Сейчас в теме
да, дело не в ворме а в источнике данных, все формы работают с одним источником данных
читают и пишут туда-же в одно место - Весы!
переделывайте код программы с учетом многопользовательской работы!
либо блокируйте работу этой обработки если ее уже кто-то запустил,
4. BaronBegemot 11.03.24 11:48 Сейчас в теме
(2) Форма у меня получается уже открыта, значит надо получить значение <Уникальность> открытой формы и сравнить с чем? Как я пойму, что <Уникальность> именно моя, моей формы, а не другого пользователя?
10. Saioko 11.03.24 12:17 Сейчас в теме
(4) Это должен быть какой-то идентификатор, определяющий с какого рабочего места или под каким пользователем открыта форма. Он должен заполняться раньше команды получения информации, в команде открытия формы. В данном случае наверное подойдёт просто случайно генерируемый УИД.

Но я не так поняла код, я сталкивалась с такой ситуацией при открытии нескольких документов одного типа и получении значений из формы через обработку оповещения. В случае с обработкой увы не могу подсказать.
5. BaronBegemot 11.03.24 11:51 Сейчас в теме
(3) К сожалению, блокировать не получится, в обработке одновременно работают 6-10 человек, принимают товар на склад. А вот как переделать под многопользовательскую работу, в этом то и вопрос)
6. soft_wind 11.03.24 12:04 Сейчас в теме
а как они вообще не путаются чей вес в данный момент считывают?

если 10 форм одновременно считывают данные с ОДНИХ весов , то по логике они одинаковые и получаются!
7. BaronBegemot 11.03.24 12:08 Сейчас в теме
(6) Сейчас как раз все в процессе наладки. Хотим реализовать, чтобы только 1 пользователь работал с весами, остальные могли вручную вбивать в этот момент.
9. BaronBegemot 11.03.24 12:16 Сейчас в теме
Если я получаю форму из открытой формы, я получаю именно свою, открытую форму? Может так заполнять?
Форма = ПолучитьФорму(ВнешниеОбработки.РМС_ПриемкаТовара.Форма.ФормаГВХ, ,"12345");
	
	Форма.ФШирина = Число(НаборГВХ["width"]);
	Форма.ФВысота = Число(НаборГВХ["height"]);
	Форма.ФДлина = Число(НаборГВХ["length"]); 
	Форма.ФВес = Число(НаборГВХ["weight"]);
12. Saioko 11.03.24 12:22 Сейчас в теме
(9)
Форма = ПолучитьФорму(ВнешниеОбработки.РМС_ПриемкаТовара.Форма.ФормаГВХ, ,"12345");

Форма = ПолучитьФорму(ВнешниеОбработки.РМС_ПриемкаТовара.Форма.ФормаГВХ, ,"12345", Новый УникальныйИдентификатор());
11. BaronBegemot 11.03.24 12:19 Сейчас в теме
(8) Пользователи под разными учетками, подписок на события вроде нет.
Нет, кнопку нажимают в уже открытой форме, и нужна уникальность именно формы с которой нажимается кнопка.
Чтобы заполнить только ее, а другие открытые формы не трогать
13. ElGatoGris 11.03.24 12:25 Сейчас в теме
Так они, по идее, все уникальны, то есть разные для разных пользователей.
14. BaronBegemot 11.03.24 12:29 Сейчас в теме
(12) Как то много параметров
Синтаксис:
ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)

Наверное
Форма = ПолучитьФорму(ВнешниеОбработки.РМС_ПриемкаТовара.Форма.ФормаГВХ, ,Новый УникальныйИдентификатор());
15. BaronBegemot 11.03.24 12:30 Сейчас в теме
(13) Ну да, так вот как получить именно мою, открытую у меня форму и ее заполнить?) а остальные чтобы остались нетронутые
16. Saioko 11.03.24 13:03 Сейчас в теме
(15) А можете описать алгоритм действий? Как открывается форма пользователем, какой код отрабатывает, как из формы вызывается процедура.
Потому что по идее действительно формы должны быть уникальны и у меня не получается повторить описываемую ситуацию, когда открытые в двух сеансах формы заполняют друг-друга.
17. BaronBegemot 11.03.24 13:16 Сейчас в теме
(16) Работа ведется в обработке, сканером пробивается товар, если товар приходит на склад первый раз(проверка зашита в обработку), автоматически открывается окно ввода ГВХ(формаГВХ).
Товар ставится на весы, на форме нажимается кнопка "получить данные с весов"(выполняется код из самого первого сообщения), форма заполняется, сохраняется
Или можно просто в ручную измерить и занести данные в форму и сохранить.
18. Saioko 11.03.24 13:18 Сейчас в теме
(17)
автоматически открывается окно ввода

Какой код открывает обработку? Возможно проблема в нём, всем открываемым формам присваивается одинаковый идентификатор.
19. ElGatoGris 11.03.24 13:28 Сейчас в теме
(17) А что и куда сохраняется? Нет ли там подвоха?
20. BaronBegemot 12.03.24 14:55 Сейчас в теме
В итоге реализовал через назначении ключа уникальности форме с определенного ПК, а потом проверка по ключу.

Если ПолучитьКомп() = "INV005" Тогда
	ФормаИзм = ПолучитьФорму("ФормаГВХ", ,"ФормаСВесами");
	ФормаИзм.Номенклатура = НМК;
	ФормаИзм.ОткрытьМодально();
Иначе
	ФормаИзм = ПолучитьФорму("ФормаГВХ");
	ФормаИзм.Номенклатура = НМК;
	ФормаИзм.ОткрытьМодально();
КонецЕсли;


Если ЭтаФорма.КлючУникальности = "ФормаСВесами" Тогда	
		ЭтаФорма.ФШирина = Число(НаборГВХ["width"]);
		ЭтаФорма.ФВысота = Число(НаборГВХ["height"]);
		ЭтаФорма.ФДлина = Число(НаборГВХ["length"]); 
		ЭтаФорма.ФВес = Число(НаборГВХ["weight"]);
	Иначе
		Возврат
	КонецЕсли;


Показать
21. BaronBegemot 12.03.24 14:55 Сейчас в теме
Спасибо всем за помощь
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот