Для начала нужно научиться выполнять элементарные запросы к базе 1С непосредственно из самой программы.
Рассмотрим такой запрос:
Код = Справочник.Номенклатура.Наименование;
Наименование = Справочник.Номенклатура.Наименование;
ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
Группировка ТекущийЭлемент;
Как известно имена таблиц и полей не совпадают с теми идентификаторами, которые мы задаем в конфигураторе (соответствия можно посмотреть в файле 1Cv7.DDS):
Справочник.Номенклатура – таблица SC433 (в разных базах это может быть разным)
Код – Code, Наименование – Descr
Запрос на TSQL будет выглядеть следующим образом:
SELECT
СпрНом.Code as Код,
СпрНом.Descr as Наименование
FROM
sc433 as СпрНом
Его можно запустить в QA и увидеть полученный результат.
Теперь попробуем получить результат из 1С:
Для этого в 1С++ есть встроенный тип “ODBCRecordset”. Полный перечень методов и свойств можно увидеть в документации и в синтаксис-помощнике. Пока остановимся на методе ВыполнитьИнструкцию(Текст, ТЗ = "", ОчищатьТЗ = ""), которая возвращает результат работы запроса, переданного в параметре Текст в таблицу значений
RS = СоздатьОбъект("ODBCRecordset");
RS.УстБД1С();
ТекстЗапроса = "
|SELECT
| СпрНом.Code as Код,
| СпрНом.Descr as Наименование
|FROM
| sc433 as СпрНом";
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();
Вот и выполнился наш первый запрос. Это конечно хорошо, но справочников в конфигурации много, смотреть каждый раз в DDS ой как не хочется, да и читать такие запросы совсем не удобно. Если использовать ADO, а не 1С++, то так и придется делать. Но скажем спасибо разработчикам 1С++, что в ней есть метапарсер имен, который сам переведет все идентификаторы объектов в их реальные имена. А делается это так:
ТекстЗапроса = "
|SELECT
| СпрНом.Code as Код,
| СпрНом.Descr as Наименование
|FROM
| $Справочник.Номенклатура as СпрНом";
Заменяются следующие имена:
$Справочник.ХХХ – справочник
$Документ.ХХХ – документ
$ДокументСтроки.ХХХ – табличная часть документа
А также регистры, журналы расчетов (об этом поговорим позднее)
Замечание: Чтобы избежать коллизий, всегда пользуйтесь алиасами.
Как вы уже заметили, мы не стали искать соответствий имен в DDS, а переложили эту задачу на метапарсер. Для того чтобы парсер понял, что это реквизит нужно перевести на язык SQL ставим знак $ перед именем таблицы: $Спр.ТипНоменклатуры.
Правда, не все имена метапарсер преобразовывает в поля таблиц. Есть исключения – это предопределенные имена:
Для справочников
ИД (Ссылка) ID
Код Code
Наименование Descr
Родитель ParentID
Владелец ParentExt
ЭтоГруппа IsFolder
ПометкаУдаления IsMark
Для документов
ИД (Ссылка) IDDoc
ДатаДок Date_Time_IDDoc
НомерДок DocNo
ВидДок IDDocDef
Пример: Выберем непомеченные элементы справочника “Номенклатура”, которые не являются группами
ТекстЗапроса = "
|SELECT
| Спр.Code as Код,
| Спр.Descr as Наименование
|FROM
| $Справочник.Номенклатура as Спр
|WHERE
| Спр.IsFolder = 2 AND
| Спр.IsMark = 0";
Для поля IsMark: 1 – Помечен на удаление, 0 – Нет.
Для IsFolder: 2 – Элемент, 1 – Группа. Это сделано для того чтобы упорядочивание по этому полю сначала выдавало группы, а затем элементы.
Все конечно работает, но вместо типа номенклатуры получаются какие-то буковки вида ‘ C3A ‘. Это внутренние идентификаторы объектов 1С, как они хранятся в базе. Существует несколько способов получения объектов по их внутренним идам, например с помощью функции ЗначениеВСтрокуВнутр().
Но у нас в руках такая мощная вещь – она практически все умеет делать сама:
ТекстЗапроса = "
|SELECT
| Спр.Code as Код,
| Спр.Descr as Наименование,
| $Спр.ТипНоменклатуры as [ТипНоменклатуры $Перечисление.ТипНоменклатуры]
|FROM
| $Справочник.Номенклатура as Спр";
В результате мы получим Таблицу значений, в которой будет 3 колонки: Код, Наименование и ТипНоменклатуры. В последней колонке уже будут знакомые нам названия: Товар, Услуга и др.
Общий принцип таков:
Имя колонки пишется в квадратных скобочках [] и состоит из 2х частей: собственно наименования и типа значения, разделенных пробелом
Типы бывают следующие:
$Справочник – справочник неопределенного вида
$Справочник.ХХХ – конкретный справочник
$Документ – документ неопределенного вида
$Документ.ХХХ – конкретный документ
$Перечисление.ХХХ
$Счет.ХХХ – счет, где ХХХ – имя плана счетов
$Субконто – специальный тип для бухгалтерской подсистемы
$Неопределенный,
Также есть типы $Число, $Строка, $Дата – но их можно не указывать
Замечание: Приводить нужно не к тому типу, который мы хотим получить, а к тому, который задан в конфигураторе
Работа для программистов
Вы хотите работать в компании «1-й Архитектор бизнеса»,
мы - один из лидеров 1С:Франчайзи по России.
Добрый день, уважаемые программисты.
Спасибо вам за письма с откликами и резюме.
Мы постарались ответить на все ваши вопросы и со многими договорились о встрече.
Специально для иногородних, т.к. было много вопросов: Да, мы оказываем помощь в решении жилищных вопросов.
Уверены, что в итоге наша совместная работа принесет отличный результат, которым мы все останемся довольны.
Еще раз хотели бы обратить ваше внимание на те вакансии, которые мы предлагаем.
Мы всегда рады хорошим специалистами и тем, кто хочет таковыми стать.
Обратите внимание, у нас появились новые вакансии!
Итак:
Вы хотите заниматься крупными проектами по автоматизации на 8.0?
- тогда вы - 1С-программист для проектов, з/п. 2500 - 3000 у.е.
У вас есть знания, но практики не так много, как хотелось бы? Вы хотите научиться сходу решать разнообразные задачи любой сложности?
- тогда вы - программист 1С в отдел внедрения, з/п от 1000 до 2000 у.е.
Вы знаете язык программирования 1С 7.7 или 8.0, но вас заинтересовал бухгалтерский учет?, Вы хотите не только программировать, но и консультировать клиентов по вопросам бухучета, т.к. в будущем планируете стать главбухом серьезной фирмы?
- тогда вы - методист отраслевого отдела внедрения или центра бюджетного учета, з/п от 800 до 1200 у.е.
Вас привлекает розничная торговля? Вы хотите автоматизировать супермаркеты, и не только с помощью ПО, но и применяя торговое оборудование? Вы хотите воочию видеть результаты своего труда?
- тогда вы - программист 1С в отдел внедрения торговых систем, з/п от 500 до 2000 у.е.
Ну что, вы определились?
Мы ждем вашего звонка!
или заполните анкету на нашем сайте www.1ab.ru!
тел. (495) 937-66-35, rabota@1ab.ru