|
v7: Ложное срабатываение ПриУдаленииСтроки() | ☑ | ||
---|---|---|---|---|
0
фобка
15.09.11
✎
09:18
|
Всем привет.
Самописная конфигурация, иногда (систематику события определить не удалость) при открытии документа срабатывает процедура "ПриУдаленииСтроки()" и "ПриДобавленииСтроки()". Обнаружил, потому что в процедурах стоит запрет на эти действия и выводятся диалоги. На тестовой конфигурации отключил запрет, при возникновении такой ситуации строки не удаляются и не добавляются, т.е. процедуры вызываются просто так (?). И так в любом другом документе этого вида, после возникновении ошибки, пока не перезапускаю программу. Что это может быть? ПриОткрытии почти ничего не вызывается Заранее спасибо |
|||
1
Vladal
15.09.11
✎
09:20
|
Поставь точку останова в этих процедурах.
Когда остановится, посмотри стек вызовов. |
|||
2
Рэйв
15.09.11
✎
09:20
|
Это барабашка.
|
|||
3
andrewks
15.09.11
✎
09:37
|
какой релиз платформы? какие ВК используются?
|
|||
4
фобка
15.09.11
✎
09:40
|
(3) 27. 1с++, formex при начале работы системы
+(0) с формы вызывается несколько процедур (простой расчет), поэтому "удаление строк" производится несколько раз (1) ок попробую, но замер ничего не показал |
|||
5
Vladal
15.09.11
✎
09:47
|
(4) Замер и не нужен. Ставь точку останова на предупреждении и гляди там.
Хотя, часом не формекс балуется? Прогляди-ка все обработчики и те, что на форме лежат. Мож что и наковыраешь. Ишо проверь какие скрипты кнопконажимательные в винде запускаются. Мож там собака. |
|||
6
Aprobator
15.09.11
✎
09:49
|
хм - а просмотр стека вызовов не помогает?
|
|||
7
andrewks
15.09.11
✎
09:50
|
какие версии 1с++, formex ?
попробуй без них - сабж исчезнет, или нет |
|||
8
Vladal
15.09.11
✎
09:53
|
Ложное срабатывание. Ложная поганка, ложные лисички.
|
|||
9
фобка
15.09.11
✎
09:55
|
к сожалению, сабж не так просто отловить, сегодня утром наблюдал (предыдущие пару недель тоже) сейчас устал открывать документы - пока не возникает..
скриптов нет, в документах компоненты не используются, загружены только при начале работы системы.. 1с++ 3.2.2.0, формекс 2.0.5.101 b |
|||
10
andrewks
15.09.11
✎
09:57
|
(9)обнови 1c++, для начала
или наоборот, откатись на предыдущую версию, например, 2.5.0.7 |
|||
11
фобка
15.09.11
✎
10:00
|
(8) думаешь я шучу чтоли? :)
|
|||
12
Aprobator
15.09.11
✎
10:02
|
мож документ прописан так, что при открытии документа меняются его реквизиты (не один раз на такой го...нокод натыкался уже)?
|
|||
13
andrewks
15.09.11
✎
10:03
|
(12) а при чём здесь сабжевые предопределённые процедуры?
тут явно ВК лезет |
|||
14
фобка
15.09.11
✎
10:05
|
Procedure OnOpen()
Форма.ИспользоватьЗакладки(1); Форма.Закладки.ДобавитьЗначение("Перевозка"); Форма.Закладки.ДобавитьЗначение("Слежение"); Форма.Закладки.ДобавитьЗначение("История"); Форма.ИспользоватьСлой("Общий,Основной,ТЧ_КомментДок,UseLayer,КнопкиИНомер",2); If (UserInterfaceName() ="Экономист") Or (UserInterfaceName() = "Администраторский") Or (UserInterfaceName() ="ОперационныйДиректор") Then Fl = 1; Форма.Закладки.ДобавитьЗначение("Ставки"); Else Fl = 0; EndIf; Form.ЗакСтавка.Visible(Fl); Form.ПродСтавка.Visible(Fl); Form.Маржа.Visible(Fl); Form.КомментарийПоТТН.Visible(1-Fl); Form.КомментарийПоАкту.Visible(1-Fl); ПроМаршрутСказали = 0; ПроМаршрутСказалиЗакупка = 0; Тихо = 1; If (UserInterfaceName() = "Экономист") Or (UserInterfaceName() = "Администраторский") Then Тихо = 0; EndIf; If Перевозчик <> pGefcoSPb Then If (Перевозчик <> ДокОснование.Перевозчик) Or (Водитель <> ДокОснование.Водитель) Or (Тягач <> ДокОснование.Тягач) Then If DoQueryBox("Данные о перевозчике/автовозе в документе и в Лоте различаются. Обновить информацию из Лота?",4) = 6 Then Водитель = ДокОснование.Водитель; Тягач = ДокОснование.Тягач; Прицеп = ДокОснование.Прицеп; Перевозчик = ДокОснование.Перевозчик; EndIf; EndIf; EndIf; Если Маршрут.ТипМаршрута = Перечисление.ТипыМаршрутов.Международный Тогда Форма.ДатаРастаможки.Доступность(1); Иначе Форма.ДатаРастаможки.Доступность(0); КонецЕсли; oRef = CreateObject("Reference.Фирмы"); oRef.FindByCode("00001"); Заказчик = oRef.CurrentItem(); pMark = Клиент.Маркетинг; Если ПустоеЗначение(КомментарийМестонахождения)=0 Тогда ТЧСлежения.Загрузить(ЗначениеИзСтрокиВнутр(КомментарийМестонахождения)); КонецЕсли; //Автоматическая доставка Если ТипЗначенияСтр(Форма.Параметр) = "Дата" Тогда Если Форма.Параметр >= DocDate Тогда ПриЗаписиДокумента(); Записать(); Форма.Закрыть(0); КонецЕсли; КонецЕсли; Если ПустоеЗначение(История)=0 Тогда ТЗИстория.Загрузить(ЗначениеИзСтрокиВнутр(История)); КонецЕсли; EndProcedure |
|||
15
andrewks
15.09.11
✎
10:05
|
(0) а в других программах у вас, случаем, не проявляются хаотические эффекты от якобы нажатия клавиш Ins и Del?
|
|||
16
Aprobator
15.09.11
✎
10:06
|
(13) вообще да. События то возникающие ввиду интерактивных действий.
|
|||
17
Aprobator
15.09.11
✎
10:09
|
(14) мама родная. И чего только в процедуру ПриОткрытии народ не пихает.
|
|||
18
Darych
15.09.11
✎
10:12
|
код порадовал)))...
а это зач0т: " ПроМаршрутСказали = 0; ПроМаршрутСказалиЗакупка = 0; Тихо = 1; " |
|||
19
фобка
15.09.11
✎
10:13
|
(18) гыг) это что бы по сто раз мессаги не вылезали, а у когото вообще не вылезали
|
|||
20
andrewks
15.09.11
✎
10:16
|
это называется "обфускация кода", и применяется настоящими программистами-профессионалами, л\дабы потом всякое ламерьё не лезло своими кривыми ручками и не меняло что ни попадя
|
|||
21
Aprobator
15.09.11
✎
10:18
|
за такой код в ПриОткрытии расстреливать надо. Явно просматривается изменение реквизитов документа. А уж то, что проверка на параметр в конце и выполнение ряда действий с последующим закрытием формы, после того как куча операций над самой формой сделано - просто прелесть.
(20) сказал бы я как это называется, да забанят. |
|||
22
фобка
15.09.11
✎
10:20
|
(21) не смеши) где ты разглядел изменнеие реквизитов?
(20) это называется много программистов |
|||
23
Aprobator
15.09.11
✎
10:23
|
(22)
|
|||
24
фобка
15.09.11
✎
10:24
|
(23) а это что?
If DoQueryBox("Данные о перевозчике/автовозе в документе и в Лоте различаются. Обновить информацию из Лота?",4) = 6 Then |
|||
25
Aprobator
15.09.11
✎
10:26
|
(24) ну и? Наличие условия сути не меняет.
|
|||
26
Aprobator
15.09.11
✎
10:27
|
подобные проверки должны делаться в форме как минимум в событии ПередЗаписью, а уж никак ни ПриОткрытии формы. Впрочем к теме это отношения не имеет.
|
|||
27
Darych
15.09.11
✎
10:30
|
вот это непонятно...
Если ТипЗначенияСтр(Форма.Параметр) = "Дата" Тогда Если Форма.Параметр >= DocDate Тогда ПриЗаписиДокумента(); Записать(); Форма.Закрыть(0); КонецЕсли; КонецЕсли; эт пораньше бы... в начало процедуры... и форму открывать нах?... статусвозврата(0) есть))) |
|||
28
Aprobator
15.09.11
✎
10:32
|
(27) в (20) уже писали - это чтобы никто и ни о чем не догадался.
|
|||
29
фобка
15.09.11
✎
10:59
|
(1) стек показал ПриУдаленииСтроки() и всё
|
|||
30
фобка
15.09.11
✎
11:21
|
(26) пользователь открыл документ, посмотрел и вышел, и так и не узнал о том что данные в документе различались с данными в ДокОсновании
(27) это все понятно, в данном случае документы открываются из обработки для вызова функций модуля формы |
|||
31
Aprobator
15.09.11
✎
11:30
|
песец - посмотри наконец типовые конфигурации. Как там сделана увязка документов и как там реализован подобный контроль. То то сделано тут - методологически неверно.
|
|||
32
фобка
15.09.11
✎
11:32
|
(31) смотрел типовые, видимо их пишут такие как ты
|
|||
33
фобка
22.09.11
✎
15:28
|
Up.
Систуация повторилась. Зашел в отладчик, открыл стек вызовов, поставил точку на ПриУдаленииСтроки() в стеке "ПриУдаленииСтроки(); 121" |
|||
34
фобка
22.09.11
✎
15:29
|
+(33) после этого иногда срабатывает ПриВводеСтроки().
Переключаюсь на другое откно, затем опять делаю активным документ - и все по новой. |
|||
35
фобка
11.10.11
✎
12:19
|
Парадоксально, конечно,но.. поменял названия процедур на OnNewLine() и на OnDeleteLine(), так же переместил процедуры в конец модуля. И возникать перестало (уже неделю не жалуются).
Вот такие танцы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |