К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Коллеги ! Нужна помощь. Прошу помочь.

Гость
0 - 15.02.2014 - 07:38
Итак, ТиС 7.7. В справочник цветов была написана обработка импорта. Произошел косяк, и теперь постоянно "код не уникален". Поудаляв левые записи, при попытке перенумеровать все равно ошибка.

ПыСы: Я админ, с соседней ветки, но вот пришлось решать этот косяк, помогите коллеги !



Гость
1 - 15.02.2014 - 09:21
И зачем полез спрашивается???
У справочника отключить проверку уникальности, перенумеровать справочник, включить проверку уникальности.
Гость
2 - 15.02.2014 - 09:55
Цитата:
Сообщение от real Посмотреть сообщение
И зачем полез спрашивается??? У справочника отключить проверку уникальности, перенумеровать справочник, включить проверку уникальности.
Не лез, как обычно сменились сотрудники, новый накосячил... Толком не знаем пока. Помоги, можно пошагово ?Спс!
Гость
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) если это не помогло тогда нужно читать код обработки. складывается такое впечатление что справочник цветов ни причем, а проблема в том что обработка создает новый другой справочник или вообще документ. а так пригласите специалиста


К списку вопросов






Copyright ©, Все права защищены