0
- 04.06.2014 - 10:38
|
Ситуация: документ изменяет введенные данные. Не движения: именно данные. Но это функция вспомогательная, основная-то движения. Конкретно: в Номенклатуре есть дополнительный реквизит (т.е., нужный не всем, и в движениях не участвует), но из данных документа его можно (и нужно) запомнить. Или сформировать, если его нет. Все это дело естественно всандалить в процедуру ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи). Нажимает юзер кнопоцку "Провести и закрыть" - и вуаля: специально заточенная функция на сервере делает это. Только совсем-совсем молча, ибо после закрытия формы документа сносит и панель сообщений. Всякие штучки, что внизу экрана всплывают (типо ПоказатьОповещениеПользователя) - не годится - не одно оно нужно, да и затыкается штатным оповещением о завершении работы с документом. И как жить с этим? Сообщать надо не всегда, но иногда надо. | |
1
- 04.06.2014 - 10:44
| И да, накопленные сообщения можно и возвратить, но куда? Форма-то уже тю-тю, закрывшись... Некому принять сохраненные сообщения, чтоб красиво выложить перед глазками виноватого. | |
2
- 04.06.2014 - 10:51
| ваще то делать это надо ПриЗаписи | |
3
- 04.06.2014 - 10:55
| И ПередЗаписью из модуля документа не здорово: среагирует на метки удаления, и вообще - есть куча административного барахла по изменению нумерации, замены реквизитов и т.п. - нафиг это счастье в виде простынь сведений при массовой перезаписи документов. | |
4
- 04.06.2014 - 10:57
| 2-Uho > Смотри (3): тоже редьки не слаще. | |
5
- 04.06.2014 - 10:58
| для этого существуют процедуры на клиенте | |
6
- 04.06.2014 - 10:59
| +5 т.е. в форме | |
7
- 04.06.2014 - 11:11
|
5-Uho > Существуют, но как из запитать? Надо, чтоб это дело вызывалось перед завершением ввода, т.е., в момент "Провести и закрыть". А тут-то форма закрывается. Некому будет принимать протокол. Не, можно, конешно, жамкать кнопу "записать", форма отсается открытой, но юзеры делают губки обиженным бантиком... | |
8
- 04.06.2014 - 11:35
| ну тогда может ПриЗакрытии подойдет? | |
9
- 04.06.2014 - 11:40
| призаписи записываешь данные, формируешь сообщения пользователю, а при закрытии - ПолучитьСообщенияПользователю. | |
10
- 04.06.2014 - 11:40
| еще можно подпиской на событие | |
11
- 04.06.2014 - 11:48
|
8-Uho > Не пойдет: при каждом просмотре включать? При просто просмотреть? А как с теми, кто только помотреть и может? 9-Uho > А пальцем показать? 10-Uho > Неа. Подписка делается на объект: ПриЗаписи, ПриПоведении... Формы там нетути. | |
12
- 04.06.2014 - 13:36
|
вот так, например Код: &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) //записываем дополнительные данные //.... //формируем сообщения пользователю ТекстСообщенияПользователю = "Сам дурак!"; КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() Если ЗначениеЗаполнено(ТекстСообщенияПользователю) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстСообщенияПользователю; Сообщение.Сообщить(); КонецЕсли; КонецПроцедуры | |
13
- 04.06.2014 - 16:39
| При закрытии выведет в область сообщений формы? Или главного окна? | |
14
- 04.06.2014 - 16:42
| главного. | |
15
- 05.06.2014 - 01:01
|
12-Uho > Хмм... &НаСервере ТекстСообщенияПользователю = "Сам дурак!"; ТекстСообщенияПользователю - реквизит формы Процедура на сервере будет писать в форму на клиенте? | |
16
- 05.06.2014 - 06:54
| пиши в лог, после закрытия документа выводи форму лога с отбором. примерно как при обмене с сайтом. еще можно сообщение пользователю прислать, в почтовый клиент или в список заданий. с уведомлением начальника. | |
17
- 05.06.2014 - 09:20
| 15-VZ > форма доступна и на клиенте, и на сервере, ее реквизиты тоже | |
18
- 05.06.2014 - 10:00
|
16-Управление торговлей 11 > Не конкретность ищу. Неясна схема: как поймать на клиенте событие, что документ записался? Форма об этом сообщает серверной процедуре, из которой ничего клиенту не возвращается. И вызвать клиентскую процедуру нельзя. Вот если я нажимаю не "Провести и закрыть", а "Записать" (кнопа с картинкой дискеты), то форма остается открытой, и панель сообщений на месте. Но это не нужное усложнение для работы. А без этого форма закрывается, закрывая автоматически панель сообщений. Даже этого не предотвратить. Ищу метод активизировать клиента. Фоновый процесс на клиенте замутить, который что-то будет опрашивать? Если в БД не лезет, то и тормозить не будет. А вот как - не ведаю. Сервер о клиенте ведает, иначе как бы те же сообщения выкладывал, или всплывающие окна заставлял формироваться. Вот токо даже клиентскую обормотку из сервера не вызвать :( | |
19
- 05.06.2014 - 10:10
| 18-VZ > чем (12) не устраивает? | |
20
- 05.06.2014 - 11:03
| (18) я слушаю | |
21
- 05.06.2014 - 12:28
|
19-Uho > В саму форму лезть неохота. Хлопотно больно эти УФ разглядывать. Хотя, конечно, можно строку неопределенной длины пихнуть (длина=0), и видно ее в ПослеЗаписиНаСервере... Прикину :) Хочется компактности... | |
22
- 05.06.2014 - 12:43
|
в ПослеЗаписиНаСервере сообщение выведется в форму (которая закроется при ПровестиИЗакрыть), а в ПриЗакрытии - выведется в главное окно. ЗЫ. а еще можно попробовать идентификатор главного окна получить и вывести сообщения туда насильно. | |
23
- 05.06.2014 - 13:29
| VZ приручает восьмерку | |
24
- 05.06.2014 - 13:30
| подманивает ее морковкой | |
25
- 05.06.2014 - 14:22
| 24-Helen1986 > Зависть к ближнему способствует худобе ;) | |
26
- 05.06.2014 - 15:31
| 22-Uho >С идентификатором, кстати, не прокатит, если включен режим вкладок - все равно при "провести и закрыть" сообщения закроются. | |
27
- 05.06.2014 - 15:56
|
26-Sneer > Ну, именно к моей задаче это не относится: сообщения не из тех, что препятствуют проведению - я не зря запсочил самоделщину в ПослеЗаписи. Потому нужна была лишь информация о правленом доп.реквизите (конкретно: вес единицы измерения в кГ). И вовсе не вся номенклатура под это дело попадает: с "весовой" ЕИ, разумеется, нет, бессмыслица. И только то, что производится. Исключая услуги ;) Доп.рекизит не учетный, это больше отчетный для собственных нужд. Ну, и ТТН легче формировать: там среди реквизитов "вес" есть. А сообщения довольно куцые по длине, в них наименованиям товара тесно. Пойдет лучше одно пошире, но со всеми нужными строками, чем узкое из отдельных фрагментов. | |
28
- 05.06.2014 - 16:22
| А зачем вообще нужны эти сообщения? если предполагаются какие-то действия, так надо к ним переходить. Если нет - то и сообщать не надо. | |
29
- 05.06.2014 - 17:17
|
28-Управление торговлей 11 > Ну, хотя бы для того, чтобы вопросы снимать "А почему...?" - "А потому, что перед этим ввела в приходе столько-то штук на столько-то тонн. И это запомнилось как характеристика. Нет, я не знаю, как это поправить: почему одно и тоже в пятницу легче, а в понедельник тяжелее. Разбирайтесь сами." Контроль косвенный ;) Кстати, сами хотели сей механизм. А я предупреждал: "Бойтесь желаний..." :) | |
30
- 05.06.2014 - 18:02
| 28-Управление торговлей 11 >еще раз предложу логи, форму с отбором и бизнес-процесс "Задание" | |
31
- 05.06.2014 - 19:46
|
0-VZ > ИМХО "красиво", без модификации формы объекта, инициирующего транзакцию сделать не получится. Доработки: 1. Добавить на клиенте кэш для хранения времени начала транзакций. Либо экспортной переменной модуля приложения, либо используя кэш типового решения. 2. При создании "сопуствующих объектов" записывать информацию о них в историю работы пользователя. 3. В модуле управляемого приложения сделать экспортную процедуру - анализатор истории. Например так: Код: Перем ВремяЗапускаТранзакции Экспорт; &НаКлиенте Процедура Подключаемый_ПроверкаИстории() Экспорт Если Не ВремяЗапускаТранзакции = Неопределено Тогда ИсторияРаботы = ИсторияРаботыПользователя.Получить(); СчетчикЭлементов = 0; Для Каждого ЭлементИстории Из ИсторияРаботы Цикл Если ЭлементИстории.Дата >= ВремяЗапускаТранзакции Тогда СчетчикЭлементов = СчетчикЭлементов + 1; КонецЕсли; КонецЦикла; Если СчетчикЭлементов > 1 Тогда ПоказатьОповещениеПользователя("При записи объекта были записаны дополнительные элементы НСИ",, "подробности можно увидеть в истории работы пользователя"); КонецЕсли; КонецЕсли; КонецПроцедуры // Подключаемый_ПроверкаИстории() &НаКлиенте Процедура ПодключитьОбработчикИстории() Экспорт ВремяЗапускаТранзакции = ТекущаяДата(); ПодключитьОбработчикОжидания("Подключаемый_ПроверкаИстории", 0.1, Истина); КонецПроцедуры // ПодключитьОбработчикИстории() Код: ПодключитьОбработчикИстории(); | |
32
- 05.06.2014 - 21:25
|
31-Reaper > Излишне сложно. Сойдет и параметр формы в качестве переменной, видимой всеми процедурами. И к чему нам история? Нам истории никчему: вводя количество, по введенному/сохраненному ранее значению формируется вес на указанное количество. Если введенного/запомненного нет, то юзер, взглянув в бумажку, пишет общий вес самостоятельно. После записи (и возможно, проведения, вся табличная часть отправляется на обработку: если "весового коэффициента" не было до того, он формируется из известных значений. Если он другой, то и пишется другой (допустим лаг "ну, почти тоже самое значение"). Собственно, зачем здесь история? Есть история документа, есть история движений в учетных единицах, этого - достаточно. Сообщения же, так, больше для порядка, чтоб юзер совсем уж себя сиротой не чувствовал ;) Да и знать будет, где что искать, если потребуется. Захотят строгий учет - будет. Оне сами этого не ведают. Да и общий отчет по этому делу "за период" уже, собственно, готов. А эти отчеты бережно сохраняются в твердой копии. | |
33
- 05.06.2014 - 22:34
| 32-VZ >С точки зрения методики разработки УФ использование истории считается правильным решением. А я контекста ведь не знал, вот и озвучил "правильное". | |
34
- 05.06.2014 - 22:45
|
33-Reaper > Да контекс-то так себе, ничего интересного :) Только пришлось занудливо прошарить все связки, чтоб понять реализацию в деталях. Описания же нет, как обычно. К полному разочарованию, ничего из БСП вообще задействовать не удалось. | |
35
- 06.06.2014 - 00:10
| 34-VZ > БСП это отдельная трагикомедия... В наших с ней взаимоотношениях я пока веду в счете, но расслабиться она не дает. | |
| Интернет-форум Краснодарского края и Краснодара |