Главная  |  Продукты  |  Услуги и цены  |  Клиенты  |  Контакты
 
1C Предприятие 7.7
Наши решения
Программирование
1С Предприятие 8.*
Наши решения
Партнерские разработки
Типовые решения
Программирование
Администрирование
Web проекты
Интернет-магазины
Поиск по сайту

 
Управление интернет-магазином
 

Подсистема «Управление интернет-магазином» позволяет используя типовые конфигурации 1С 8 «Управление торговлей» и «Управление торговым предприятием», «Управление небольшой фирмой» и др. организовать удобное управление интернет-продажами.

Цена: 1000$ Подробная информация о модуле

 

Главная arrow Программирование arrow Основные функции arrow Использование временных таблиц в построителе отчета
Использование временных таблиц в построителе отчета Версия в формате PDF Версия для печати Отправить на e-mail
Рейтинг: / 10
ХудшаяЛучшая 
Написал Валецкий Станислав   
Думаю многие из Вас сталкивались с проблемой, когда нужно увязать временную таблицу и построитель и получить весь инструментарий построителя. Вот один способ как это сделать. Способ может не совсем корректный, но вполне работоспособный.
Допустим у нас есть таблица исходных данных, в которой есть 2 колонки - номенклатура и количество. Сформировали мы ее, например из Экселя и теперь надо провести сверку с нашими данными. Построитель будем использовать для настройки отбора по организации и местам хранения и по реквизитам номенклатуры. Для построителя мы при открытии нашей формы формируем текст запроса, используе технологию пакетных запросов:
 
   //В первом запросе, мы повторяем структуру нашей временной таблицы
  // только передаем не саму таблицу а просто типизированные поля
  ПостроительОтчета.Текст = "ВЫБРАТЬ
  |  ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
  |  ВЫРАЗИТЬ(0 КАК ЧИСЛО(15, 3)) КАК Количество
  |ПОМЕСТИТЬ ВремТаблица
  |;
  //Для сверки нам необходимо присоединить все остатки, которые есть у нас по учету
  |ВЫБРАТЬ
  |  ВЫБОР
  |    КОГДА ТЧИсходник.Номенклатура ЕСТЬ NULL 
  |      ТОГДА ОстаткиТоваровОстатки.Номенклатура
  |    ИНАЧЕ ТЧИсходник.Номенклатура
  |  КОНЕЦ КАК Номенклатура,
  |  ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоПоУчету,
  |  ТЧИсходник.Количество,
  |  ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТЧИсходник.Количество, 0) КАК Разница
  |ИЗ
  |  ВремТаблица КАК ТЧИсходник
  |    {ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаОстатков,
        | {(Организация).*, (МестоХранения).*}) КАК ОстаткиТоваровОстатки
  |    ПО ТЧИсходник.Номенклатура = ОстаткиТоваровОстатки.Номенклатура}
  |{ГДЕ
  |  ТЧИсходник.Номенклатура.*}";
  //теперь мы можем на форме (через предварительно установленную таблицу отборов) настраивать
  //отборы используя средства построителя
  
 
//Основная процедура будет следующей
Процедура КнопкаСформироватьНажатие(Кнопка)
    
  //После того как установлены все отборы, мы проводим сверку
  //при этом нам необходимо получить все настройки построителя в наш новый запрос и выполнить его
  Запрос  = Новый Запрос;
  Запрос.МенеджерВременныхТаблиц  = Новый МенеджерВременныхТаблиц;
  
  //помещаем исходную таблицу во временную таблицу
  Запрос.Текст=" ВЫБРАТЬ
  |  ВТ.Номенклатура,
  |  ВТ.Количество
  |ПОМЕСТИТЬ ВремТаблица
  |ИЗ
  |  &ТЧИсходник КАК ВТ";    
  Запрос.УстановитьПараметр("ТЧИсходник",ТаблицаСоответствия);
  
  Запрос.Выполнить();
  
  //Получаем запрос со всеми настройками из построителя
  ЗапросПостроителя     = ПостроительОтчета.ПолучитьЗапрос();
  
  //Получаем текст запроса из построителя
  ТекстЗапросаПостроителя = ЗапросПостроителя.Текст;
  
  //Временная таблица у нас уже есть, поэтому ее надо исключить из текста запроса
  // Находим начало текста запроса 
  Ч_Поз = Найти(ТекстЗапросаПостроителя,";");   
  ТекстЗапросаДляВыполнения = Сред(ТекстЗапросаПостроителя,Ч_Поз+1);
  
  // Устанавливаем текст основного запроса
  Если НЕ СокрЛП(ТекстЗапросаДляВыполнения) = "" Тогда    
    
    Запрос.Текст = ТекстЗапросаДляВыполнения; 
    Запрос.Параметры.Очистить();
    
    // Получаем из построителя и устанавливаем параметры запроса
    Для каждого Парам Из ЗапросПостроителя.Параметры Цикл
      Запрос.УстановитьПараметр(Парам.Ключ,Парам.Значение);  
    Конеццикла;       
    //столкнулся с проблемой, когда в отборах не выбрано ни одного значения
    //при получении запроса построителя, он возвращается пустой
    //пожтому в данном случае делаем простой запрос без отборов (их нет)
  Иначе                                                                       
    Запрос.Текст  = "ВЫБРАТЬ
    |  ВЫБОР КОГДА ТЧИсходник.Номенклатура ЕСТЬ NULL 
                |       ТОГДА ОстаткиТоваровОстатки.Номенклатура 
                |       ИНАЧЕ ТЧИсходник.Номенклатура КОНЕЦ КАК Номенклатура,
    |  ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоПоУчету,
    |  ТЧИсходник.Количество,
    |  (ЕстьNull(ОстаткиТоваровОстатки.КоличествоОстаток,0) - ЕстьNull(ТЧИсходник.Количество,0)) КАК Разница
    |ИЗ
    |  ВремТаблица КАК ТЧИсходник
    |    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаОстатков) КАК ОстаткиТоваровОстатки
    |    ПО ТЧИсходник.Номенклатура = ОстаткиТоваровОстатки.Номенклатура";    
    
  Конецесли;
  
  //Устанавливаем остальные параметры и выполняем запрос
  Запрос.УстановитьПараметр("ДатаОстатков",ДатаСверки);      
  Запрос.УстановитьПараметр("СписокНоменклатуры",ТаблицаСоответствия.ВыгрузитьКолонку("Номенклатура"));      
  Результат    = Запрос.Выполнить();  
  
  //результат загружаем в итоговую таблицу
  //все сверка готова
  СверкаОстатков.Загрузить(Результат.Выгрузить());
  
Конецпроцедуры
 
 
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:
Жирный Курсив Подчеркнутый Зачеркнутый Цитата


Защитный код
Обновить

< Пред.   След. >
Карта сайта
1C-PROFI © 2018
Использование материалов разрешено только с указанием ссылки (для web сайтов гиперссылки)
www.megastock.ru