Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как обработать запрос полученный из 8 ки

v7: Как обработать запрос полученный из 8 ки
Я
   StackOverflow
 
28.05.18 - 09:30
По OLE сделал запрос к 8 ке, получил OLE объект, а как его обработать, подскажите плз.

Запрос отработал, данные я так понял там есть. Сейчас получилось что то типа того.
ВыборкаБД = ЗапросБД.Выполнить().Выбрать();

У меня отдельная внешняя обработка под это дело, хотел вывести полученное в таблицу на форме обработке. Но как на ней сделать колонки так и не нашел. В 8 ке то понятно как, а как в 7 ке?
И как вообще посмотреть что у меня в запросе на данный момент? Как обратится к данным оттуда? По идее надо его циклом обрабатывать, но что то не соображу как.

Думаю что как то так:
Пока ВыборкаБД.Следующий()=1  Цикл
как то обратиться к данным этой выборки
КонецЦикла;
 
 
   hhhh
 
1 - 28.05.18 - 09:39
ВыборкаБД.Данное
   StackOverflow
 
2 - 28.05.18 - 09:42
(1) я перобовал так и выводить в сообщение но выдавало пустоту, и в отладчике тоже
   Ёпрст
 
3 - 28.05.18 - 09:48
(2) Показывай, что выводил и как.
Если че, можно "увидеть" только простые типы - строку/дату/число
   Ёпрст
 
4 - 28.05.18 - 09:48
остальное будет как ole-объект
   StackOverflow
 
5 - 28.05.18 - 09:50
Даже дело вот в чем: когда делаю так:

ВыборкаБД = ЗапросБД.Выполнить().Выбрать();
Пока ВыборкаБД.Следующий()=1  Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;

Она в цикл не заходит, а когда так 

ВыборкаБД = ЗапросБД.Выполнить();
Пока ВыборкаБД.Следующий()=1  Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;

Ругается: Поле агрегатного объекта не обнаружено (Следующий)
   StackOverflow
 
6 - 28.05.18 - 09:51
Сам запрос я в 8 ке проверил, данные выводятся, так что я склонен считать что косяк не в самом запросе.
   Владимир1С
 
7 - 28.05.18 - 09:55
(6) Все методы к запросу из 8х через точку после объекта OLE.
   НЕА123
 
8 - 28.05.18 - 10:06
(5)

ВыборкаБД.Следующий() тип булево. в 7 нет такого.
отладчиком бы глянуть.
   Franchiser
 
9 - 28.05.18 - 10:09
Попробуй по-английски методы писать
   StackOverflow
 
10 - 28.05.18 - 10:11
(7) (8) (9) Спасибо за ответы. Сейчас попробую)
 
 Рекламное место пустует
   StackOverflow
 
11 - 28.05.18 - 10:13
А какой тип данных у этого:

ВыборкаБД = ЗапросБД.Выполнить().Выбрать();
или
ВыборкаБД = ЗапросБД.Выполнить();

OLE объект вроде или Таблица значений? Просто чтоб знать какие методы к нему применять?
   Михаил Козлов
 
12 - 28.05.18 - 10:18
(11) OLE
   hhhh
 
13 - 28.05.18 - 10:25
(10) походу параметры неправильно передаешь. Раз в семерке запрос пустой.
   МимохожийОднако
 
14 - 28.05.18 - 10:27
(0) Что внутри ЗапросБД? Как получил?
   StackOverflow
 
15 - 28.05.18 - 10:29
(14)
<code>
ЗапросБД = РезультатПодключения.NewObject("Запрос");
ЗапросБД.Текст =

"ВЫБРАТЬ
|ОтражениеЗарплатыВБухучете.Ссылка КАК НаимДок,
|ОтражениеЗарплатыВБухучете.ВерсияДанных КАК ВерсияДанных,
|ОтражениеЗарплатыВБухучете.ПометкаУдаления КАК ПометкаУдаления,
|ОтражениеЗарплатыВБухучете.Номер КАК Номер,
|ОтражениеЗарплатыВБухучете.Дата КАК Дата,
|ОтражениеЗарплатыВБухучете.Проведен КАК Проведен,
|ОтражениеЗарплатыВБухучете.ПериодРегистрации КАК ПериодРегистрации,
|ОтражениеЗарплатыВБухучете.Организация КАК Организация,
|ОтражениеЗарплатыВБухучете.ЗарплатаОтраженаВБухучете КАК ЗарплатаОтраженаВБухучете,
|ОтражениеЗарплатыВБухучете.Бухгалтер КАК Бухгалтер,
|ОтражениеЗарплатыВБухучете.КраткийСоставДокумента КАК КраткийСоставДокумента,
|ОтражениеЗарплатыВБухучете.Ответственный КАК Ответственный,
|ОтражениеЗарплатыВБухучете.Комментарий КАК Комментарий,
|ОтражениеЗарплатыВБухучете.НачисленнаяЗарплатаИВзносы.(
|Ссылка КАК Ссылка,
|НомерСтроки КАК НомерСтроки,
|ФизическоеЛицо КАК ФизическоеЛицо,
|Подразделение КАК Подразделение,
|ВидОперации КАК ВидОперации,
|СтатьяФинансирования КАК СтатьяФинансирования,
|СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
|ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
|ВидНачисленияОплатыТрудаДляНУ КАК ВидНачисленияОплатыТрудаДляНУ,
|ПериодПринятияРасходов КАК ПериодПринятияРасходов,
|Сумма КАК Сумма,
|ПФРПоСуммарномуТарифу КАК ПФРПоСуммарномуТарифу,
|ПФРДоПредельнойВеличины КАК ПФРДоПредельнойВеличины,
|ПФРСПревышения КАК ПФРСПревышения,
|ПФРСтраховая КАК ПФРСтраховая,
|ПФРНакопительная КАК ПФРНакопительная,
|ФСС КАК ФСС,
|ФФОМС КАК ФФОМС,
|ТФОМС КАК ТФОМС,
|ПФРНаДоплатуЛетчикам КАК ПФРНаДоплатуЛетчикам,
|ПФРНаДоплатуШахтерам КАК ПФРНаДоплатуШахтерам,
|ПФРЗаЗанятыхНаПодземныхИВредныхРаботах КАК ПФРЗаЗанятыхНаПодземныхИВредныхРаботах,
|ПФРЗаЗанятыхНаТяжелыхИПрочихРаботах КАК ПФРЗаЗанятыхНаТяжелыхИПрочихРаботах,
|ФССНесчастныеСлучаи КАК ФССНесчастныеСлучаи,
|ПФРЗаЗанятыхНаПодземныхИВредныхРаботахБезСпецОценки КАК ПФРЗаЗанятыхНаПодземныхИВредныхРаботахБезСпецОценки,
|ПФРЗаЗанятыхНаПодземныхИВредныхРаботахСпецОценка КАК ПФРЗаЗанятыхНаПодземныхИВредныхРаботахСпецОценка,
|ПФРЗаЗанятыхНаТяжелыхИПрочихРаботахБезСпецОценки КАК ПФРЗаЗанятыхНаТяжелыхИПрочихРаботахБезСпецОценки,
|ПФРЗаЗанятыхНаТяжелыхИПрочихРаботахСпецОценка КАК ПФРЗаЗанятыхНаТяжелыхИПрочихРаботахСпецОценка,
|МестоВСтруктуреПредприятия КАК МестоВСтруктуреПредприятия
|) КАК НачисленнаяЗарплатаИВзносы,
|ОтражениеЗарплатыВБухучете.НачисленныйНДФЛ.(
|    Ссылка КАК Ссылка,
|    НомерСтроки КАК НомерСтроки,
|    ФизическоеЛицо КАК ФизическоеЛицо,
|    ВидОперации КАК ВидОперации,
|    СтатьяФинансирования КАК СтатьяФинансирования,
|    КодПоОКАТО КАК КодПоОКАТО,
|    КодПоОКТМО КАК КодПоОКТМО,
|    КПП КАК КПП,
|    КодНалоговогоОргана КАК КодНалоговогоОргана,
|    Сумма КАК Сумма
|) КАК НачисленныйНДФЛ,
|ОтражениеЗарплатыВБухучете.УдержаннаяЗарплата.(
|    Ссылка КАК Ссылка,
|    НомерСтроки КАК НомерСтроки,
|    ФизическоеЛицо КАК ФизическоеЛицо,
|    Подразделение КАК Подразделение,
|    ВидОперации КАК ВидОперации,
|    СтатьяФинансирования КАК СтатьяФинансирования,
|    Контрагент КАК Контрагент,
|    Сумма КАК Сумма,
|    МестоВСтруктуреПредприятия КАК МестоВСтруктуреПредприятия
|) КАК УдержаннаяЗарплата,
|ОтражениеЗарплатыВБухучете.УдалитьОценкаОбязательствИФормированиеРезервов.(
|    Ссылка КАК Ссылка,
|    НомерСтроки КАК НомерСтроки,
|    ФизическоеЛицо КАК ФизическоеЛицо,
|    ВидОперации КАК ВидОперации,
|    СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
|    ФОТОценочногоОбязательства КАК ФОТОценочногоОбязательства,
|    СтраховыеВзносыСФОТОценочногоОбязательстваРезерва КАК СтраховыеВзносыСФОТОценочногоОбязательстваРезерва,
|    КоличествоНакопленныхДнейОтпуска КАК КоличествоНакопленныхДнейОтпуска,
|    ОстатокОтпуска КАК ОстатокОтпуска,
|    СреднийЗаработок КАК СреднийЗаработок
|) КАК УдалитьОценкаОбязательствИФормированиеРезервов,
|ОтражениеЗарплатыВБухучете.ВыплатаОтпусковЗаСчетРезерва.(
|    Ссылка КАК Ссылка,
|    НомерСтроки КАК НомерСтроки,
|    Сотрудник КАК Сотрудник,
|    ВидОперации КАК ВидОперации,
|    Сумма КАК Сумма,
|    СтраховыеВзносы КАК СтраховыеВзносы,
|    ФССНесчастныеСлучаи КАК ФССНесчастныеСлучаи,
|    СтатьяФинансирования КАК СтатьяФинансирования
|) КАК ВыплатаОтпусковЗаСчетРезерва,
|ОтражениеЗарплатыВБухучете.ФизическиеЛица.(
|    Ссылка КАК Ссылка,
|    НомерСтроки КАК НомерСтроки,
|    ФизическоеЛицо КАК ФизическоеЛицо
|) КАК ФизическиеЛица,
|ОтражениеЗарплатыВБухучете.Представление КАК Представление,
|ОтражениеЗарплатыВБухучете.МоментВремени КАК МоментВремени
|ИЗ
|    Документ.ОтражениеЗарплатыВБухучете КАК ОтражениеЗарплатыВБухучете
|ГДЕ
|    ОтражениеЗарплатыВБухучете.Дата МЕЖДУ &НачДата И &КонДата"; 

ЗапросБД.УстановитьПараметр("НачДата",НачДата);
ЗапросБД.УстановитьПараметр("КонДата",КонДата);


</code>
   StackOverflow
 
16 - 28.05.18 - 10:32
В консоле запросов выводит документ со всеми данными, но смущает надпись на макете сверху:

Запрос: Документ.ОтражениеЗарплатыВБухучете (Записей в результате: 0)    

А под ним уже идет таблица с данными где документ и все данные. Вроде все нормально.
   Dotoshin
 
17 - 28.05.18 - 10:34
(15) Попробуй вместо ЗапросБД = РезультатПодключения.NewObject("Запрос");

написатьЗапросБД = РезультатПодключения.NewObject("Query");
Вместо УстановитьПараметр - SetParameter, ну и т.д.
То есть вместо русскоязычных имен использовать англоязычные
   StackOverflow
 
18 - 28.05.18 - 10:36
(17) Сейчас попробую
   hhhh
 
19 - 28.05.18 - 10:42
(18) ЗапросБД.УстановитьПараметр("КонДата",КонДата);

вот тут проверьте. в семерке дата без секунд. выражение МЕЖДУ тут не прокатит
   StackOverflow
 
20 - 28.05.18 - 10:44
По англ не работает.
Ругается что Поле агрегатного объекта не обнаружено (next)

