SQL запросы (версия 3.xx)/1C: различия между версиями
Zombrine (обсуждение | вклад) |
Zombrine (обсуждение | вклад) |
||
| Строка 59: | Строка 59: | ||
return Query.execute (); | return Query.execute (); | ||
} | } | ||
!/ | !/ | ||
---- | ---- | ||
Назад к [[SQL_запросы_(версия_3.xx)|SQL-запросам]] | Назад к [[SQL_запросы_(версия_3.xx)|SQL-запросам]] | ||
Версия 08:49, 13 марта 2017
Для работы с данными 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 можно посмотреть здесь.
Из-за особенностей 1C, имена таблиц при работе на выборку данных выглядят одним образом (Например, Справочник.Контрагенты), а при работе на обновление и запись данных - другим образом (Например, Справочники.Контрагенты).
SQL-запрос на запись результатов звонка контрагентам выглядит так:
update Справочники.Контрагенты set Комментарий = [ColumnResult] where Наименование = '[Наименование]'
Если средств SQL-запросов недостаточно, то вы можете работать с native-функциями, то есть на языке 1C. Native-функции необходимо заключать между символами /! и !/. Например, следующая native-функция найдет контрагента с кодом 000000001, запишет 11455 в его ИНН и выберет первые 10 контрагентов:
/!
function (Connection) {
var K = Connection.Справочники.Контрагенты.НайтиПоКоду('000000001');
if (K == Connection.Справочники.Контрагенты.ПустаяСсылка()) {
alert ('Не найден');
}
else {
K = K.ПолучитьОбъект();
K.ИНН = 11455;
K.Записать();
}
var Query = Connection.NewObject ('Query'); // Запрос
Query.text = "ВЫБРАТЬ ПЕРВЫЕ 10 * ИЗ Справочник.Контрагенты";
return Query.execute ();
}
!/
Назад к SQL-запросам