|
Что за барабашка - как будто контекстный вызов сервера, хотя на другой машине работает | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
03.04.20
✎
14:52
|
Win 10
1С:Предприятие 8.3 (8.3.15.1565) писал и отлаживал есть вызов процедуры НаСервереБезКонтекста через обработчик ожидания все работало (и работает) как надо - текст редактирования не обновляется ... работает в продакшене, уже вот как месяц/два - работают порядка 10 пользователей но вот появилось новое рабочее место - и форма начала вести так как будто вызов сервера контекстный - при выходе из подписаной процедуры текст редактирования обнуляется фишка в том, что нашли вторую машину на которой это воспроизводится - у нач отдела АСУ у меня работа как надо что это может быть? |
|||
1
RomaH
naïve
03.04.20
✎
14:53
|
&НаКлиенте
Процедура ПолучитьСписокПоследнихФайлов() Попытка Shell = Новый COMОбъект("WScript.Shell"); ПутьДоЯрлыков = Shell.ExpandEnvironmentStrings("%AppData%\Microsoft\Office\Последние файлы"); //ПутьДоЯрлыков = "\\a276\c$\Users\d.belyaev\AppData\Roaming\Microsoft\Office\Последние файлы"; ПоследниеФайлы = НайтиФайлы(ПутьДоЯрлыков,"*.lnk"); МассивФайлов = Новый Массив; Для Каждого Ярлык Из ПоследниеФайлы Цикл ЯрлыкОбъект = Shell.CreateShortcut(Ярлык.ПолноеИмя); ПутьДоОбъекта = ЯрлыкОбъект.TargetPath; Если СтрНайти(ПутьДоОбъекта,"\AppData\") Тогда //Убираем файлы открытые через 1С Продолжить; КонецЕсли; РасширениеФайла = Сред(ПутьДоОбъекта,СтрНайти(ПутьДоОбъекта,".",НаправлениеПоиска.СКонца) + 1); Если Не (РасширениеФайла = "doc" ИЛИ РасширениеФайла = "docx" ИЛИ РасширениеФайла = "rtf") Тогда Продолжить; КонецЕсли; ФайлОбъект = Новый Файл(ПутьДоОбъекта); Если СтрНайти(ПутьДоОбъекта,"$") Тогда //Убираем файлы открытые по сети Продолжить; КонецЕсли; Если НЕ ФайлОбъект.Существует() Тогда Продолжить; КонецЕсли; //Структура = Новый Структура("ИмяЯрлыка,ПолноеИмяЯрлыка,ДатаЯрлыка,ПутьДоОбъекта" // ,Ярлык.ИмяБезРасширения,Ярлык.ПолноеИмя,ФайлОбъект.ПолучитьВремяИзменения(),ПутьДоОбъекта); Структура = Новый Структура("ИмяЯрлыка,ПолноеИмяЯрлыка,ДатаЯрлыка,ПутьДоОбъекта" ,Ярлык.ИмяБезРасширения,Ярлык.ПолноеИмя,Ярлык.ПолучитьВремяИзменения(),ПутьДоОбъекта); МассивФайлов.Добавить(Структура); КонецЦикла; //Получили массив структур МассивСпискаФайлов = Новый Массив; ПолучитьСписокПоследнихФайловНаСервере(МассивФайлов,МассивСпискаФайлов);//Вызов сервера Для КоличествоФайловОфис = 0 По МассивСпискаФайлов.ВГраница() Цикл //Если КоличествоФайловОфис > 10 Тогда // Прервать; //КонецЕсли; СтрокаТЗ = МассивСпискаФайлов[КоличествоФайловОфис]; СтрокаСписка = СписокФайлов.НайтиПоЗначению(СтрокаТЗ.ПутьДоОбъекта); Если СтрокаСписка = Неопределено Тогда Если СписокФайлов.Количество() Тогда СписокФайлов.Вставить(Мин(КоличествоФайловОфис,СписокФайлов.Количество()),СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка,,БиблиотекаКартинок.ФорматWord); Иначе СписокФайлов.Добавить(СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка,,БиблиотекаКартинок.ФорматWord); КонецЕсли; Если СписокФайлов.Количество() > 10 Тогда СписокФайлов.Удалить(10); КонецЕсли; КонецЕсли; КонецЦикла; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ПодключитьОбработчикОжидания("ПолучитьСписокПоследнихФайлов",3,Истина); КонецПроцедуры |
|||
2
RomaH
naïve
03.04.20
✎
15:07
|
&НаСервереБезКонтекста
Процедура ПолучитьСписокПоследнихФайловНаСервере(Знач МассивФайлов,СписокФайлов) Процедура ПолучитьСписокПоследнихФайловНаСервере(Знач МассивФайлов,Знач СписокФайлов) //Если так - то не обнуляет текст редактирования ПоследниеОткрытыеФайлы = Новый ТаблицаЗначений; ПоследниеОткрытыеФайлы.Колонки.Добавить("ИмяЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ПолноеИмяЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ДатаЯрлыка"); ПоследниеОткрытыеФайлы.Колонки.Добавить("ПутьДоОбъекта"); Для Каждого Ярлык Из МассивФайлов Цикл СтрокаТЗ = ПоследниеОткрытыеФайлы.Добавить(); СтрокаТЗ.ИмяЯрлыка = Ярлык.ИмяЯрлыка; СтрокаТЗ.ПолноеИмяЯрлыка = Ярлык.ПолноеИмяЯрлыка; СтрокаТЗ.ДатаЯрлыка = Ярлык.ДатаЯрлыка; СтрокаТЗ.ПутьДоОбъекта = Ярлык.ПутьДоОбъекта; КонецЦикла; ПоследниеОткрытыеФайлы.Сортировать("ДатаЯрлыка УБЫВ"); //СписокФайлов = Новый Массив; Для КоличествоФайловОфис = 0 По ПоследниеОткрытыеФайлы.Количество() - 1 Цикл Если КоличествоФайловОфис > 10 Тогда Прервать; КонецЕсли; СтрокаТЗ = ПоследниеОткрытыеФайлы[КоличествоФайловОфис]; Структура = Новый Структура("ПутьДоОбъекта,ИмяЯрлыка",СтрокаТЗ.ПутьДоОбъекта,СтрокаТЗ.ИмяЯрлыка); СписокФайлов.Добавить(Структура); КонецЦикла; //Получили массив стурктур с последними по дате открытыми файлами КонецПроцедуры |
|||
3
RomaH
naïve
03.04.20
✎
15:08
|
проблема в том, что если здесь я могу все на клиенте сделать,
но есть формы где аналогично прикручен обработчик ожидания с без контекстным вызовом сервера ... и когда там это сломается, и как чинить ... вопрос проверил 16 платформу - воспроизводится |
|||
4
Cyberhawk
03.04.20
✎
15:20
|
Так может ты внутрь передаешь реквизит формы и меняешь его, по возвращению он обновляется и вызывает неявный контекстный вызов сервера.
Что такое СписокФайлов? |
|||
5
RomaH
naïve
03.04.20
✎
15:20
|
единственное что объединяет компы в группы - на эти два винда была поставлена совсем недавно - неделя/две
я обновился с 7 на 10 - месяц назад - и все ок как и у остальных с еще более старой утановкой |
|||
6
RomaH
naïve
03.04.20
✎
15:21
|
(4) списокФайлов - это список значений
фишка в том, что контекст "передается" только на ДВУХ компах из ДВЕНАДЦАТИ на остальных 10 - работает ка и ожидалось - без контекста |
|||
7
Cyberhawk
03.04.20
✎
15:23
|
(6) Готовь минимально объемный и максимально простой способ воспроизведения
|
|||
8
RomaH
naïve
03.04.20
✎
15:23
|
(4) это реквизит формы и он меняется ... почему он должен вызывать неявный вызов сервера?
|
|||
9
RomaH
naïve
03.04.20
✎
15:24
|
(7) зачем?
|
|||
10
rphosts
03.04.20
✎
15:25
|
Эээээ, кэш чистили?
|
|||
11
RomaH
naïve
03.04.20
✎
15:26
|
(10) да
|
|||
12
rphosts
03.04.20
✎
15:26
|
(9) видимо чел хочет сам увидеть
|
|||
13
rphosts
03.04.20
✎
15:26
|
(11) и на сервере и на клиенте?
|
|||
14
RomaH
naïve
03.04.20
✎
15:26
|
(10) проблемный комп - совсем новое рабочее место - новое железо, новая ОС
|
|||
15
RomaH
naïve
03.04.20
✎
15:26
|
(13) на сервере - нет, .... как на сервере почистить?
|
|||
16
Cyberhawk
03.04.20
✎
15:27
|
А, у тебя толстый клиент что ли. Ну тогда забей.
|
|||
17
RomaH
naïve
03.04.20
✎
15:27
|
но сервера два - воспроизводится как на рабочем, так и на разработке
|
|||
18
RomaH
naïve
03.04.20
✎
15:27
|
(16) с чего ты это взял?
|
|||
19
rphosts
03.04.20
✎
15:27
|
||||
20
palsergeich
03.04.20
✎
15:28
|
(14) В каком событии это происходит?
У меня была похожая хрень. Лечится или Знач, или на клиент возвращаешь список значений и меняешь его там. Очень не любит 1с, когда реквизиты формы меняются по ссылке в входных параметрах. |
|||
21
palsergeich
03.04.20
✎
15:30
|
(20) Причем штука бородатая.
Посмотри описание обработчика, из которого все происходит - если там написано запрещены серверные вызовы, то изменение реквизитов формы во внеконтекстных вызовыах ведет к куче багов. |
|||
22
RomaH
naïve
03.04.20
✎
15:33
|
https://yadi.sk/d/TxCqAY2RcV_KLQ
обработка |
|||
23
RomaH
naïve
03.04.20
✎
15:34
|
в поле ввода вводим "1" - и ждем 3 секунды - пропало?
у меня не пропадает, а у соседа - пропадает |
|||
24
RomaH
naïve
03.04.20
✎
15:35
|
||||
25
palsergeich
03.04.20
✎
15:39
|
(23) Тут что то другое, такого я еще не видел, я видел схожее поведение в других ситуациях, и рецепт 1 - не менять Списокзначений, который пеквизит формы через параметр процедуры, а делать возврат и менять его в том контексте, откуда шел вызов.
Багля знакомая, но именно в обработчике ожидания я ее не ловил |
|||
26
palsergeich
03.04.20
✎
15:40
|
(25) Там что то внутри механизма синхронизации ломается и он считает, что реквизит значительно изменилсяи надо сделать контекстный вызов.
|
|||
27
RomaH
naïve
03.04.20
✎
15:41
|
(25) еще раз - тут переписать я смогу и пользователи подождут
у меня есть более нагруженные интерфейсы где применяется сходная технология - если там сломается ... надо выяснить сейчас что это и почему |
|||
28
palsergeich
03.04.20
✎
15:43
|
(27) Только Вендор может сказать точно
|
|||
29
RomaH
naïve
03.04.20
✎
15:43
|
(10) б... сбросил серверный кэш (удалением базы) ... теперь и у меня воспроизводится
|
|||
30
RomaH
naïve
03.04.20
✎
15:45
|
+(29) а обработка работает "как надо" ... чем дальше в лес тем толще партизаны
|
|||
31
Cyberhawk
03.04.20
✎
15:58
|
(9) Затем, чтоб тебе рассказать, что у тебя по два вызова, а не по одному за каждый такт
|
|||
32
RomaH
naïve
03.04.20
✎
15:59
|
(31)??
|
|||
33
RomaH
naïve
03.04.20
✎
16:00
|
||||
34
RomaH
naïve
03.04.20
✎
16:03
|
(31) вызова чего?
|
|||
35
Cyberhawk
03.04.20
✎
16:05
|
(32) (34) Даже три. И, видимо, только про один из них надежно можно говорить, что он безконтекстный - это твой метод.
Остальные два: создание СОМ-объекта и обращение к библиотеке картинок. Такие дела. |
|||
36
Cyberhawk
03.04.20
✎
16:06
|
+(35) Это в файловой. Щас к-с проверим.
|
|||
37
Cyberhawk
03.04.20
✎
16:11
|
+(36) А не, не проверим. Давай сам короче.
|
|||
38
RomaH
naïve
03.04.20
✎
16:28
|
(35) см (2)
если не возвращаем СЗ - то вызовов сервера больше нет ... так что не надо ля-ля |
|||
39
Сергиус
03.04.20
✎
17:30
|
(0)Почему надо передавать именно реквизит формы, а не просто СписокЗначений?
|
|||
40
RomaH
naïve
04.04.20
✎
07:59
|
(39) потому-что вопрос в другом - разное поведение
|
|||
41
RomaH
naïve
04.04.20
✎
08:05
|
(39) да не пе5редается на сервер ни один из реквизитов
МассивФайлов = Новый Массив; .... МассивСпискаФайлов = Новый Массив; ПолучитьСписокПоследнихФайловНаСервере(МассивФайлов, МассивСпискаФайлов); |
|||
42
RomaH
naïve
04.04.20
✎
08:32
|
Все нормально - по коду так и должно быть
когда изменяется список значений выведенный на форму - происходит обновление текста редактирования на форме - всегда фишка в том, что список должен был меняться только тогда когда пользователь не работал с формой - только при сохранении вородового документа а тут - получи, фашист, гранату https://dl.dropboxusercontent.com/s/xl9mnu9yehz9i1c/2020-04-04_08h28_10.png?dl=0 таким образом Для КоличествоФайловОфис = 0 По МассивСпискаФайлов.ВГраница() Цикл СтрокаТЗ = МассивСпискаФайлов[КоличествоФайловОфис]; СтрокаСписка = СписокФайлов.НайтиПоЗначению(СтрокаТЗ.ПутьДоОбъекта);//Тут искал то чего небыло Если СтрокаСписка = Неопределено Тогда весь список был заполнен пустой датой, и постоянно обновлялся посредством "Вставить" что не было заметно глазу на форме вот такая вот непонятность ... сейчас уже не вспомню какой тип задавал - строку или произвольный, но точно не дату и в рабочей базе получается у одних пользователей там строка - у других "дата", ох уж это демоническое обновление, но без него будет скучно и одиноко |
|||
43
RomaH
naïve
07.04.20
✎
09:16
|
если на тесте все нормально заработало (я добился воспроизведения у себя сбросом кеша сервера (пересоздал базу))
то на рабочей воспроизвести у себя не могу базу пересоздал, локальный кеш сбросил у меня не воспроизводится - у пользователя так и видит дату в типе значения списка реквизит формы пересоздал что еще сделать? |
|||
44
RomaH
naïve
07.04.20
✎
09:17
|
ну в смысле на тестовой воспроизвел и исправил
а на рабочей у себя не воспроизвел, и исправить там где воспроизводится - не получилось |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |