|
работа с sql из 1С | ☑ | ||
---|---|---|---|---|
0
Мисти
09.06.14
✎
08:46
|
Пока ничего непонятно.
Есть небольшая база (для обмена данными), сделанная непосредственно в скл. Мне надо как-то к ней подключиться и в известные поля положить известные мне данные. Как это делают? |
|||
1
Поpyчик-4
09.06.14
✎
08:57
|
||||
2
butterbean
09.06.14
✎
08:58
|
какие же все-таки ленивые бывают люди
|
|||
3
Поpyчик-4
09.06.14
✎
08:59
|
(2) ТС, ну одно слово, сам понимаешь.
Не взлетит у неё, нутром чую. |
|||
4
Мисти
09.06.14
✎
09:24
|
Я первым делом сама поискала в яндексе, ничего не нашла.
По второй ссылке в (1) кое-что, но тоже не всё. А нет ли где полноценных инструкций? (3) Чё это не взлетит? |
|||
5
ДенисЧ
09.06.14
✎
09:27
|
Уууу.....
Шоу маст гоу он.... |
|||
6
mikecool
09.06.14
✎
09:37
|
(4) ищи в гугле )
|
|||
7
Мисти
09.06.14
✎
09:38
|
Ну серьезно! Неужели никто не делал?
|
|||
8
ДенисЧ
09.06.14
✎
09:40
|
(7) Нет. Вообще никто и никогда. Ты уникальная
|
|||
9
andreymongol82
09.06.14
✎
09:41
|
(7) Даю подсказки. Можно как п оотдельности, так и вместе
ADODB, Внешние источники данных. |
|||
10
Мисти
09.06.14
✎
09:41
|
(8) Предполагаю, что это юмор.
Какими источниками пользовались остальные? Как выглядят кусочки программы? |
|||
11
ДенисЧ
09.06.14
✎
09:43
|
(10)
соед = СоединитьсяСSQL(); стрЗапрос = "BEGIN TRAN"; соед.CommandText = стрЗапрос; соед.Execute(стрЗапрос); Вот тебе примитивный кусок кода Функция СоединитьсяСSQL() Соединение003 = Новый COMОбъект("ADODB.Connection"); строкаПодключения = Константы.СтрокаПодключения003.Получить(); //строкаПодключения = "driver={SQL Server};SERVER=PH-1CAPP-04\TESTSQL;DATABASE=B1_DChernyaev; User Id=d.chernyaev; Password=123698745"; Попытка Соединение003.Open(строкаПодключения); Исключение ЗаписьЛога("", "Не смогли подключиться к sql-базе: " + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = Соединение003; Cmd.CommandType = ТипКомандыАДО("adcmdtext"); Cmd.CommandTimeout = 600; Возврат Cmd; КонецФункции |
|||
12
Мисти
09.06.14
✎
09:57
|
(11) Спасибо! Кое-что проясняется.
Таблица называется Invoice, мне надо создать новую запись и заполнить поля InvoiceNumber и InvoiceDateю Как это написать? |
|||
13
ДенисЧ
09.06.14
✎
09:58
|
(12) Ну уж нет... Бегом читать учебник...
|
|||
14
Мисти
09.06.14
✎
09:58
|
у меня еще останется куча задач по поиску нужных для выгрузки данных в 1С - они в разных справочниках и документов,зависят от разных условий и т.д.
(13) Так какой учебник? Я с этого и начала! |
|||
15
Мисти
09.06.14
✎
10:00
|
По сути - у меня с скл дел не много - считать все данные нескольких таблиц и заполнять несколько таблиц, даже условий никаких не надо - берем всё подряд. Да, и очистить после себя!
|
|||
16
ДенисЧ
09.06.14
✎
10:02
|
(14) Например, http://firststeps.ru/sql/sql1.html
|
|||
17
Мисти
09.06.14
✎
10:03
|
Нашла кусочек.
Похоже? ВЫБРАТЬ | dbo_orders.Ссылка, | dbo_orders.name, | dbo_orders.idorder, | dbo_orders.idcustomer.idcustomer КАК idcustomer, | dbo_addclassification.name КАК name1, | dbo_customer.addnum |ИЗ | ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_orders КАК dbo_orders | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_custom er КАК dbo_customer | ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ecad_okon.Таблица.dbo_addcla ssification КАК dbo_addclassification | ПО dbo_customer.idaddclassification1 = dbo_addclassification.Ссылка | ПО dbo_orders.idcustomer = dbo_customer.Ссылка |ГДЕ | dbo_orders.name = &name" |
|||
18
Мисти
09.06.14
✎
10:21
|
SELECT *
FROM Invoice - из того, что там написано, мне, походе, надо это. - ну, чтобы считать. А из 1С-то как это написать? |
|||
19
zmaximka
09.06.14
✎
10:30
|
т.е. подключиться к базе уже получилось?
|
|||
20
Мисти
09.06.14
✎
10:34
|
(19) А у меня нет пока этой базы, ее делаю не я, и она еще вообще не готова.
У меня куча работы по совмещению реквизитов (штук 100!) в 1С и в их базе, по поиску нужных данных в 1С для выгрузки и по правильному размещению данных в 1С считанных, а сам факт подключения (считывания и записи)- технический, мне надо только знать, как это выглядит, чтобы потом углубиться в свои задачи. |
|||
21
Apokalipsec
09.06.14
✎
10:37
|
(20) Тебе значит из скуля ничего выбирать не надо. Будешь просто дописывать во внешний источник. Сделай запрос в 1С и пропиши названия полям соответственно названиям колонок в таблице бд.
|
|||
22
Мисти
09.06.14
✎
10:41
|
Так мне, получается, в запросе и названия не надо прописывать!
селект олл - и готово! А потом - для каждого Стр из выборка Цикл Объект1С.Реквизит1С = Стр.РеквизитСКЛ Как написать обращение-то? |
|||
23
Segate
09.06.14
✎
11:38
|
(0) Позовите программиста лучше ) Быстрее будет. А по хорошему - подключаешься к базе и используешь банальные Insert и update.
|
|||
24
Kalambur
09.06.14
✎
11:41
|
(23) да она все время тут отжигает, иногда даже везет, пишут все за нее, пока не надоест ))
|
|||
25
Мисти
09.06.14
✎
12:03
|
Если б я знала эти 2 фразы - я бы подсказала.
|
|||
26
SSSSS_AAAAA
09.06.14
✎
12:14
|
(25) Какие ЭТИ? Какие 2?
|
|||
27
Мисти
09.06.14
✎
12:27
|
Как считать поля из базы и как туда добавить свои данные.
Уже ж вырисовывается! В 11 - соед = СоединитьсяСSQL(); стрЗапрос = "BEGIN TRAN"; соед.CommandText = стрЗапрос; соед.Execute(стрЗапрос); Мой стрЗапрос будет "SELECT * FROM Invoice" Где я потом получу данные? И очистить! Записать, наверное, сложнее, но всё равно ж - наверное, как с регистром - создать запись, заполнить столбцы и сохранить. - еще 2 волшебных слова. |
|||
28
Segate
09.06.14
✎
12:30
|
(27) Еще раз. читайте документацию по SQL, зайдите в менеджер SQL попробуйте в консоли сделать то что вы хотите, как только получится, скопируйте текст в 1с, и добавьте строку подключения.
|
|||
29
SSSSS_AAAAA
09.06.14
✎
12:35
|
(27) соед.Execute(стрЗапрос); - это выполнение инструкции, не возвращающей набора данных.
rsDoc = Соединение.Execute(strSQL); - и, о чудо, в rsDoc мы обнаруживаем выданный запросом набор данных. Далее, как обычно, rsDoc.next и, например, КодПлатежа = rsDoc.Fields("uniq").Value; для чтения значения конкретного поля. Все это есть в доке по ADO раз уж эта технология выбрана для доступа к внешним данным. Эту доку читать не пробовали? |
|||
30
catena
09.06.14
✎
12:37
|
>>И очистить!
Ну точно так же! DELETE * FROM Invoice |
|||
31
Segate
09.06.14
✎
12:38
|
(30)для слабаков. в такой формулировке Drop Быстрее отработает
|
|||
32
Мисти
09.06.14
✎
13:25
|
(29) А в чем разница? Только в том, что возвращается значение?
|
|||
33
Мисти
09.06.14
✎
13:26
|
Где бы это описание найти? - "Все это есть в доке по ADO"?
|
|||
34
ДенисЧ
09.06.14
✎
13:29
|
(33) А поискать в интернете не пробовала?
g adodb.connection - там много чего интересного есть |
|||
35
Мисти
09.06.14
✎
13:36
|
(34) Я пробовала, но недолго. Я как-то не так яндекса спрашиваю и мне вываливается совсем не то.
|
|||
36
Segate
09.06.14
✎
13:39
|
(35) У нас разные яндексы, у меня например 3я ссылка сверху ведет на мсдн. А у вас?
ЗЫ это наверное санкции... |
|||
37
Segate
09.06.14
✎
13:40
|
||||
38
Мисти
09.06.14
✎
13:42
|
(37) О! Я по-английски-то не очень - так - "как пройти к автобусу".
А что, по-русски нет?? |
|||
39
Segate
09.06.14
✎
13:45
|
(38) сколько можно? Тебе предлагают уже готовое, ты и это не хочешь почесаться и взять. Там текста на 2 страницы, тебе нужно всего пара обзацев. словарик в руки и вперед
|
|||
40
Woldemar177
09.06.14
✎
13:46
|
Вопрос (0) а что за база то? Оракловская на скотине?
|
|||
41
Segate
09.06.14
✎
13:46
|
||||
42
Серго62
09.06.14
✎
13:54
|
(33) >> Где бы это описание найти? - "Все это есть в доке по ADO"?
Вот здесь: http://www.askit.ru/custom/progr_admin/m13/13_03_06_ado_recordset_updating.htm |
|||
43
Поpyчик-4
09.06.14
✎
13:56
|
(41) От этой ссылки Мисти и вовсе станет скорбной на голову. Там же PHP, неведом..... ....я
|
|||
44
Segate
09.06.14
✎
13:58
|
(43) какая разница то? После создания адодб - на любом языке писать одинакого...
|
|||
45
Поpyчик-4
09.06.14
✎
13:59
|
(44) Для кого как. Для тебя и меня разницы нет.
|
|||
46
Мисти
09.06.14
✎
14:10
|
в 42 мне очень нравится! Спасибо!
|
|||
47
Мисти
09.06.14
✎
14:12
|
Dim rs
Set rs = CreateObject("ADODB.Recordset") rs.CursorType = 1 rs.LockType = 3 rs.Open "select * from dbo.customers", cn rs.AddNew rs.Fields("CompanyName") = "Test rs company" rs.Fields("Country") = "Germany" rs.Fields("CustomerId") = "TESTR" rs.Update |
|||
48
Мисти
09.06.14
✎
14:14
|
Не все слова понятны.
Dim rs? Set rs = CreateObject("ADODB.Recordset") - это прямо в 1С можно Написать? Recordset - это название базы? или чего? (ну не таблицы же!) |
|||
49
Мисти
09.06.14
✎
14:15
|
rs.CursorType = 1
rs.LockType = 3 - это тоже непонятно. Зато понятно вот это!! rs.AddNew rs.Fields("CompanyName") = "Test rs company" rs.Fields("Country") = "Germany" rs.Fields("CustomerId") = "TESTR" rs.Update Именно тут основное поле моей деятельности - надо сопоставить их поля с нашими. |
|||
50
Segate
09.06.14
✎
14:22
|
(49) скажи нам честно, ты троллишь так? )
ты берешь код для VB копируешь его в 1с и мечтаешь, что все взлетит? |
|||
51
Kalambur
09.06.14
✎
14:26
|
(50) пока ей не напишут рабочий код, так и будет :)
|
|||
52
Мисти
09.06.14
✎
14:27
|
rs.Fields("Country") = "Germany" - вот такая строчка в 1С не сработает?
|
|||
53
Segate
09.06.14
✎
14:30
|
нет =)) ругнется, на точку с запятой. инфа 146%
|
|||
54
Серго62
09.06.14
✎
14:36
|
(48) Это текст на vbs, под 1с его нужно адаптировать
|
|||
55
ttk
09.06.14
✎
14:38
|
читать проще через внешние источники данных(если версия платформы позволяет)
пишем через рекордсет |
|||
56
Серго62
09.06.14
✎
14:39
|
(55) если писать все равно через рекордсет, то зачем с внешним источником заморачиваться?
|
|||
57
ttk
09.06.14
✎
14:41
|
(56) я так понял ТС скл скл не знает, проще запрос конструктором на 1с наклепать
|
|||
58
Мисти
09.06.14
✎
14:44
|
Давайте совсем просто. Без подключения, буду писать пока "тело".
Есть таблица Invoice, надо заполнить поле InvoiceNumber. Как это написать на 1С? |
|||
59
МихаилМ
09.06.14
✎
14:47
|
||||
60
Segate
09.06.14
✎
14:47
|
"INSERT INTO Invoice (InvoiceNumber)
VALUES (InvoiceNumber1c)" Так как-то должно сработать |
|||
61
Мисти
09.06.14
✎
14:50
|
А это написать в стрЗапрос из (11)?
А если разных полей в 1 записи 20 и записей 50 - наверное, как-то можно сначала эту кучу создать, а потом записать? Не с каждым же полем в базу лазить? |
|||
62
Мисти
09.06.14
✎
14:51
|
(59) Там в основном описание бед и ошибок.
|
|||
63
ttk
09.06.14
✎
14:53
|
(61) "INSERT INTO Invoice (InvoiceNumber)
VALUES (InvoiceNumber1c,p2_1c,...,pN_1c)" |
|||
64
Мисти
09.06.14
✎
14:55
|
"INSERT INTO Invoice (InvoiceNumber,р2,р1) ?
Т.е. сначала перечислить все их поля, потом все свои значения? |
|||
65
Мисти
09.06.14
✎
14:56
|
Если у них есть описание типа, мне не надо никак типы описывать? Главное - передавать правильного типа?
|
|||
66
Серго62
09.06.14
✎
14:58
|
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = СтрокаСоединения; Соединение.Provider = "Provider=SQLOLEDB.1"; // Соединение.CommandTimeout = 0; // Бесконечно долгое ожидание выполнения команды Соединение.ConnectionTimeout = 0; // Бесконечно долгое ожидание ответа от сервера // Соединение.Open(); // РасхНакл = Новый COMОбъект("ADODB.Recordset"); РасхНакл.CursorType = 1; РасхНакл.LockType = 3; ТекстЗапросаНакл = "select * from ИмяТаблицы"; РасхНакл.Open(ТекстЗапросаНакл, Соединение); РасхНакл.AddNew(); РасхНакл.Fields("ИмяПоляТаблицы").Value = Какоетозначение; // РасхНакл.Update(); Как-то так... |
|||
67
ttk
09.06.14
✎
15:01
|
(64) да
|
|||
68
Мисти
09.06.14
✎
15:07
|
66 Спасибо!
67 - всё равно, перечислять в каждой команде по полю, или задать списком? (мне удобнее - по полю, чтобы было видно) |
|||
69
ttk
09.06.14
✎
15:16
|
ну ты можешь сформировать строку запроса скл как хочешь
|
|||
70
Segate
09.06.14
✎
15:19
|
(69) не... она не может. вот так надо: "Ты можешь ctrl+c Ctrl+v как напишут"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |