Вход | Регистрация

1С:Предприятие ::

Метки: 

регистр сведений следующий набор записей

Я
   xrix
 
26.03.18 - 07:15
Добрый день!

Прошу помощи, так как только начинаю изучать 1с.

Есть внешняя СУБД, в ней хранятся логи.
Подключаюсь через 1С, через ADODB. Заношу все данные в Таблицу значений и записываю в регистр сведений (не периодический). Скажем через 10 минут мне нужно снова выполнить эту процедуру.
Вся проблема в том, что происходит полная перезапись всего того что уже есть в регистре, или же получилось так что записи задваиются, а мне нужно сделать так что бы записывалось только то, чего нет в регистре, т.е. только новые строки в внешней БД. В БД нет уникальных записей, есть строки которые могут полностью повторятся и нет поле ID строки
 
  Рекламное место пустует
   1Сергей
 
1 - 26.03.18 - 07:19
Покажи как делаешь
   МимохожийОднако
 
2 - 26.03.18 - 07:22
Информации недостаточно, а кофе для гадания закончилось. Пиши подробно, не стесняйся.
   xrix
 
3 - 26.03.18 - 07:26
&НаСервере
Процедура ТЗ(RS);
    
        НаборЗаписей = РегистрыСведений.ЛогиТМГ.СоздатьНаборЗаписей();
        НаборЗаписей.Прочитать();
          ЧислоЗаписей=НаборЗаписей.Количество();
    

        
// Добавим в таблицу значений колонки

 
 ТЗ = Новый ТаблицаЗначений;
        ТЗ.Колонки.Добавить("GMTlog"); 
        ТЗ.Колонки.Добавить("SrvName");
        ТЗ.Колонки.Добавить("CLUserName");
        ТЗ.Колонки.Добавить("DstHost");
        ТЗ.Колонки.Добавить("DstHostPort");
        ТЗ.Колонки.Добавить("RefSRV");
        ТЗ.Колонки.Добавить("UserTime");
        ТЗ.Колонки.Добавить("ByteLoad");
        ТЗ.Колонки.Добавить("ByteSend");
        ТЗ.Колонки.Добавить("Protocol");
        ТЗ.Колонки.Добавить("Transport");
        ТЗ.Колонки.Добавить("Rule");
        ТЗ.Колонки.Добавить("NUM");
    
    
    //Сч = 0;

    
    Если RS.BOF = Ложь Тогда
        RS.MoveFirst();
        Пока RS.EOF = Ложь Цикл
            
                                    
                Строка = ТЗ.Добавить();
                Строка.GMTlog         = RS.Fields("GmtLogTime").Value; 
                Строка.SrvName         = RS.Fields("ServerName").Value; 
                Строка.CLUserName     = RS.Fields("ClientUserName").Value; 
                Строка.DstHost         = RS.Fields("DestHost").Value; 
                Строка.DstHostPort     = RS.Fields("DestHostPort").Value; 
                Строка.RefSRV          = RS.Fields("referredserver").Value; 
                Строка.UserTime        = RS.Fields("processingtime").Value; 
                Строка.ByteLoad        = RS.Fields("bytesrecvd").Value; 
                Строка.ByteSend     = RS.Fields("bytessent").Value; 
                Строка.Protocol     = RS.Fields("Protocol").Value; 
                Строка.Transport     = RS.Fields("Transport").Value; 
                Строка.Rule         = RS.Fields("Rule").Value;
                Строка.num             = ЧислоЗаписей + 1;
                ЧислоЗаписей         = ЧислоЗаписей + 1;

                    
                //Если Строка.num > 10 Тогда

                //    Прервать;

                //КонецЕсли;        

            RS.MoveNext();
        КонецЦикла;
    КонецЕсли;
    
Сообщить("сумма строк в регистре: " + ЧислоЗаписей);    
Сообщить("Число строк в ТЗ: " + ТЗ.Количество());
ДобавлениеЗаписиВРегистр(ТЗ, RS);

КонецПроцедуры

/////////////////////////////Запись в регистр


&НаСервере
Процедура ДобавлениеЗаписиВРегистр(ТЗ, RS);
    
    НаборЗаписей = РегистрыСведений.ЛогиТМГ.СоздатьНаборЗаписей();
    
    Для Каждого Строка из ТЗ Цикл
        //НаборЗаписей.Отбор.NUM.Установить(ЧислоЗаписей+1);    

        //НаборЗаписей.Прочитать();

        //ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Строка); 

                        
        Запись = НаборЗаписей.Добавить();
        Запись.NUM = Строка.Num;
        Запись.GMTlog = Строка.GMTlog;
        Запись.SrvName = Строка.SrvName;
        Запись.CLUserName = Строка.CLUserName;
        Запись.DstHost = Строка.DstHost;
        Запись.DstHostPort = Строка.DstHostPort;
        Запись.RefSRV = Строка.RefSRV;
        Запись.UserTime = Строка.UserTime;
        Запись.ByteLoad = Строка.ByteLoad;
        Запись.ByteSend = Строка.ByteSend;
        Запись.Protocol = Строка.Protocol;
        Запись.Transport = Строка.Transport;
        Запись.Rule = Строка.Rule;
    
    КонецЦикла;    
    
    НаборЗаписей.Записать()
    
КонецПроцедуры;
   PuhUfa
 
4 - 26.03.18 - 07:28
(3) Структура РС какая?
   МимохожийОднако
 
5 - 26.03.18 - 07:28
После создания набора записей, надо сделать отбор (ты не сделал). Потом прочитать по этому отбору, а потом уже записывать. А так ты либо всё стираешь, т.к. не отобрал, либо делаешь дубли
   xrix
 
6 - 26.03.18 - 07:33
можно по подробнее про отбор и чтение, в какой момент это нужно сделать?
   МимохожийОднако
 
7 - 26.03.18 - 07:42
(6) Ctrl-F1
   xrix
 
8 - 26.03.18 - 07:43
ну спасибо
   ПегийЛунь
 
9 - 26.03.18 - 07:56
   xrix
 
10 - 26.03.18 - 10:05
необходимо создать новую процедуру пере записью и там делать отбор?
 
  Рекламное место пустует
   xrix
 
11 - 26.03.18 - 10:10
в моем понимание это работает так. Есть у меня в регистре скажем 10000 записей, через опреденное время мне снова нужно записать новый набор данных в котором уже 20000 записей 10к из которых уже записаны в регистр, соответственно при после того как сформируется таблица значений из 20000 записей будет происходить сравнение и удалятся эти дубликаты?
   hhhh
 
12 - 26.03.18 - 10:11
(10) ну вы пишете
Процедура ДобавлениеЗаписиВРегистр(ТЗ, RS);
    
    НаборЗаписей = РегистрыСведений.ЛогиТМГ.СоздатьНаборЗаписей();

то есть создаете еще один набор записей. Он совершенно чист. Его и записываете.

Зачем вы это делаете?
   hhhh
 
13 - 26.03.18 - 10:14
(11) вам надо как-то типа
ТЗ = НАборЗаписей.ВЫгрузить();

потом дописываете в конец ТЗ данные

потом 

НаборЗаписей.Загрузить(ТЗ);
НаборЗаписей.Записать();
   Cool_Profi
 
14 - 26.03.18 - 10:22
А теперь представим, что в регистре уже есть 100500 записей...
может, проще писать через менеджер?


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