Имя: Пароль:
1C
1C 7.7
v7: Как в 7.7 правильно ВыбратьПодчиненныеДокументы через COM-объект
0 LisaAlisa
 
28.10.16
10:22
Добрый день!
Нужно через com-объект выбрать подчиненные документы в базе 7.7. В приведенном ниже коде документы не отбираются, хотя они есть. Скорее всего, неправильно передаю третий параметр в ВыбратьПодчиненныеДокументы(). Как передать туда ссылку на документ?

ДокПоступления = ComОбъект77.CreateObject("Документ.ПоступлениеТоваров);
ДокПоступления.ВыбратьДокументы(Начало,Конец);
Пока ДокПоступления.ПолучитьДокумент()=1 Цикл
ДокИсточник = ДокПоступления.ТекущийДокумент();
....                                                ДокПодч = ComОбъект77.CreateObject("Документ.ПоступлениеТоваров");
                                                ДокПодч.ВыбратьПодчиненныеДокументы(ДокИсточник.ДокументОснование,, ДокИсточник.ДокументОснование);
.....
1 Это_mike
 
28.10.16
10:28
а типы первых двух параметров - смотрели в СП?
или как всегда?
2 LisaAlisa
 
28.10.16
10:30
(1) смотрела. Они могут быть датой, документом или позицией. Я предаю документ и датуу
3 LisaAlisa
 
28.10.16
10:31
упс, последняя строка должна выглядеть так
ДокПодч.ВыбратьПодчиненныеДокументы(ДокИсточник.ДокументОснование,ТекущаяДата(), ДокИсточник.ДокументОснование);
4 Это_mike
 
28.10.16
10:31
(2) боюсь, что туда передается далеко не позиция, а оде-объект
5 LisaAlisa
 
28.10.16
10:33
(4) для теста передала туда дату. нов сё равн не отбираются документы
ДокПодч.ВыбратьПодчиненныеДокументы(НачалоГода(ТекущаяДата()),ТекущаяДата(), ДокИсточник.ДокументОснование);
6 Это_mike
 
28.10.16
10:34
(5) убери типизацию ДокПодч
7 LisaAlisa
 
28.10.16
10:36
(6) ДокПодч = ComОбъект77.CreateObject("Документ");

Да, с типизацией была ошибка. Убрала, но ноль эффекта.
8 Это_mike
 
28.10.16
10:38
(7) а если даты попробовать литералами передать?
9 LisaAlisa
 
28.10.16
10:45
(8) так? эффект тот же
ДокПодч.ВыбратьПодчиненныеДокументы('20160101','20161231', ДокИсточник.ДокументОснование);
10 LisaAlisa
 
28.10.16
10:57
(8) сдался?(
11 Serginio1
 
28.10.16
11:04
Используй внешние отчеты

БД.ОткрытьФормуМодально("Отчет",ПараметрыДляОтчета,ПутьКВнешнемуОтчету);
Ошибка при передаче параметров запроса по OLE

Задание условия в запросе через OLE
12 LisaAlisa
 
28.10.16
11:06
(11) не могу, мне нужно в существующей обработке подправить пару моментов, не меняя при этом особо код
13 LisaAlisa
 
28.10.16
11:07
а, так это способ отладки...
14 Serginio1
 
28.10.16
11:07
Ны дык используй внешний отчет для этих моментов. Никто же не заставляет тебя все переписывать
15 Ёпрст
 
28.10.16
11:08
(0)
Какие именно документы ты хочешь выбрать у ДокОснование в приходной накладной ?
16 LisaAlisa
 
28.10.16
11:09
я думаю, надо сначала найти в 7.7 сам документ ДокИсточник.ДокументОснование. и его уже передавать в 3им
17 LisaAlisa
 
28.10.16
11:09
(15) конфа не типовая, самописная. все подчинённые надо выбрать
18 Ёпрст
 
28.10.16
11:10
(17) Например, что именно ?
19 Ёпрст
 
28.10.16
11:11
1. На основании какого документа у вас оформлено ПоступлениеТМЦ, раз в нём есть реквизит ДокОснование, в ДокОснование, что у вас ?
2.Какие именно виды документов вы хотите получить в подчиненных документах у этого ДокОснования ?
20 Ёпрст
 
28.10.16
11:11
Ответишь на эти вопросы - будешь решать другую задачу, а не тот бред (не Пит) что в (0).
21 Serginio1
 
28.10.16
11:15
(16) А главное, что во внешнем отчете сначала отладишь все в базе без COM, а затем этот же отчет вызовешь по COM
22 LisaAlisa
 
28.10.16
13:46
(19) 1. На основании ПоступленияТоваров выписывается ПоступлениеТоваров, могут быть выписаны документы, например, Сторно.
2. Задача в том, чтобы убедиться, что основании ПоступленияТоваров нет ни одного ПоступленияТоваров, иные документы допускаются.
23 LisaAlisa
 
28.10.16
13:51
не понимаю, почему не работает
ДокОсн  =  ComОбъект77.CreateObject("Документ.ПоступлениеТоваров");
                                                Сообщить(ДокОсн.НайтиПоНомеру(СокрЛП(ДокИсточник.ДокументОснование.НомерДок)));

возвращает 0, при этом ДокИсточник.ДокументОснование.НомерДок заполнено
24 Ёпрст
 
28.10.16
13:52
(23) дату укажи во втором параметре
25 Это_mike
 
28.10.16
13:52
(23) а периодичность номера?
26 Ёпрст
 
28.10.16
13:54
(22) ересь какая. У тебя уже есть ссылка на документ в Документе. Зачем еще что-то проверять ?
27 LisaAlisa
 
28.10.16
13:56
(26) это ссылка из документа Строно. а мне нужно убедиться, что кроме сторно у оснвоания больше нет подчинённых документов
28 Ёпрст
 
28.10.16
13:56
Давай проще.

У тебя есть Поступление1 и Поступление2, в котором реквизит ДокОснование = Поступление1.

Вопрос. Зачем ты делаешь ВыбратьПодчиненныеДокументы для ДокОснование=Поступление1 ?

Чтоб найти помимо Поступление2 еще что-то ?
29 Ёпрст
 
28.10.16
13:57
>>>
На основании ПоступленияТоваров выписывается ПоступлениеТоваров

>>>
Что основании ПоступленияТоваров нет ни одного ПоступленияТоваров, иные документы допускаются.

Где правда ?
30 LisaAlisa
 
28.10.16
13:59
(24) спасибо!!!!!! у меня всё заработало как надо!
31 LisaAlisa
 
28.10.16
14:00
(29) >>>
На основании ПоступленияТоваров выписывается ПоступлениеТоваров
ДокИсточник.ДокументОснование.НомерДок

имееется в виду, что может быть выписано ПоступлениеТоваров, а так же другие документы.

Но это уже не важно. Нужно было сначала найти сам документ основание в 7.7, а потом уже искат ему подчинённые.
32 Ёпрст
 
28.10.16
14:03
(31) вот только по номеру его искать не надо, у тебя и так есть ссылка на него в реквизите.
33 linoblack
 
28.10.16
17:04
вот эта быстро работает

Функция глВыбратьПодчиненныеДокументы(ДатаНач,ДатаКон,Док,ТипДок="",Проведен="") Экспорт
    Сервис1С = СоздатьОбъект("MetaDataWork");
    Запрос1С = СоздатьОбъект("ODBCRecordSet");
    СкульЗапрос="
    |SELECT
    | TabJ.IDDOC,
    | TabJ.IDDOCDEF
    |FROM
    | _1SCRDOC As TabRod(NOLOCK)
    |INNER JOIN
    | _1SJOURN As TabJ(NOLOCK) ON (TabRod.CHILDID = TabJ.IDDOC)
    |WHERE
    | TabRod.MDID = 0 -- только документы, без граф отбора
    | AND TabRod.PARENTVAL = '"+Сервис1С.ЗначениеВСамуюДлиннуюСтрокуБД(Док.ТекущийДокумент())+"'
    |";
    Если ПустоеЗначение(ДатаНач)=0 Тогда
        СкульЗапрос=СкульЗапрос+"
        |and DATE_TIME_IDDOC>='"+Сервис1С.ПолучитьСтрИзДаты(ДатаНач)+"'
        |";
    КонецЕсли;
    Если ПустоеЗначение(ДатаКон)=0 Тогда
        СкульЗапрос=СкульЗапрос+"
        |and DATE_TIME_IDDOC<'"+Сервис1С.ПолучитьСтрИзДаты(ДатаКон+1)+"'
        |";
    КонецЕсли;
    Если ТипДок<>"" Тогда
        СкульЗапрос=СкульЗапрос+"
        |and IDDOCDEF='"+Сервис1С.ИДДокумента(ТипДок)+"'
        |";
    КонецЕсли;
    Если Проведен=1 Тогда
        СкульЗапрос=СкульЗапрос+"
        |and CLOSED=1
        |";
    КонецЕсли;
    СкульЗапрос=СкульЗапрос+"
    |ORDER BY
    |TabRod.CHILD_DATE_TIME_IDDOC
    |";
    ТЗЗапрос =СоздатьОбъект("ТаблицаЗначений");
    ТЗ =СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Док");
    Запрос1С.Подготовить(СкульЗапрос);
    Если Запрос1С.Открыть()=1 Тогда
        Запрос1С.ПолучитьРезультатыВ_ТЗ(ТЗЗапрос,1);
        ТЗЗапрос.ВыбратьСтроки();
        Пока ТЗЗапрос.ПолучитьСтроку() = 1 Цикл
            ТЗ.НоваяСтрока();
            ТЗ.Док=Сервис1С.ЗначениеИзСтрокиБД(12,ТЗЗапрос.IDDOCDEF,ТЗЗапрос.IDDOC);
        КонецЦикла;
        Запрос1С.Закрыть();
        Возврат ТЗ;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции
34 Ёпрст
 
28.10.16
17:12
(33)
у автора:
а) оле запрос к сторонней базе
б) не факт что в скуле
Независимо от того, куда вы едете — это в гору и против ветра!