Имя: Пароль:
1C
1С v8
Вывести сообщение в форму списка после нажатия в форме документа "Провести и закрыть"
0 ADV
 
24.07.24
19:45
При проведении документе "Приобретение товаров" в определенных ситуациях создается "Заказ клиента" (все процедуры на сервере). Нужно об этом радостном событии уведомить пользователя в форме списка "Приобретений товаров", т.к. форма документа закроется. Пробовал по разному, в том числе вот так:
ОбщегоНазначения.СообщитьПользователю("Ура, получилось!", ТекущийОбъект.Ссылка,"Номер","Документы.ПриобретениеТоваровУслуг.ФормаСписка"). Допустил ошибку в параметрах, или направить СообщитьПользователю в другую форму нельзя?
Мысль если нельзя: добавить процедуру ПриЗакрытии и из нее
ПоказатьОповещениеПользователя, но тогда потребуется сохранять в Поступлении ссылку на созданный заказ клиента, как-то наворочено получается...
1 Garykom
 
24.07.24
19:58
Перед закрытием формы документа "Приобретение товаров" (надеюсь это происходит уже после создания "Заказ клиента") на клиенте делай Оповестить()
В форме списка его лови в ОбработкаОповещения() и показывай
https://forum.infostart.ru/forum9/topic238859/
2 Mort
 
24.07.24
22:43
ОбщегоНазначения.СообщитьПользователю("Ура, программа так задрала пользователя сообщениями, что он больше не обращает на них никакого внимания!!!")
3 ADV
 
24.07.24
22:53
(1) Спасибо!
(2) Да пользователь может и не будет обращать внимания на сообщения, но в ТЗ сказано: надо сообщать!
4 ADV
 
24.07.24
23:29
Сделал так, вроде работает:
&НаКлиенте
Процедура ПриЗакрытииПосле(ЗавершениеРаботы)  
    
Если НЕ ЗавершениеРаботы Тогда

СозданныйЗаказКлиента =
ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути
(ЭтаФорма, "СозданныйЗаказКлиента");      

Если ЗначениеЗаполнено(СозданныйЗаказКлиента) Тогда
    ОповеститьОбИзменении(СозданныйЗаказКлиента);  
    ПоказатьОповещениеПользователя("Создан заказ клиента",            
       ПолучитьНавигационнуюСсылку(СозданныйЗаказКлиента),
       Строка(СозданныйЗаказКлиента));
КонецЕсли;

КонецЕсли;
    
КонецПроцедуры
5 Garykom
 
24.07.24
23:29
(3) Учти что создавать (и записывать) новые объекты (справочники или документы) непосредственно при записи/проведении некоего справочника/документа - архитектурно неправильно!

Правильно это запускать в этот момент фоновое задание (длительное), которое уже вернет результат.
Форму из которой запустили фоновое можно блокировать до возврата результата, обработчиком ожидания по адресу временного хранилища периодически проверять
https://infostart.ru/1c/articles/1260411/
https://infostart.ru/1c/articles/1793747/ - тут комменты глянь
6 Garykom
 
24.07.24
23:33
(5)+ Если этого не сделать - можно получить полную блокировку интерфейса/сеанса у пользователя - так что ему придется его через CTRL+ALT+DEL завершать, а на сервере 1С оно так и останется висеть
Если создание/запись нового объекта попадет на взаимоблокировки
7 ADV
 
25.07.24
00:17
(5) спасибо, буду это учитывать
8 ADV
 
25.07.24
00:37
(5) (6) Но вроде 1С-Архитектор бизнеса фирма достаточно известная? Это в ее материалах https://programmist1s.ru/sozdat-na-osnovanii-programmno/
я обнаружил рекомендацию начинать создавать подчиненный документ в процедуре ПослеЗаписиНаСервере
9 Garykom
 
25.07.24
01:05
(8) Фактически там советы уровня "hello world"
Да вполне рабочие но для новичков

На практике же в сложных типовых/отраслевых и даже самописных конфах запись/проведение документов очень сложное и долгое
С кучей запросов к другим регистрам, например для контроля остатков при проведении
Или взаимосвязанные записи в десятки разных регистров при проведении

И еще представь что у тебя реальная база с десятками, сотнями и более пользователей работающих онлайн
С кучей регламентных/фоновых заданий, всяческих синхронизаций и обменов
И да в этих условиях один документ может проводиться пару минут ))

И вот у тебя клиент 1С (целиком весь сеанс) заблочится полностью интерфейс, а не как у других типовых всего одна форма блочится и можно переключиться на другую и там дальше работать
10 lEvGl
 
25.07.24
01:10
(9) эххх верна ли такая архитектура...
11 lEvGl
 
25.07.24
01:18
ну типа нажал реализацию и забыл, потом какое то окошко где то внизу одно из ста появилось "не провелозь"
многопоточность ёпырст. важно, чтобы люди такими же были, по факту - последовательность с переменных успехом осилить могут
12 Garykom
 
25.07.24
01:59
(11) Такая архитектура вполне позволяет не закрывать форму, показывая окошечко (БлокироватьОкноВладельца) с вертящимся индикатором и кнопкой Отмена
Причем другие формы не заблокированы, в них можно работать
В отличие от обычного синхронного серверного вызова, который блокирует все
13 Злопчинский
 
25.07.24
02:04
а не проще сделать две кнопки "Провести" и "Закрыть"...?