0
- 15.02.2014 - 07:38
|
Итак, ТиС 7.7. В справочник цветов была написана обработка импорта. Произошел косяк, и теперь постоянно "код не уникален". Поудаляв левые записи, при попытке перенумеровать все равно ошибка. ПыСы: Я админ, с соседней ветки, но вот пришлось решать этот косяк, помогите коллеги ! | |
1
- 15.02.2014 - 09:21
|
И зачем полез спрашивается??? У справочника отключить проверку уникальности, перенумеровать справочник, включить проверку уникальности. | |
2
- 15.02.2014 - 09:55
| Не лез, как обычно сменились сотрудники, новый накосячил... Толком не знаем пока. Помоги, можно пошагово ?Спс! | |
3
- 15.02.2014 - 09:56
|
Перенумеровать надоть. Учитывая порядок нумерации. Последний может быть "в целом по справочнику" или "в пределах подчинения" (т.е., в пределах группы). Надо учесть, что "код" записи - всегда есть строка. Даже если в конфигураторе он обозначен как "число" - это только "представление": число преобразуется в строку без лидирующих нулей. Поэтому правила перенумерации несколько разные: Для кода типа "число": берем какое-то большое число, например 1000000. И проходим по всему справочнику, присваивая новые коды 1000001, 1000002, 1000003, и т.д. (т.е. 1000000+N). Таким образом, обеспечиваем уникальность при переприсвоении кода (иначе не запишем). Для кода типа "Строка" поступаем так: выдумываем "префикс" - можно взять буковку, например "_" (подчеркивание). И определяем длину кода (произвольно, но так, чтоб на все записи хватило, и на будущее осталось). С учетом разрешенной длины в конфигурации. Например, задумали код видом "00000123" (длина 8 символов). Тогда, проходя по справочнику, перенумеровываем так: N=0; ...... N = N+1; <Справочник>.Код = Прав("_00000000"+Строка(N),9); Потом, при повторном обходе, убираем "префикс "_": НовКод=сред(старыйКод,2); Нюанс: при присвоении нового кода "автоматически" каким либо модулем (когда код не назначается принудительно, а поручается программе) алгоритм движка следующий: берется самое большое значение длины кода (т.е., из кодов "000ххх" и "0000000уууу" выбирается последнее), отбирается числовая часть, увеличивается на единицу, и преобразуется опять в строку с лидирующими нулями (и префиксом, если он есть). Все это делается быстро, ибо располагаются по индексу коды так: 0001 0002 0999 0000001 0000002 А01 А02 Ж0000001 Ж0000002 К0001 К0002 Воот ;) В придуманном мною наборе движок возбмет для образца последний элемент из списка "К0002". Первый новый код будет "К0003", затем "К0004", и т.д. А когда заведет "К9999" длина-то (5 символов), и исчерпается, и взяв разрешенные 4 символа (1 занят под префикс) получим "К0001". А он уже есть, и мы лицезрим предупреждение "Код не уникален". Вот так. | |
4
- 15.02.2014 - 09:58
| 1-real > Не надо лезть без нужды в конфигуратор. Это не кошерно ;) | |
5
- 15.02.2014 - 10:04
| +(4) Пральна! В данном случае - и вовсе незачем, UChoice.ert еще никто не отменял. | |
6
- 15.02.2014 - 10:15
| (5) после процедур там ошибка остается, пробовал. Ненавижу когда что то не получается. | |
7
- 15.02.2014 - 10:18
|
5-Ткачик > :) UChoice.ert - это хорошо, только автор не поймет проблему возникновения прерывания по неуникальному индексу. И не предпримет нужные административные меры (линейкой по пальцам излишне "креативным") :) | |
8
- 15.02.2014 - 10:22
| (6) Применять UChoice надо два раза. Как минимум. Почему - читать (3) до просветления. | |
9
- 15.02.2014 - 10:26
|
6-VASH > Собсно, ты можешь открыть свой справочник в wDBFview.exe, назначив индексом поле KODE, и полюбоваться сортировкой. Что у тебя там "креативные" бушки ввели - неизвестно. Может, какую-нить хрень в середину кода. А может, символ "/". Вообще-то, движок вроде должен перехватывать и не пущать, но неуверен. А у юзера "креативности" хватит. | |
10
- 15.02.2014 - 10:49
| (9) Спасибо, попробую. Я программер с фокса дос, дбэфки родные, но вот 1с пока страшненько. | |
11
- 15.02.2014 - 11:13
|
10-VASH > Ничего страшного :) От фокса дбф-ки отличаются отсутствием мемо-полей. Строение - тоже самое. Индекс строится иначе. Поля: ID - служебный (индексируемый), служит основой для построения ссылки; PARENTID - то же самое, но указывает на родителя (группу); CODE - понятно из названия. индексируемый. Виден юзеру; DESCR - Наименование, индексируемый, виден юзеру; и т.д. Удаленные - для фокса это помеченные на удаление (первый байт записи). В wDBFview виден как "точка". В 1С воспринимается как "свободное для записи место". А признаком "помечен на удаление" является поле ISMARK. Таким образом 1С решили проблему с внутренней дефрагментизацией, и внутри таблицы не образуется "дырки" (вернее, образуются, но тут же затягиваются свежими записями. Ибо при записи нового элемента движок вначале ищет поля deleted. И только не найдя такового, образует новую запись. Инкриментируя ID. | |
12
- 15.02.2014 - 11:36
|
+(11) Кстати. Особо тяжелый случай - это "дублирование" ID. Возникает (если (суммировать все причины) редко: при работе с поврежденными индексами. Когда юзеры плюют на предупреждение движка. Простейший рецепт профилактики: ночью/под утро удаляем скриптом файлы*.CDX, и вызываем конфигуратор в "пакетном режиме" для индексирования. Можно и с проверкой - комп не потеет, лишь бы время хватило. Лог на рабочий стол. И юзеры никогда утром не увидят приглашение войти монопольно для переиндексации. | |
13
- 15.02.2014 - 12:59
|
(0) выгрузку/загрузку сначала попробуй вам админам обязательно надо через задний проход влезть | |
14
- 15.02.2014 - 13:01
| + потом тестирование и исправление посмотреть, может там на новые элементы справочника и ссылок-то нет | |
15
- 15.02.2014 - 13:40
| Пригласить спеца уже не модно? | |
16
- 15.02.2014 - 14:06
| 15-reanimator > там в сабже, между строк - уже пригласили | |
17
- 15.02.2014 - 14:08
| + хотя и не факт что он виноват, если тупо "переименовывать" элементы спр могут все кому не лень | |
18
- 15.02.2014 - 14:12
|
13-vah1 > И чем это выгрузка/загрузка поможет, интересно? "может там на новые элементы справочника и ссылок-то нет" - свежая мысль. Винда научилась делать половину записи? Замечание для автора к (3): Когда правим коды, начинаем так: спрЦветов = СоздатьОбъект("Справочник.Цветы"); спрЦветы.ПорядокНаименований(); .... Когда правим наименования, начинаем так: спрЦветов = СоздатьОбъект("Справочник.Цветы"); спрЦветы.ПорядокКодов(); .... Индексы, однако. | |
19
- 15.02.2014 - 14:28
|
18-VZ > не поможет, тогда и поглядим справочник можно по ходу прикокнуть, и в пустой внешней выгрузкой из нормального бэкапа подлить, пару-тройку доков подправить руки не отвалятся, зато пустые ссылки можно визуально найти | |
20
- 15.02.2014 - 14:40
|
18-VZ > про индексы ты правильно сказал, там хз что может твориться если админ в дбф фало залез - выгрузка поможет (0) не слушай никого, задача уровня Тестирование ИБ в конфигураторе | |
21
- 15.02.2014 - 14:44
|
18-VZ > про индексы правильно сказал, там хз что может твориться, если в дбф фало слазить - выгрузка поможет (0) не слушай никого, задача уровня Тестирование ИБ в конфигураторе | |
22
- 16.02.2014 - 08:49
|
Народ, ничего не помогло. Попробовал вот такое решение : 1. Отключил контроль уникальности. 2.Перенумеровал. 3. Включил контроль. 4 Провел тестирование и переиндексацию. Это имеет право на жизнь ? | |
23
- 16.02.2014 - 09:19
| 22-VASH > Имеет, если работает ;) | |
24
- 16.02.2014 - 10:43
|
Вы сейчас насоветуете сгоряча перенумеровать, а там может быть вполне искренне используется НайтиПоКоду() Автору - за 3 минуты написать обработку по поиску неуникального кода или короткого | |
25
- 16.02.2014 - 11:13
|
24-USSR > Тому, кто пишет НайтиПоКоду(), не делая усилий по параметризации этого кода в опциях настройки, уже ничего не поможет ;) А метода (22) вполне законна, ибо при неизбежной переиндексации уникальность кодов проверяется автоматически. Только некошерна, ибо ничто не препятствует получить результат без хирургического вмешательства. | |
26
- 16.02.2014 - 23:08
| мужики я пассажир, взлетели, но пилот накосячил, помогите долететь до Токио, срочно надо! на панели красная кнопка мигает!! | |
27
- 16.02.2014 - 23:13
| на кнопке русским языком написано "undefined target". я пока два раза нажал - вроде помогает. тряхнуло пару раз и вроде чего то ненужное отвалилось. я правильно жму? | |
28
- 16.02.2014 - 23:20
| похоже у оленеводов 2 пожара внизу, видимо наткнулись на нефть и газ и рвануло... ну тупыыыеее - знать надо где костры разжигать | |
29
- 16.02.2014 - 23:26
| приходила стюрдесса, принесла кофе. чего-то лопочет по-японски и тыкает бумажки с иероглифами. а я тоьлко пару слов на японском знаю, оригами и харакири, второе пока говорить не стал - стюардесса вроде симпатичная. | |
30
- 16.02.2014 - 23:31
|
сходил в туалет в хвосте самолёта - света нет (то же мне японская техника), но воду всю слил, чтобы самолёт облегчить. зато в салоне все заняты поделкой оригами, стюардесса проводит мастер-класс. вроде все при деле. думаю надо ещё какие-нить кнопки нажать... а то экшена не хватает. подскажите конкретно! | |
31
- 17.02.2014 - 10:23
| (22) если это не помогло тогда нужно читать код обработки. складывается такое впечатление что справочник цветов ни причем, а проблема в том что обработка создает новый другой справочник или вообще документ. а так пригласите специалиста | |
| Интернет-форум Краснодарского края и Краснодара |