Консультация № 142405
27.08.2008, 17:03
0.00 руб.
0 0 0
Помогите plz, требуеться прервести тест запроса который был написан в 1С в прямой запрос на SQL. Тект запроса чтобы не загромождать место на форуме вылаживаю в файл.

Приложение:
//#ЗагрузитьИзФайла text.txt
Процедура Очистить()
ВыбКлиент=0;
All=0;
КонецПроцедуры
//-------------------------------
Процедура Взаиморасчеты(Режим)
прих_Баз=0;
расх_Баз=0;
прих_НДС=0;
расх_НДС=0;
// Создание Таблицы для выходного отчета
Заг="Неизвестно.";
Запрос=СоздатьОбъект("Запрос");
Запрос1=СоздатьОбъект("Запрос");
Если ДатаКонец>=ПолучитьДатуТА() Тогда
ДатаКонец=ПолучитьДатуТА();
КонецЕсли;

// ДатаСлед=ДатаКонец;
Заг="";
Закл="";
ТекстЗапроса = "ПЕРИОД С ДатаНачала По ДатаКонец;";

ТекстЗапроса = ТекстЗапроса + "
|Клиент =Регистр.Взаиморасчеты.Клиент;
|Менеджер =Регистр.Взаиморасчеты.Клиент.Менеджер;
|Регион =Регистр.Взаиморасчеты.Клиент.Регион;
|Докум =Регистр.Взаиморасчеты.ТекущийДокумент;
|Баз_сум =Регистр.Взаиморасчеты.СуммаБазовая;
|Сум_НДС =Регистр.Взаиморасчеты.СуммаНДС;
|ФирмаВз =Регистр.Взаиморасчеты.Фирма;
|Группировка Менеджер упорядочить по Менеджер.Наименование без групп;
|Группировка Клиент упорядочить по Клиент.Наименование ;
|Группировка Докум;
|Функция КонБаз = КонОст(Баз_сум);
|Функция НачБаз = НачОст(Баз_сум);
|Функция ПрихБаз = Приход(Баз_сум);
|Функция РасхБаз = Расход(Баз_сум);
|Функция КонНДС = КонОст(Сум_НДС);
|Функция НачНДС = НачОст(Сум_НДС);
|Функция ПрихНДС = Приход(Сум_НДС);
|Функция РасхНДС = Расход(Сум_НДС);
|Условие (ФирмаВз=Фирма);
|"//}}ЗАПРОС
;
Если ВыбМенеджер.Выбран()=0 Тогда
Заг = "По всем менеджерам";
Иначе
ТекстЗапроса = ТекстЗапроса + "Условие (Менеджер = ВыбМенеджер);";
Заг="По менеджеру " + ВыбМенеджер.Наименование;
КонецЕсли;
Если ВыбКлиент.Выбран()=1 Тогда
Если ВыбКлиент.ЭтоГруппа()=1 Тогда
ТекстЗапроса = ТекстЗапроса +
"Условие (Клиент.ПринадлежитГруппе(ВыбКлиент) = 1);";
Заг = "По клиентам группы " + ВыбКлиент.Наименование;
Иначе
ТекстЗапроса = ТекстЗапроса + "Условие (Клиент = ВыбКлиент);";
Заг=" По клиентам "+ВыбКлиент.Наименование;
КонецЕсли;
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 тогда
Возврат; // "Запрос по Кредиту не выполнился!!!";
КонецЕсли;

// теперь в запросе собраны все Документы по клиенту
// Создание Таблицы для выходного отчета
ЧислоСтрок=0;
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Отчет2");
Оживить(6);
ИтогНашДолгБаз=0;
ИтогДолгКлиентаБаз=0;
ИтогНашДолгНДС=0;
ИтогДолгКлиентаНДС=0;
ИтогоПросрочка=0;

Пока Запрос.Группировка("Менеджер") = 1 Цикл
ПросрочкаРег=0;
ДолгКлиентаБазРег=0;
НАшДолгБазРег=0;
Пока Запрос.Группировка("Клиент") = 1 Цикл
ИтогоПрих=0;
ИтогоРасх=0;
Просрочка=0;
Если ДатаНачала>ДатаКонец-Число(Запрос.Клиент.Глубина.Получить(ДатаКонец)) Тогда
Кл=Запрос.клиент;
ДатаН= ДатаКонец-Число(Кл.Глубина.Получить(ДатаКонец))+1;
ТекстЗапроса1="";
ТекстЗапроса1 = "
|Клиент =Регистр.Взаиморасчеты.Клиент;
|Баз_сум =Регистр.Взаиморасчеты.СуммаБазовая;
|Сум_НДС =Регистр.Взаиморасчеты.СуммаНДС;
|ФирмаВз =Регистр.Взаиморасчеты.Фирма;
|Группировка Клиент упорядочить по Клиент.Наименование ;
|Функция КонБаз = КонОст(Баз_сум);
|Функция НачБаз = НачОст(Баз_сум);
|Функция ПрихБаз = Приход(Баз_сум);
|Функция РасхБаз = Расход(Баз_сум);
|Функция КонНДС = КонОст(Сум_НДС);
|Функция НачНДС = НачОст(Сум_НДС);
|Функция ПрихНДС = Приход(Сум_НДС);
|Функция РасхНДС = Расход(Сум_НДС);
|Условие (ФирмаВз=Фирма);
|"//}}ЗАПРОС
;
ТекстЗапроса1 = ТекстЗапроса1+"ПЕРИОД С ДатаН По ДатаКонец;";
ТекстЗапроса1 = ТекстЗапроса1 + "Условие (Клиент = Кл);";

Если Запрос1.Выполнить(ТекстЗапроса1) = 0 тогда
Возврат;
КонецЕсли;
//Рег=СоздатьОбъект("Регистр.Взаиморасчеты");
// Рег.ВременныйРасчет();
//РассчитатьРегистрыПо(ДатаКонец-Число(Запрос.Клиент.Глубина.Получить(ДатаКонец)));
КонецЕсли;

Если ((Запрос.НачБаз+Запрос.НачНДС)=0) И ((Запрос.ПрихБаз+Запрос.ПрихНДС)=0) И
((Запрос.РасхБаз+Запрос.РасхНДС)=0) И ((Запрос.КонБаз+Запрос.КонНДС)=0) Тогда
Продолжить;
КонецЕсли;
Если Запрос.Клиент.ЭтоГруппа()=1 Тогда
Если Группа=1 Тогда
Таб.ВывестиСекцию("ГРуппа2");
КонецЕсли;
продолжить;
Конецесли;

Если ДатаНачала<=ДатаКонец-Число(Запрос.Клиент.Глубина.Получить(ДатаКонец)) Тогда
СальдоПр=Запрос.НачБаз+Запрос.НачНДС;
Иначе
Пока Запрос1.Группировка(1)=1 Цикл
Если (Запрос1.НачБаз+Запрос1.НачНДС<0) Тогда
СальдоПр=Запрос1.НачБаз+Запрос1.НачНДС+Запрос1.ПрихБаз+Запрос1.ПрихНДС;
иначе
СальдоПр=0;
конецЕсли;
КонецЦикла;
КонецЕсли;

Пока Запрос.Группировка("Докум") = 1 Цикл
Док=Запрос.Докум;
ПечДокум=" "+Док.ДатаДок+" "+СокрП(Док.Вид())+" № "+СокрП(Док.НомерДок);
Если НЕ(Запрос.ПрихБаз=0) Тогда
Дв_Баз_Сум=Запрос.ПрихБаз;
Дв_НДС_Сум=Запрос.ПрихНДС;
Если Док.ДатаДок<=ДатаКонец-Число(Запрос.Клиент.Глубина.Получить(ДатаКонец)) Тогда
СальдоПр=СальдоПр+Дв_Баз_Сум+Дв_НДС_Сум;
Иначе
ИтогоПрих=ИтогоПрих+Дв_Баз_Сум+Дв_НДС_Сум;
КонецЕсли;
КонецЕсли;
Если НЕ(Запрос.РасхБаз=0) Тогда
Дв_Баз_Сум=Запрос.РасхБаз;
Дв_НДС_Сум=Запрос.РасхНДС;
Если Док.ДатаДок<=ДатаКонец-Число(Запрос.Клиент.Глубина.Получить(ДатаКонец)) Тогда
СальдоПр=СальдоПр-Дв_Баз_Сум-Дв_НДС_Сум;
Иначе
ИтогоРасх=ИтогоРасх+Дв_Баз_Сум+Дв_НДС_Сум;
КонецЕсли;
КонецЕсли;
Оживить(1);
КонецЦикла;
Если Запрос.КонБаз+Запрос.КонНДС>0 Тогда
НашДолгБаз=Запрос.КонБаз+Запрос.КонНДС;
ДолгКлиентаБаз=0;
Иначе
НашДолгБаз=0;
ДолгКлиентаБаз=-(Запрос.КонБаз+Запрос.КонНДС);
КонецЕсли;
прих_Баз=прих_Баз+Запрос.ПрихБаз;
расх_Баз=расх_Баз+Запрос.РасхБаз;
прих_НДС=прих_НДС+Запрос.ПрихНДС;
расх_НДС=расх_НДС+Запрос.РасхНДС;
ДолгКлиентаБазРег= ДолгКлиентаБазРег+ ДолгКлиентаБаз;
НашДолгБазРег=НашДолгБазРег+НашДолгБаз;
ИтогНашДолгБаз=ИтогНашДолгБаз+НашДолгБаз;
ИтогДолгКлиентаБаз = ИтогДолгКлиентаБаз + ДолгКлиентаБаз;

Если НашДолгБаз>0 Тогда
Просрочка=0;
иначе
Если ДатаНачала<=ДатаКонец-Число(Запрос.Клиент.Глубина.Получить(ДатаКонец)) Тогда
Просрочка=Мин(-(СальдоПр+ИтогоПрих),ДолгКлиентаБаз);
Иначе
Просрочка=Мин(-СальдоПр,ДолгКлиентаБаз);
КонецЕсли;
// Просрочка=-(СальдоПр+ИтогоПрих);
КонецЕсли;
Если Просрочка<0 Тогда
Просрочка=0;
КонецЕсли;
Таб.ВывестиСекцию("Клиент2");
Оживить(2);
ИтогоПросрочка=ИтогоПросрочка+Просрочка;
ПросрочкаРег=ПросрочкаРег+Просрочка;
КонецЦикла;
Таб.ВывестиСекцию("Регион");
Оживить(2);
КонецЦикла; // по региону
Таб.ВывестиСекцию("Итоги");
Оживить(2);

Таб.Опции(0,0,6,1,ПарСтрОтчДлинн);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(1,,,,,,,,,);
Таб.Показать("Взаиморасчеты с клиентами","");
КонецПроцедуры
//-------------------------------
Процедура УстДата()
Если ДатаКонец>ПолучитьДатуТА() Тогда
Предупреждение("Нельзя устанавливать дату конца периода больше Точки Актуальности!!!");
ДатаКонец=ПолучитьДатуТА();
КонецЕсли;
Если ДатаКонец<ДатаНачала Тогда
Предупреждение("Нельзя устанавливать дату конца периода меньше даты начала!!!");
ДатаКонец=ДатаНачала;
КонецЕсли;
КонецПроцедуры
//-------------------------------
ДатаКонец = ПолучитьДатуТА();
ДатаНачала=НачМесяца(ДатаКонец);
Фирма=Константа.ОснФирма;

Обсуждение

Форма ответа