• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы emelin
  • Дата начала
E

emelin

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

kaa

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

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

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

vitfil

<!--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]
Запросом. В ЖКК вроде даже был пример запроса по документам с фильтром по реквизиту.
 
E

emelin

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

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

b00tch

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

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

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

emelin

если таки не хочется запросом - попробуй
ВыбратьПоЗначению(<?>,,,)

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

b00tch

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

emelin

ошибка скорее всего возникает потому, что в данном случае реквизит Контрагент не общий.
пробую так (программлю на делфях):
Код:
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;
 
B

b00tch

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

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

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


а чего бы запрос через ОЛЕ не сделать?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!