Имя: Пароль:
1C
1С v8
Запись с такими ключевыми полями существует!
0 Bigbro
 
22.11.13
07:37
понимаю что тема баян, в базе действительно могут быть записи с такими же измререниями, как быть? в наборе записей который я подготовил все уникально, хочется записать либо:
- с удалением предыдущих, перезаписать поверх;
- без удаления просто пропуская эти строки;
как то можно?
1 Wobland
 
22.11.13
07:38
да
2 anaed
 
22.11.13
07:39
попытку не предлагать?
3 Рэйв
 
22.11.13
07:39
НаборЗаписей.Записать(Истина)
4 Bigbro
 
22.11.13
07:40
Записать(Истина) не помогает.
(1) как?
5 Godofsin
 
22.11.13
07:40
Но я бы сначала разобрался, откуда берутся одинаковые записи с уникальными полями. А то наперезаписываешь там.
6 Wobland
 
22.11.13
07:40
(4) можно не читать НЗ, можно пытаться писать туда разные записи
7 chelentano
 
22.11.13
07:41
(4) если Записать(Истина) не помогает, значит, в том наборе, который ты записываешь, есть неуникальные записи
8 Bigbro
 
22.11.13
07:44
одинаковые берутся по той причине что свойство которое я пытаюсь заполнить - заполнено у части объектов. вручную. сейчас я его заполняю программно, скорее всего теми же данными.
(7) а как они могут быть, если я взял этот набор записей с того же регистра? только для другого свойства. периодичность та же, одно из измерений сохранил. второе измерение был отбор один элемент я поставил другой.
9 Bigbro
 
22.11.13
07:47
попробую пояснить. это продолжение прошлой темы..
есть компьютеры. есть регистр свойств объектов, в котором измерениями является объект(компьютеры в данном случае) и свойство - процессор. я выбрал эти записи, заменил свойство другим, значение тоже, пытаюсь записать.. ошибка.
как могут в регистре который я читаю быть неуникальные записи?
10 chelentano
 
22.11.13
07:48
(9) в регистре не могут, а вот после твоих "заменил свойство другим, значение тоже" вполне могут возникнуть
11 Bigbro
 
22.11.13
07:55
(10) если могут возникнуть то я делаю Записать(Истина) и это не должно быть проблемой верно?
но ошибка сохраняется.
12 Bigbro
 
22.11.13
08:13
Запрос.Текст = "ВЫБРАТЬ
                    |ТЗ1.Процессор,
                    |ТЗ1.Уровень
                    |Поместить ТЗ2
                    |из &ТЗ1 как ТЗ1;
                    |////////////////////////////////
                    |Выбрать
                    |    ЗначенияСвойствОбъектовСрезПоследних.Период,
                    |    ЗначенияСвойствОбъектовСрезПоследних.Объект,
                    |    ЗначенияСвойствОбъектовСрезПоследних.Свойство,
                    |    ЗначенияСвойствОбъектовСрезПоследних.Значение как СтароеЗначение,
                    |   ТЗ2.Уровень как Значение
                    |ИЗ
                    |    РегистрСведений.ЗначенияСвойствОбъектов.СрезПоследних КАК ЗначенияСвойствОбъектовСрезПоследних
                    |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2
                    |ПО ЗначенияСвойствОбъектовСрезПоследних.Значение = ТЗ2.Процессор
                    |ГДЕ
                    |    ЗначенияСвойствОбъектовСрезПоследних.Свойство = &ТипПроцессора
                    |    И ЗначенияСвойствОбъектовСрезПоследних.Объект В иерархии (&ГруппаНоменклатуры)";
                    
    Запрос.УстановитьПараметр("ТипПроцессора",_типПроц);
    Запрос.УстановитьПараметр("ГруппаНоменклатуры",_грНом);
    Запрос.УстановитьПараметр("ТЗ1",ТЗ1);
    
    рез=Запрос.Выполнить();
    выборка=рез.Выбрать();
    тз=рез.Выгрузить();
    ТЗ.ЗаполнитьЗначения(_ФактУровень,"Свойство");
    ТЗ.Колонки.Удалить("СтароеЗначение");
    
    НаборЗаписейРегистра = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписейРегистра.Загрузить(ТЗ);
    НаборЗаписейРегистра.Записать(Истина);

взгляните на код, может что-то не так совсем?
13 Wobland
 
22.11.13
08:20
ТЗ.ЗаполнитьЗначения(_ФактУровень,"Свойство");
14 Wobland
 
22.11.13
08:20
(13) хотя.. сторно
15 chelentano
 
22.11.13
08:22
(11) если в твоём новом наборе записей есть дублирующиеся значения, то Записать(Истина) тебе никак не поможет
16 Bigbro
 
22.11.13
08:23
(13)а что не так? там было одно свойство - уникальность была. стало другое - уникальность в полученном наборе должна сохраниться, неуникальность с учетом записей в базе не волнует - потому как записать(истина)..
(15) откуда они могут быть? это тот же самый регистр, я его только что прочитал..
17 1dvd
 
22.11.13
08:24
(16) проверить не судьба?
18 Bigbro
 
22.11.13
08:25
(17) как? там десятки тысяч записей..
подскажите как внутри запроса отладку делать
19 anaed
 
22.11.13
08:27
(18) что в тз1?
20 1dvd
 
22.11.13
08:29
(18) для начала проверь ТЗ1 - Добавь колонку, заполни её единичками, потом сверни ТЗ1 по ключевым полям, единички суммируй при свертке. Если в ТЗ где-то будет больше 1, то ССЗБ
21 Bigbro
 
22.11.13
08:29
ок, это проверим сейчас.
22 anaed
 
22.11.13
08:30
(18) если в тз1 есть записи с повторяющимися процессорами, то по 1му объекту выберет несколько одинаковых записей.
23 Bigbro
 
22.11.13
09:09
в ТЗ1 исходной записи по процессорам разные.
24 1dvd
 
22.11.13
09:13
(23) т.е. один процессор - одна строка?
25 hhhh
 
22.11.13
09:25
(23) вот это что за бред?

                |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2
                    |ПО ЗначенияСвойствОбъектовСрезПоследних.Значение = ТЗ2.Процессор

зачем по значению соединяете? А по объекту не соединяете? Вообще полностью вы Петросян.
26 anaed
 
22.11.13
09:27
(25) может потому что в тз1 нет объекта, только старое и новое значение
27 hhhh
 
22.11.13
09:49
(26) уникальность проверяется по объекту вообще-то. КАк это нет объекта?
28 hhhh
 
22.11.13
09:54
(23) в общем, выяснили. Ваша программа в (12) вообще не проверяет объекты (компьютеры). Легко могло попасть два одинаковых компьютера в выборку.
29 hhhh
 
22.11.13
09:55
(28)+ а процессоров можно хоть тысячу одинаковых. Это не критично.
30 Bigbro
 
22.11.13
09:59
(28) конечно не проверяет.
я подразумеваю что выбираются только одно последнее значение при использовании срезпоследних для данного значения фильтра. я неправ?
(26) да там нет объекта. только соответствие процессора и его производительности.
31 Bigbro
 
22.11.13
10:09
(24) да
(25) потому что если бы у меня было соответствие объекта и нового свойства то задача была бы выполнена.
32 hhhh
 
22.11.13
10:15
(30) если у вас

ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2
                    |ПО ЗначенияСвойствОбъектовСрезПоследних.Значение = ТЗ2.Процессор

разные объекты слева и справа, то получится две строчки одинаковых
33 Bigbro
 
22.11.13
10:19
справа нет объектов вообще. откуда появятся лишние строчки?
я зрительно просматривал таблицу - добавлялась просто новая колонка, никаких задвоений. собственно мне это и нужно было.
34 hhhh
 
22.11.13
10:40
попробуйте

ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |ТЗ1.Процессор,
                    |ТЗ1.Уровень
                    |Поместить ТЗ2
                    |из &ТЗ1 как ТЗ1
35 Bigbro
 
22.11.13
10:54
(34) Шайтан, сработало! почему так? значения точно разные, их там меньше 300 штук глазами все пересмотрел..
36 anaed
 
22.11.13
12:17
(35) глазами? 300 штук? пересмотрел? вы программист или где?

Вам в (20) расписали как за 5 минут проверить на дубли вашу тз1.
37 Bigbro
 
22.11.13
12:23
(36) ну я в Экселе сравнил верхнюю строчку со следующей если интересует как именно сравнил) везде нули - совпадений нет.
строчки отсортировал естественно предварительно.