КаталогБазыОле = "D:\Копии\ЧЕРНАЯ"; ПользовательОле = "Программист"; ПарольОле = "sasa5"; МонопольныйРежимOLE = ""; ЗапускБезЗаставки = 0; Попытка в7 = СоздатьОбъект("V77.Application"); _открыта = в7.initialize(в7.RMTrade, "/d" + КаталогБазыОле + " /n" + СокрЛП(ПользовательОле) + " /p" + сокрЛП(ПарольОле), "NO_SPLASH_SHOW"); Исключение Состояние("/d" + КаталогБазыОле + "/n" + СокрЛП(ПользовательОле) + ОписаниеОшибки()); КонецПопытки;Запрос = в7.createobject("Запрос");//СоздатьОбъект("Запрос"); //Запрос =СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ДатаНачала по ДатаКонца;";//заведомо на эту строк ДобПеремЗапроса(ТекстЗапроса,"Фирма", "Фирма"); ДобПеремЗапроса(ТекстЗапроса,"УпрАналитика","Фирма.УпрАналитика"); ДобПеремЗапроса(ТекстЗапроса,"ЮрЛицо", "Фирма.ЮрЛицо"); ДобПеремЗапроса(ТекстЗапроса,"Контрагент", "Договор.Владелец"); ДобПеремЗапроса(ТекстЗапроса,"Менеджер", "Договор.Владелец.МенеджерНов"); ДобПеремЗапроса(ТекстЗапроса,"СвойствоКонтр","Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства"); ДобПеремЗапроса(ТекстЗапроса,"Договор", "Договор"); ДобПеремЗапроса(ТекстЗапроса,"КодОперации", "КодОперации"); Если СписокВидовОтчетов.ТекущаяСтрока()=1 Тогда // по покупателям ДобПеремЗапроса(ТекстЗапроса,"СтавкаНП","СтавкаНП"); КонецЕсли; ДобПеремЗапроса(ТекстЗапроса,"ВидДолга","ВидДолга"); ДобПеремЗапроса(ТекстЗапроса,"КредДокумент","КредДокумент"); ДобПеремЗапроса(ТекстЗапроса,"Проект","ТекущийДокумент.Проект"); ДобПеремЗапроса(ТекстЗапроса,"СуммаВ","СуммаВал"); Если ВыбВидВалюты = 1 Тогда ДобПеремЗапроса(ТекстЗапроса,"Сумма","СуммаРуб"); Иначе ДобПеремЗапроса(ТекстЗапроса,"Сумма","СуммаУпр"); КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |Функция НачОст = НачОст(Сумма); |Функция Приход = Приход(Сумма); |Функция Расход = Расход(Сумма); |Функция КонОст = КонОст(Сумма); |Функция НачОстВ = НачОст(СуммаВ); |Функция ПриходВ = Приход(СуммаВ); |Функция РасходВ = Расход(СуммаВ); |Функция КонОстВ = КонОст(СуммаВ); |Функция ВозвратОтПокупателя = Расход(Сумма)Когда (КодОперации = глКО.ВозвратОтПокупателя); |Функция ВозвратПоставщику = Приход(Сумма)Когда (КодОперации = глКО.ВозвратПоставщику); |Функция ВозвратОтПокупателяВ = Расход(СуммаВ)Когда( КодОперации = глКО.ВозвратОтПокупателя); |Функция ВозвратПоставщикуВ = Приход(СуммаВ)Когда (КодОперации = глКО.ВозвратПоставщику);";Если СтрДолги <> "все" Тогда ТекстЗапроса = ТекстЗапроса + " |Функция КонОстП = КонОст(Сумма)Когда((ПустоеЗначение(ДатаОплаты(КредДокумент)) = 0)и(ДатаОплаты(КредДокумент) < ДатаКонца)); |Функция КонОстВП= КонОст(СуммаВ)Когда((ПустоеЗначение(ДатаОплаты(КредДокумент)) = 0)и(ДатаОплаты(КредДокумент) < ДатаКонца));"; КонецЕсли; Для СчЦикла =1 по СписокОперДебет.РазмерСписка() Цикл НазвОперации = СписокОперДебет.ПолучитьЗначение(СчЦикла).Идентификатор(); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+ "Функция "+НазвОперации+"Приход = Приход(Сумма) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"ПриходВ = Приход(СуммаВ) когда (КодОперации = глКО."+НазвОперации+");"; КонецЦикла; Для СчЦикла=1 по СписокОперКредит.РазмерСписка() Цикл НазвОперации = СписокОперКредит.ПолучитьЗначение(СчЦикла).Идентификатор(); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+ "Функция "+НазвОперации+"Расход = Расход(Сумма) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"РасходВ = Расход(СуммаВ) когда (КодОперации = глКО."+НазвОперации+");"; КонецЦикла;//Проверка на право просмотра для менеджеров //(клиент закреплен за менеджером значит только он может смотреть отчет по этим клиентам) Если глПользователь.МенеджерКонтров=0 Тогда спрФизЛица = СоздатьОбъект("Справочник.ФизЛица"); спрФизЛица.НайтиЭлемент(глПользователь.ФизЛицо); физЛицо = спрФизЛица.ТекущийЭлемент(); ТекстЗапроса=ТекстЗапроса+" |Условие (Менеджер = физЛицо); |"; КонецЕсли; Загол=""; НетОш = 1; // нет ошибок при наложении фильтров Если ВидРазделителя = 1 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 2 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 3 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); КонецЕсли; НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Контрагент",ВыбКонтрагент,"ВыбКонтрагент",ТекстЗапроса,Загол,"СвойстваКонтрагентов"); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Договор",ВыбДоговор,"ВыбДоговор",ТекстЗапроса,Загол);Если НетОш = 0 Тогда Возврат; КонецЕсли; НомерГруппировкиПоДоговору = 9999; // невозможно большое значение НомерГруппировкиПоКонтрагенту = 9999; // невозможно большое значение НомерГруппировкиПоВидуДолга = 9999; // невозможно большое значение НомерГруппировкиПоКредДокументу = 9999; // невозможно большое значение НомерГруппировкиПоПроекту = 9999; // невозможно большое значение ПечЗаголовокСтолбца = ""; Если СтрДолги = "все" Тогда ПечЗаголовок = "Ведомость по контрагентам: "+ СписокВидовОтчетов.ПолучитьЗначение(СписокВидовОтчетов.ТекущаяСтрока())+", "+ВалютаОтчета; ИначеЕсли СтрДолги = "только контрагентов" Тогда ПечЗаголовок = "Долги контрагентов " + ?(Просроченные = 1, "(просроченные):", ":") + СписокВидовОтчетов.ПолучитьЗначение(СписокВидовОтчетов.ТекущаяСтрока())+", " + ВалютаОтчета; Иначе ПечЗаголовок = "Долги контрагентам " + ?(Просроченные = 1, "(просроченные):", ":") + СписокВидовОтчетов.ПолучитьЗначение(СписокВидовОтчетов.ТекущаяСтрока())+", " + ВалютаОтчета; КонецЕсли; УстановитьГруппировкиЗапроса(ТекстЗапроса, ПечЗаголовокСтолбца); КоличествоГруппировок = СписокГруппировок.РазмерСписка();Если КоличествоГруппировок > 5 Тогда Предупреждение("Нельзя сделать больше 5 группировок!",60); Возврат; КонецЕсли; Если Долги.ТекущаяСтрока() <> 1 Тогда Поз = Группировки.НайтиЗначение("Контрагент"); Если Группировки.Пометка(Поз) = 0 Тогда Предупреждение("При установке фильтра по долгам обязательна группировка по контрагентам!"); Возврат; КонецЕсли; КонецЕсли; Если (НомерГруппировкиПоВидуДолга = 9999) и (НомерГруппировкиПоКредДокументу = 9999) Тогда ТекстЗапроса = ТекстЗапроса + " |Условие ((КодОперации <> глКО.ЗачтенАвансПоставщику) И (КодОперации <> глКО.ЗачтенАвансПоставщикуВал)); |Условие (КодОперации <> глКО.ЗачтенАвансПокупателя); |Условие (КодОперации <> глКО.СторнированАванс); |Условие (КодОперации <> глКО.ЗачтенВозвратПокупателя); |Условие (КодОперации <> глКО.ЗачтенВозвратПоставщику); |Условие (КодОперации <> глКО.СторнированВозврат);"; Иначе ТекстЗапроса = ТекстЗапроса + " |Функция ДельтаПриход = Приход(Сумма)Когда((КодОперации = глКО.ЗачтенАвансПоставщику) или (КодОперации = глКО.ЗачтенАвансПокупателя) или (КодОперации = глКО.СторнированАванс) или (КодОперации = глКО.ЗачтенВозвратПокупателя) или (КодОперации = глКО.СторнированВозврат) или (КодОперации = глКО.ЗачтенВозвратПоставщику) или (КодОперации = глКО.ЗачтенАвансПоставщикуВал)); |Функция ДельтаРасход = Расход(Сумма)Когда((КодОперации = глКО.ЗачтенАвансПоставщику) или (КодОперации = глКО.ЗачтенАвансПокупателя) или (КодОперации = глКО.СторнированАванс) или (КодОперации = глКО.ЗачтенВозвратПокупателя) или (КодОперации = глКО.СторнированВозврат) или (КодОперации = глКО.ЗачтенВозвратПоставщику) или (КодОперации = глКО.ЗачтенАвансПоставщикуВал)); |Функция ДельтаПриходВ = Приход(СуммаВ)Когда((КодОперации = глКО.ЗачтенАвансПоставщику) или (КодОперации = глКО.ЗачтенАвансПокупателя) или (КодОперации = глКО.СторнированАванс) или (КодОперации = глКО.ЗачтенВозвратПокупателя) или (КодОперации = глКО.СторнированВозврат) или (КодОперации = глКО.ЗачтенВозвратПоставщику) или (КодОперации = глКО.ЗачтенАвансПоставщикуВал)); |Функция ДельтаРасходВ = Расход(СуммаВ)Когда((КодОперации = глКО.ЗачтенАвансПоставщику) или (КодОперации = глКО.ЗачтенАвансПокупателя) или (КодОперации = глКО.СторнированАванс) или (КодОперации = глКО.ЗачтенВозвратПокупателя) или (КодОперации = глКО.СторнированВозврат) или (КодОперации = глКО.ЗачтенВозвратПоставщику) или (КодОперации = глКО.ЗачтенАвансПоставщикуВал));"; КонецЕсли;
Создание Запроса по ком
Автор Djyarilo, 09 фев 2012 12:20
Сообщений в теме: 5
#1
Отправлено 09 февраля 2012 - 12:20
Задача следующая нужно сравнить суммы по контрагентам между белой и черной. Инфа такая же как отчет ведомость с контрагентом. Ну я решил в отчете ведомость по контрагентам. добавить подключение к базе. и попробовать на стороне базе создать объект запрос и выполнить его. написал подлключение пытаюсь подключится выдает ошибку на Период с по. В чем может быть причина?
#2
Отправлено 09 февраля 2012 - 12:37
Ну в этом коде нет самого интересного - это создание самого запроса.
Так как запрос будет выполняться по ОЛЕ, а запрос - это объект ИБ, то и создаваться он должен как объект ОЛЕ ИБ. Т.е. Запрос = ОЛЕИБ.CreateObject("Запрос");
Ну и соответственно все объекты, используемые в запросе, тоже должны быть объектами ОЛЕ ИБ.
Таким образом, использование стандартных функций фильтрации по регистрам вряд ли уместны.
Могу предложить альтернативный вариант. Весь этот код разместить в подключаемой базе. Создать там глобальную функцию, которая будет собирать остатки и возвращать их в приемлемом виде, например, как ТЗ. А в исходной базе уже обрабатывать эту ТЗ.
Так как запрос будет выполняться по ОЛЕ, а запрос - это объект ИБ, то и создаваться он должен как объект ОЛЕ ИБ. Т.е. Запрос = ОЛЕИБ.CreateObject("Запрос");
Ну и соответственно все объекты, используемые в запросе, тоже должны быть объектами ОЛЕ ИБ.
Таким образом, использование стандартных функций фильтрации по регистрам вряд ли уместны.
Могу предложить альтернативный вариант. Весь этот код разместить в подключаемой базе. Создать там глобальную функцию, которая будет собирать остатки и возвращать их в приемлемом виде, например, как ТЗ. А в исходной базе уже обрабатывать эту ТЗ.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э.Йодан)
#3
Отправлено 09 февраля 2012 - 12:46
охото матерится. если уж на то пошло лучше отобрать документы которые входят в регистр циклом. потому что так то эта процедура, которую я описал описана в отчете ведомостьпоконтрагенту. или как то попытатся открыть отчет и от туда мутить хз ваще.
вопрос. как завершить сеанс к подключаемой базе. Потому что в 8.2 ест ЗаверешениеСеанса. не могу найти тут аналога. а то как то 1 раз подрубаться и больше а тата не реал
вопрос. как завершить сеанс к подключаемой базе. Потому что в 8.2 ест ЗаверешениеСеанса. не могу найти тут аналога. а то как то 1 раз подрубаться и больше а тата не реал
#4
Отправлено 09 февраля 2012 - 13:18
Из всего набора слов понятны только выражения "охото матерится", "хз" и "как завершить сеанс к подключаемой базе".
Первые 2 - это лирические отступления. На последнее можно ответить: в семерке для освобождения объекта достаточно очистить значение переменной. Т.е.
Первые 2 - это лирические отступления. На последнее можно ответить: в семерке для освобождения объекта достаточно очистить значение переменной. Т.е.
в7 = СоздатьОбъект("V77.Application"); // ... в7 = "";
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э.Йодан)
#5
Отправлено 15 февраля 2012 - 07:00
Да я уже разобрался сделал по другому)
#6
Отправлено 15 февраля 2012 - 13:07
Ну так поделитесь как... Вдруг кому пригодится ваша идея
"Любая проблема имеет Фамилию, Имя, Отчество....." (И. Сталин)
Жмакнувшим
буду благодарен.
Жмакнувшим
буду благодарен.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных









