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


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

v7: Как в 7.7 правильно ВыбратьПодчиненныеДокументы через COM-объект

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

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

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

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

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

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

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

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

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

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

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

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

Но это уже не важно. Нужно было сначала найти сам документ основание в 7.7, а потом уже искат ему подчинённые.
   Ёпрст
 
32 - 28.10.16 - 14:03
(31) вот только по номеру его искать не надо, у тебя и так есть ссылка на него в реквизите.
   linoblack
 
33 - 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)
у автора:
а) оле запрос к сторонней базе
б) не факт что в скуле


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