Имя: Пароль:
1C
1C 7.7
v7: Как обработать запрос полученный из 8 ки
, ,
0 StackOverflow
 
28.05.18
09:30
По OLE сделал запрос к 8 ке, получил OLE объект, а как его обработать, подскажите плз.

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

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

Думаю что как то так:

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

<code>

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

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

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

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

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

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

это нормально, значит пустая выборка
23 hhhh
 
28.05.18
10:50
(20) значит у вас нет ни одного документа

МЕЖДУ &НачДата И &КонДата

все документы в других периодах расположены
24 StackOverflow
 
28.05.18
10:51
(22) (23) спасибо, тоже уже стал думать в сторону корявого запроса
25 StackOverflow
 
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
ну или там, дату/номер
28 НЕА123
 
28.05.18
12:47
29 StackOverflow
 
28.05.18
12:50
(27) (28) спасибо за наставления, буду ковырять дальше
30 olegves
 
28.05.18
12:51
ЗапросБД.УстановитьПараметр("КонДата",РезультатПодключения.Дата(здесь укажи числовые значения даты и времени));
31 StackOverflow
 
28.05.18
13:58
Стал пробовать не через запрос а через выборку документов, та же история.

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

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

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

и все-таки, что выдает

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

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

Выдает 0
37 olegves
 
28.05.18
14:47
(36) ищи или ошибка в строке подключения, или в запросе
38 olegves
 
28.05.18
14:48
или права пользователя
39 StackOverflow
 
28.05.18
14:51
(37) (38) спасибо за наводки, буду разбираться
40 Михаил Козлов
 
28.05.18
14:51
Получите запросом все документы (без фильтра по датам) и сообщите их количество.
41 StackOverflow
 
28.05.18
14:53
(40) Тоже опроую, спасибо
42 StackOverflow
 
28.05.18
15:55
Сделал такой запрос, без даты, просто за весь период по этому типу документа

ЗапросБД = РезультатПодключения.NewObject("Запрос");
ЗапросБД.Текст =
"ВЫБРАТЬ
|ОтражениеЗарплатыВБухучете.Ссылка КАК Ссылка,
|ОтражениеЗарплатыВБухучете.Номер КАК Номер,
|ОтражениеЗарплатыВБухучете.Дата КАК Дата
|ИЗ
|    Документ.ОтражениеЗарплатыВБухучете КАК ОтражениеЗарплатыВБухучете";

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

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

В цикл оно не зашло, но вот это
сообщить(ВыборкаБД.Следующий()); сообщило как -1
43 StackOverflow
 
28.05.18
15:56
перед выборкой пропустил строку еще в коде выше
ВыборкаБД = ЗапросБД.Выполнить().Выбрать();
44 Михаил Козлов
 
28.05.18
15:58
Сообщить("Количество документов = "+выборкаБД.Количество());
45 StackOverflow
 
28.05.18
15:58
(44) сейчас попробую
46 StackOverflow
 
28.05.18
15:59
(44) Количество документов = 1
47 Franchiser
 
гуру
28.05.18
16:06
У меня в 7ке так сделано:
Данные = Соединение.GetData(НачДата,КонДата, 1, Толщина, Шаг, Потери)
48 Franchiser
 
гуру
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) А на самом деле?
В цикл должен попадать.
50 Franchiser
 
гуру
28.05.18
16:15
НУ или пиши пока ВыборкаБД.Следующий()=-1.
Что-то с курсором не то.
51 StackOverflow
 
28.05.18
16:17
(49) чесн слово Количество документов = 1 пишет
52 StackOverflow
 
28.05.18
16:21
(49) Но цикл упорно игнорирует

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


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

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

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


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

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


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


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

    Сообщить("Документ получен");
    
КонецПроцедуры
59 Михаил Козлов
 
28.05.18
16:39
(58) Так заходит в цикл или нет?
60 Ёпрст
 
28.05.18
16:41
(58) так пробуй

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

ну нет булево в семерке и -1 не всегда булево,а вот False всегда 0!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn