Работа с скл из 1с #715056


#0 by Мисти
Уже вижу саму базу - таблицы,представления,синонимы и т.д. Пока непонятно, где я увижу данные, пока их там, наверное, еще нет. Дальше не работает: Ругается: Ошибка при вызове метода контекста (Open) по причине: Произошла исключительная ситуация (ADODB.Recordset): Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с др
#0 by Мисти
Уже вижу саму базу - таблицы,представления,синонимы и т.д. Пока непонятно, где я увижу данные, пока их там, наверное, еще нет. Дальше не работает: Ругается: Ошибка при вызове метода контекста (Open) по причине: Произошла исключительная ситуация (ADODB.Recordset): Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с др
#1 by Мисти
Таблица есть с названием dbo.account
#2 by Wobland
куда?
#3 by ДенисЧ
Контрагенты = Соединение.Execute("select * from account");
#4 by Мисти
Спасибо! А потом Контрагенты.AddNew;? Мне бы еще проверить по реквизиту с названием UI1C, что такого элемента нет?
#5 by Мисти
Я могу одновременно смотреть, что там в этой базе через ManagementStudio и подключаться из 1С?
#6 by Мисти
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Не был задан текст команды для объекта команды.
#7 by Мисти
Wobland, что скажешь?
#8 by Wobland
у меня так:
#9 by ДенисЧ
Блин, я забыл, что у тебя соединение команда...
#10 by Мисти
Спасибо! Что б я без вас делала!
#11 by ДенисЧ
То же самое, что и с нами, только без нас
#12 by Wobland
документацию бы читала. нажеюсь
#13 by Wobland
без нас не интересно. знаешь, каков я бываю в конфигураторе...
#14 by ДенисЧ
Даже слышать об этом не хочу, не то что знать...
#15 by Fragster
#16 by Fragster
#17 by Fragster
#18 by Fragster
#19 by Мисти
па-па, что это бы-ло?
#20 by Мисти
Ну вот, приплыли: {Форма.Форма1.Форма}: Ошибка при вызове метода контекста (AddNew)         Контрагенты.AddNew; по причине: Произошла исключительная ситуация (ADODB.Recordset): Текущий объект Recordset не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки.
#21 by Мисти
Wobland, я тебя вижу!
#22 by Мисти
Я что-то не так написала, или это база не для данных, а для красоты?
#23 by ДенисЧ
а зачем так делать? Кто мешает сказать insert?
#24 by Мисти
Интересный вопрос - зачем. Затем, что этот вариант был в предыдущей подсказке. insert - что?
#25 by Мисти
И почему insert может сработать, а AddNew нет?
#26 by ДенисЧ
Так. А теперь все дружно скажем хором - , бегом читать учебник по SQL!
#27 by ДенисЧ
Я даже ссылочку не поленился найти
#28 by Мисти
Спасибо! Я первую тему как раз с этого и начинала!
#29 by Мисти
Отлично-прекрасно, мне это нравится! INSERT INTO Customers( city, cname, cnum ) VALUES( 'Новосибирск', 'Петров', 2010 ) Всё понятно, непонятно, как это из 1С написать. Напишите мне, люди добрые, последний кусочек! Мне надо в таблице account поискать строку по полю UI1C, и если найдено - обновить, если не найдено - добавить. Ну и кучу реквизитов заполнить, это я уж справлюсь.
#30 by Мисти
Сочинять самой??
#31 by Fragster
совмести вместе и ... причем     Параметры.SetValue(...); ...
#32 by Мисти
контрагенты = соединение.Execute Пока есть вот что. Дальше-то что?
#33 by Мисти
ау? Я уже всё остальное переделала, даже ужин приготовила.
#34 by Dmitry1c
МОИ КРОВАВЫЕ ГЛАЗА
#35 by Dmitry1c
покорми, а? :( хочу домашней еды...
#36 by Мисти
Да ну, из фарша покупного!
#37 by Мисти
Параметры = Новый COMSafeArray("VT_VARIANT", 2); - вот это что?
#38 by Мисти
- вот там хорошо написано, только там выгрузка из скл, а мне пока загрузить туда нужно.
#39 by Мисти
- и там тоже чтение, а не запись.
#40 by Мисти
Тут обновление записи, а мне нужно добавление
#41 by Мисти
Наверное, тут вариант мне подходящий! 2. Выбрать категорию товаров (таким образом, выборку можно сделать почем угодно): ТекстЗапроса = "SELECT category_id FROM categories WHERE name="+"'"+ КатегорияНаименование+"'"; 3. Обновить цену: ТексЗапроса = "UPDATE products SET price="+"'"+Цена+"'"+ "WHERE model="+"'"+ТоварыНаименование+"'"+ " and category_id="+"'"+Категория+"'"+ " and brand_id="+"'"+Бренд+"'"; 4. Добавить товар:
#42 by Мисти
ТекстЗапроса = "SELECT * FROM account WHERE UI1C="+"'"+ КатегорияНаименование+"'"; А как туда переменную вставить? СтрКонтр.UI1C - я должна искать по этому реквизиту
#43 by Мисти
"SELECT * FROM account WHERE UI1C= ..... - как туда параметр вставить?
#44 by Fragster
,
#45 by Fragster
-›
#46 by Мисти
ТексЗапроса = "SELECT * FROM account WHERE [UI1C=] = ?"; КонецЕсли; Потом надо это как-то зафиксировать или можно переходить к следующей строке? Соединение.Close; Так? И как вставить строку вопрос остался.
#47 by Fragster
если ты хочешь изменять данные рекордсетом, то источником для него должна быть таблица, а не запрос.
#48 by Мисти
рекордсетом - непонятно вообще, а по поводу источника - как бы слова понятны, но как получить таблицу, а не запрос, и почему у меня - запрос, а не таблица... Непонятно!
#49 by Мисти
Что не так-то?
#50 by ДенисЧ
Ты наотрез отказываешься читать документацию. В ответ я применяю к тебе санкции - отказываюсь отвечать на твои вопросы до тех пор, пока ты не докажешь, что оную документацию ты прочитала.
#51 by Repey
Я вот так по диагонали поглядел - и не понял. Не понял - что ты хочешь делать с теми данными, которые получаешь из скуля. Расскажи, пожалуйста. Простыми словами.
#52 by Мисти
По ссылке в 27 я всё прочитала, но там же - просто скл, без 1с! Я должна в таблице account поискать строку с известным мне значением в столбце UI1C, и если найду, то обновить там поля (20 штук), а если нет, до добавить строку и заполнить эти поля. Всё! Потом этот же фокус мне нужно будет повторить еще раз 10 с разными таблицами, для заполнения этих данных я написала уже 1500 строк на 1С.
#53 by Repey
А если вдруг найдешь несколько строк? Скуль запросы на добавление и обновление уже сочинила? Покажи.
#54 by Мисти
Там может быть только одна такая строка. в всё, что я сочинила, используя всякие образцы.
#55 by Мисти
Вот этот образец из мне подойдет? 4. Добавить товар: ТексЗапроса = "INSERT INTO products SET model="+"'"+Товар+"',"+"price="+"'"+Цена+"',"+"enabled="+"'"+АктивныйДаНет+"',"+"category_id="+"'"+Категория+"',"+"brand_id="+"'"+Бренд+"'"; Соединение.Close; Только мне бы - добавить сначала пустую строчку, а потом заполнить поля поштучно КонтрагентыСКЛ.Fields("AccountId").Value = СтрКонтр.AccountId; чтоб наглядно было.
#56 by Repey
Конечно всего одна строка! Но если все-таки найдешь несколько? Отработай сначала изменение и вставку строки без 1С. Примеры тут вижу. Надо полагать, когда выезжаете на шашлычок - ты сперва прожариваешь пустые шампуры, а потом (по одному!) нанизываешь и жаришь кусочки мяса.
#57 by Мисти
мне нужно, чтобы хотя бы написано было раздельно, а не в одну строчку, иначе я концов не найду. Я не могу отработать без 1С, я через 1С подключаюсь и данные у меня все в 1С.
#58 by Мисти
А так- пожалуйста - INSERT INTO account      WHERE  [UI1C=] = ? ( поле1,поле2,...,поле20 ) VALUES( 'поле1', 'поле2',..., поле20 )
#59 by Мисти
Похоже?
#60 by Fragster
нет
#61 by Мисти
Ну а как надо? Мне больше ничего в голову не приходит.
#62 by Мисти
Что неправильно? Люди, мне завтра всю выгрузку сдавать! (1 таблицы пока)
#63 by Staffa
странно, что никто не дал ссылку на вышеданном ресурсе: есть пример: INSERT INTO Production.UnitMeasure (Name, UnitMeasureCode, там же описано применение условий WHERE
#64 by Мисти
Спасибо! Там всё подробно и довольно понятно. Сейчас попробую применить. Но только всё равно ж - просто скл, а не из 1С!
#65 by Мисти
Не-а, не понимаю. Нет там моего примера. Все 3 части -  SELECT, WHERE и INSERT описаны отдельно, а мне их нужно как-то объединить.
#66 by МихаилМ
культурней использовать и метод AddNew
#67 by Мисти
Я б заплатила за работоспособный примерчик. А вот простой вопрос - все таблицы в базе называются (я их видела) dbo.Account и тд , везде dbo. (объект базы данных?), а даже сам программист этой базы мне в качестве примера написал SELECT * FROM Account Так надо писать dbo. или нет? А то в очередном примере вижу - INSERT dbo.Products
#68 by SSSSS_AAAAA
И как вы себе представляете объединение трех совершенно разных команд? dbo - название схемы. Если эта схема стоит по умолчанию, то ее можно не указывать.
#69 by Мисти
Ну откуда я знаю? SELECT из Account WHERE ид = пар1; Если найден, то UPDATE; Иначе INSERT И задать всн поля.
#70 by SSSSS_AAAAA
Ну хотите то вы, а не кто-нибудь? if exist(select из Account) Update ... else Insert into ... Какая буква непонятна?
#71 by Мисти
Как написать поля заполнения раздельно, а не в 1 строчку все?
#72 by ДенисЧ
в смотри
#73 by SSSSS_AAAAA
Вы не знаете как собрать в 1С текстовую строку произвольной длины? Такой текст никогда не видели?
#74 by Мисти
Я не вижу там похожего примера Ну и будет список из 20 плей, а потом список из 20 значений - они даже на один экран не влезут, это неудобно. Как-то так нельзя?     Контрагенты.Fields("ID").Value         = Контрагенты1С.ИдентификаторBPM; //Идентификатор BPM
#75 by ДенисЧ
А это что, извините за выражение? За**па конская???
#76 by SSSSS_AAAAA
Серверу нужна строка команды и ваши предпочтения по рисованию текста его совершенно не интересуют. Это запрос. Вы же 1с-освские запросы рисуете на несколько экранов и не переламываетесь? Вот и тут точно так же нарисуйте.
#77 by Мисти
Из этого примера! rs.AddNew rs.Fields("CompanyName") = "Test rs company"
#78 by SSSSS_AAAAA
Если Вам нужны тормоза работы только через АДО, то читайте доку по этому самому АДО и не морочьте людям голову. Нравится вам этот пример? Это пример использования нотации АДО вместо нативного Update. Что в нем непонятно?
#79 by Мисти
Сыр-бор начался с того, что AddNew не сработало. Так что мне вся эта методика наверное, не подходит.
#80 by Мисти
if exist(select из Account) - прямо так можно в 1С писать? Или Для Каждого СтрКонтр из ТабКонтр Цикл   ОбработкаПрерыванияПользователя; ТекстЗапроса = "SELECT * FROM account WHERE [UI1C] = ?"; ТекстЗапроса = "UPDATE INTO account SET  Name=?,AccountOwnerShipId= ?
#81 by Мисти
Выловила синтаксические ошибки. Похоже?         ОбработкаПрерыванияПользователя;
#82 by SSSSS_AAAAA
1. Вместо SELECT * напишите SELECT 1, ибо весь набор полей совершенно тут не нужен. 2. Откуда взялось UPDATE INTO ? Точнее INTO после UPDATE?
#83 by Мисти
INTO - выкинуть! SELECT 1 - логично, поправлю.
#84 by Мисти
{Форма.Форма1.Форма}: Ошибка при вызове метода контекста (Parameters)         Соединение.Parameters.Value = СтрКонтрСКЛ.UI1C;          по причине: Произошла исключительная ситуация (ADODB.Command): В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру. Есть такая таблица, есть такое поле, правда записи нет ни одной пока и перед названием таблицы dbo. Куды бечь?
#85 by SSSSS_AAAAA
Проверять коллекцию параметров. Ибо речь ведь про неё, не так ли? Искать, куда делся Соединение.Parameters
#86 by Мисти
В базе я его вижу, имя совпадает. Как еще искать?
#87 by Jaap Vduul
Каша какая-то. >> Выборка = Соединение.Execute(ТекстЗапроса); Так можно в случае, когда в переменной Соединение находится объект типа ADODB.Connection А судя по ошибке у тебя там ADODB.Command, поэтому надо так: Соединение.Commandtext = ТекстЗапроса; // только из цикла надо это вынести
#88 by SSSSS_AAAAA
А при чем тут база? Речь о самой коллекции параметров, а не о их значениях.
#89 by Мисти
Почему из цикла вынести, если мне нужно найти все строчки в цикле?
#90 by Мисти
Конечно, каша! Я ж куски тащу из разных примеров, мне ж никто не может стройно 4 строчки написать!"!!
#91 by SSSSS_AAAAA
Их никто и не напишет.
#92 by Jaap Vduul
Присвоение текста запроса вынести, он ведь не меняется в цикле, только значения параметров.
#93 by Мисти
Так как переписать этот кусок? Для Каждого СтрКонтр из ТабКонтр Цикл
#94 by Wobland
>Соединение.Parameters.Value вот откуда в этом месте нулевой параметр? может (страшно говорить) MSDN?
#95 by Мисти
Вот отсюда украла.     "SELECT TOP 1 Что не так?
#96 by SSSSS_AAAAA
Полное отсутствие понимания что и как в этом куске работает.
#97 by Мисти
Ну так объясните!
#98 by Wobland
как-то так:
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С