|
1С 8.2 Запись с такими ключевыми полями существует! При программной записи. | ☑ | ||
---|---|---|---|---|
0
Darhon
27.12.13
✎
18:50
|
Добрый вечер! Появилось проблема! Пытаюсь по мере выполнения кода записать регистр сведений. В нем три измерения: Время Пользователь и позывной. И два измерения: менеджер старый и менеджер новый. При попытке записи падает с ошибкой:
Обработка.Присвоение_Менеджеру_Позывного.Форма.Форма.Форма(158)}: Ошибка при вызове метода контекста (Записать) НаборЗаписейРегистра.Записать(); по причине: Запись с такими ключевыми полями существует! : ИсторияИзмененияМенеджеров: Александр Васильевич, 27.12.2013 0:00: Вот код: ТекстЗапроса=""; ТекстЗапроса = "select drv_op.cod_op from drv_op where drv_op.cod_drv="+КодВодителя; НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); НаборЗаписей.ActiveConnection = Соединение; Попытка //Сообщить(ТекстЗапроса); НаборЗаписей.Open(ТекстЗапроса); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Пока не НаборЗаписей.Eof() Цикл МенеджерОПРСВСтарый=НаборЗаписей.Fields("cod_op").Value; НаборЗаписей.MoveNext(); КонецЦикла; МенеджерОПРСВСтарый = Справочники.МенеджерыMySQL.НайтиПоРеквизиту("КодmySQL", МенеджерОПРСВСтарый); НаборЗаписейРегистра = РегистрыСведений.ИсторияИзмененияМенеджеров.СоздатьНаборЗаписей(); НаборЗаписейРегистра.Прочитать(); НовЗапись = НаборЗаписейРегистра.Добавить(); НовЗапись.Время= ТекущаяДата(); НовЗапись.Пользователь=Справочники.Сотрудники.НайтиПоРеквизиту("УИП", ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); НовЗапись.МенеджерОПРСВСтарый = МенеджерОПРСВСтарый; НовЗапись.Позывной= Позывной; ТекстЗапроса=""; ТекстЗапроса = "UPDATE drv_op |SET drv_op.cod_op="+Число(СтрокаТЧ.КодMySQL)+" |where drv_op.cod_drv ="+КодВодителя; НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); НаборЗаписей.ActiveConnection = Соединение; Попытка //Сообщить(ТекстЗапроса); НаборЗаписей.Open(ТекстЗапроса); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; //НаборЗаписей.Close(); Соединение.Close(); НовЗапись.МенеджерОПРСВНовый=СтрокаТЧ; НаборЗаписейРегистра.Записать(); Помогите разобраться пожалуйста! Заранее спасибо! |
|||
1
Wobland
27.12.13
✎
18:51
|
три измерения и два измерения - это пять измерений? я нигде не ошибся?
|
|||
2
Wobland
27.12.13
✎
18:53
|
>Запись с такими ключевыми полями существует!
это значит, что уже есть запись с такими ключевыми полями |
|||
3
Darhon
27.12.13
✎
18:54
|
(2) и 2 реквизита :) Все сплю находу :(
|
|||
4
Darhon
27.12.13
✎
18:56
|
Так ключевых поля 3...то есть 3 измерения. А до записи третьего он не доходит. Да и время должно разным быть...
|
|||
5
Wobland
27.12.13
✎
19:01
|
(4) я что-то у тебя цикла не увидел
|
|||
6
GROOVY
27.12.13
✎
19:07
|
Я извиняюсь, а зачем Вы читаете набор записей?
|
|||
7
МишКа
27.12.13
✎
19:11
|
(4) Время может быть и одинаковым. Точность - секунда.
|
|||
8
AaNnDdRrEeYy
27.12.13
✎
22:52
|
бах, и весь регистр в прочитан, отборов то нет, в вдруг там миллионы записей? и зачем его читать?
НаборЗаписейРегистра = РегистрыСведений.ИсторияИзмененияМенеджеров.СоздатьНаборЗаписей(); НаборЗаписейРегистра.Прочитать(); Где отборы по измерениям? при такой записи всегда будет только одна запись в таблице, та что последней писалась. и то только если Записть(Истина), а так да ошибка 100% НовЗапись = НаборЗаписейРегистра.Добавить(); НаборЗаписейРегистра.Записать(); |
|||
9
Darhon
28.12.13
✎
10:34
|
(8) А как будет правильно ) Подскажите неразумному :)))
|
|||
10
Darhon
28.12.13
✎
10:35
|
У м(7) У меня почему то время вообще 00:00:00 пишется ((
|
|||
11
Sabbath
28.12.13
✎
11:05
|
(10) Может Время это не измерение, а регистр периодический? (что было бы логично) А 0 часов пишется, т.к. периодичность в пределах дня
|
|||
12
Sabbath
28.12.13
✎
11:10
|
(9) если нужно добавить запись в регистр (независимый), то можно просто СоздатьМенеджерЗаписи()
А вообще я не совсем понял код) |
|||
13
Sabbath
28.12.13
✎
11:12
|
А не, судя по НовЗапись.Время это именно измерение
|
|||
14
Sabbath
28.12.13
✎
11:15
|
+(13) тогда по идее надо состав Дата и время. Хотя если регистр называется ИсторияИзмененияМенеджеров, то историю как раз хранят в периодических регистрах, чтобы смотреть срезы на определенную дату
|
|||
15
Darhon
28.12.13
✎
11:18
|
(11) Регистр непериодический...не стал мудрить с периодическим...
|
|||
16
Wobland
28.12.13
✎
11:19
|
(15) недоперепроектировал?
|
|||
17
Darhon
28.12.13
✎
11:20
|
(12) Я бы объяснил...код изменяет внешний источник данных. Изменения записываются в регистр сведений.
|
|||
18
Darhon
28.12.13
✎
11:21
|
(16) Ага...недодумал...
|
|||
19
Darhon
28.12.13
✎
11:22
|
И еще в ресурс МенеджерОПРСВСтарый почему-то попадает значение "Объект не найден" и код объета.
|
|||
20
Sabbath
28.12.13
✎
11:22
|
(15) а по смыслу надо было периодический) Там мутить нечего особо, настроить два свойства и все. Наверняка, дальше тебе будет удобней именно периодический. Как ты будешь получать текущее состояние на дату, брать на максимальную ближайшую дату? Срез последних упрощает это дело)
|
|||
21
Darhon
28.12.13
✎
11:23
|
Да мне текущее состояние брать не придется...мне нужно наоборот вся история изменений одного позывного например, или все изменения одного пользователя...
|
|||
22
Sabbath
28.12.13
✎
11:29
|
(21) Ну короче ты изобрел периодический регистр с помощью измерения Время, хотя можно было без него)
|
|||
23
Darhon
28.12.13
✎
11:31
|
(22) Попробую на период переделать....а что в процедуру записи в регистр добавить добавить, если он периодический?? И как избавиться от "Объект не найден"
|
|||
24
Sabbath
28.12.13
✎
11:39
|
(23) У тебя просто вместо Время будет реквизит по умолчанию Период. Делай с ним то же, что и со временем) И не забудть периодичность настроить, я так понял, тебе в пределах секунды.
Насчет не найденного объекта, надо искать, почему его нет. По идее, если б не было, то и не нашел бы по реквизиту, была бы пустая ссылка. Как вариант пока только мысли, что либо ты там его там удалил по ходу дела, уже после создания записи в регистре. |
|||
25
Darhon
28.12.13
✎
11:42
|
(24) Вот самое странное что это элемент справочника, в справочнике то он есть :) А вообще можно ли сделать это не обработкой а документом, и он будет регистр автоматически заполнять при проведении??
|
|||
26
Wobland
28.12.13
✎
11:47
|
не вникал. какая-то хитровымудренная оболочка для редактирования чужой БД у автора получается. натурально, удаление аппендицита через задний вход ногами в костюме космонавта
|
|||
27
Sabbath
28.12.13
✎
11:48
|
(25) Можно. Делаешь подчинение регистратору и прописываешь в обработке проведения формирование движений конструктором. Будет тебе почти все автоматически. Вопрос только откуда ты берешь данные для движения. Я думаю, из предварительно заполненной ТЧ)
(26) очень похоже на то) |
|||
28
Darhon
28.12.13
✎
11:51
|
(26) БД своя. Только вот отчетности по ней нету никакой...все делается через HiDiSQL. включая изменнения в БД. Поэтому все делают ИТшники. Вот и решил на коленке набросать такую вот фигню... :)
|
|||
29
Darhon
28.12.13
✎
11:52
|
(27) да...основная проблема будет где хранить реквизиты ТЧ до изменения. Создавать таблицу значений если только, но как тогда ее передать в обработку проведения :(
|
|||
30
Wobland
28.12.13
✎
11:57
|
(28) чужая в значении внешняя по отношению к 1с
|
|||
31
Wobland
28.12.13
✎
11:58
|
я тут картинку вздумал для подсистемы нарисовать. и что ты думаешь? пришлось применить более удобные инструменты, нежели 1С. не надо ею везде тыкать
|
|||
32
Sabbath
28.12.13
✎
12:08
|
(29) ну задачу то я не онимаю, потому сложно сказать. Мне лично не совсем понятно, зачем МенеджерОПРСВСтарый, если суть именно в изменении этого менеджера. Как раз старый хранится в предыдущей записи, а ты как бы каждой новой записью определяешь нового. Тогда, вероятно, все эти телодвижения со старым менеджером не нужны
|
|||
33
Darhon
28.12.13
✎
12:50
|
(32) А при первом изменении будет непонятно кто был старым :((
|
|||
34
Sabbath
28.12.13
✎
13:32
|
(33) сделай начальное заполнение по текущим данным
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |