![]() |
![]() |
![]() |
|
v7: Исчезают элементы справочника, в dbf появляются дубликаты | ☑ | ||
---|---|---|---|---|
0
kayaker
26.08.11
✎
11:54
|
Оболочка 7.70.025. ОС Windows Server 2003 R2 SP2, терминал-сервер. В разделенном режиме 15-20 пользователей, сеансы только терминальные.
Конфигурация самодельная, основана на компоненте Оперативный учет. Вес базы около 600 М. Проблема: примерно раз в неделю пропадают элементы одного и того же справочника. В документах остаются ссылки «элемент не найден». Непосредственное удаление объектов в конфигурации запрещено. Контроль уникальности в справочнике включен. При «Тестировании и исправлении» на этапе проверки логической целостности вижу следующее: «Проверка уникальности внутреннего идентификатора в справочнике. Модели. Элемент229(FUSION FJL-1211). Вн. идентификатор 95. Исправить вручную Неразрешенная ссылка. Создан новый элемент. Справочник Модели. Код 2049» Решаю так. 1) Редактирую dbf со справочником: сортирую по ID, вижу дубль Элемента 229 по полям ID, CODE, DESCR. Вручную меняю их для этого дубля, присваивая заведомо уникальные ID и CODE. 2) Прибиваю индексы. 3) Захожу в базу и помечаю дубль элемента на удаление. Удаляю с контролем ссылок (ссылок на дубль не было ни разу). 4) Запускаю поиск ссылок на автоматически созданный элемент ФС-1. Убеждаюсь в том, что это и есть пропавший элемент справочника. Восстанавливаю значения его реквизитов, перенося их из архивной копии базы. Я полагаю, что причина сбоев в dbf – в «недоблокировке» таблиц при одновременном доступе пользователей. В конфигурации много пакетных обработок и процедур импорта внешних данных, часто обращающихся к этому справочнику. Они используются в разделенном режиме, так как связаны не с проведением документов, а лишь с их записью. Раньше эта база работала на менее производительном сервере под Win 2000 Server. Проблема проявлялась примерно раз в два-три дня. Перед новым годом провели свертку базы (объем данных уменьшился примерно на 30%) и перенесли ее на современный сервер. Сейчас проблема проявляется в среднем раз в 10 дней. Прошу совета, что это может быть, и как это можно попытаться подлечить при помощи кода. |
|||
1
kayaker
27.08.11
✎
10:24
|
Догадываюсь, что проблема не нова, поиск по запросу "проверка уникальности внутреннего идентификатора + исправить вручную" возвращает массу ссылок, в том числе и на Волшебный форум. Но что-то пока не могу извлечь из них никакого конструктива. Конфигурация настолько хороша и удобна, что отказываться от нее и воссоздавать с нуля, к примеру, на восьмерке - не хотелось бы. Профи, подскажите хотя бы направление мысли..
|
|||
2
1Сергей
27.08.11
✎
10:27
|
Вот тут проблема:
>>В конфигурации много пакетных обработок и процедур импорта внешних данных, часто обращающихся к этому справочнику. |
|||
3
Chai Nic
27.08.11
✎
10:36
|
Ищи по всей конфигурации по ".Удалить(1)"..
|
|||
4
andrewks
27.08.11
✎
10:38
|
прямые запросы используются?
|
|||
5
1Сергей
27.08.11
✎
10:38
|
(4)+100500
|
|||
6
kayaker
27.08.11
✎
10:57
|
(2) То есть это не бага, а фича? И где компромисс?
(3) Нет Удалить(1), тем более для справочников. А если б даже было, с чего бы ему вызывать затирание строк в таблицах?.. (4) Нет, прямых запросов к таблицам нет. Все запросы - исключительно на языке запросов 1С. Забыла сказать: используется ВК Formex. Отсюда не может быть наводок? |
|||
7
Мимохожий Однако
27.08.11
✎
10:59
|
Если проблема в файловой системе, то иногда помогает копирование файлов в другой каталог.
|
|||
8
Chai Nic
27.08.11
✎
11:04
|
(6) "А если б даже было, с чего бы ему вызывать затирание строк в таблицах?"
Каких строк? Удаляются записи в справочнике -> возникают висячие ссылки в других объектах. ТиИ вместо висячих ссылок создает "заглушки" с теми же идентификаторами, что и в повисших ссылках. |
|||
9
Chai Nic
27.08.11
✎
11:05
|
Ну если в базе всё корректно - то можно предположить диверсию :)
|
|||
10
kayaker
27.08.11
✎
11:16
|
(7) не помог даже перенос базы на другой сервер..)
(8) "ТиИ вместо висячих ссылок создает "заглушки" с теми же идентификаторами, что и в повисших ссылках". Вот тут я недопонимаю: она создает дубликаты с теми же ID, что у нормальных (не исчезнувших) элементов, и записывает их на место пропавших. Кроме того, она создает ФС с уникальными идентификаторами для "пропаших" элементов. Второе, как я понимаю, нормально. А первое? Это и есть "заглушки"? |
|||
11
AlexNew
27.08.11
✎
11:21
|
"Недоблокировка" это хорошо. Спросить то чего хотел? Может обработки посмотреть, хотя тут все и так наизусть знают. Главное, что типовая.
|
|||
12
kayaker
27.08.11
✎
11:28
|
(11) Хотела спросить у опытных людей 1) что это может быть и 2) можно ли с этим бороться кодом. Конфигурация не типовая ни разу, то есть косяки вполне могут иметь место. Только я пока не представляю, где копать.
|
|||
13
AlexNew
27.08.11
✎
11:31
|
Хароший вопрос. Пригласите специалиста.
|
|||
14
AlexNew
27.08.11
✎
11:32
|
(12) С каким кодом? ДНК? Вопрос задай.
|
|||
15
Chai Nic
27.08.11
✎
11:56
|
(10) "Второе" и "первое" в данном случае - одно и то же блюдо. Заглушки это и есть ФС-ххх.
|
|||
16
kayaker
27.08.11
✎
12:01
|
(13) я не против пригласить специалиста, поскольку сама скорее бухгалтер, чем разработчик. если есть конкретные предложения - велкам в почту/аську.
(14) переформулирую вопрос: "что может вызывать дублирование элементов справочника путем создания неуникальных идентификаторов и запись их на место других элементов, приводящее к исчезновению последних?" (15) не совсем, как мне кажется. У "заглушек", которые ФС, идентификаторы как раз уникальны. А вот откуда берутся дубли ID нормальных, существующих элементов? |
|||
17
2S
27.08.11
✎
12:10
|
Мадам не путет ID и код элемента?
|
|||
18
kayaker
27.08.11
✎
12:12
|
(17) не путает. ID и CODE - разные поля dbf. характерно то, что у дубликатов оба этих поля совпадают.
|
|||
19
2S
27.08.11
✎
12:17
|
имхо, здесь затык "В конфигурации много пакетных обработок и процедур импорта внешних данных, часто обращающихся к этому справочнику"
|
|||
20
kayaker
27.08.11
✎
12:28
|
(19) возможно. а как может реализоваться этот "затык"? если понять, какого типа событие вызывает сбой, то можно попытаться придумать обходной маневр.
|
|||
21
AlexNew
27.08.11
✎
12:33
|
(20) Только прямое обращение. Ищи ADDB, т.к. XBase хватает монопольно.
|
|||
22
AlexNew
27.08.11
✎
12:33
|
(21) ADDB читать как ADODB
|
|||
23
dmpl
27.08.11
✎
12:35
|
(0) С таким можно столкнуться при использовании транзакций, когда создается элемент, его видят другие, используют, а затем транзакция откатывается. Но в документах других пользователей ссылка-то осталась.
|
|||
24
AlexNew
27.08.11
✎
12:37
|
(23) Что это было?
|
|||
25
1Сергей
27.08.11
✎
12:43
|
Скорее всего стоит какая-то приблуда, которая снимает лок с ДБФ-ки при изменении
|
|||
26
AlexNew
27.08.11
✎
12:44
|
(25) Еще один?
|
|||
27
1Сергей
27.08.11
✎
12:48
|
(26) видишь ли, если всё делать штатно, то дубли ID не появятся никак.
Ну скажи свою версию |
|||
28
AlexNew
27.08.11
✎
12:49
|
(27) Я сказал.
|
|||
29
andrewks
27.08.11
✎
12:53
|
(23) чё курим?
|
|||
30
1Сергей
27.08.11
✎
12:59
|
(28) где?
|
|||
31
andrewks
27.08.11
✎
13:12
|
поскольку вариант с железом отброшен, остаётся два основных варианта:
1. Удалить(1) 2. прямой доступ к dbf-файлам базы нештатными средствами сделай поиск .Удалить(1) и .dll .exe по всему коду (конфа + внешние обработки) |
|||
32
AlexNew
27.08.11
✎
13:13
|
(30) в (21)
|
|||
33
kayaker
27.08.11
✎
13:14
|
(23) транзакции не используются
(21) в явном виде прямых обращений к таблицам нет. (31) единственная нештатная вещь во всей конфигурации - formex.dll Поэтому я сразу и спросила, не может ли она давать подобный эффект. |
|||
34
andrewks
27.08.11
✎
13:15
|
(33) ты поиск делала? а по внешним обработкам?
|
|||
35
AlexNew
27.08.11
✎
13:18
|
(33) Точно барабашки...
|
|||
36
dmpl
27.08.11
✎
13:26
|
(33) А нет ли у клиентов смеси локальных/сетевых путей? Т.е., у некоторых путь локальный, а у других - сетевой.
|
|||
37
kayaker
27.08.11
✎
13:32
|
(34) делала.. нашла одну процедуру с Удалить(1), но
там удаляется элемент другого справочника. В этом другом справочнике один из реквизитов - элемент "проблемного" справочника "Модели". Как думаешь, может это место вызывать сбой? Код выложить? Лично мне в это как-то не верится.. (36) нет, у всех локальные, база лежит непосредственно на терминал-сервере |
|||
38
andrewks
27.08.11
✎
13:36
|
(36) и чё?
|
|||
39
andrewks
27.08.11
✎
13:37
|
(37) 1. большой там код? если в скрин помещается, выкладывай
|
|||
40
kayaker
27.08.11
✎
13:47
|
Процедура УдалитьМодель()
Если Вопрос("Вы действительно хотите удалить эту модель?",1)=2 Тогда Возврат; КонецЕсли; Поз=СписокМоделей.ТекущаяСтрока(); Эл=СписокМоделей.ПолучитьЗначение(Поз); СпрМод=СоздатьОбъект("Справочник.МоделиП"); СпрМод.ИспользоватьВладельца(ТекущийЭлемент()); Если СпрМод.НайтиЭлемент(Эл)=1 Тогда Мод=СпрМод.Модель; СпрМод.Удалить(1); СписокМоделей.УдалитьЗначение(Поз); СписокМоделей.ТекущаяСтрока(?(Поз>1,Поз-1,1)); Если СписокМоделей.РазмерСписка()=0 Тогда Форма.МодУдалить.Доступность(0); КонецЕсли; Форма.Обновить(); КонецЕсли; КонецПроцедуры |
|||
41
AlexNew
27.08.11
✎
13:52
|
(40) Не то ищешь.
|
|||
42
kayaker
27.08.11
✎
14:05
|
(41) Методы работы с базами ADOdb? просто не понимаю, откуда им там взяться. Или поясни, пожалуйста, что ты имеешь в виду.
|
|||
43
Cthulhu
27.08.11
✎
14:50
|
(27): ты удивишься. редактирование "в списке" с установленным отбором - самый простой и именно штатный способ получения элементов с неуникальными ИД.
|
|||
44
kayaker
27.08.11
✎
15:02
|
(43) забавно.. мой "проблемный" справочник действительно можно редактировать обоими способами, и отборы в нем используются. Может, попробовать запретить редактирование "в списке" и последить за появлением багов?
|
|||
45
Torquader
28.08.11
✎
19:51
|
Неуникальные ID получаются, если элемент справочника создан, но в таблицу счётчика (1SUIDCTL) уникального ID не успели записать значение - в итоге получается, что ID достаётся следующему элементу.
Но в этом случае проблем с ссылками на элементы не будет, так как все ссылки на первый элемент автоматом будут указывать на второй, который затёр первый. Потеря ссылок может происходить, если элемент удалился или был кем-то удалён, а его ID никому не достался. Второй причиной может быть нарушение индексов, когда в DBF-файле элемент есть, но в CDX-файле он в индексе пропущен. Нужно просто попробовать после пропадания сделать переиндексацию и посмотреть, что получится. Также кривые ссылки делаются штатно через ЗначениеИзСтрокиВнутр, когда в эту функцию передаётся внутренний индетификатор несуществующего элемента - если потом такое "значение" присвоить полю другого элемента, то получаем несуществующую ссылку. P.S. ещё стоит посмотреть в сторону "автономные файлы" если работаете по сети - при их включении для 1С "умная" система скачивает на клиента dbf-файл целиком, а потом возвращает его на сервер только после закрытия, то есть завершения сеанса 1С (видел как это "работает" только один раз - проверять, к чему приведёт - времени не было, но сразу было ясно, что база - не жилец). |
|||
46
kayaker
29.08.11
✎
10:24
|
(45) Спасибо за советы и наблюдения. В моей базе с одной стороны теряются ссылки, а с другой - появляются дубли нормальных элементов с неуникальными ID. Визуально это проявляется в потерянных ссылках на элемент, который "удалился или был кем-то удалён, а его ID никому не достался". Наличие дублей нормальных элементов выясняется уже в процессе ТиИ. Поэтому переиндексацией после пропадания элемента тут не отделаешься, к сожалению.. Интуитивно я понимаю, что причина сбоев в том, что в таблицу "не успели записать значение", и пытаюсь выяснить, какие же штатные действия с базой могут давать такой эффект. Насчет ЗначениеИзСтрокиВнутр - буду иметь в виду.
|
|||
47
andrewks
29.08.11
✎
10:49
|
точно у всех юзверей используется один и тот же релиз?
на всякий случай (до кучи) поставь 27-й, лишним не будет |
|||
48
kayaker
29.08.11
✎
10:54
|
(47) Все работают в терминальных сеансах, на клиентских компах 1С вообще нет. На сервере стоит только один релиз - 25-й. А в 27-м есть какие-то исправления, касающиеся блокировки таблиц?
|
|||
49
andrewks
29.08.11
✎
11:00
|
(48) заявлено не было, поэтому и говорю "до кучи"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |