Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 и 8.0



Волшебство программирования на 1С:Предприятие 7.7 и 8.0

v8: Конструирование сложных запросов для 1С

Описывается простой способ написания сложных запросов для 1САвтор статьи: Гений 1С | Редакторы: TormozIT
Последняя редакция №4 от 06.10.07 | История
URL: http://kb.mista.ru/article.php?id=526

Ключевые слова: запрос,отчет


К сожалению, в 1С нет встроенной возможности для описания подзапросов в виде хранимых процедур и т.п.
Но это ограничение достаточно легко обойти.

Рассмотрим пример.
Допустим, нам нужно выполнить некоторый запрос с группировкой над другим запросом Т. Сам запрос Т может быть тоже достаточно сложным.

Можно не включать запрос Т в описание запроса, а просто описать его поля. Простые поля можно просто заменить нулями, а сложные поля привести к нужному типу через Выразить:
ВЫБРАТЬ

   Т.ОП,
   Т.Контрагент,
   Т.ОП.Представление,
   Т.Контрагент.Представление,
   Т.ДоходныйРасходный КАК ДоходныйРасходный,
   Т.СтатусДоговора КАК СтатусДоговора,
   СУММА(Т.СуммаПлан) КАК СуммаПлан,
   СУММА(Т.СуммаФакт) КАК СуммаФакт
ИЗ
   (ВЫБРАТЬ
       ВЫРАЗИТЬ(&X КАК Справочник.Подразделения) КАК ОП,
       ВЫРАЗИТЬ(&X КАК Справочник.Контрагенты) КАК Контрагент,
       ЛОЖЬ КАК ДоходныйРасходный,
       0 КАК СуммаПлан,
       0 КАК СуммаФакт,
       "" КАК СтатусДоговора) КАК Т

СГРУППИРОВАТЬ ПО
   Т.ОП,
   Т.Контрагент,
   Т.ОП.Представление,
   Т.Контрагент.Представление,
   Т.ДоходныйРасходный,
   Т.СтатусДоговора

УПОРЯДОЧИТЬ ПО
   ДоходныйРасходный
ИТОГИ
   СУММА(СуммаПлан),
   СУММА(СуммаФакт)
ПО
   ОБЩИЕ
АВТОУПОРЯДОЧИВАНИЕ


Далее нам нужно только заменить описание запроса Т на текст запроса Т.
Если текст запроса над запросом Т хранится в переменной ТекстЗапроса, а текст запроса Т хранится в переменной ТекстЗапросаТ, то сделать это можно так:

ТекстЗапроса=обЗаменитьСтрокуМежду(ТекстЗапроса, "ИЗ", "КАК Т", "ИЗ ("+ТекстЗапросаТ+") КАК Т");

Функция обЗаменитьСтрокуМежду заменяет строку между маркерами:
Функция обЗаменитьСтрокуМежду(ИсхСтр, МаркерНачала, МаркерКонца, СтрЗамены, ОставлятьМаркеры=ложь, Середина="") Экспорт

    Перем С;
    С=ИсхСтр;
    Поз1=Найти(С, МаркерНачала);
    Если Поз1=0 Тогда
        Возврат С;
    КонецЕсли;
    Начало=Лев(С, Поз1-1);
    Хвост=Сред(С, Поз1+СтрДлина(МаркерНачала));
    Поз2=Найти(Хвост, МаркерКонца);
    Если Поз2=0 Тогда

        Возврат С;
    КонецЕсли;
    Середина=Лев(Хвост, Поз2-1);
    Конец=Сред(Хвост, Поз2+СтрДлина(МаркерКонца));
    С=Начало+?(ОставлятьМаркеры, МаркерНачала, "")+СтрЗамены+?(ОставлятьМаркеры, МаркерКонца, "")+Конец;
    Возврат С;

КонецФункции


Таким образом вы можете в конструкторе отлаживать как исходный запрос Т, так и запрос над запросом Т.

Если в запросе нужно указать составное поле разного типа, можно использовать подобный запрос (вместо справочника валюты можно использовать любой другой ссылочный тип, он нужен только для связи двух таблиц):

ВЫБРАТЬ
    ВЫРАЗИТЬ(НЕОПРЕДЕЛЕНО КАК Справочник.Подразделения) КАК Подразделение,
    ВЫРАЗИТЬ(НЕОПРЕДЕЛЕНО КАК Документ.Спецификация) КАК Спецификация,
    ВЫРАЗИТЬ(НЕОПРЕДЕЛЕНО КАК Документ.Протокол) КАК Протокол,
    Документы.Ссылка КАК Документ,

ИЗ
    Справочник.Валюты КАК Валюты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВЫРАЗИТЬ(НЕОПРЕДЕЛЕНО КАК Документ.ЗаявкаНаЗакупку) КАК Ссылка
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            ВЫРАЗИТЬ(НЕОПРЕДЕЛЕНО КАК Документ.Протокол)) КАК Документы
        ПО (ИСТИНА)




Родилось на основе обсуждения v8: Подход к написанию сложных запросов

TormozIT
Здесь http://infostart.ru/projects/1274 можно скачать подсистему, в состав которой входит продвинутая консоль запросов, поддерживающая временные таблицы и автоматически генерирующая запрос-имитатор.

13 октября в 11:00

компания «1-й Архитектор бизнеса» открывает все секреты

День открытых дверей
для программистов 1С.

   1AБ - один из самых крупных партнеров фирмы «1C»
  • 10 лет на рынке автоматизации,
  • более 3000 постоянных клиентов,
  • 3 офиса в Москве, более 400 сотрудников, более 30 отделов,
  • более 700 профессиональных сертификатов от фирмы «1С»
1АБ имеет статусы 1С:Франчайзи, Сервисный центр, Центр компетенции по производству, Центр компетенции по бюджетному учету, Центр сертифицированного обучения, является участником совместного проекта фирмы «1С» «1С:Консалтинг». С 2002 года успешно проходит аудиты на соответствие системе качества ISO 9001:2000.
Приглашаем на чай... и на работу

Часть 1. Начало в 11:00
Куда податься программисту 1С?
  • работать в фирме 1С:Франчайзи или штатным программистом в компании?
  • что важнее - деньги или развитие или и то, и другое.
  • проблемы программистов.
Компания 1АБ, принципы работы, условия труда, перспективы.
Президент компании ответит на все вопросы.
Что мы можем предложить программисту 1С?
Рассказ о направлениях деятельности компании. Выступления руководителей отделов.
Истории успеха программистов 1АБ
Программисты 1С рассказывают о том, с чего они начинали и чего добились.

Часть 2. Начало в 13:00
Чаепитие с руководителями 1АБ, ответы на вопросы, тестирование всех желающих.
Все заинтересованные в трудоустройстве смогут заполнить анкету кандидата.
Условия участия: Участие бесплатное. Обязательна предварительная регистрация.

Запись: тел/факс: (495) 937-66-35, E-mail: rabota@1ab.ru
или заполните регистрационную анкету на сайте www.1ab.ru.

   Вакансии 1АБ
 
Вы хотите заниматься крупными проектами по автоматизации на 8.0?
- тогда вы - 1С-программист для проектов, з/п. 2500 - 3000 у. е.
  У вас есть знания, но практики не так много, как хотелось бы? Вы хотите научиться сходу решать разнообразные задачи любой сложности?
- тогда вы - программист 1С в отдел внедрения, з/п от 1000 до 2000 у.е.
  Вас привлекает розничная торговля? Вы хотите автоматизировать супермаркеты, и не только с помощью ПО, но и применяя торговое оборудование? Вы хотите воочию видеть результаты своего труда?
- тогда вы - программист 1С в отдел внедрения торговых систем, з/п от 500 до 2000 у.е.




Официальный сайт рассылки - www.mista.ru
Волшебный форум -
www.forum.mista.ru
Книга знаний - www.kb.mista.ru

С уважением,
Станислав Митичкин (Волшебник)
stasmit@mail.ru



В избранное