8.х Получение данных отчета сформированного в удаленной базе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Amber, 28 ноя 2008.

  1. TopicStarter Overlay
    Amber
    Offline

    Amber Опытный в 1С

    Регистрация:
    16 ноя 2007
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Уважаемые коллеги, пока задам вопрос на уровне идеи. У меня две базы связанные по оле. Во второй базе(управляемой) создаются документы реализации. Первой базе(управляющей) требуется получить сумму всех реализаций за период по контрагенту из второй базы. Вопрос- как это реализовать? Я так понимаю, что в управляемой базе должен создаваться отчет "взаиморасчеты с контрагентом" и уже итоги этого отчета передаются в управляющую базы. Вопрос второй- реально ли это реализовать? Готов выслушать все идее по данному вопросу. Заранее спасибо!
  2. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    Ну не знаю как отчет, а вообще можно в общем модуле сделать функцию, которая для указанного контрагента за указанный же период выдаст сумму реализаций. Тогда эту сумму можно будет использовать в другой базе...

    Помни, что по оле можно передавать только примитивные типы.

    отчет сдесь имхо совсем не в кассу... Визуальные данные не нужны, а собрать таблицу значений или просто получить значение можно и экспортной процедурой/функцией
  3. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    Ну можно и так, а можно сформировать запрос и передать его в базу источник. :unsure:
  4. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    одна фигня. Главное - получение данных обратно! :)
  5. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Через com делаешь Объект Запрос делаешь такойже запрос как в отчете или то что тебе надо и все.. у тебя на выходе та таблица которая тебе нужна... я так делал переброс данных из 7 в 8
  6. TopicStarter Overlay
    Amber
    Offline

    Amber Опытный в 1С

    Регистрация:
    16 ноя 2007
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Но мне кажется если сформировать запрос к управляемой базе, то ответ легче получить..К сожелению конфу управляемой базы я не могу менять(баз на самом деле 3..2-8.1 и одна -7.7. в некоторых я ничего делать не могу(конфа стандартная без изменений).
  7. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    это другое дело. у мну просто во многих местах используется функция подсчета прихода и расхода по контрагенту за период, поэтому она вынесена в общий модуль :) Полезная вещь!
  8. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    А конфу вообще не надо менять.. ты считываешь данные которые есть и представляешь как тебе надо.. во внешней обработке все а не в конфе
  9. TopicStarter Overlay
    Amber
    Offline

    Amber Опытный в 1С

    Регистрация:
    16 ноя 2007
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    если б можно было конфигу менять я бы прсто реквизит добавил который обороты хранит и все..а так извращатся придется=))
    Ни у кого не найдется примера как к 7,7 делать запрос по оле из 8.1?
  10. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    Что-то вроде этого (не проверял, но примерно так):
    user - имя польз
    pass - его пароль

    Код:
    	OLE = Новый COMОбъект("V77.Application");
    СтрокаOLE	= "c:\ProgramFiles\1cv7\bin\1cv7.exe enterprise /d c:\ТестоваяБаза\ /n User /p pass";
    
    OLE.Initialize(OLE.RMTrade, "СтрокаOLE", "NO_SPLASH_SHOW");	
    // Проверка удачного подключения	
    Попытка
    гМетад = OLE.EvalExpr("Метаданные");
    Флаг = "База удачно подключена.";
    Исключение
    гМетад = Неопределено;
    СообщитьОбОшибке("Ошибка инициализации базы OLE" + ОписаниеОшибки());
    Флаг = "STOP";
    Возврат;
    КонецПопытки;
    Сообщить(Флаг);
    

    П.С. можно все сделать короче, но тогда придется экран по ширине крутить :)
  11. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    После описанного выше соединени япишешь

    Код:
    Приходник = В7.CreateObject("Документ.ПриходнаяНакладная");
    Приходник.ВыбратьДокументы(НТП,КТП);
    
    
    Методом Выбрать документы.. где НТП - начало , КТП - конец Периода.... а
    запрос..
    к сожалению под рукой нет

    Запрос = В7.CreateObject("Запрос");
    Запрос ....

    Запрос.Выполнить() или как там в 7.. не помню почему.. но от запроса отказался.. по-моему потому как были какието проблемы с получением табличной части документа, а с первым способом проблем нет.. и работает аналогично
  12. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    можно проверять так
    Код:
    Успешно = OLE.Initialize(OLE.RMTrade, "СтрокаOLE", "NO_SPLASH_SHOW");	
    Если Успешно = 0 тогда
    Сообщить("Ошибка инициализации базы ole");
    Возврат;
    Иначе
    Сообщить("База удачно подключена");
    конецесли;
    
    но у мну как-то на одной базе не получалось пока не переправил на первый пример
  13. TopicStarter Overlay
    Amber
    Offline

    Amber Опытный в 1С

    Регистрация:
    16 ноя 2007
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Спасибо конечно, но подключатся к базе я уже научился :unsure: а вот запросы из 8.1 к 7.7 по оле не делал...Я так понимаю что должен использоватся ситекс 7.7 чтобы все коректно работало. Примерно так-
    Код:
    СпрОле = БазаОле.CreateObject("Справочник.КартыДоступа");
    ЗапросЗагр = В7.CreateObject("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)			
    |Спр = Справочник.Карты;			
    |Влад = Справочник.Карты.Привязка;			
    |Штрих = Справочник.Карты.Идентификатор;			
    |Группировка Спр упорядочить по Спр.Номер;			
    |"//}}ЗАПРОС		;
    Пока ЗапросЗагр.Группировка("Спр")=1 Цикл
    
    
    Так? или я где-то ошибся(7.7 не знаю..этот код писал не я)
  14. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26

    Типа того.. т.е. ты получаешь COMОбъект а потом все операции над ним делаешь синтаксисом 77
  15. TopicStarter Overlay
    Amber
    Offline

    Amber Опытный в 1С

    Регистрация:
    16 ноя 2007
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    Кашмар!!Вроде пишешь под 1с8..а чтобы с екелем поработать куришь мануал по делфи/с++, с 77 приходится по ней книжки читать..так я скоро и до ассемблера добирусь :unsure:
    А вообше так и делается или есть более простые способы?
  16. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    именно так и делается :) запросы в 7.7 все равно придется поучить.
  17. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    А как по другому?? Ты ведь используешь объект, а сним работать только теме методами, которые в той проге где он написан... 0)))

    Посмотри этот запрос.. может будет интересно..

    /Создадим Com объект для подключения к 1С 77
    База77 = Новый COMObject("V77.Application");

    //Устанавливаем соединение
    Открыта = База77.Initialize(База77.RMTrade,"/d" + ПутьКБазе77,"NO_SPLASH_SHOW");

    Если Открыта Тогда
    Предупреждение("Ошибка открытия информационной базы!");
    Иначе
    Сообщить("БАЗА ОТКРЫТА УСПЕШНО!");
    Конецесли;

    //Определим дату из периода за который
    //необходимо выбрать данные
    ДатаПериода = ТекущаяДата();

    //Подключимся к журналу расчетов
    Зрп = База77.CreateObject("ЖурналРасчетов.Зарплата");

    //Получим период журнала расчета по нашей дате
    //переведем в формат без времени
    НТП = Формат(Зрп.НачалоПериодаПоДате(ДатаПериода),"ДЛФ=Д");
    КТП = Формат(Зрп.КонецПериодаПоДате(ДатаПериода),"ДЛФ=Д");

    //Напишем текст запроса
    //обратите внимание на установку периода в запросе
    //Если неправильно написать, будет вылазить ошибка
    ТекстЗапр = "//{{ЗАПРОС(ВидыРасч)
    |Период с '" + НТП + "' по '" + КТП + "';
    |Вир = ЖурналРасчетов.Зарплата.ВидРасч;
    |Рез = ЖурналРасчетов.Зарплата.Результат;
    |Дни = ЖурналРасчетов.Зарплата.Дни;
    |ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
    |ДатаОкончания = ЖурналРасчетов.Зарплата.ДатаОкончания;
    |Часы = ЖурналРасчетов.Зарплата.Часы;
    |Субконто = ЖурналРасчетов.Зарплата.Субконто;
    |Сот = ЖурналРасчетов.Зарплата.Объект;
    |КодОбъекта = ЖурналРасчетов.Зарплата.Объект.Код;
    |Функция РезСумма = Сумма(Рез);
    |Группировка Сот;
    |Группировка Вир;
    |"//}}ЗАПРОС
    ;

    //Создаем объект типа запрос
    Запр = База77.CreateObject("Запрос");

    //Выполним запрос, если успешно делаем выборку
    Если Запр.Выполнить(ТекстЗапр) <> 0 Тогда
    Пока Запр.Группировка("Сот") = 1 Цикл
    Пока Запр.Группировка("Вир") = 1 Цикл
    //...................
    //Здесь пишем код выборки и обработки полученных данных
    Конеццикла;
    Конеццикла;
    Конецесли;

Поделиться этой страницей