|
v7: Починить подчиненный справочник | ☑ | ||
---|---|---|---|---|
0
разработчик 1с
25.08.15
✎
17:40
|
Подскажите, пожалуйста. Не большой знаток клюшек
Во время переноса данных самописными обработками "моргнул свет", и в подчинённом справочнике задвоились элементы. Теперь при попытке перезаписи некоторых элементов ругается о неуникальности кодов. Очень не хочется перегружать весь справочник полностью, там около 500 тысяч элементов. Уникальность отключить нельзя. ТиИ ошибок никаких не находит. |
|||
1
lubitelxml
25.08.15
✎
17:43
|
что куда переносили то?
|
|||
2
lubitelxml
25.08.15
✎
17:43
|
и где задвоилось?
|
|||
3
разработчик 1с
25.08.15
✎
17:45
|
(2) справочник. в 7.7
|
|||
4
mehfk
25.08.15
✎
17:45
|
(0) "Починить" через форум вашими руками?
|
|||
5
Ёпрст
25.08.15
✎
17:48
|
(0) поставьте в подчиненном справочнике серии кодов в пределах подчинения.
|
|||
6
Ёпрст
25.08.15
✎
17:48
|
и усё.
|
|||
7
разработчик 1с
27.08.15
✎
11:33
|
(6) неа, не помогло.
снимал галочку контроль уникальности, потом назад ставил, надеялся, что 77 сами удалят неуникальные, но нет, ругается, что есть и дальше не пускает. |
|||
8
Ёпрст
27.08.15
✎
11:41
|
Кто, куда, кого не пускает ?
|
|||
9
Ёпрст
27.08.15
✎
11:41
|
И, что в тво1ём понятии "неуникальные" ?
|
|||
10
aka AMIGO
27.08.15
✎
11:43
|
можно написать обработку, непоследственно удаляющую дубли подч. справочника
|
|||
11
разработчик 1с
27.08.15
✎
11:44
|
(9) если выкл контроль уникальности, сохранить конфу, а потом вкл контроль и попытаться сохранить, то ругается на наличие неуникальных кодов справочника, и дальше сохранение не идёт.
|
|||
12
Ёпрст
27.08.15
✎
11:45
|
(11) взять обработку, перенумеровать коды. Наслаждаться
|
|||
13
разработчик 1с
27.08.15
✎
11:45
|
(10) в семёрке кодить ммм(((
|
|||
14
Ёпрст
27.08.15
✎
11:45
|
любой ючойз это умеет
|
|||
15
разработчик 1с
27.08.15
✎
11:46
|
(14) перенумеровывать не надо, это дубли..
ясно, только обработкой удалять |
|||
16
Злопчинский
27.08.15
✎
11:49
|
там кода блин на один экран.. большой...
|
|||
17
aka AMIGO
27.08.15
✎
11:54
|
(16) :) немного меньше :)
(15) вопрос к тебе: открываешь спр-Родитель, в нём "открыть подчиненный" с выводом по группам, сразу видишь два-три одинаковых (с одним кодом) элемента? такая картина примерно? |
|||
18
beaver1971
27.08.15
✎
11:58
|
(0) перенос как делался? какими инструментами?
|
|||
19
разработчик 1с
27.08.15
✎
11:58
|
(17) да, именно
|
|||
20
разработчик 1с
27.08.15
✎
11:59
|
(18) самописными обработками. из текстового файла берутся значения, создаются элементы...
|
|||
21
Злопчинский
27.08.15
✎
12:00
|
так.. я побежал за попкорном и колой...
8-ки что ли загрузку в 77 писали? |
|||
22
разработчик 1с
27.08.15
✎
12:02
|
ДК = СоздатьОбъект("Справочник.Д");
НАДК=СоздатьОбъект("Справочник.Н"); Табл=СоздатьОбъект("ТаблицаЗначений"); Табл.НоваяКолонка("Код","Число"); ДК.ВыбратьЭлементы(); Пока ДК.ПолучитьЭлемент()=1 Цикл НАДК.ИспользоватьВладельца(ДК.ТекущийЭлемент()); НАДК.ВыбратьЭлементы(); Пока НАДК.ПолучитьЭлемент()=1 Цикл Если Табл.НайтиЗначение(НАДК.Код)=0 Тогда Табл.НоваяСтрока(); Табл.Код = НАДК.Код; Иначе НАДК.Удалить(); КонецЕсли; КонецЦикла; КонецЦикла; нормально? |
|||
23
Ёпрст
27.08.15
✎
12:04
|
(22)нет
|
|||
24
разработчик 1с
27.08.15
✎
12:07
|
(23) правильно, зачем нам Д справочник вообще, можно сразу Н перебирать
|
|||
25
aka AMIGO
27.08.15
✎
12:08
|
(16) 16 строк :)
(22) в ТЗ не такой оператор поиска, посмотри в СП |
|||
26
Злопчинский
27.08.15
✎
12:10
|
(25) публикуй ;-)
|
|||
27
aka AMIGO
27.08.15
✎
12:11
|
И лучше использовать СЗ, а не ТЗ. И чистить её сразу после оператора:
Пока ДК.ПолучитьЭлемент()=1 Цикл |
|||
28
aka AMIGO
27.08.15
✎
12:11
|
(26) 52р. 37 копеек :)
|
|||
29
разработчик 1с
27.08.15
✎
12:12
|
НайтиЗначение(<?>,,);
Синтаксис: НайтиЗначение(<Знач>,<Строка>,<Колонка>) Назначение: Найти заданное значение в таблице значений. Возвращает число: 0 - значение не найдено; 1 - значение найдено Параметры: <Знач> - значение для поиска. |
|||
30
aka AMIGO
27.08.15
✎
12:13
|
(29) и где в твоем коде <Строка>,<Колонка>?
И перед его выполнением присвоить: Строка=0; |
|||
31
aka AMIGO
27.08.15
✎
12:15
|
НАДК.Удалить(1);
|
|||
32
Ёпрст
27.08.15
✎
12:18
|
(30) это не обязательные параметры
(31) по-умолчанию, там и так 1 (22) твоя ошибка в коде - коды могут быть одинаковыми для разных владельцев. Тебе надо делать УдалитьСтроки в первом цикле . |
|||
33
разработчик 1с
27.08.15
✎
12:19
|
(32) не могут, там стояла уникальность во всём справочнике. это я только после тебя ставил туда-обратно в пределах подчинения.
|
|||
34
разработчик 1с
27.08.15
✎
12:20
|
получается вот так
//ДК = СоздатьОбъект("Справочник.Д"); НАДК=СоздатьОбъект("Справочник.Н"); Табл=СоздатьОбъект(СписокЗначений");//"ТаблицаЗначений"); //Табл.НоваяКолонка("Код","Число"); //ДК.ВыбратьЭлементы(); //Пока ДК.ПолучитьЭлемент()=1 Цикл // НАДК.ИспользоватьВладельца(ДК.ТекущийЭлемент()); НАДК.ВыбратьЭлементы(); Пока НАДК.ПолучитьЭлемент()=1 Цикл Если Табл.НайтиЗначение(НАДК.Код)=0 Тогда //Табл.НоваяСтрока(); //Табл.Код = НАДК.Код; Табл.ДобавитьЗначение(НАДК.Код); Иначе НАДК.Удалить(1); КонецЕсли; КонецЦикла; //КонецЦикла; |
|||
35
aka AMIGO
27.08.15
✎
12:21
|
должно сработать
|
|||
36
Ёпрст
27.08.15
✎
12:22
|
(34) НАДК.ВыбратьЭлементы(0);
|
|||
37
Злопчинский
27.08.15
✎
12:24
|
(28) жадина... ;-)
|
|||
38
aka AMIGO
27.08.15
✎
12:26
|
(37) а поторговаться = 2р.37 копеек! неправда ваша :)
ладно уж :) СПТ = СоздатьОбъект("Справочник.Товары"); СПЕ = СоздатьОбъект("Справочник.Единицы"); СПТ.ВыбратьЭлементы(); СЗ = СоздатьОбъект("СписокЗначений"); Пока СПТ.ПолучитьЭлемент() = 1 Цикл СПЕ.ИспользоватьВладельца(СПТ.ТекущийЭлемент()); СЗ.УдалитьВсе(); СПЕ.ВыбратьЭлементы(); Пока СПЕ.ПолучитьЭлемент() = 1 Цикл Если СЗ.НайтиЗначение(СПЕ.Код)=0 Тогда СЗ.ДобавитьЗначение(СПЕ.Код); Иначе СПЕ.Удалить(1); КонецЕсли; КонецЦикла; КонецЦикла; Вот так примерно :) |
|||
39
aka AMIGO
27.08.15
✎
12:29
|
+38 это если "В пределах подчинения"
надо смотреть, что там у него в БД осталось.. или "По всему справочнику" |
|||
40
Злопчинский
27.08.15
✎
12:30
|
как-то мне не нравится удаление в выборке...
|
|||
41
aka AMIGO
27.08.15
✎
12:32
|
(40) ты прав!..
это типичный пример г-кода :) Думать уже неохота :) |
|||
42
aka AMIGO
27.08.15
✎
12:33
|
хотя.. может проскочить
СПЕ.Удалить(0); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |