Имя: Пароль:
1C
1C 7.7
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 Тогда    Записать(); КонецЕсли;