Как правильнее?
Мне кажется первый вариант. Но тогда странно почему он цикл игнорит, значит в выборку ничего не попадает получается?

<code>
ВыборкаБД = ЗапросБД.Выполнить().Выбрать();
Пока ВыборкаБД.Следующий()=1  Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;

Она в цикл не заходит, а когда так 

ВыборкаБД = ЗапросБД.Выполнить();
Пока ВыборкаБД.Следующий()=1  Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;

Ругается: Поле агрегатного объекта не обнаружено (Следующий)

</code>
   hhhh
 
21 - 28.05.18 - 10:46
(20) следующий() работает только после Выбрать()

заканчивайте чудить.
   hhhh
 
22 - 28.05.18 - 10:48
(20) Она в цикл не заходит

это нормально, значит пустая выборка
   hhhh
 
23 - 28.05.18 - 10:50
(20) значит у вас нет ни одного документа
МЕЖДУ &НачДата И &КонДата

все документы в других периодах расположены
   StackOverflow
 
24 - 28.05.18 - 10:51
(22) (23) спасибо, тоже уже стал думать в сторону корявого запроса
   StackOverflow
 
25 - 28.05.18 - 12:35
Обнаружил то что даже самые простые запросы не обрабатываются и соответственно в 7 ку возвращается пустота. Может следует писать запрос в 8ку с директивой на Сервере? Если да то как это сделать?

Попробовал такой простейший запрос

    "ВЫБРАТЬ
    |ВедомостьПрочихДоходовВБанк.Ссылка КАК Ведомость
    |ИЗ
    |Документ.ВедомостьПрочихДоходовВБанк КАК ВедомостьПрочихДоходовВБанк";

В 8 ке все ок а через ole возращается пустота.
Так же пробовал просто ссылки документов в запросе простом получить в 7 ку и тоже не фига. Хотя документы есть. Я даже в запросе период не указываю а выбираю тупо все что есть. Может еще конечно проблема в самом коннекторе БазаОЛЕ=СоздатьОбъект("V83.COMConnector") хз.
Пытался через БазаОЛЕ=СоздатьОбъект("V83.Aplication") но ругается что нужен пакет обновления sp3 ставить.
   Ёпрст
 
26 - 28.05.18 - 12:36
(25) может того, для начала хотя бы представление объекта будешь получать в тексте запроса, а не его ссылку ?
   Ёпрст
 
27 - 28.05.18 - 12:36
ну или там, дату/номер
   НЕА123
 
28 - 28.05.18 - 12:47
   StackOverflow
 
29 - 28.05.18 - 12:50
(27) (28) спасибо за наставления, буду ковырять дальше
   olegves
 
30 - 28.05.18 - 12:51
ЗапросБД.УстановитьПараметр("КонДата",РезультатПодключения.Дата(здесь укажи числовые значения даты и времени));
   StackOverflow
 
31 - 28.05.18 - 13:58
Стал пробовать не через запрос а через выборку документов, та же история.

Процедура Выгрузить() 

    НовыйПодключенныйОбъект = СоздатьОбъект("V83.COMConnector"); 
    v8 = НовыйПодключенныйОбъект.Connect("File=""" + СокрЛП(ПутьПодключения) + """; Usr=""" + СокрЛП(Пользователь) + """; Pwd=""" + СокрЛП(Пароль) + """");
    
    Если v8=0 Тогда
        
        Сообщить("Ошибка открытия базы!", "!");
        
        СтатусВозврата(0); Иначе
            
        Сообщить("База удачно подключена");
            
    КонецЕсли;    
    
    
      ДокВыборка = v8.Документы.ОтражениеЗарплатыВБухучете.Выбрать('20170101','20181231'); 
          
      Пока ДокВыборка.Следующий() =1 Цикл
          ДокОбразец = ДокВыборка.ПолучитьОбъект();
          Сообщить(ДокОбразец.Номер);
      КонецЦикла;
      
      Сообщить("Конец операции");
КонецПроцедуры
   StackOverflow
 
32 - 28.05.18 - 14:21
А может быть так что на стороне клиента этих данных попросту нет и надо делать запрос с директивой обработки на сервере? Я же обращаюсь к ЗУП которая на управляемых формах? Как считаете? Или херню написал?

Если я прав как в таком случае в запрос передать эту директиву обработки?
   НЕА123
 
33 - 28.05.18 - 14:22
даже (30) не сделал.
и все-таки, что выдает

сообщить(ДокВыборка.Следующий())
 
 
   StackOverflow
 
34 - 28.05.18 - 14:24
(33) Я попробовал у меня не получилось.
А циклы выборки тупо пропускаются как будто бы там ничего неть.
   StackOverflow
 
35 - 28.05.18 - 14:25
Я и через запрос пробовал и через выборку документов без запроса. И одна и та же фигня, хотя документы сто пудова есть и к базе обращаюсь к которой надо. Я уже все досконально проверил.
   StackOverflow
 
36 - 28.05.18 - 14:31
(33) и все-таки, что выдает

сообщить(ДокВыборка.Следующий())

Выдает 0
   olegves
 
37 - 28.05.18 - 14:47
(36) ищи или ошибка в строке подключения, или в запросе
   olegves
 
38 - 28.05.18 - 14:48
или права пользователя
   StackOverflow
 
39 - 28.05.18 - 14:51
(37) (38) спасибо за наводки, буду разбираться
   Михаил Козлов
 
40 - 28.05.18 - 14:51
Получите запросом все документы (без фильтра по датам) и сообщите их количество.
   StackOverflow
 
41 - 28.05.18 - 14:53
(40) Тоже опроую, спасибо
   StackOverflow
 
42 - 28.05.18 - 15:55
Сделал такой запрос, без даты, просто за весь период по этому типу документа
ЗапросБД = РезультатПодключения.NewObject("Запрос");
ЗапросБД.Текст =
"ВЫБРАТЬ
|ОтражениеЗарплатыВБухучете.Ссылка КАК Ссылка,
|ОтражениеЗарплатыВБухучете.Номер КАК Номер,
|ОтражениеЗарплатыВБухучете.Дата КАК Дата
|ИЗ
|    Документ.ОтражениеЗарплатыВБухучете КАК ОтражениеЗарплатыВБухучете";

сообщить(ВыборкаБД.Следующий());

Пока ВыборкаБД.Следующий()=1 Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;

В цикл оно не зашло, но вот это
сообщить(ВыборкаБД.Следующий()); сообщило как -1
   StackOverflow
 
43 - 28.05.18 - 15:56
перед выборкой пропустил строку еще в коде выше
ВыборкаБД = ЗапросБД.Выполнить().Выбрать();
   Михаил Козлов
 
44 - 28.05.18 - 15:58
Сообщить("Количество документов = "+выборкаБД.Количество());
   StackOverflow
 
45 - 28.05.18 - 15:58
(44) сейчас попробую
   StackOverflow
 
46 - 28.05.18 - 15:59
(44) Количество документов = 1
   Franchiser
 
47 - 28.05.18 - 16:06
У меня в 7ке так сделано:
Данные = Соединение.GetData(НачДата,КонДата, 1, Толщина, Шаг, Потери)
   Franchiser
 
48 - 28.05.18 - 16:11
Процедура ЗаполнитьТаблицу(ДанныеТаблицы)
    
    КолтчествоКолонок = ДанныеТаблицы.Columns.Count()-1;
    
    КоличествоСтрок = ДанныеТаблицы.Count()-1;
    
    Для Счетчик = 0 по КоличествоСтрок Цикл
        
        Состояние("Обработано - " + Формат(Счетчик*100/КоличествоСтрок,"Ч5.2")+"%");
        
        ТаблицаДанных.НоваяСтрока();
        
        Для СчетчикКолонок = 0 По КолтчествоКолонок Цикл
            
            ТаблицаДанных.УстановитьЗначение(ТаблицаДанных.НомерСтроки,СчетчикКолонок+1,ДанныеТаблицы.Get(Счетчик).Get(СчетчикКолонок));
            
        КонецЦикла    
        
    КонецЦикла;    
    
КонецПроцедуры
   Михаил Козлов
 
49 - 28.05.18 - 16:13
(46) А на самом деле?
В цикл должен попадать.
 
 Рекламное место пустует
   Franchiser
 
50 - 28.05.18 - 16:15
НУ или пиши пока ВыборкаБД.Следующий()=-1.
Что-то с курсором не то.
   StackOverflow
 
51 - 28.05.18 - 16:17
(49) чесн слово Количество документов = 1 пишет
   StackOverflow
 
52 - 28.05.18 - 16:21
(49) Но цикл упорно игнорирует
Сообщить("Количество документов = "+ ВыборкаБД.Количество());  


Пока ВыборкаБД.Следующий() = 1 Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;
   StackOverflow
 
53 - 28.05.18 - 16:21
(50) попробую сейчас
   StackOverflow
 
54 - 28.05.18 - 16:24
перед циклом у меня есть такие сообщения
Сообщить("Выборка БД следующий = "+ ВыборкаБД.Следующий()); 
Сообщить("Количество документов = "+ ВыборкаБД.Количество()); 

Первое пишет -1
Второе 1
   Михаил Козлов
 
55 - 28.05.18 - 16:25
ВыборкаБД.Следующий() не нужно.
   StackOverflow
 
56 - 28.05.18 - 16:30
(50) Пока ВыборкаБД.Следующий() = -1 тоже цикл игнорит
   hhhh
 
57 - 28.05.18 - 16:32
(56) ты де 2 раза делаешь следующий()  Значит только если 2 документа, войдет в цикл
   StackOverflow
 
58 - 28.05.18 - 16:38
(57) не понял.

ЗапросБД = РезультатПодключения.NewObject("Запрос");
ЗапросБД.Текст =


"ВЫБРАТЬ
|ОтражениеЗарплатыВБухучете.Ссылка КАК Ссылка,
|ОтражениеЗарплатыВБухучете.Номер КАК Номер,
|ОтражениеЗарплатыВБухучете.Дата КАК Дата 
|ИЗ
|    Документ.ОтражениеЗарплатыВБухучете КАК ОтражениеЗарплатыВБухучете";

ВыборкаБД = ЗапросБД.Выполнить().Выбрать();

 
Сообщить("Количество документов = "+ ВыборкаБД.Количество());  


Пока ВыборкаБД.Следующий() = 1 Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;

    Сообщить("Документ получен");
    
КонецПроцедуры
   Михаил Козлов
 
59 - 28.05.18 - 16:39
(58) Так заходит в цикл или нет?
   Ёпрст
 
60 - 28.05.18 - 16:41
(58) так пробуй
Пока ВыборкаБД.Следующий() = -1 Цикл
Сообщить(ВыборкаБД.Номер);
КонецЦикла;
   StackOverflow
 
61 - 28.05.18 - 16:41
(59) не заходит. пропускает, зараза. не пойму почему
   StackOverflow
 
62 - 28.05.18 - 16:42
(60) я пробовал, тоже пропускает цикл
   StackOverflow
 
63 - 28.05.18 - 16:42
(60) о, сработало
   StackOverflow
 
64 - 28.05.18 - 16:43
хотя до этого пробовал 2 раза. странно конечно. но спасибо. хоть какой то сдвиг
   StackOverflow
 
65 - 28.05.18 - 16:44
Спасибо братцы, вроде заработало.
Всех благодарю!
   Сияющий в темноте
 
66 - 29.05.18 - 10:13
Пока Следующий()<>0 цикл

ну нет булево в семерке и -1 не всегда булево,а вот False всегда 0!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует