8.х Внешний источник данных - ошибка "invalid cursor state"

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем anyuta, 5 сен 2014.

  1. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Добрый день! Подскажите пожалуйста... У меня MS SQL 2005, 1С 8.3 самописная, расположена на сервере Linux. Создала хранимую процедуру в MS SQL, проверила работоспособность, все хорошо. Создала в 1С внешний источник, пыталась автоматически получить список хранимых процедур, но получила список абры-кадабры, ладно, определила функция вручную, прописав в ней имя хранимой процедуры. Процедура должна выполнять вставку строки в таблицу MS SQL. В итоге, процедура отрабатывает, но выходит ошибка invalid cursor state. 1c пользовательский сеанс падает...Посмотрели средствами MS SQL, процедура выполнилась из 1С без ошибок. Т.е. на стороне 1С наверно какая-то ошибка, в чем может быть проблема? На Linux установлен драйвер и прописан dsn, для подключения к внешнему источнику.
  2. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Случайно в ХП не более 1 select'a?
    --- Объединение сообщений, 5 сен 2014 ---
    Код в студию
  3. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Код:
    USE [main2]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    ALTER PROCEDURE [dbo].[buh_1c]
    (@uch_trans_no varchar(50),
    @stat tinyint,
    @soglaslvano tinyint)
    
    AS
    
    BEGIN
    SET NOCOUNT ON;
    
    INSERT INTO main2.dbo.buh_imports([uch_trans_no], [stat], [soglaslvano])
    
    VALUES (@uch_trans_no, @stat, @soglaslvano)
    
    END
    
    --- Объединение сообщений, 5 сен 2014 ---
    У меня происходит вставка 1-ой строки в таблицу, select вообще не используется!
    Последнее редактирование: 5 сен 2014
  4. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    А насколько вообще правильно использовать хранимую процедуру, которая выполняет вставку 1 строки, если таких строк нужно около 200? По идее когда используется ComОбъект, там ведь также вставка построчно происходит...просто если это неправильно, может есть другой способ вставки данных из 1С в MS SQL Server, с учетом, что 1с развернута на сервере Linux.
  5. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Не вижу вызов ХП средствами 1С :)
  6. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    В функции источника данных в выражении прописала: buh_1c(&1,&2,&3). Функция ничего не возвращает, т.е. галку убрала.
    Так там вызов 1-ой строкой прописывается...
    Код:
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        ВнешниеИсточникиДанных.otkl.myproc("133",1,1);
    КонецПроцедуры
    При подключении внешнего источника, была прописана строка подключения через dsn, все таблицы в списке отображаются, выбрала нужную. Установила программно соединение:

    Код:
    Параметры = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
    Параметры.АутентификацияСтандартная = Истина;
    Параметры.ИмяПользователя = "nameuser";
    Параметры.Пароль = "password";
    Параметры.СтрокаСоединения = "dsn=namedsn;uid=nameuser;database=namebase;";
    ВнешниеИсточникиДанных.otkl.УстановитьОбщиеПараметрыСоединения(Параметры);
    ВнешниеИсточникиДанных.otkl.УстановитьСоединение();
  7. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Пробовала подключиться через ComОбъект на клиенте к хранимой процедуре (т.к. на сервере Linux ComОбъекты не работают), а на клиенте стоит Windows, все подключается и выполняется без ошибок. Но нужно, чтобы вставка строки в таблицу производилась с помощью регламентного задания, а не по нажатию кнопки.
  8. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Последнее редактирование: 6 сен 2014
  9. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Эти статьи уже прочитаны вдоль и поперек :(
  10. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Может в сторону триггеров глянуть?
  11. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.429
    Симпатии:
    372
    Баллы:
    104
    MS SQL встаёт на никсы?
  12. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Нет...у меня 2 базы: одна на MS SQL (не 1С)....вторая на 1С на Postgres на Linux... Надеюсь верно пишу! o_O
    --- Объединение сообщений, 7 сен 2014 ---
    А как могут быть завязаны триггеры? У таблицы их нет...в Ms sql создана самая простая тестовая табличка
  13. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Опишите, пожалуйста, Вашу задачу подробней.
    Вероятно, есть другие варианты решения.
  14. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Да, задача все таже....есть 2 базы, необходимо из 1с копировать данные (около 200 строк) в ms sql и обратно, т.е. из ms sql получать данные и записывать в 1с...если бы на сервере 1с-ки стояла windows, воспользовались бы comобъектами... Думаю, тогда реализовать через веб-сервисы, не знаю как конечно ms sql с ними работает. Есть другие варианты? Только обмен через xml файлы не предлагайте ;)
  15. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    А может есть смысл обновиться до 8.3.5?
    Там ведь можно обращаться к таблицам внешнего источника напрямую:
    Код:
    ЗаписываемыйОбъект = ВнешниеИсточникиДанных.otkl.Таблицы.buh_1c.СоздатьОбъект();
    ЗаписываемыйОбъект.uch_trans_no = "133";
    ЗаписываемыйОбъект.stat = 1;
    ЗаписываемыйОбъект.soglaslvano = 1;
    ЗаписываемыйОбъект.Записать();
    
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Я думаю в этом случае дело вот в чем: http://1c-pro.ru/threads/vneshnie-istochniki-dannyx.51069/
  17. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Может быть в свойствах таблицы или конкретного поля стоит ReadOnly.
  18. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Я наверно всех запутала... мне просто в первом случае нужно реализовать обмен между 1с и mysql (сайтом), а во втором случае мне нужно реализовать обмен с той же базой 1с, но уже с базой на ms sql. Во втором случае, я не пробовала обращаться напрямую, через создание объекта, т.к. непонятно если даже получится вставка строки, то как потом можно обновлять данные сроки (т.е. update).
    --- Объединение сообщений, 8 сен 2014 ---
    У меня версия 1с 8.3.5. Завтра попробую напрямую, но вопрос с обновлением данных непонятен. Как удалить запись или обновить данные строки непонятно.
  19. TopicStarter Overlay
    anyuta
    Offline

    anyuta Опытный в 1С

    Регистрация:
    22 июн 2011
    Сообщения:
    333
    Симпатии:
    0
    Баллы:
    26
    Попыталась вставить запись штатными средствами 1с: "СоздатьОбъект()", выводит такую же ошибку: "invalid cursor state". Подозреваю, что дело в драйвере. К сожалению другого драйвера ODBS для Linux для Ms sql не нашли :(...Жалко

Поделиться этой страницей