Поиск документов

Тема в разделе "1C и всё что с ней связано", создана пользователем emelin, 2 окт 2007.

  1. emelin

    emelin Гость

    Необходимо найти докуоменты (Счет, ОказаниеУслуг, СчетФактура) конкретного контрагента и изменить значения некоторых реквизитов.
    Можно ли в 1С как-то найти все документы данного контрагента? Если да, то как?
    С 1С столкнулась ну ооочень недавно, помогите плиз!
     
  2. kaa

    kaa Гость

    Перем Запрос, ТекстЗапроса, Таб;
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с НачДата по КонДата;
    |Счет = Документ.Счет.ТекущийДокумент,Документ.СчетФактураПолученный.ТекущийДокумент,
    |Документ.ОказаниеУслуг.ТекущийДокумент;
    |Контрагент = Документ.ОказаниеУслуг.Контрагент, Документ.Счет.Контрагент,
    |Документ.СчетФактура.Контрагент;
    |Группировка Счет;
    |Условие(Контрагент в ВыбКонтрагенты);
    |";

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Док = СоздатьОбъект("Документ");
    Пока Запрос.Группировка(1) = 1 Цикл
    Док.НайтиДокумент(Запрос.Счет);
    // дальше делаем что надо с Док
    Док.Записать();
    Док.Провести();
    КонецЦикла;

    На морду выводишб начало периода НачДата и конец периода КонДата, и ВыбКонтрагенты - для контрагента по которому ищем
     
  3. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    <!--QuoteBegin-emelin+2:10:2007, 09:56 -->
    <span class="vbquote">(emelin @ 2:10:2007, 09:56 )</span><!--QuoteEBegin-->Можно ли в 1С как-то найти все документы данного контрагента?
    [snapback]80266" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Можно! И в плане "разрешаю", и в плане "физически возможно".
    <!--QuoteBegin-emelin+2:10:2007, 09:56 -->
    <span class="vbquote">(emelin @ 2:10:2007, 09:56 )</span><!--QuoteEBegin-->Если да, то как?
    [snapback]80266" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Запросом. В ЖКК вроде даже был пример запроса по документам с фильтром по реквизиту.
     
  4. emelin

    emelin Гость

    Спасибо, kaa
    но я прграммлю на делфях + 1С. У меня есть конкретный контрагент, можно ли в цикле сделать что-то типа:

    Док = СоздатьОбъект("Документ");
    Док.НайтиДокумент(Документ.ОказаниеУслуг.Контрагент);
    // дальше делаем что надо с Док
    Док.Записать();
    Док.Провести();
    КонецЦикла;
     
  5. b00tch

    b00tch Гость

    kaa все правильно сказал...

    если таки не хочется запросом - попробуй
    ВыбратьПоЗначению(<?>,,,)
    Синтаксис:
    ВыбратьПоЗначению(<Дата1>,<Дата2>,<ИмяОтбора>,<Знач>)
    Назначение:
    Открыть выборку документов в интервале дат с заданным значением реквизита отбора.
    Возвращает:
    1 - если действие выполнено и в выборке есть хотя бы один документ;
    0 - если действие не выполнено или в выборке нет ни одного документа.
    Параметры:
    <Дата1> - дата, документ или позиция начала выборки документов. Если данный параметр опущен, то выборка начинается с самого первого существующего в системе документа.
    <Дата2> - дата, документ или позиция конца выборки документов. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.
    <ИмяОтбора> - строка с названием Общего реквизита документов либо названием Графы отбора журналов;
    <Знач> - значение отбора, по которому строится выборка документов.
    Замечание:
    Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.

    но только если у тебя Контрагент - общий реквизит или графа отбора...
    Код (Text):
    Док = СоздатьОбъект("Документ.ОказаниеУслуг");
    Док.ВыбратьПоЗначению(Дата1,Дата2, "Контрагент", НужныйКонтрагент);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    // дальше делаем что надо с Док
    Док.Записать();
    Док.Провести();
    КонецЦикла;
     
  6. emelin

    emelin Гость

    не работает, ошибка на строке
    Док.ВыбратьПоЗначению(Дата1,Дата2, "Контрагент", НужныйКонтрагент);
     
  7. b00tch

    b00tch Гость

    это не готовый код, а пример всего лишь...
    кроме того, если хочешь внятного ответа на такие заявления - нелохо было бы раскрыть - что конкретно за ошибка...
     
  8. emelin

    emelin Гость

    ошибка скорее всего возникает потому, что в данном случае реквизит Контрагент не общий.
    пробую так (программлю на делфях):
    Код (Text):
    spr=Ole1C.CreateObject('Справочник.Контрагенты');
    if spr.FindByCode(1)=0 then raise exception.create('Не найден контрагент');
    doc:=Ole1C.CreateObject('Документ.ОказаниеУслуг');
    doc.SelectDocuments;
    while doc.GetDocument <>0 do
    begin
    if doc.GetAttrib('Контрагент').GetAttrib('Код')=spr.GetAttrib('Код') then // Проверяем тот контрагент или нет
    begin
    // Что то делаю
    doc.Write;
    doc.MakeActions;
    end;
    end;
     
  9. b00tch

    b00tch Гость

    так наверно будет правильней:

    doc.SelectDocuments();
    while doc.GetDocument() <>0 do
    ...
    doc.Write();
    doc.MakeActions();

    это методы, а не свойства...


    а чего бы запрос через ОЛЕ не сделать?
     
Загрузка...

Поделиться этой страницей