SQL запросы (версия 3.xx)/1C: различия между версиями
Zombrine (обсуждение | вклад) |
Jugin (обсуждение | вклад) |
||
Строка 34: | Строка 34: | ||
Более подробно о том как составлять запросы на выборку данных 1C можно посмотреть [http://its.1c.ru/db/metod8dev#browse:13:-1:1989:2004:2006:2019 здесь]. | Более подробно о том как составлять запросы на выборку данных 1C можно посмотреть [http://its.1c.ru/db/metod8dev#browse:13:-1:1989:2004:2006:2019 здесь]. | ||
SQL-запросы на изменение данных не поддерживаются 1C, поэтому функционал таких запросов эмулируется Call Office. Следует учитывать, что из-за особенностей 1C, имена таблиц в запросах на выборку данных выглядят одним образом (например, Справочник.Контрагенты), а при работе на изменение данных - другим образом (например, Справочники.Контрагенты). | |||
SQL-запрос на запись результатов звонка | Поэтому, SQL-запрос на запись результатов звонка в поле Комментарий объекта Контрагенты выглядит так: | ||
update Справочники.Контрагенты | update Справочники.Контрагенты | ||
Строка 42: | Строка 42: | ||
where Наименование = '[Наименование]' | where Наименование = '[Наименование]' | ||
Если средств SQL-запросов недостаточно, то вы можете работать с | Если средств SQL-запросов недостаточно, то вы можете работать напрямую с функциями объектов 1C на языке javascript. Такие функции необходимо заключать между символами '''/!''' и '''!/'''. Например, следующая функция найдет контрагента с кодом 000000001, запишет 11455 в его ИНН: | ||
<nowiki> | |||
/! | |||
function (Connection) { | |||
var Find = Connection.Справочники.Контрагенты.НайтиПоКоду ('000000001'); | |||
if (Find != Connection.Справочники.Контрагенты.ПустаяСсылка ()) { | |||
var Contractor = Find.ПолучитьОбъект (); | |||
Contractor.ИНН = 11455; | |||
Contractor.Записать (); | |||
} else alert ('Контрагент не найден !'); | |||
return null; | |||
} | |||
!/ | |||
</nowiki> | |||
А эта выберет первые 10 контрагентов: | |||
<nowiki> | |||
/! | /! | ||
function (Connection) { | function (Connection) { | ||
var Query = Connection.NewObject ('Query'); | |||
var Query = Connection.NewObject ('Query'); | |||
Query.text = "ВЫБРАТЬ ПЕРВЫЕ 10 * ИЗ Справочник.Контрагенты"; | Query.text = "ВЫБРАТЬ ПЕРВЫЕ 10 * ИЗ Справочник.Контрагенты"; | ||
return Query.execute (); | return Query.execute (); | ||
} | } | ||
!/ | !/ | ||
</nowiki> | |||
В качестве параметра функции Connection передается COM-соединение с базой данных 1С. | |||
---- | ---- | ||
Назад к [[SQL_запросы_(версия_3.xx)|SQL-запросам]] | Назад к [[SQL_запросы_(версия_3.xx)|SQL-запросам]] |
Версия 10:17, 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 можно посмотреть здесь.
SQL-запросы на изменение данных не поддерживаются 1C, поэтому функционал таких запросов эмулируется Call Office. Следует учитывать, что из-за особенностей 1C, имена таблиц в запросах на выборку данных выглядят одним образом (например, Справочник.Контрагенты), а при работе на изменение данных - другим образом (например, Справочники.Контрагенты).
Поэтому, SQL-запрос на запись результатов звонка в поле Комментарий объекта Контрагенты выглядит так:
update Справочники.Контрагенты set Комментарий = [ColumnResult] where Наименование = '[Наименование]'
Если средств 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-запросам