|
v7: Обнаружил косяк в 7-ке - дублируются записи справочника в dbf | ☑ | ||
---|---|---|---|---|
0
Джордж1
03.01.13
✎
13:50
|
Долго не удавалось поймать косяк.
Имеется простой справочник - 2 реквизиту. + на форме списка справочника реквизит числовой и функция поиска в этом же справочнике по коду - Спр.НайтиЭлемент()+Активизировать(). // В результате косяка в справочнике полностью дублировались записи в справочнике - даже код одинаковый, при чем что он уникальный. Кроме того дублировался и ID в таблице справочника. // Что оказалось. Пользователь менял значение реквизита в справочнике, но не нажимал Enter, далее производил поиск элемента по коду через Спр.НайтиЭлемент() - элемент находился и открывался в режиме редактирования (чего не должно было быть) - при нажатии Enter записи дублировались. |
|||
1
sapphire
03.01.13
✎
13:51
|
(0) А реиндексировать БД не пробовал?
|
|||
2
Ork
03.01.13
✎
13:53
|
(0) "через Спр.НайтиЭлемент() - элемент находился и открывался в режиме редактирования"
Это у вас какая-то версия секретная. Обычно при Спр.НайтиЭлемент() никто не открывается. Тем более для редактирования. Либо показаны не все "перлы" программиста. |
|||
3
Джордж1
03.01.13
✎
13:53
|
(1)чего только не пробовал. Только чем это поможет если в таблице записи полностью дублируются. А вместо тех что находили - в отчетах пишет Объект не найден.
Явно косяк от разработчиков - не поставили защиту от такого варианта |
|||
4
Джордж1
03.01.13
✎
13:54
|
(2)
Спр=СоздатьОбъект("Справочник.Карты"); Если Спр.НайтиПоКоду(НК)=1 Тогда п1=Спр.ТекущийЭлемент(); АктивизироватьОбъект(п1); Активизировать("Наименование",0); КонецЕсли; |
|||
5
Ork
03.01.13
✎
13:58
|
(4) "Пользователь менял значение реквизита в справочнике, но не нажимал Enter"
При потере фокуса полем ввода все изменения записываются в базу. Попробуй поредактируй "чего_там_редактировал_твой_пользователь" и нажми Tab либо просто щелкни мышкой в другом поле. Отмены ввода не произойдет. Даже если ты не нажмешь Ентер. Такая селява... |
|||
6
Джордж1
03.01.13
✎
14:00
|
(5)Это все понятно.
Беда начинается когда пользователь не закончив редактирования элемента выполняет код в (4) |
|||
7
Джордж1
03.01.13
✎
14:01
|
(+6)Речь не про сохранилось\не сохранилось. Проблема что табличка портится безвозвратно
|
|||
8
sapphire
03.01.13
✎
14:25
|
(3) Если записи действительно ФИЗИЧЕСКИ дублируются, то, одинаковое одинакововму рознь либо товарищу надо прекратить баловаться распределенками... Либо...
|
|||
9
Джордж1
03.01.13
✎
14:28
|
(8)да физически. распределенки нет.
В табличке после косяка после 2-х записей А и Б оказываются две записи А. // Можете сами попробовать так сделать |
|||
10
1Сергей
03.01.13
✎
14:36
|
(4) не совсем понял в каком месте это выполняется
|
|||
11
Джордж1
03.01.13
✎
14:36
|
(10)В форме списка справочника - что бы найти элемент оп коду и спозиционироватся на нем
|
|||
12
sapphire
03.01.13
✎
14:39
|
(11) Ну нарушена уникальность кода и что?
|
|||
13
1Сергей
03.01.13
✎
14:39
|
(11) при изменении реквизита в форме списка?
|
|||
14
1Сергей
03.01.13
✎
14:40
|
или там какое-нибудь ложное закрытие используется, или ещё чего...
|
|||
15
Джордж1
03.01.13
✎
14:43
|
(13)да
(14)нет, больше ничего не используется "ложного" (12)Еще раз. в справочнике было 2 элемента - с разными ID, CODE и прочими реквизитами А при данном косяке - в табличке остаются 2 записи но с одинаковыми значениями полей. т.е данные найденной записи перезатираются данными записи по которой не закончено редактирование на уровне платформы |
|||
16
1Сергей
03.01.13
✎
14:45
|
(15) странно, что никто до тебя с этим не сталкивался. Релиз платформы?
|
|||
17
Джордж1
03.01.13
✎
14:46
|
(16)25 - сетевая, 27 - локальная.
|
|||
18
Джордж1
03.01.13
✎
14:47
|
Понятно что новый релиз 7-ки не выпустят, тему создал в плане предупреждения что такое бывает.
Раньше спрашивал как такое может быть - никто не откликался |
|||
19
sapphire
03.01.13
✎
14:48
|
Битый релиз. Т.к. в случае редактирования элемента справочник вообще должен быть занят.
|
|||
20
sapphire
03.01.13
✎
14:49
|
(18) напиши ребятам на 1cpp
|
|||
21
Джордж1
03.01.13
✎
14:51
|
(19)у меня или вообще?
|
|||
22
kiruha
03.01.13
✎
14:53
|
ID точно разный ?
какая то фантастика |
|||
23
Джордж1
03.01.13
✎
14:55
|
(22)сначала ID разный. После косяка - одинаковые. Соответственно в отчетах появляются записи <Объект не найден>
|
|||
24
КонецЦикла
03.01.13
✎
15:02
|
Значение какого реквизита менял пользователь?
Зачем вообще выполнять такой код? Ни разу такое не пригодилось Если подразумевается, что элемент должен быть открыт - так он уже открыт Если подразумевается копирование - значит нужно копировать |
|||
25
Cthulhu
03.01.13
✎
15:05
|
А нефик редактировать "в списке" при наложенных отборах.
давным-давно известный глюк. или глюк в голове прогера, допускающего редактирование "в списке" при наложенных отборах. |
|||
26
Джордж1
03.01.13
✎
15:06
|
(24)1. Не наименование и не код, в моем случае - это реквизит Скидка
2. Что бы найти элемент справочника по коду // Еще раз. Справочник Дисконтные карты. Код - уникальный, наименование, реквизит Скидка. Редактируется в диалоге. Пользователь меняет величину скидки - Enter не нажимает. Переходит в поле на форме НК - вводит номер карты которую нужно найти. Наживает кнопку - выполняется код в (4). // (25)Где ты тут отбор увидел |
|||
27
1Сергей
03.01.13
✎
15:07
|
(26) ты что-то в показаниях путаешься. То форма списка, то в диалоге
|
|||
28
Cthulhu
03.01.13
✎
15:08
|
(26): в караганде.
я просто ЗНАЮ причину, по которой может возникнуть описанная ситуация. |
|||
29
Джордж1
03.01.13
✎
15:09
|
(27)В списке конечно редактируется.
(28)Еще раз для ЗНАЮЩИХ - отборов нет и никогда не было |
|||
30
Cthulhu
03.01.13
✎
15:12
|
(25)+: прим.: подчинение - тоже вид отбора, есичо.
(29): тогда еднственная вторая возможная причина - нештатное (т.е. не "глюк 1С") ковыряние в таблицах или аварийные завершения работы со справочником во время его редактирования. такая вот бедулька, товарищ "НЕ ЗНАЮЩИЙ". |
|||
31
Джордж1
03.01.13
✎
15:17
|
(30)
1.подчинения тоже нет 2.никаких нештатных ковыряний и аварийных завершений не было. // Проверь те что ли сами - делов на 5 минут |
|||
32
kiruha
03.01.13
✎
15:17
|
(0)
Каким образом проверял совпадение ID ? Кстати в dbf возможна ситуация , когда запись помечена "удалить" (не путать с 1С пометкой) в таких записях не важно что хранится |
|||
33
Джордж1
03.01.13
✎
15:19
|
(32)ну я первый день что ли с 1С общаюсь
внутрь таблички заглянул через wDBFview |
|||
34
kiruha
03.01.13
✎
15:20
|
(33)
Надо проверить активность записи Не знаю что DBFview показывает |
|||
35
Джордж1
03.01.13
✎
15:21
|
(34)все он показывает. все активно. я же в предприятии вижу 2 дублирующие записи
|
|||
36
Cthulhu
03.01.13
✎
15:22
|
(31): ну тогда, бро, все дело в твоем характере. надо признать - довольно уникальном, если 1с-ина вот таким веселым образом реагирует в твоем конкретном случае, а во всех остальных случаях - только по описанным выше причинам (которых, как ты утверждаешь, у тебя "нет").
ну или ты врёшь. или не знаешь в полной мере того, о чем так претенциозно и почти возмущенно утверждаешь. в любом случае - жжизнь у тебя нелегкая, судя по всему. удачи тебе. |
|||
37
Vippi
03.01.13
✎
15:27
|
||||
38
Джордж1
03.01.13
✎
15:29
|
(37)ага, тогда так никто и не ответил
|
|||
39
Cthulhu
03.01.13
✎
15:42
|
(38): ответили в #10.
по сути причина - редактирование в форме списка со сменой активного элемента. но оказался "не в коня корм" - т.е. ты сам привел код со сменой активного элемента в форме списка, но почему-то поленился просто подумать. |
|||
40
Джордж1
03.01.13
✎
15:45
|
(39)там ответили про что конкретно такое бывает при смене отбора.
Я пытался воспроизвести проблему еще тогда. Не получалось. |
|||
41
Torquader
04.01.13
✎
00:38
|
В общем, суть проблемы в том, что сохранение текущей записи выполняется уже после смены отбора или активной строки - то есть одна запись (точнее, то, что было в буфере) записывается поверх новой активной.
Кстати, подобный глюк я видел в нескольких системах, написанных на Дельфях - там проблема крылась в том, что событие сохранения при смене отбора пишется в очередь событий, а события из кода исполняются сразу. P.S. никогда не использую редактирование в списке, так как пользователь по-дурости (уронив что-то на клавиатуру) может испортить справочник и без всяких глюков со стороны программы. |
|||
42
kiruha
04.01.13
✎
12:03
|
(41)
Вообще то табличная часть - тот же список Точно также можно уронить что то на клавиатуру И по идее должен быть этот "глюк" |
|||
43
Torquader
05.01.13
✎
22:45
|
(42) Испорченный один документ или много документов - всё-таки - разница есть.
P.S. ещё запись изменений спасает, когда "зверя" носом в то, что он поменял. |
|||
44
Злопчинский
06.01.13
✎
03:35
|
возможно это тот случай, по которому Юля на Т1С умыла всех..?
|
|||
45
Язобил Наработто
06.01.13
✎
06:05
|
(44) Насколько я помню, Юля всех умыла именно с редактированием в форме списка с наложенными отборами. А ТС утверждает, что отборов нет.
|
|||
46
PALESIA
06.01.13
✎
13:46
|
(0) имхо, открыть DBF через FoxPro ... и команда Pack тебе поможет ... если конечно потом исключить из кода шизоидную возможность ввода нового элемента при установленном отборе
|
|||
47
PALESIA
06.01.13
✎
13:50
|
+(46) ну а если уж последнее так необходимо, то лечится вставкой в ПриОткрытии():
Если Выбран() = 0 Тогда Записать(); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |