SQL запросы (версия 3.xx)/1C

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску

Для работы с данными 1С можно использовать стандартные SQL запросы, которые буду преобразованы в формат, воспринимаемый 1С.

Поддерживаются SQL - операторы:

  • select или ВЫБРАТЬ - выборка данных. В списке полей можно указать только * - все поля. Пример: ВЫБРАТЬ ПЕРВЫЕ 10 * ИЗ Справочник.Контрагенты
    • where или ГДЕ - позволяет указать условие выборки. Пример: select * from Справочник.Контрагенты where Наименование = "Тест"
  • insert - вставка данных, позволяет указать список полей и константы значений, выражения не поддерживаются. Пример: insert into Справочники.Контрагенты (Наименование) values ("Тест")
  • update - изменение данных, позволяет указать список изменяемых полей и условие отбора. Пример: update Справочники.Контрагенты set Комментарий = 5 where Наименование = 'Тест'
  • delete - изменение данных, позволяет указать список изменяемых полей и условие отбора. Пример: delete from Справочник.Контрагенты where Наименование = "Тест"

Помимо этого SQL-запросы к этому источнику данных могут содержать комментарии в виде /* */ и содержать несколько запросов разделенных символами // на новой строке.

Пример SQL-запросов 1C на выборку данных

SQL-запросы на выборку данных полностью аналогичны запросам Новый Запрос на языке 1C. Например, запрос на выборку контрагентов с номерами телефонов выглядит так:

ВЫБРАТЬ * 
     ИЗ Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК Телефон ПО (Телефон.Объект = Контрагенты.Ссылка) 
                                                                           И (Телефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
                                                                           И (Телефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента))
   ГДЕ Телефон.Представление ЕСТЬ НЕ null 
УПОРЯДОЧИТЬ ПО Контрагенты.Наименование

Или на привычном языке SQL этот же запрос выглядит так:

select * 
  from Справочник.Контрагенты AS Контрагенты
       left join РегистрСведений.КонтактнаяИнформация as Телефон on (Телефон.Объект = Контрагенты.Ссылка)
                                                                and (Телефон.Тип = VALUE(Перечисление.ТипыКонтактнойИнформации.Телефон))
                                                                and (Телефон.Вид = VALUE(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента))
 where Телефон.Представление is not null 
order by Контрагенты.Наименование

Более подробно о том как составлять запросы на выборку данных 1C можно посмотреть здесь.

Пример SQL-запросов 1C на изменение данных

SQL-запросы на изменение данных не поддерживаются 1C, поэтому функционал таких запросов эмулируется средой Call Office. Следует учитывать, что из-за особенностей 1C, имена таблиц в запросах на выборку данных выглядят одним образом (например, Справочник.Контрагенты), а при работе на изменение данных - другим (например, Справочники.Контрагенты).

Поэтому, SQL-запрос на запись результатов звонка в поле Комментарий объекта Контрагенты выглядит так:

update Справочники.Контрагенты
   set Комментарий = [ColumnResult]
 where Наименование = '[Наименование]'

Использование функций для доступа к данным 1C

Если возможностей SQL-запросов недостаточно, то вы можете работать напрямую с функциями объектов 1C на языке javascript. Такие функции необходимо заключать между символами /! и !/. Например, следующая функция найдет контрагента с кодом 000000001, запишет 11455 в его ИНН:

 /!
 function (Connection) {

    var Find = Connection.Справочники.Контрагенты.НайтиПоКоду ('000000001');

    if (Find != Connection.Справочники.Контрагенты.ПустаяСсылка ()) {

       var Contractor = Find.ПолучитьОбъект ();
       Contractor.ИНН =  11455;
       Contractor.Записать ();

    } else alert ('Контрагент не найден !');

    return null;
 }
 !/
 

А эта выберет первые 10 контрагентов:

 /!
 function (Connection) {

    var Query = Connection.NewObject ('Query');
    Query.text = "ВЫБРАТЬ ПЕРВЫЕ 10 * ИЗ Справочник.Контрагенты";

    return Query.execute ();
 }
 !/
 

В качестве параметра функции Connection передается COM-соединение с базой данных 1С.


Назад к SQL-запросам