Имя: Пароль:
1C
1С v8
Подскажите по запросу sql
0 rikodroo
 
28.03.13
14:49
Из 1с (из ТЗ) формирую массив (не знаю как правильно назвать, м.б. кортежи) вида:

(1,пирог,200),
(2,булка,20),
(3,пироженка,60)

В базе SQL у меня есть таблица MyTable с полями (id,tovar,price). Таблица эта не пустая, и я хочу эту талицу обновлять и дополнять новыми (id это ключевое поле - это код товара).

У меня идея, что нужно из передаваемого из 1с массива кортежей сделать select-ом выборку и дальше использовать оператор merge, но не получается ничего (не удается такую выборку сделать). Вспомогательные таблицы на сервере SQL делать нельзя. подскажите как лучше и вообще возможноли такое реализовать?
1 ДенисЧ
 
28.03.13
14:57
Если MySQL, то там есть update or insert оператор...
2 sda553
 
28.03.13
14:58
Очень просто,
1. в 1С обходишь циклом таблицу и формируешь текст из insertов которые потом пускаешь запросом к sql
2. Делаешь регистр под свой кортеж, в sql толкаешь функцию перекидывания из регистра в mytable
3 rikodroo
 
28.03.13
15:02
(2) это получается, если в ТЗ 5000 строк, то регистр нужно делать и перезаписывать, а также построчно что-ли insert делать? Это же медленно будет очень.
4 rikodroo
 
28.03.13
15:06
(1) угу, операторы есть, но как записать в условии тогоже update , чтобы он пробегал по первому полю передаваемого массива кортежей?
5 sda553
 
28.03.13
15:07
Это не регистр делать, а так же insert писать, это или или.
5000 строк это как раз фигня.
Т.е. РегистрСведений.Загрузить ну или какая то там функция у регистра есть загрузки из ТЗ.


Потом вызываешь заготовленную exec merge_mytable которая сделает все остальное.

Второй вариант, это тест sql запроса динамически сформировать из 5000 строк, это не так много
6 sda553
 
28.03.13
15:09
А лучше вообще скажи зачем, наверняка велосипед для тебя уже изобретен.
7 rikodroo
 
28.03.13
15:13
(6) нету велосипеда. Обмен с сайтом такой нужен. Писать прямо в базу.

В РС писать проблем нет, непонятно только зачем, у меня в ТЗ есть все - оно храниться не должно и ненужно.

А что должна делать ф-я exec merge_mytable? Мне веть как-то в запрос будет нужно всеравно передать строки этой ТЗ.
8 Sammo
 
28.03.13
15:23
(30) Что значит долго? Какая скорость нужна?
9 sda553
 
28.03.13
15:29
(7) Потому что ТЗ оно только в памяти, а у РС есть таблица в БД. Поэтому строки передавать н очень тоти надо, а только делать что то вроде

insert into site.mytable select _fld023,_fld024,_fld025 from 1S._InfoReg1234 (nolock)

и все.

А обме с сайтом правильней делать через веб сервис этого сайта. Т.е. 1С подключается к веб сервису сайта, авторизуется и вызывает функцию передачи этой ТЗ. Сайт прнимает и на своем php или что там еще начинает все это в свою базу лить.

Либо файловый обмен, т.е. у сайта есть фтп, туда выкладывает 1С файлики, сайт их по расписанию ест. Легко ловить косяки.
10 rikodroo
 
28.03.13
15:38
(8) наибольшая
11 rikodroo
 
28.03.13
15:44
(9) ну insert и так нормально сделать можно типа:

INSERT INTO `MyTable` (id, tovar, price)
VALUES
(1,пирог,200),
(2,булка,20),
(3,пироженка,60)
12 rikodroo
 
28.03.13
15:47
(9) таблица регистра это таблица скуля на котором 1с, а таблица приемник на другом сервере (mysql). Потому, тут тоже не все просто наверно?