Имя: Пароль:
1C
1С v8
перенос строк в поле ввода
0 vadymdymdym
 
08.01.18
13:35
Всем бобра. С праздниками прошедшими и еще не наступившими всех. Смотрите какая интересная проблема. Имеем управляемую форму и элемент ПолеФормы на ней с видом ПолеТекстовогоДокумента. Когда набираю длинный текст, он не переносится на следующую строку, а очень хотелось бы, чтобы переносилось. Конечно, сейчас найдутся хейтеры, которые скажут, а на фейхоа тебе сдалось поле текстового документа, если можно тупо использовать ПолеВвода, поставить там МногострочныйРежим=Истина, РасширенноеРедактирование=Истина и будет тебе великое счастье. Так-то оно так, дамы и господа, но есть небольшая проблемка. Дело в том, что у меня на форме каждые 10 секунд срабатывает процедура обработчика ожидания, которая ломится на сервер. Я все сделал для того, чтобы она ломилась без контекста, но это не помогает. Дело в том, что при возращении оттуда весь текст в поле ввода оказывается стертым. Т.е. писал, писал человек и на тебе. Чтобы он не был стерт, необходимо в течение 10 секунд успевать "сохраняться" (сходить с поля ввода), только тогда переменная, которая связана с полем ввода примет значение, которое там записано. Так вот, мне необходимо либо как-то умудриться реализовать перенос в первом случае, либо что-то сделать с текстом во-втором. Есть какие-нибудь идейки?))
1 Волшебник
 
модератор
08.01.18
13:40
Не надо ломиться на сервер каждые 10 минут
2 jsmith82
 
08.01.18
13:41
А форматированный документ?
3 Гипервизор
 
08.01.18
13:41
Что делает обработчик ожидания?
4 vadymdymdym
 
08.01.18
13:44
(1) Не 10 минут, а 10 секунд)). Спасибо, конечно, но... не могу не ломиться. Надо))
(2) На форматированном документе проблем нет, совершенно верно, но... мне надо, чтобы документ не форматировался)). Тем более, что на форме и так уже есть форматированный документ и человек выбирает между форматированным и неформатированным. Такие дела))
(3) Обработчик ожидания смотрит, не изменилось ли состояние базы и если что-то изменилось, отображает это изменение на форме. Так сказать, имитация в режиме реального времени)))
5 vadymdymdym
 
08.01.18
13:48
Я вот уже начинаю думать, а может jsmith82 прав? Может мне действительно вместо текстового документа сделать форматированный, только кнопки форматирования убрать?... Интересная идейка, между прочим. Подумаю)
6 Гипервизор
 
08.01.18
13:50
(5) Все равно. Или я чего-то не догоняю и дьявол в деталях, или вся ваша концепция не верна.
7 patya
 
08.01.18
13:52
(0) > Я все сделал для того, чтобы она ломилась без контекста

https://otvet.imgsmail.ru/download/c914757572c87a649e63cb92d49b45ae_i-75.jpg
8 vadymdymdym
 
08.01.18
13:53
(6) Не совсем понял, что Вам непонятно?))
9 vadymdymdym
 
08.01.18
13:54
(7) Я имею в виду, что использую директиву &НаСервереБезКонтекста :)
10 Гипервизор
 
08.01.18
13:57
(8) Для чего это вообще все реализовано именно так? У вас состязание между пользователем и обработчиком. Быстрее наберет текст юзер или с сервера придет инфа, что реквизит еще пустой? Потому мне такая реализация непонятна.
11 patya
 
08.01.18
14:00
(9) Где?
12 vadymdymdym
 
08.01.18
14:00
(10)Да нет. Пользователь вводит текст и записывает изменения в базу. Одновременно и другие пользователи могут делать то же самое. Этот обработчик ожидания просто информирует пользователя, не записали ли подобным образом другие пользователи что-то в базу
13 vadymdymdym
 
08.01.18
14:01
(11) В процедуре, которая запускается из процедуры обработчика ожидания
14 Мимохожий Однако
 
08.01.18
14:02
"Смотрите какая интересная проблема".Не стой на своём. Это больно. ИМХО. Сам себе проблему создал обработчиком ожидания.
15 patya
 
08.01.18
14:02
(13) Показывай
16 vadymdymdym
 
08.01.18
14:03
(14) Больно. согласен с Вами)) Жизнь - боль
17 vadymdymdym
 
08.01.18
14:03
(15) Что вам конкретно показать?
18 patya
 
08.01.18
14:04
(17) Обработчик ожидания и сигнатуры того что он вызыаает
19 vadymdymdym
 
08.01.18
14:05
(18) Я не могу понять, Вам код прислать? Или обработку целиком? Извините, код не пришлю. Выглядит это так:
20 vadymdymdym
 
08.01.18
14:06
&НаКлиенте
Процедура НазваниеПроцедурыОбработкиОжидания()
    НазваниеПроцедурыНаСервере()
КонецПроцедуры

&НаСервереБезКонтекста
Процедура НазваниеПроцедурыНаСервере()
    //код процедуры
КонецПроцедуры
21 Гипервизор
 
08.01.18
14:06
Мда.. А в 1С-то не знают, что обрабатывать попытку записи изменений несколькими пользователями в один и тот же объект надо с помощью обработчиков ожидания..
22 vadymdymdym
 
08.01.18
14:08
(21) Что предлагаете?
23 patya
 
08.01.18
14:09
(19) > Извините, код не пришлю
Успехов тебе, счастья в новом году и много-много закрывающих скобочек
24 vadymdymdym
 
08.01.18
14:11
(23)Спасибо. Вас тем же концом по тому же месту))
25 vadymdymdym
 
08.01.18
14:17
(21)Может Вы не поняли меня. Запись не происходит в один и тот же объект. Запись происходит в один и тот же регистр сведений. Реализацию с динамическим списком не предлагать. Слишком мудреный список получается. Во-первых, в таблице значений на форме есть поля, которые не отобразить в динамическом списке из-за проблемности их получения (Например, в одном и том же поле в таблице у меня строка и в скобках дата. Тут запросом сконкатенировать большая проблема). Во-вторых, мне нужно не все данные а только лишь некоторые последние (т.е. в запросе дин. списка нужно сделать что-то типа Упорядочить По и Выбрать Первые), в третьих, содержимое этого списка меняется в зависимости от того, куда щелкнет пользователь, т.е. мне нужно программно реализовать отборы по щелчку или установку параметров. По факту отображается от 4 до 10 записей регистра. Ради них делать динамический список?
26 Гипервизор
 
08.01.18
14:26
(25) И не понял, и продолжаю не понимать. Платформенная реализация уникальности записей регистра сведений чем вас не устраивает?
27 vadymdymdym
 
08.01.18
14:31
(26)Записи и так уникальны. Мне нужно в реальном времени отображать изменения в регистре сведений, которые сделали пользователи. Т.е. по сути мне надо, грубо говоря, динамический список регистра сведений с автообновлением каждые 10 секунд. Т.е. чтобы пользователь видел с этим интервалом не изменилось ли состояние регистра. Только я не пошел по пути динамического списка, а пошел по пути таблицы значений, которая красиво отформатирована и раскрашена, потому что мне не нужен весь регистр, а нужны только несколько последних записей)). И поэтому я использую обработчик ожидания, чтобы обновить таблицу на форме. Вот в чем дело))
28 Волшебник
 
модератор
08.01.18
14:39
(4) Если надо, то ССЗБ (сам себе злобный Буратино)
29 Волшебник
 
модератор
08.01.18
14:40
(27) Добавь уже кнопку "обновить". Пусть юзеры её жмут, когда ИМ надо.
30 vadymdymdym
 
08.01.18
14:50
(28) Согласен. Сам себе создал проблему, сам себе злобный Буратиборг))
(29) Тоже, кстати, интересный вариант. Однако, сам смысл обработки как раз и заключается в том, чтобы они постоянно не жмакали никуда, а чтобы они подождали... и у них выскочило. Ибо таково было ТЗ. А если обработка закрыта, то им еще и оповещалка приходила, шо дескать откройте обработку. Тама вас сюрприз ждет)). Кроме того, если кто-то из пользователей уже что-то пытается набрать в этом текстовом поле, то у других пользователей в обработке меняется шрифт, текст в таблице и еще сообщается, что вот такой-то вот пользователь что-то набирает. Будьте внимательны. Сейчас появится))

Я вот уже думаю, может правда заморочиться с дин. списком уже. Очень муторно будет, но можно попробовать, если толк будет.

Итого сегодня мне предложили 3 варианта:
1. Самый простой - кнопка Обновить
2. Форматированный документ. Чуть посложнее
3. Самый сложный, но наверное, самый красивый. Динамический список. Правда он будет со сложным запросом, несколькими параметрами и/или отбором

Что ж, всем спасибо. Если есть еще идеи - отписывайтесь
31 DrZombi
 
гуру
08.01.18
14:50
(29) Интересная идея.
В момент редактирования отключать обработчик ожидания,
по окончанию редактирования замерять время прошедшее между началом и концом редактирования, и если все ОК то запускать обработчик ожидания, при этом обработать обработчик "вручную" (вызвать насильно)
И так по кругу, пользователь что-то пишет, форма периодически обновляется.
Проблема только настает, когда пользователь слишком долго пишет :)
32 vadymdymdym
 
08.01.18
14:51
(31) Спасибо огромное. Я об этом думал. Но вы вот сами ответили на вопрос. Проблема, если пользователь слишком долго пишет)). Мне эта мысль в голову тоже приходила)
33 Волшебник
 
модератор
08.01.18
14:52
(32) Переложите проблемы пользователей на них самих.
34 DrZombi
 
гуру
08.01.18
14:52
(32) Пользователь не будет слишком долго писать, если его обучить к работе с тонким клиентом.
Научится выходить из режима редактирования.
35 vadymdymdym
 
08.01.18
14:56
(33) Как вариант можно))
(34) Будет. Они любят это дело)). Поле многострочное. Более того, у них есть выбор, писать в текстовом поле или в форматированном документе, где они вообще зависнут надолго))

Итак, четвертая идея - отключать обработчик ожидания в момент активизации поля ввода))
36 Волшебник
 
модератор
08.01.18
15:06
(35) Совсем его отключи и будет тебе щастье
37 Волшебник
 
модератор
08.01.18
15:07
— Доктор, когда я делаю вот так, мне больно.
— Не делайте так...
38 vadymdymdym
 
08.01.18
15:09
(36) Я понял Вас. Вы это уже предлагали в (1). Ну... совсем отключить... нежелательно бы. Мне тогда надо что-то заказчику в альтернативу предложить, ибо задание было такое, чтоб... в реальном времени все было. Вот кнопка "Обновить" - в-принципе, неплохая альтернатива. Достаточно аргументированная. Если заказчик согласиться - можно будет последовать Вашему совету
39 vadymdymdym
 
08.01.18
15:11
согласится*. Совсем с русским языком проблемы начались
40 Волшебник
 
модератор
08.01.18
15:35
(39) Вместо дефиса ещё нужна запятая. Не парься на тему русского языка. У тебя с 1С проблемы.
41 vadymdymdym
 
08.01.18
15:44
(40) Ну тут спорный вопрос. Я там не дефис, а тире вставлял. Обновить - альтернатива. При таком формате, подлежащее - сказуемое ставится тире, насколько я помню. Хотя... действительно неважно. Что у меня с 1С-то не так?). Я ж не виноват, что заказчик так требует). 1С вообще не предназначена для того, что он просит, если вдуматься. Но... выкручиваться как-то надо)). Вот и пришлось извращаться))
42 Волшебник
 
модератор
08.01.18
16:03
(41) Ты виноват, что не объяснил заказчику цену и последствия его решения.
43 vadymdymdym
 
08.01.18
16:06
(42) Тут не поспоришь(((
44 Волшебник
 
модератор
08.01.18
16:07
(43) Покайся и будет тебе щастье! Отключи обработчик ожидания! Сделай добро людям!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн