Имя: Пароль:
1C
1С v8
Получить итоги из 8.2 в базе 7.7
0 first_may
 
31.08.15
16:23
Добрый день.

1 из 8.2 подключаюсь к 7.7
    ВнешнийОбъект = Новый COMОбъект("V77.Application");
    Попытка
        Открыта  = ВнешнийОбъект.Initialize(ВнешнийОбъект.RMTrade(), "/D""" + СокрЛП(ЗУП) + """ /N""" + СокрЛП(Пользователь) + """ /P""" + СокрЛП(Пароль) + """", "NO_SPLASH_SHOW");
        //Сообщить("Соединение установлено ...");
        Если Открыта Тогда
            ЕстьПодключение = Истина;
            //Сообщить("База успешно подключена.");
        Иначе
            ЕстьПодключение = Ложь;
            Сообщить("Ошибка при подключении!");
        КонецЕсли;
    Исключение
        ЕстьПодключение = Ложь;
        Сообщить("Не удалось подключиться к внешней базе ...");
    КонецПопытки;


2 затем пытаюсь получить итоги
        БухИт = ВнешнийОбъект.CreateObject("БухгалтерскиеИтоги");
        БухИт.ВыполнитьЗапрос(ДатаНач, ДатаКон, "44.1.1", "71.1", , , "Проводка", "С");
        БухИт.ВыбратьПериоды(1);
        Пока БухИт.ПолучитьПериод() = 1 Цикл

Но получаю ошибку в строке
БухИт.ВыполнитьЗапрос...

Подскажите пожалуйта, как правильно получить итоги?
1 ДенисЧ
 
31.08.15
16:24
все значения укажи.
По оле нельзя использовать значения по умолчанию
2 first_may
 
31.08.15
16:26
(1) а как валюту указать?
3 ДенисЧ
 
31.08.15
16:26
(2) найти там и указать...
4 Михаил Козлов
 
31.08.15
16:28
(0) Давно было (нюанс с датами):
ДатаНачV7 = ФОРМАТ(начДата, "ДФ=dd.MM.yy");
ДатаКонV7 = ФОРМАТ(конДата, "ДФ=dd.MM.yy");            
Ит.ВыполнитьЗапрос(ДатаНачV7, ДатаНачV7, Счет);
Ит.ВыбратьСубконто(1,0,0,0,0,"",0);
5 first_may
 
31.08.15
16:36
Получил валюту
        Спр = ВнешнийОбъект.CreateObject("Справочник.Валюты");
        Спр.ВыбратьЭлементы();
        Пока Спр.ПолучитьЭлемент() = 1 Цикл
            Если Спр.Код = "643" Тогда
                Прервать;
            КонецЕсли;
        КонецЦикла;

Преобразовал даты
        ДатаНачV7 = Формат(ДатаНач, "ДФ=dd.MM.yy");
        ДатаКонV7 = Формат(ДатаКон, "ДФ=dd.MM.yy");

Получаю итоги
        БухИт = ВнешнийОбъект.CreateObject("БухгалтерскиеИтоги");
        БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, "44.1.1", "71.1", Спр, 1, "Проводка", "С");
        БухИт.ВыбратьПериоды(1);

Пытаюсь перебрать в цикле
        Пока БухИт.ПолучитьПериод() = 1 Цикл

Но данных нет. Ошибки тоже.

А если сформировать ОСВ в 7.7, то за этот период данные есть.
6 aka AMIGO
 
31.08.15
16:42
А даты - точно передаются?
7 first_may
 
31.08.15
16:44
(6) Да
ДатаНачV7 = "01.01.15"
ДатаКонV7 = "31.08.15"
8 aka AMIGO
 
31.08.15
16:49
ФОРМАТ(начДата, "ДФ=dd.MM.yyyy"); - может так?
9 first_may
 
31.08.15
16:53
(8) Нет, не влияет :(.
10 aka AMIGO
 
31.08.15
16:54
+8 кстати, можно в 7.7 попробовать выполнить запрос
БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, "44.1.1", "71.1", Спр, 1, "Проводка", "С");
и посмотреть: выдаст/нет результаты
11 first_may
 
31.08.15
16:54
Когда в отладчике смотрю
БухИт.ВыбратьПериоды(1)
то получаю значение 0, поэтому и цикл не проходит. Значит ошибка в
БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, "44.1.1", "71.1", Спр.ТекущийЭлемент(), 1, "Проводка", "С");
12 first_may
 
31.08.15
16:55
(10) в отладчике строка
БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, "44.1.1", "71.1", Спр.ТекущийЭлемент(), 1, "Проводка", "С")

возвращает значение 1
13 hhhh
 
31.08.15
17:12
а БухИт.ВыбратьПериоды(1) что возвращает?
14 first_may
 
31.08.15
17:21
(13) ВыбратьПериоды(<?>,,,)
Синтаксис:
ВыбратьПериоды(<ФлагВсе>,<ФлагДК>,<Номер>,<РазвСальдо>)
Назначение:
Открывает выборку периодов.

Эту строку убирал
БухИт.ВыбратьПериоды();

Результат тот же.
15 kubik_live
 
31.08.15
21:02
Грабли...
Надо обязательно позиционировать счета OLE:
"44.1.1" и "71.1" не прокатит. Надо через:

СчетВн= БухИт = ВнешнийОбъект.CreateObject("ПланСчетов.Основной");

СчетВн4411=СчетВн.НайтиПоКоду("44.1.1");
СчетВн711=СчетВн.НайтиПоКоду("71.1");

и их вставлять в бухзапрос.
16 kubik_live
 
31.08.15
21:02
Сорри..

СчетВн= ВнешнийОбъект.CreateObject("ПланСчетов.Основной");
17 GreyK
 
31.08.15
21:42
(15) Издеваешься? По ОЛЕ передаются текст, число и дата..
18 kubik_live
 
31.08.15
21:45
(17) Это правда.
Но...
Счета не передаются.
Юзай СП 77
19 first_may
 
31.08.15
21:48
(18) сделал вот так
СчетВн4411 = ВнешнийОбъект.CreateObject("Счет");
СчетВн4411.НайтиПоКоду("44.1.1");
        
СчетВн711 = ВнешнийОбъект.CreateObject("Счет");
СчетВн711.НайтиПоКоду("71.1");

передал вот так
БухИт = ВнешнийОбъект.CreateObject("БухгалтерскиеИтоги");
БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, СчетВн4411, СчетВн711, Спр, 1, "Проводка", "С"); - в отладчике значение 1

здесь
Пока БухИт.ПолучитьПериод() = 1 Цикл
ничего не получается, так как БухИт.ПолучитьПериод() = 0 - в отладчике
20 first_may
 
31.08.15
21:49
может уже проще документы перебрать? Мне нужны только авансовые отчеты (табличная часть).
21 kubik_live
 
31.08.15
21:49
СчетВн4411 = ВнешнийОбъект.CreateObject("Счет");
СчетВн4411.НайтиПоКоду("44.1.1");
СчетВн711.НайтиПоКоду("71.1");

А так почему не сделать?
22 kubik_live
 
31.08.15
21:51
Сорри...

СчетВн = ВнешнийОбъект.CreateObject("Счет");
СчетВн4411=СчетВн.НайтиПоКоду("44.1.1");
СчетВн711=СчетВн.НайтиПоКоду("71.1");

Так сделай!
23 first_may
 
31.08.15
21:51
(21) потому что
СчетВн4411.НайтиПоКоду("44.1.1") - возвращает значение 1, то есть нашел, а надо же сам объект. А я же так и сделал.
24 kubik_live
 
31.08.15
21:52
СчетВн= ВнешнийОбъект.CreateObject("ПланСчетов.Основной");
25 first_may
 
31.08.15
21:54
(24) тут
СчетВн = ВнешнийОбъект.CreateObject("Счет");
СчетВн4411 = СчетВн.НайтиПоКоду("44.1.1"); - значение 1
СчетВн711 = СчетВн.НайтиПоКоду("71.1");    - значение 1

тут
ВнешнийОбъект.CreateObject("ПланСчетов.Основной") - значение {(1)}: Ошибка при вызове метода контекста (CreateObject)
26 first_may
 
31.08.15
21:54
поэтому правильно вот
        СчетВн4411 = ВнешнийОбъект.CreateObject("Счет");
        СчетВн4411.НайтиПоКоду("44.1.1");
        
        СчетВн711 = ВнешнийОбъект.CreateObject("Счет");
        СчетВн711.НайтиПоКоду("71.1");
27 Фокусник
 
31.08.15
22:02
(26) имхо, передать в бухзапрос в параметр нужно так: СчетВн711.ТекущийСчет()
28 first_may
 
31.08.15
22:06
(27) пробовал - ошибка.

В итоге написал вот
БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, "44.1.1", "71.1", "руб", 1, "Проводка", "С");
БухИт.ВыбратьПериоды(1);
Пока БухИт.ПолучитьПериод() = 1 Цикл
ФизЛицо = Строка(БухИт.Операция.Кредит.Сотрудники);
Сообщить(ФизЛицо);

получилось, что выводится всегда
COMОбъект
COMОбъект
COMОбъект
...

как привести к "человеческому" виду?
29 first_may
 
31.08.15
22:07
Аналогичный код в обработке 7.7
    БухИт=СоздатьОбъект("БухгалтерскиеИтоги");
    БухИт.ВыполнитьЗапрос('01.07.2015', '30.07.2015', "44.1.1", "71.1", , 1, "Проводка", "С");
    БухИт.ВыбратьПериоды(1);
    Пока БухИт.ПолучитьПериод() = 1 Цикл
        ФизЛицо = Строка(БухИт.Операция.Кредит.Сотрудники);
        Сообщить(ФизЛицо);
        

выводит красиво фамилии...
30 GreyK
 
31.08.15
22:10
(18) Параметр Счет у функции ВыполнитьЗапрос() по БухИтогам может быть текстовым, не ко сну будет сказано :)
31 first_may
 
31.08.15
22:13
Получилось. Вот текст
        ДатаНачV7 = Формат(ДатаНач, "ДФ=dd.MM.yy");
        ДатаКонV7 = Формат(ДатаКон, "ДФ=dd.MM.yy");
        
        БухИт = ВнешнийОбъект.CreateObject("БухгалтерскиеИтоги");
        БухИт.ВыполнитьЗапрос(ДатаНачV7, ДатаКонV7, "44.1.1", "71.1", "руб", 1, "Проводка", "С");
        БухИт.ВыбратьПериоды(1);
        Пока БухИт.ПолучитьПериод() = 1 Цикл
            ФизЛицо = Строка(БухИт.Операция.Кредит.Сотрудники.Наименование);
            Сообщить(ФизЛицо);
32 Злопчинский
 
01.09.15
03:06
Сверху кое-кто гонит пургу
.
СтрокаСчетов = "60.1,60.2,62.1,62.2,76.5";
Ит = Оле.CreateObject("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(Оле.EvalExpr("ВидыСубконто.Контрагенты"));
Ит.ИспользоватьСубконто(Оле.EvalExpr("ВидыСубконто.Договоры"));
Ит.ВыполнитьЗапрос(ДатаАнализа,ДатаАнализа,СтрокаСчетов);
.
Прекрасно выполняется... счета строками передаются...
33 first_may
 
01.09.15
13:26
Всем спасибо. Работу сдал :).
34 Злопчинский
 
01.09.15
13:28
.. отдыхаю на Багамах..? ;-)
Успехов!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn