Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Нужно с 1С 8.2 получить таблицу и с данным этой таблицы обновить таблицу в SQL 2000. Таблицу с 1С я уже получил, но вот только не понимаю как загрузить ее в SQL не получается. Вот примерные наброски того чего сделал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2011, 16:11 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Для операций, не подразумевающих получение данных надо использовать RS.Execute ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2011, 17:36 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
А так? ЗапросДобавление = "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | "+FacturaID+")"; RS.Execute(ЗапросДобавление); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 07:03 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
rigusА так? ЗапросДобавление = "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | "+FacturaID+")"; RS.Execute(ЗапросДобавление); Вот что пишет. {Форма.ФормаОтчета1.Форма(119)}: Метод объекта не обнаружен (Execute) RS.Execute(ЗапросДобавление); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 08:40 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Execute -это метод ADODB.Connection Т.е в Вашем случае нужно чтото типа АДОДБКоннект.Execute(ЗапросДобавление); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 08:50 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
rigusExecute -это метод ADODB.Connection Т.е в Вашем случае нужно чтото типа АДОДБКоннект.Execute(ЗапросДобавление); В этом случае пишет {Форма.ФормаОтчета1.Форма(119)}: Ошибка при вызове метода контекста (Execute) АДОДБКоннект.Execute(ЗапросДобавление); по причине: Типы не совпадают (0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 08:55 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Приведите скрипт создания таблицы. (В MS правой кнопкой на таблице сценарий используя create) Это нужно чтобы понять какие типы у Вас в sql таблице. и приведите что Вы пытаетесь туда закинуть т.е. нужно чему равно ваше значение ЗапросДобавление В общем Вам нужно отладить ваш sql запрос для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 09:41 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
на мой взгляд конструкции типа ЗапросДобавление = "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | "+FacturaID+")"; RS.Execute(ЗапросДобавление); не айс... лучше сделать на самом sql-сервере хранимую процедуру, куда засунуть все эти инсерты и прочие конструкции, а из 1С уже вызывать эту хранимую процедуру, передавая туда нужные параметры... да и работать будет быстрей, т.к. сама sql-конструкция будет выполняться на стороне сервера все-таки... как пример: 1. создать на sql-сервере хранимую процедуру sp_AddRecords, где есть нужная конструкция из INSERT 2. а из 1С сделать примерно так СоединениеСSQL=АДОДБКоннект.Open(стрПодключения) Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = СоединениеСSQL; Cmd.Prepared = 1; Cmd.CommandText = "sp_AddRecords " + параметр1 + "," + параметр2 + "," + параметр3; Cmd.Execute(); СоединениеСSQL.Close(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 10:02 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
КонецЦиклана мой взгляд конструкции типа ЗапросДобавление = "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | "+FacturaID+")"; RS.Execute(ЗапросДобавление); не айс... лучше сделать на самом sql-сервере хранимую процедуру, куда засунуть все эти инсерты и прочие конструкции, а из 1С уже вызывать эту хранимую процедуру, передавая туда нужные параметры... да и работать будет быстрей, т.к. сама sql-конструкция будет выполняться на стороне сервера все-таки... как пример: 1. создать на sql-сервере хранимую процедуру sp_AddRecords, где есть нужная конструкция из INSERT 2. а из 1С сделать примерно так СоединениеСSQL=АДОДБКоннект.Open(стрПодключения) Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = СоединениеСSQL; Cmd.Prepared = 1; Cmd.CommandText = "sp_AddRecords " + параметр1 + "," + параметр2 + "," + параметр3; Cmd.Execute(); СоединениеСSQL.Close(); Нарушите лицензионное соглашение. 1С не разрешает обращаться к своей базе напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 10:14 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
to AHDP Каким боком это нарушает соглашение? Ведь данные пишутся в левую таблицу которая не является 1с овской, а данные из 1с берутся стандартным 1совским запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 10:31 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
rigus, Так я ж КонцуЦикла отвечал. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 11:35 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
ну вопрос спорный, хотя вариантов масса... 1. если sql сервер был куплен в составе 1с, то наличие и использование на нем левых баз есть уже нарушение лицензионного соглашения и не важно каким способом они заполняются 2. если идет запись из sql-ой базы 1с или даже из файловой в какую-то другую базу на sql-сервере, который был куплен отдельно от 1с, то никаких нарушений лицензионного соглашения нет (это все равно, что заполнение из 1С какого-нибудь вордовского файла) 3. если речь идет о своей базе, то на мой взгляд тоже не важно каким из способов прямого обращения идет запись в таблицу.. ведь в старттопике тоже прямое обращение к таблице 1С, а не через создание всяких 1с-овских менеджеров записи и пр. такшта хрен редьки не слаще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 12:15 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
rigusПриведите скрипт создания таблицы. (В MS правой кнопкой на таблице сценарий используя create) Это нужно чтобы понять какие типы у Вас в sql таблице. и приведите что Вы пытаетесь туда закинуть т.е. нужно чему равно ваше значение ЗапросДобавление В общем Вам нужно отладить ваш sql запрос для начала. Запрос SQL отлажен он такой : INSERT INTO [Table_1] ([NomDok] ,[FacturaID]) VALUES (793640, 'ЧЭА00000615') Первый столбец числовой, второй строковый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 13:24 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
КонецЦиклану вопрос спорный, хотя вариантов масса... 1. если sql сервер был куплен в составе 1с, то наличие и использование на нем левых баз есть уже нарушение лицензионного соглашения и не важно каким способом они заполняются 2. если идет запись из sql-ой базы 1с или даже из файловой в какую-то другую базу на sql-сервере, который был куплен отдельно от 1с, то никаких нарушений лицензионного соглашения нет (это все равно, что заполнение из 1С какого-нибудь вордовского файла) 3. если речь идет о своей базе, то на мой взгляд тоже не важно каким из способов прямого обращения идет запись в таблицу.. ведь в старттопике тоже прямое обращение к таблице 1С, а не через создание всяких 1с-овских менеджеров записи и пр. такшта хрен редьки не слаще... Лицензионым (1С) и сублицензионным (Микрософт - 1С) соглашением запрещено: 1. Использование SQL сервера, идущего в поставке продукта другого вендора в качестве составной части, для иных операций. 2. Операции с данными, содержащимися в базах 1С, минуя платформу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 13:45 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
КонецЦиклана мой взгляд конструкции типа ЗапросДобавление = "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | "+FacturaID+")"; RS.Execute(ЗапросДобавление); не айс... лучше сделать на самом sql-сервере хранимую процедуру, куда засунуть все эти инсерты и прочие конструкции, а из 1С уже вызывать эту хранимую процедуру, передавая туда нужные параметры... да и работать будет быстрей, т.к. сама sql-конструкция будет выполняться на стороне сервера все-таки... как пример: 1. создать на sql-сервере хранимую процедуру sp_AddRecords, где есть нужная конструкция из INSERT 2. а из 1С сделать примерно так СоединениеСSQL=АДОДБКоннект.Open(стрПодключения) Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = СоединениеСSQL; Cmd.Prepared = 1; Cmd.CommandText = "sp_AddRecords " + параметр1 + "," + параметр2 + "," + параметр3; Cmd.Execute(); СоединениеСSQL.Close(); Попробовал через создание хранимой процедуры не работает, пишет ошибку: {Форма.ФормаОтчета1.Форма(117)}: Ошибка при вызове метода контекста (Execute) Cmd.Execute(); по причине: Произошла исключительная ситуация (ADODB.Command): The connection cannot be used to perform this operation. It is either closed or invalid in this context. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 14:03 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Александр ВеликийЗапрос SQL отлажен он такой : INSERT INTO [Table_1] ([NomDok] ,[FacturaID]) VALUES (793640, 'ЧЭА00000615') Первый столбец числовой, второй строковый. Ну тогда апострофы не забудьте добавить в 1с -запрос "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | ' "+FacturaID+" ' )"; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 14:15 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
rigusАлександр ВеликийЗапрос SQL отлажен он такой : INSERT INTO [Table_1] ([NomDok] ,[FacturaID]) VALUES (793640, 'ЧЭА00000615') Первый столбец числовой, второй строковый. Ну тогда апострофы не забудьте добавить в 1с -запрос "INSERT INTO [Table_1] |([NomDok] | ,[FacturaID]) |VALUES( | "+NomDok+", | ' "+FacturaID+" ' )"; У меня они с апострофом //ЗапросДобавление = Новый Запрос; // ЗапросДобавление.Текст = "INSERT INTO [Table_1] // |([NomDok] // | ,[FacturaID]) // |VALUES // | ("+NomDok+", // | '"+FacturaID+"')"; // // АДОДБКоннект.Execute(ЗапросДобавление); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 14:37 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Сделал вариант через процедуру, этот Execute в 1С не работает, в SQL отлаживался работает процедура и входные данные: Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = СоединениеСSQL; Cmd.Prepared = 1; Cmd.CommandText = "exec sp_AddRecords " + NomDok + ",'" + FacturaID + "'"; Cmd.Выполнить(); СоединениеСSQL.Close(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 14:39 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Александр Великийrigusпропущено... У меня они с апострофом //ЗапросДобавление = Новый Запрос; // ЗапросДобавление.Текст = "INSERT INTO [Table_1] ... // АДОДБКоннект.Execute(ЗапросДобавление); Бред Нужно Либо так //ЗапросДобавление = Новый Запрос; // ЗапросДобавление.Текст = "INSERT INTO [Table_1] ... // АДОДБКоннект.Execute(ЗапросДобавление.Текст); или так //ЗапросДобавление = "INSERT INTO [Table_1] ... // АДОДБКоннект.Execute(ЗапросДобавление);[/quot] То что Вы не умеете пользоваться не значит что это не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 14:43 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
rigusАлександр Великийпропущено... Бред Нужно Либо так //ЗапросДобавление = Новый Запрос; // ЗапросДобавление.Текст = "INSERT INTO [Table_1] ... // АДОДБКоннект.Execute(ЗапросДобавление.Текст); или так //ЗапросДобавление = "INSERT INTO [Table_1] ... // АДОДБКоннект.Execute(ЗапросДобавление); То что Вы не умеете пользоваться не значит что это не работает.[/quot] За себя говори, я листинг написал, а тот старый листинг, комментирование, потому что я сделал через процедуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 14:59 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Получилось загрузить в SQL оказывается надо было вот так: АДОДБКоннект = Новый COMОбъект("ADODB.Connection"); Попытка АДОДБКоннект.Open(стрПодключения); ТекстЗапроса="exec sp_AddRecords " + NomDok + ",'" + FacturaID + "'"; АДОДБКоннект.Execute(ТекстЗапроса,,); АДОДБКоннект.Close(); АДОДБКоннект=""; Сообщить("Соединение с SQL-сервером " + ИмяСервера + " осуществлено в "+ТекущаяДата()); Исключение Предупреждение("Невозможно установить соединение с SQL-сервером " + ИмяСервера+ ОписаниеОшибки()); АДОДБКоннект.Close(); Возврат; КонецПопытки; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 16:13 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
А вот как сделать чтоб возвращать текст того что пишется в message и выводить в 1с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2011, 08:00 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
Функция ВыполнитьSQLЗапрос(Запрос, Сервер, БД ) Экспорт Если ЗначениеНеЗаполнено(Сервер) Тогда Сервер = Константы.юзрSQLНаименованиеСервера.Получить(); КонецЕсли; Если ЗначениеНеЗаполнено(БД) Тогда БД = Константы.юзрSQLНаименованиеБазыДанных.Получить() ; КонецЕсли; Попытка стрПодключения = "Provider=sqloledb;Data Source=" + Сервер + ";Initial Catalog=" + БД + ";Integrated Security=SSPI"; Коннект = Новый COMОбъект("ADODB.Connection"); Коннект.ConnectionString = стрПодключения ; Коннект.ConnectionTimeout = 9999; Коннект.CommandTimeout = 9999; Коннект.Open(); РекордСет = Новый COMОбъект("ADODB.Recordset"); Исключение СообщитьОбОшибке("Не возможно подключить к MS SQL серверу .." + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Попытка РекордСет = Коннект.Execute(Запрос); Исключение СообщитьОбОшибке("Ошибка при выполнении запроса: " + Запрос + Символы.ПС + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Возврат РекордСет; КонецФункции // Пример использования функции // Подключение к SQL серверу производится по доменной аутентификации РекодСет = ВыполнитьSQLЗапрос("Insert into T1(ID, Param) Values (1,'Test1') Select * from T1 where ID = 1",,) Пока НЕ РекордСет.EOF Цикл Сообщить( "Данные: " + СокрЛП(РекордСет.Fields("Param").Value)); КонецЦикла; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2011, 05:49 |
|
||
|
загрузка с 1С в SQl
|
|||
|---|---|---|---|
|
#18+
valex13Функция ВыполнитьSQLЗапрос(Запрос, Сервер, БД ) Экспорт Если ЗначениеНеЗаполнено(Сервер) Тогда Сервер = Константы.юзрSQLНаименованиеСервера.Получить(); КонецЕсли; Если ЗначениеНеЗаполнено(БД) Тогда БД = Константы.юзрSQLНаименованиеБазыДанных.Получить() ; КонецЕсли; Попытка стрПодключения = "Provider=sqloledb;Data Source=" + Сервер + ";Initial Catalog=" + БД + ";Integrated Security=SSPI"; Коннект = Новый COMОбъект("ADODB.Connection"); Коннект.ConnectionString = стрПодключения ; Коннект.ConnectionTimeout = 9999; Коннект.CommandTimeout = 9999; Коннект.Open(); РекордСет = Новый COMОбъект("ADODB.Recordset"); Исключение СообщитьОбОшибке("Не возможно подключить к MS SQL серверу .." + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Попытка РекордСет = Коннект.Execute(Запрос); Исключение СообщитьОбОшибке("Ошибка при выполнении запроса: " + Запрос + Символы.ПС + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Возврат РекордСет; КонецФункции // Пример использования функции // Подключение к SQL серверу производится по доменной аутентификации РекодСет = ВыполнитьSQLЗапрос("Insert into T1(ID, Param) Values (1,'Test1') Select * from T1 where ID = 1",,) Пока НЕ РекордСет.EOF Цикл Сообщить( "Данные: " + СокрЛП(РекордСет.Fields("Param").Value)); КонецЦикла; Мне нужно то что выводится в message я же написал например (1518 row(s) affected) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2011, 08:03 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=37400648&tid=1521103]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 304ms |
| total: | 474ms |

| 0 / 0 |
