|
Как дописать объекты в справочник? | ☑ | ||
---|---|---|---|---|
0
Олеся999
28.10.15
✎
10:43
|
Подскажите пожалуйста как лучше доделать ?
Смысл такой мне нужно загрузить объекты в справочник, но если там уже имеются такие объекты то мы с ними ничего не делаем , а если таких нет то мы до записываем. То есть нам нужно сравнивать по коду. Запрос3 = Новый Запрос; Запрос3.Текст = "ВЫБРАТЬ | dbo_FWVer.ID, | dbo_FWVer.Name |ИЗ | ВнешнийИсточникДанных.ТК.Таблица.dbo_FWVer КАК dbo_FWVer"; Результат3=Запрос3.Выполнить(); Для каждого Стр3 из Результат3.Выгрузить() Цикл ID = Стр3.ID; Name = Стр3.Name; Повторы=Справочники.Прошивки_версии.НайтиПоКоду(); Если Повторы = Неопределено Тогда СотрудникОбъект2 = Справочники.Прошивки_версии.СоздатьЭлемент(); СотрудникОбъект2.Код = ID; СотрудникОбъект2.Наименование = Name; СотрудникОбъект2.Записать(); Повторы =СотрудникОбъект2.Ссылка; КонецЕсли; |
|||
1
Ненавижу 1С
гуру
28.10.15
✎
10:45
|
Повторы=Справочники.Прошивки_версии.НайтиПоКоду();
что ищется то? |
|||
2
Любопытная
28.10.15
✎
10:46
|
Лучше в запросе сразу отобрать из первой таблицы только те записи, которых нет в справочнике и уже по ним дописывать данные
|
|||
3
Олеся999
28.10.15
✎
11:04
|
(2)
Типо так что ли? : Повторы=Справочники.Прошивки_версии.НайтиПоКоду(); Запрос3 = Новый Запрос; Запрос3.Текст = "ВЫБРАТЬ | dbo_FWVer.ID, | dbo_FWVer.Name |ИЗ | ВнешнийИсточникДанных.ТК.Таблица.dbo_FWVer КАК dbo_FWVer |ГДЕ | dbo_FWVer.ID <> &Повторы"; Запрос3.УстановитьПараметр("Повторы",Повторы); Результат3=Запрос3.Выполнить(); Для каждого Стр3 из Результат3.Выгрузить() Цикл ID = Стр3.ID; Name = Стр3.Name; СотрудникОбъект2 = Справочники.Прошивки_версии.СоздатьЭлемент(); СотрудникОбъект2.Код = ID; СотрудникОбъект2.Наименование = Name; СотрудникОбъект2.Записать(); (1) Нужно найти код Справочники.Прошивки_версии |
|||
4
Любопытная
28.10.15
✎
11:06
|
Не, совсем не так.
Какое из двух полей таблицы внешних данных у вас должно совпадать с кодом справочника Прошивки_версии? |
|||
5
Олеся999
28.10.15
✎
11:07
|
(4) dbo_FWVer.ID
|
|||
6
Любопытная
28.10.15
✎
11:09
|
Ну вот и делайте левое соединение справочника к вашей внешней таблице по код = Id и потом выбирайте те данные, где ссылки на справочник нет. Примерно так
|
|||
7
разработчик 1с
28.10.15
✎
11:10
|
Для каждого Стр3 из Результат3.Выгрузить() Цикл
бесконечный цикл же будет |
|||
8
Олеся999
28.10.15
✎
11:13
|
(7) ну забыла КонецЦикла;
|
|||
9
Олеся999
28.10.15
✎
11:17
|
(6) "ВЫБРАТЬ
| dbo_FWVer.ID, | dbo_FWVer.Name, | Прошивки_версии.Код, | Прошивки_версии.Наименование |ИЗ | ВнешнийИсточникДанных.ТК.Таблица.dbo_FWVer КАК dbo_FWVer | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Прошивки_версии КАК Прошивки_версии | ПО dbo_FWVer.ID = Прошивки_версии.Код"; А ккое условие будет ? |
|||
10
НЕА123
28.10.15
✎
11:19
|
Справочник.Прошивки_версии.Ссылка IS NULL
|
|||
11
Олеся999
28.10.15
✎
11:48
|
(10) Это куда?
|
|||
12
itlikbez
28.10.15
✎
11:48
|
(7) Не будет там бесконечного цикла.
|
|||
13
НЕА123
28.10.15
✎
11:50
|
(11)
в ГДЕ ЗЫ ты уж, это... скромнее надо быть... |
|||
14
Jonny_Khomich
28.10.15
✎
11:52
|
уууу ... Олеся, ты беда ходячая. Скажи где работаешь, позвоню чтобы узнали про тебя и твои вопросы.
|
|||
15
БатКор
28.10.15
✎
11:58
|
Слушай Любопытную (6) Дело говорит
|
|||
16
Олеся999
28.10.15
✎
12:21
|
А так нельзя ?
Запрос3 = Новый Запрос; Запрос3.Текст = "ВЫБРАТЬ | dbo_FWVer.ID, | dbo_FWVer.Name |ИЗ | ВнешнийИсточникДанных.ТК.Таблица.dbo_FWVer КАК dbo_FWVer"; Результат3=Запрос3.Выполнить(); Для каждого Стр3 из Результат3.Выгрузить() Цикл ID = Стр3.ID; Name = Стр3.Name; СотрудникОбъект3 = Справочники.Прошивки_версии.НайтиПоКоду(ID); Если СотрудникОбъект3 <> ID Тогда СотрудникОбъект2 = Справочники.Прошивки_версии.СоздатьЭлемент(); СотрудникОбъект2.Код = ID; СотрудникОбъект2.Наименование = Name; СотрудникОбъект2.Записать(); Иначе КонецЕсли; |
|||
17
разработчик 1с
28.10.15
✎
12:24
|
(16) запусти
интересно, сколько элементов создаст |
|||
18
rabbidX
28.10.15
✎
12:27
|
Так нельзя.
Нельзя ссылку на справочник со строкой сравнивать. Результат.Выгрузить() помести сначала в таблицу, потом обходи. в (6) + (10) быстрее будет |
|||
19
rabbidX
28.10.15
✎
12:28
|
И имена переменным давай поосмысленней.
|
|||
20
Любопытная
28.10.15
✎
12:30
|
Если СотрудникОбъект3 <> ID Тогда
заменить на Если ЗначениеЗаполнено(СотрудникОбъект3) Тогда И взлетит |
|||
21
Олеся999
28.10.15
✎
12:31
|
(18) (9) Так я пробовала....пишет ошибку : Получение данных из нескольких источников данных недопустимо
|
|||
22
Любопытная
28.10.15
✎
12:33
|
(21) Вероятно хорошо бы данные из внешнего источника завернуть во временную таблицу.
Хотя тоже не факт конечно) |
|||
23
Олеся999
28.10.15
✎
12:34
|
(20) попробовала пишет :
{Документ.SQLДанные.Форма.ФормаДокумента.Форма(432)}: Ошибка при вызове метода контекста (Записать) СотрудникОбъект2.Записать(); по причине: Значение "1" поля "Код" не уникально |
|||
24
cw014
28.10.15
✎
12:34
|
ВЫБРАТЬ
dbo_FWVer.ID, dbo_FWVer.Name, Прошивки_версии.Код, Прошивки_версии.Наименование ИЗ ВнешнийИсточникДанных.ТК.Таблица.dbo_FWVer КАК dbo_FWVer ГДЕ dbo_FWVer.ID НЕ В (ВЫБРАТЬ РАЗЛИЧНЫЕ Код ИЗ Справочник.Прошивки_версии) Так отработает? |
|||
25
Олеся999
28.10.15
✎
12:38
|
(24) {Документ.SQLДанные.Форма.ФормаДокумента.Форма(428)}: Ошибка при вызове метода контекста (Выполнить)
Результат3=Запрос3.Выполнить(); по причине: {(10, 4)}: Таблица не найдена "Справочники.Прошивки_версии" ИЗ <<?>>Справочники.Прошивки_версии) |
|||
26
cw014
28.10.15
✎
12:40
|
(25)СправочниК.Прошивки_версии
|
|||
27
Любопытная
28.10.15
✎
12:40
|
(23) Дык у вас там ID может неуникальные, я ж не знаю, что вы получаете из запроса
|
|||
28
Любопытная
28.10.15
✎
12:41
|
Хотя нет, нормально ж все должно быть
Давай код целиком сюда |
|||
29
Олеся999
28.10.15
✎
12:41
|
(26) тогда ИЗ <<?>>.Прошивки_версии)
|
|||
30
Олеся999
28.10.15
✎
12:42
|
(28) Запрос3 = Новый Запрос;
Запрос3.Текст = "ВЫБРАТЬ | dbo_FWVer.ID, | dbo_FWVer.Name |ИЗ | ВнешнийИсточникДанных.ТК.Таблица.dbo_FWVer КАК dbo_FWVer"; Результат3=Запрос3.Выполнить(); Для каждого Стр3 из Результат3.Выгрузить() Цикл ID = Стр3.ID; Name = Стр3.Name; СотрудникОбъект3 = Справочники.Прошивки_версии.НайтиПоКоду(ID); Если ЗначениеЗаполнено(СотрудникОбъект3) Тогда СотрудникОбъект2 = Справочники.Прошивки_версии.СоздатьЭлемент(); СотрудникОбъект2.Код = ID; СотрудникОбъект2.Наименование = Name; СотрудникОбъект2.Записать(); Иначе КонецЕсли; КонецЦикла; |
|||
31
cw014
28.10.15
✎
12:43
|
(29) Что именно вы из запроса дернули? Попробуйте весь запрос взять
|
|||
32
cw014
28.10.15
✎
12:43
|
И точную ошибку описать
|
|||
33
Любопытная
28.10.15
✎
12:46
|
(30) если НЕ ЗначениеЗаполнено :)
|
|||
34
Любопытная
28.10.15
✎
12:47
|
Нужно же и свою головушку включать немножко)
|
|||
35
Олеся999
28.10.15
✎
12:47
|
(32) {Документ.SQLДанные.Форма.ФормаДокумента.Форма(428)}: Ошибка при вызове метода контекста (Выполнить)
Результат3=Запрос3.Выполнить(); по причине: {(4, 1)}: Поле не найдено "Прошивки_версии.Код" <<?>>Прошивки_версии.Код, |
|||
36
Олеся999
28.10.15
✎
12:50
|
(34) (33) Все заработало спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |