|
регистр сведений следующий набор записей | ☑ | ||
---|---|---|---|---|
0
xrix
26.03.18
✎
07:15
|
Добрый день!
Прошу помощи, так как только начинаю изучать 1с. Есть внешняя СУБД, в ней хранятся логи. Подключаюсь через 1С, через ADODB. Заношу все данные в Таблицу значений и записываю в регистр сведений (не периодический). Скажем через 10 минут мне нужно снова выполнить эту процедуру. Вся проблема в том, что происходит полная перезапись всего того что уже есть в регистре, или же получилось так что записи задваиются, а мне нужно сделать так что бы записывалось только то, чего нет в регистре, т.е. только новые строки в внешней БД. В БД нет уникальных записей, есть строки которые могут полностью повторятся и нет поле ID строки |
|||
1
1Сергей
26.03.18
✎
07:19
|
Покажи как делаешь
|
|||
2
Мимохожий Однако
26.03.18
✎
07:22
|
Информации недостаточно, а кофе для гадания закончилось. Пиши подробно, не стесняйся.
|
|||
3
xrix
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; КонецЦикла; НаборЗаписей.Записать() КонецПроцедуры; |
|||
4
PuhUfa
26.03.18
✎
07:28
|
(3) Структура РС какая?
|
|||
5
Мимохожий Однако
26.03.18
✎
07:28
|
После создания набора записей, надо сделать отбор (ты не сделал). Потом прочитать по этому отбору, а потом уже записывать. А так ты либо всё стираешь, т.к. не отобрал, либо делаешь дубли
|
|||
6
xrix
26.03.18
✎
07:33
|
можно по подробнее про отбор и чтение, в какой момент это нужно сделать?
|
|||
7
Мимохожий Однако
26.03.18
✎
07:42
|
(6) Ctrl-F1
|
|||
8
xrix
26.03.18
✎
07:43
|
ну спасибо
|
|||
9
ПегийЛунь
26.03.18
✎
07:56
|
||||
10
xrix
26.03.18
✎
10:05
|
необходимо создать новую процедуру пере записью и там делать отбор?
|
|||
11
xrix
26.03.18
✎
10:10
|
в моем понимание это работает так. Есть у меня в регистре скажем 10000 записей, через опреденное время мне снова нужно записать новый набор данных в котором уже 20000 записей 10к из которых уже записаны в регистр, соответственно при после того как сформируется таблица значений из 20000 записей будет происходить сравнение и удалятся эти дубликаты?
|
|||
12
hhhh
26.03.18
✎
10:11
|
(10) ну вы пишете
Процедура ДобавлениеЗаписиВРегистр(ТЗ, RS); НаборЗаписей = РегистрыСведений.ЛогиТМГ.СоздатьНаборЗаписей(); то есть создаете еще один набор записей. Он совершенно чист. Его и записываете. Зачем вы это делаете? |
|||
13
hhhh
26.03.18
✎
10:14
|
(11) вам надо как-то типа
ТЗ = НАборЗаписей.ВЫгрузить(); потом дописываете в конец ТЗ данные потом НаборЗаписей.Загрузить(ТЗ); НаборЗаписей.Записать(); |
|||
14
Cool_Profi
26.03.18
✎
10:22
|
А теперь представим, что в регистре уже есть 100500 записей...
может, проще писать через менеджер? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |