Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Изменить ID в справочнике

v7: Изменить ID в справочнике
Я
   Ефремов
 
13.01.21 - 07:31
Добрый день, коллеги!

Получил сообщение о переполнении внутренних идентификаторов (поле ID) в справочнике. Некоторые записи я удалю и сожму таблицу. Но хотел и изменить ID. Записи в справочнике не связанные с другими справочниками, - поэтому особых проблем нет.
Но вот открыть dbf файл для доступа к полю ID из 1с не получается.
Подскажите, пожалуйста, как открыть справочник методами работы с dbf файлами из 1с7.7 ? Или другой способ изменения поля ID ?
   ДенисЧ
 
1 - 13.01.21 - 07:34
Создай новую базу и перелей туда данные, создавая новые объекты и не привязываясь к ИД.
Или переходи на 8ку, там такая проблема пока не предвидится...
   Ефремов
 
2 - 13.01.21 - 07:48
Спасибо. Конфигурация для вспомогательных целей. Написана давно. Практически, вся самописанная. Переход на 8-ку - неприемлемо по трудоемкости.
Я, конечно, попробую выгрузку и загрузку данных. Но когда-то я пробовал такой метод. Он не изменил ID и процесс выгрузки и загрузки базы выполнялся очень долго.
   ДенисЧ
 
3 - 13.01.21 - 07:55
(2) Не выгрузку-загрузку. А именно перенос. Например, через КД или самописные.
Выгрузка-загрузка ИД сохраняет, если эклер не изменяет.
   ДенисЧ
 
4 - 13.01.21 - 07:56
Ну а если уж идти по пути смены ид... Файлы базы 1с нужно открывать из другой базы. Из неё самой - вряд ли получится. И да, процесс поиска и замены этих ид по времени займёт вряд ли меньше времени, чем перенос в новую.
   Mikeware
 
5 - 13.01.21 - 08:06
добавь УРБД, пропиши ИД базы. или измени.  и наступит счастье
   ДенисЧ
 
6 - 13.01.21 - 08:12
(5) Так урбд эе ид таскает, а они у него переполнены...
   Mikeware
 
7 - 13.01.21 - 08:19
(6) иды уникальны в пределах ида базы.
   Ефремов
 
8 - 13.01.21 - 08:20
Может, есть недокументированная функция обращения к полю ID?
   ДенисЧ
 
9 - 13.01.21 - 08:21
(7) Ви таки хочите сказать, что если справочник улетит по урбд - у него будет другой ид?
Позвольте Вам не поверить.
(8) Нет.
   Mikeware
 
10 - 13.01.21 - 08:21
(8) и что тебе нужно от этой функции?
   Андрей_Андреич
 
11 - 13.01.21 - 08:26
(9) Так есть еще префикс базы неиспользуемый - аж 3 разряда в ИД
   Mikeware
 
12 - 13.01.21 - 08:29
(9) куда "улетит"?
id - это собственно сам ид как чар(6) и дбсигн как чар(3)
если он создавался в базе без уурбд, максимальный будет "ZZZZZZ   ", при смене сигна базы с пустой на, например, SGN новый ид создастся "      1SGN"
   Mikeware
 
13 - 13.01.21 - 08:30
(11) во! "префикс базы"! хотя скорее, он суффикс. не помню уж как он там правильно называется
   Mikeware
 
14 - 13.01.21 - 08:39
(9) почему нет? ЗначениеВСтрокуВнутр, ну и _IdToStr()/_StrToId(), и строковые функции - "а-а-а вот, овощи там, рожь — вот это всё"©...
(8) http://my1c-archive.narod.ru/knowhow/get_id.html
   ДенисЧ
 
15 - 13.01.21 - 08:40
(14) А обратно?
   Mikeware
 
16 - 13.01.21 - 08:45
(15) а что ты хочешь сделать обратно? Фарш невозможно провернуть назад!©
   ДенисЧ
 
17 - 13.01.21 - 08:47
(16) Я хочу? Я же не совсем больной, я просто недообследованный )))
   trdm
 
18 - 13.01.21 - 08:47
(1) Можно и без новой БД обойтись.
Проосто добавить новый справочник с такой-же структурой, можно его сделать банальным копи-пасте.
Обработкой перебросить данные из актуальных позиций.
Прибить старый, переименовать новый.
Все.
   Mikeware
 
19 - 13.01.21 - 08:49
(17) ну, хороший хирург всегда поможет плохому танцору...
   trdm
 
20 - 13.01.21 - 08:52
+(18) Поскольку:
(0) >Записи в справочнике не связанные с другими справочниками, - поэтому особых проблем нет.
   Ефремов
 
21 - 13.01.21 - 09:07
(10) Доступ к полю ID справочника.

(18) Хороший вариант. Но пользователи, без админа БД, не смогут его самостоятельно реализовать.
   Ефремов
 
22 - 13.01.21 - 09:08
Я сейчас делаю обработку переноса данных в архивную таблицу. И хотелось бы одновременно изменить ID в рабочей.
   trdm
 
23 - 13.01.21 - 09:26
(21) А пользователь и не должен. Прогер сможет.
   Ефремов
 
24 - 13.01.21 - 09:59
(18) Как Вы думаете, можно обойтись без копирования индексного файла промежуточного справочника, если потом переиндексировать базы в конфигураторе? Все равно надо будет сжимать файлы dbf.
   Mikeware
 
25 - 13.01.21 - 10:00
(20) ТКВ.
ведь можно обойтись без всякого копирования...
(21) ну и зачем вам этот доступ? что вы им делать будете?
   MWWRuza
 
26 - 13.01.21 - 10:32
(0) Получил сообщение о переполнении внутренних идентификаторов (поле ID) в справочнике.

Позвольте полюбопытствовать... Это-ж сколько у Вас там записей в этом справочнике?
   Salimbek
 
27 - 13.01.21 - 10:32
(24) А для чего вам этот справочник и его ИД? Он (этот справочник) где-то используется? Если да, то в этом самом "где-то" записан именно ИД элемента справочника. И если вы этот самый ИД поменяете, то в вашем документе появится волшебное "Объект не найден". Так что если хотите менять, то надо в транзакции (я бы делал прямыми запросами через SQL) 1) нашли все объекты, где есть этот элемент; 2) поменяли ИД у элемента на НовыйИД; 3) поменяли везде в объектах ИД на НовыйИД; 4) Перешли к следующему элементу.

(12) Т.е. используется 36-ричная система и 6 знаков, т.е. у автора 2 млрд 176 млн записей в этом справочнике? Сурово.
   Salimbek
 
28 - 13.01.21 - 10:32
(26) 36^6 = 2 176 782 336
   MWWRuza
 
29 - 13.01.21 - 10:37
Получается, справочник "пустой", в смысле структуры... Без реквизитов, с минимальной длиной наименования(или вообще без него) и т.п.,. иначе уже давно все встало бы из-за размеров ДБФки...
   MWWRuza
 
30 - 13.01.21 - 10:39
Это я к чему - может просто глюк, и нет там такого?
 
 Рекламное место пустует
   trdm
 
31 - 13.01.21 - 10:59
(24) Да зачем его копировать?
из (18) уточнение:

1. (в конфигураторе:) Добавить новый справочник с такой-же структурой, можно его сделать банальным копи-пасте. На старом справочнике становишся, ctrl+insert и тут-же Shift+insert.
2. Обработкой перебросить данные из актуальных позиций. На этот момент у тебя в конфе 2 справочника. Перебираешь страрый, добавляешь в новый.
3. (в конфигураторе:) Прибить старый (удалением ветки в метаданных), переименовать новый, присвоив идентификатор старого.
Все.
   trdm
 
32 - 13.01.21 - 10:59
Ну и само собой все это на копии для начала.
   trdm
 
33 - 13.01.21 - 10:59
С архивами и т.п.
   trdm
 
34 - 13.01.21 - 11:01
(25) ТКВ?
   Mikeware
 
35 - 13.01.21 - 11:07
(34) Традиционный Китайский Вопрос - "анахуа?"©
   Ёпрст
 
36 - 13.01.21 - 11:21
Странно, врят ли в сам файл дбф столько записей уместится, быстрее файл будет 2 гига, чем id справочника переполнится.
   Ёпрст
 
37 - 13.01.21 - 11:21
(0)Размер таблички справочника какой хоть ?
   Ефремов
 
38 - 13.01.21 - 11:31
(31) Спасибо за разъяснение.

(27) Используется чисто для отчетов. С другими справочниками не связан.

(25) Хотел изменить содержимое поля ID. Когда-то я так делал, но внешней программкой. Сейчас лень писать на FOX или C#.

(26) Приличного обозначения количества записей назвать затрудняюсь, только матерное... Каждый месяц добавляется по 500К записей. Возможно, можно обойтись только переносом записей в архивную таблицу, без изменения ID - если 1с ругается на размер файла. Но хотел одновременно и ID поправить.

(30) Я давно хотел сделать обработку удаления записей из этого справочника, но, как всегда, не нашел времени, пока база не рухнула. Сейчас пользователи кругами ходят и не пристают с другими работами.

(36) Если часто удалять записи, то может и переполнится ID. Вначале записи удалялись. Потом сделал перезапись актуальных записей на неактуальные.

(37) 2 145 298 354 байт
   Djelf
 
39 - 13.01.21 - 11:31
(0) Инициализируешь Центральную базу, даешь префикс.
По факто он конечно будет постфикс, но это не важно.
Нумерация пойдет новая, т.е. не "     2Б  ", а "     2БЦБ".
   Ёпрст
 
40 - 13.01.21 - 11:42
(38) дык ты уже уперся в максимальный размер дбф файла, больше туда уже не запихнешь. Тут только в скуль базу положить, или заместо справочника пользовать табличку в скульлайте, например
   Ефремов
 
41 - 13.01.21 - 11:54
(40) Не знаю такого слова: "скуль".
Я и так переписываю записи в другую таблицу, а ту чищу.
   ДенисЧ
 
42 - 13.01.21 - 11:55
"Не знаю такого слова: "скуль"."
А, ты из тех, кто называет это "сикуэль":?
   trdm
 
43 - 13.01.21 - 12:01
(40) не поможет.
   Ефремов
 
44 - 13.01.21 - 12:02
(42) SQL ?
   Mikeware
 
45 - 13.01.21 - 12:04
(39) им не нужно решение, им надо потрахаться...
   Ёпрст
 
46 - 13.01.21 - 13:34
(43) почему? В скуле просто потом префикс иб добавит и по-новой ид..зато не будет упираться в размер дбф
   Mikeware
 
47 - 13.01.21 - 13:55
(46) ну как вариант (если хочется отстаться в файловой), поставить префикс, и убить старые неиспользуемые элементы справочника. сколько там делов, минут на 10 же?
   Ёпрст
 
48 - 13.01.21 - 14:03
(47) ну да, можно и так..только каждый раз искатт потом неиспользуемые..тоска
   Mikeware
 
49 - 13.01.21 - 14:37
(48) по идее, напейсать робота - пусть сам ползает да удаляет... да и за 1 раз ему еще на пяток лет хватит, а потом всё это все равно сдохнет...
   Вафель
 
50 - 13.01.21 - 14:40
можно же писать из другой базы 1с
   Mikeware
 
51 - 13.01.21 - 14:41
(50) да решений-то дофига. было бы желание...
   Arbuz
 
52 - 13.01.21 - 18:00
Эээ... Что-то тут не то. И каков же в таком случае размер одной записи? байт - пол-байта?
   MWWRuza
 
53 - 13.01.21 - 23:26
+(52) Во, во... Я об этом еще в (29)(30) написал...
   Cthulhu
 
54 - 14.01.21 - 00:14
НЕ НАДО МЕНЯТЬ В БАЗЕ. каждый Ид надо менять во всей базе данных одномоментно. безошибочнее (и, наверное,быстрее) это будет сделать через выгрузку-замену-загрузку. текстовых редакторов с возможностью выполнять замены в больших файлах хватает, выгрузка в распакованном виде это текст, ну и патч ромикса вам в помощь...
   Ефремов
 
55 - 14.01.21 - 05:31
(52) 1с ругалась на размер, хотя в сообщении говорила про индексы.
Перенес данные в архивную таблицу, сжал файлы и все заработало. Но изменить ID все равно хочется.
Спасибо всем принявшим участие.
   Ефремов
 
56 - 14.01.21 - 09:50
(31) Да, с предположением о копировании я поторопился - в файлах поля SPххххх не совпадают.
   trdm
 
57 - 14.01.21 - 10:07
(56) Понятное дело не совпадут.
   Mikeware
 
58 - 14.01.21 - 10:46
(56) (57) а что мешает поменять?
соотношение-то однозначное.
   trdm
 
59 - 14.01.21 - 10:54
(56) прямой доступ без парсера 1С++ не оговаривался.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.