[РЕШЕНО] Sql и 1С

Тема в разделе ""1С:Управление производственным предприятием УПП"", создана пользователем Inonia, 26 июл 2016.

  1. TopicStarter Overlay
    Inonia
    Offline

    Inonia

    Регистрация:
    13 июл 2016
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Доброе утро всем!
    Подключаюсь к БД (MS Sql Server 2008) -> к таблице. Соответственно, создается подключение и набор записей, где производится выборка. Попросили доработать: добавили новое поле в sql-таблицу; если номенклатура была загружена, то в новом поле "Признак загрузки" поставить цифру 1 (по умолчанию стоит 0). Тем самым я создаю новый набор записи с запросом на Update. Проблема в том, что обновление не производится. Когда пытаюсь вызвать у данного набора записей функцию Close() или MoveNext(), система сообщает, что объект закрыт. Хотя перед созданием нового набора даже соединение не закрывается. Пробовала повторно открывать соединение. Саму БД посмотреть не могу, так как не имею на это доступа.
    Вопрос 1: - Должен ли в таком случае (если нет доступа) набор записей на выборку выдавать ошибку?
    Вопрос 2: - Видела один пример. Там вызывается хранимая процедура на обновление через объект Command. При попытке обновить данные sql-таблицы нужно ли тогда мне обращаться именно через этот объект?
    Вопрос 3: - Почему два набора записей (RS и RS1) разные по свойствам? Это зависит от типа запроса?

    RS1 = Новый ComОбъект("ADODB.Recordset");
    RS1.ActiveConnection = АДОДБКоннект;
    RS1.CursorType = 3;
    RS1.LockType = 2;

    Запрос1 = Новый Запрос;
    Запрос1.Текст="UPDATE SHIELD.dbo.CenaDSE
    | SET PrZap1C = 1
    | WHERE PrZap1C = 0 and DS='"+ Артикул +"'";

    RS1.Open(Запрос1.Текст);
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    На сколько понял суть: используйте ADODB.Command и его метод Execute, вместо RecordSet.
    Inonia нравится это.
  3. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Добрый день,
    Пример который работает у меня в УСХП
    Код:
        MSSQL = ПодключениеКВнешнейБазе();
       
        НаборЗаписей = Новый ComОбъект("ADODB.Recordset");
        НаборЗаписей.CursorLocation = 3;
       
        ТекстЗапроса = "
        |SELECT
        |    [Дата]                            AS Дата,
        |    [Площадка]                        AS Площадка,
        |    [Участок]                        AS Участок,
        |    [Группа]                        AS Группа,
        |    [Количество_голов]                AS КоличествоГолов,
        |    [Масса]                            AS Масса,
        |    [Количество_абортировавших]        AS КоличествоАбортировавших,
        |    [Масса_абортировавших]            AS МассаАбортировавших,
        |    [Статус_опоросившихся]            AS СтатусОпоросившихся,
        |    [Количество_опоросившихся]        AS КоличествоОпоросившихся,
        |    [Количество_живорожденных]        AS КоличествоЖиворожденных,
        |    [Масса_живорожденных]            AS МассаЖиворожденных,
        |    [Количество_мертворожденных]    AS КоличествоМертворожденных,
        |    [Количество_жизнеспособных]        AS КоличествоЖиворожденныхНежизнеспособных,
        |    [Количество_мумифицированных]    AS КоличествоМертворожденныхМумифицированных
        |FROM
        |    данные_1c8_Груп_опрос
        |WHERE
        |    [Дата] = '" + Формат(ДатаСнимка, "ДФ=dd/MM/yyyy") + "'
        |";
       
        // Общий выбор таблицы
        НаборЗаписей.Open(ТекстЗапроса, MSSQL, 2, 3);
       
        Для Каждого СтрокаТаблицы Из ТаблицаДанных Цикл
           
            // Добавление новой записи
            НаборЗаписей.AddNew();
           
            // Заполнение полей
            НаборЗаписей.Fields("Дата").value                                        = Формат(ДатаСнимка, "ДФ=dd/MM/yyyy");
            НаборЗаписей.Fields("Площадка").value                                    = СокрЛП(СтрокаТаблицы.Площадка);
            НаборЗаписей.Fields("Участок").value                                    = СокрЛП(СтрокаТаблицы.Участок);
            НаборЗаписей.Fields("Группа").value                                        = СокрЛП(СтрокаТаблицы.Группа);
            НаборЗаписей.Fields("КоличествоГолов").value                            = СтрокаТаблицы.КоличествоГолов;
            НаборЗаписей.Fields("Масса").value                                        = СтрокаТаблицы.Масса;
            НаборЗаписей.Fields("КоличествоАбортировавших").value                    = СтрокаТаблицы.КоличествоАбортировавших;
            НаборЗаписей.Fields("МассаАбортировавших").value                        = СтрокаТаблицы.МассаАбортировавших;
            НаборЗаписей.Fields("СтатусОпоросившихся").value                        = СокрЛП(СтрокаТаблицы.ГруппаОпоросившихся);
            НаборЗаписей.Fields("КоличествоОпоросившихся").value                    = СтрокаТаблицы.КоличествоОпоросившихся;
            НаборЗаписей.Fields("КоличествоЖиворожденных").value                    = СтрокаТаблицы.КоличествоЖиворожденных;
            НаборЗаписей.Fields("МассаЖиворожденных").value                            = СтрокаТаблицы.МассаЖиворожденных;
            НаборЗаписей.Fields("КоличествоМертворожденных").value                    = СтрокаТаблицы.КоличествоМертворожденных;
            НаборЗаписей.Fields("КоличествоЖиворожденныхНежизнеспособных").value    = СтрокаТаблицы.КоличествоЖиворожденныхНежизнеспособных;
            НаборЗаписей.Fields("КоличествоМертворожденныхМумифицированных").value    = СтрокаТаблицы.КоличествоМертворожденныхМумифицированных;
           
            // Запись изменений
            НаборЗаписей.Update();
           
        КонецЦикла;
       
        НаборЗаписей.Close();
    
    Inonia нравится это.
  4. TopicStarter Overlay
    Inonia
    Offline

    Inonia

    Регистрация:
    13 июл 2016
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Спасибо за помощь. Все получилось!

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