| 
    
        
     
     | 
    
    
  | 
При изменении регистра 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) транзакции остаются в памяти процесса до момента своего завершения и записываются физически только после вызова процедуры ЗафиксироватьТранзакцию. Таким образом, даже при использовании регистраторов, накапливают в транзакции несколько сотен записей и потом фиксируют. На любителя     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |