|
При изменении регистра 1с хочет удалить все записи | ☑ | ||
---|---|---|---|---|
0
dborovsky
03.06.13
✎
10:36
|
Добрый день
Создал регистр, из файла загрузил записи в него(порядка 40 тыс строк). Теперь хочу, чтобы в будущем данный регистр был подчинен регистратору. В настройках указал регистраторы. Нажимаю запустить в режиме клиента выдает сообщение что объект изменен:... и запись регистра будут удалены. Получается есди я нажму принять, все записи будут удалены? С чем это связано и как мне решить данную проблему? |
|||
1
Maxus43
03.06.13
✎
10:38
|
сейчас у записей нет регистратора, естественно они не могут существовать в подчинённом регистре. загружай потом записи заново, но с регистратором
|
|||
2
dborovsky
03.06.13
✎
10:41
|
я 40 тыс строк загружал 12 часов. Заново все загружать совсем не горю желанием. А по другому никак?
|
|||
3
Флудер
03.06.13
✎
10:42
|
(2) Никак
|
|||
4
1Сергей
03.06.13
✎
10:42
|
(2) если скуль, то можно извернуться
|
|||
5
Maxus43
03.06.13
✎
10:42
|
(2) нет.
З.ы. хреново загружал как то... я мильёны выгружаю из версионирования за несколько часов например |
|||
6
Maxus43
03.06.13
✎
10:43
|
(4) айайай, не учи плохому
|
|||
7
1Сергей
03.06.13
✎
10:43
|
(6) :) зачем учить? можно ведь просто помочь небесплатно :)
|
|||
8
Mitriy
03.06.13
✎
10:43
|
Создай другой регистр копированием, туда перегрузи данные, измени свой регистр, загрузи из копии, удали ненужный регистр... Это, если критично сохранить старый регистр, если нет, то просто создай новый и туда перегрузи...
|
|||
9
SherifSP
03.06.13
✎
10:44
|
(2)Не правильно выгружаешь, 40 тыс не больше часа выгружаются, при правильном коде
|
|||
10
Mitriy
03.06.13
✎
10:45
|
(9) ну... можно напихать двадцать пять измерений и сорок ресурсов... и все с составными типами... тогда вообще будет вечность...
|
|||
11
dborovsky
03.06.13
✎
10:51
|
вот сам код загрузки из таблицы значений. При добавлении новой записи проверяю ее на уникальность.
Подскажите, пожалуйста, тогда как бы вы изменили: номерЗаписи = 0; Для Каждого текСтрока Из тзТекстФайл Цикл ЕстьСтрока = Ложь; НаборЗаписейРегистрЦеныПоставщиков.Прочитать(); контрагент = Справочники.Контрагенты.НайтиПоКоду(текСтрока["КонтрагентКод"]); НаборЗаписейРегистрЦеныПоставщиков.Отбор.Контрагент.Установить(контрагент); НаборЗаписейРегистрЦеныПоставщиков.Прочитать(); Для Каждого записьРегистра Из НаборЗаписейРегистрЦеныПоставщиков Цикл Если записьРегистра.Контрагент.Код = текСтрока["КонтрагентКод"] И записьРегистра.Период = Дата(текСтрока["Дата"]) И записьРегистра.Номенклатура.Код = текСтрока["НоменклатураКод"] Тогда ЕстьСтрока = Истина; Прервать; КонецЕсли; КонецЦикла; Если ЕстьСтрока Тогда Продолжить; Иначе НоваяЗаписьРегистрЦеныПоставщиков = НаборЗаписейРегистрЦеныПоставщиков.Добавить(); Попытка датаДокумента = Дата(текСтрока["Дата"]); Исключение КонецПопытки; Если ЗначениеЗаполнено(датаДокумента) Тогда НоваяЗаписьРегистрЦеныПоставщиков.Период = датаДокумента; Иначе НоваяЗаписьРегистрЦеныПоставщиков.Период = ТекущаяДата(); КонецЕсли; //результат = тзНоменклатура.Найти(текСтрока["НоменклатураКод"], "Код"); результат = Справочники.Номенклатура.НайтиПоКоду(текСтрока["НоменклатураКод"]); Если результат <> Неопределено Тогда НоваяЗаписьРегистрЦеныПоставщиков.Номенклатура = результат; Иначе продолжить; КонецЕсли; //рез = тзКонтрагенты.Найти(текСтрока["КонтрагентКод"], "Код"); рез = Справочники.Контрагенты.НайтиПоКоду(текСтрока["КонтрагентКод"]); Если рез <> Неопределено Тогда НоваяЗаписьРегистрЦеныПоставщиков.Контрагент = рез; КонецЕсли; вал = Справочники.Валюты.НайтиПоНаименованию(текСтрока["Валюта"]); Если Не вал.Пустая() Тогда НоваяЗаписьРегистрЦеныПоставщиков.Валюта = вал; КонецЕсли; Если ЗначениеЗаполнено(текСтрока["Цена"]) Тогда НоваяЗаписьРегистрЦеныПоставщиков.Цена = текСтрока["Цена"]; Иначе Продолжить; КонецЕсли; Попытка НаборЗаписейРегистрЦеныПоставщиков.Записать(); Сообщить("Запись успешно добавлена - "+номерЗаписи); номерЗаписи = номерЗаписи + 1; Исключение КонецПопытки; КонецЕсли; КонецЦикла; |
|||
12
Mitriy
03.06.13
✎
10:53
|
(11) не пугай добрых людей, см. (8)
|
|||
13
ptiz
03.06.13
✎
10:54
|
Проверка на уникальность - это жесть :)
|
|||
14
dborovsky
03.06.13
✎
10:55
|
да жесть, поэту и спрашиваю как бы вы сделали?
|
|||
15
ptiz
03.06.13
✎
10:57
|
(14) Либо убрать её нафиг, либо в ТЗ запоминать уже загруженные (лучше - с индексированными колонками, но 40 тыс строк и так сжует).
|
|||
16
Фрэнки
03.06.13
✎
10:57
|
(14) если сделал один регистр без регистратора, а теперь нужон с регистратором, то сделал бы еще один регистр и все. Потом, в рабочем порядке и если очень сильно будет нужно, перепишу данные из первого регистра во второй.
|
|||
17
dborovsky
03.06.13
✎
11:00
|
скопировать из одного регистра в другой это все понятно, мне больше интерессно как правильно было загрузить из файла, чтобы скорость загрузки увеличилась. Убрать проверку на уникальность? В ТЗ запоминать уже загруженные это как?
|
|||
18
Фрэнки
03.06.13
✎
11:01
|
(14) а если говорить про проверку уникальности, то вариантов можно много придумать... самое очевидное: искать не в записях, с постоянным считыванием их с базы, а загружать их в тз и там уже куртить всяко по разному, но как это будет работать на 40 тысячах надо смотреть более внимательно
|
|||
19
mistеr
03.06.13
✎
11:01
|
(14) А ты справку принципиально не читаешь, сразу в бой? А как облом, сразу бегом на Мисту?
Примеры поиска записей в регистре неужели не видел? |
|||
20
dborovsky
03.06.13
✎
11:05
|
Видел и читал, поэтому и интересуюсь у вас, как бы вы сделали? Ок, мысль понятна. Спасибо за ответы.
|
|||
21
UnAmerican
03.06.13
✎
11:12
|
Сначала формируешь ТЗ, дальше тз в запрос и отсекаешь там лишние. Главное одним запросом, то есть одним обращением к БД. А не в цикле.
|
|||
22
Фрэнки
03.06.13
✎
11:19
|
(22) да даже проще, потому что у него "внешний источник" - загрузить все в тз, проверить на уникальность, а затем уже запихивать в регистр, ну и транзакциями обрамление вокруг процедуры записи в регистр по какому-то количеству регистираторов.
|
|||
23
dborovsky
03.06.13
✎
11:23
|
ну и транзакциями обрамление вокруг процедуры записи в регистр по какому-то количеству регистираторов - можно по подробнее, что вы имеете ввиду?
|
|||
24
Black_Doctor
03.06.13
✎
11:31
|
т.с., а вы пробовали использовать функцию свернуть для ТЗ? она ведь позволяет свернуть таблицу, вот Вам и проверка на уникальность...
Или я не прав? |
|||
25
Black_Doctor
03.06.13
✎
11:34
|
Кроме того, можно прибегнуть к возможности перезаписи, что даст вам возможность пере-записывать уже имеющиеся записи, это предположительно будет быстрей, чем проверять каждую запись.
|
|||
26
Balabass
03.06.13
✎
11:40
|
(2) Напрашивается упомянутая не так давно картинка, но она грубая, но так хочется, как ты знал.
|
|||
27
Фрэнки
03.06.13
✎
11:44
|
(23) транзакции остаются в памяти процесса до момента своего завершения и записываются физически только после вызова процедуры ЗафиксироватьТранзакцию. Таким образом, даже при использовании регистраторов, накапливают в транзакции несколько сотен записей и потом фиксируют. На любителя
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |