Имя: Пароль:
1C
1C 7.7
v7: 2-й параметр метода ПолучитьПериод()
,
0 wmonref
 
05.07.16
14:54
День добрый. Есть следующая коннструкция:

БИ =  СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Товары,ТМЦ1,1);
БИ.ВыполнитьЗапрос(НачДата,КонДата,Счет,,,1,"Операция",1);
БИ.ВыбратьСубконто(ВидыСубконто.Товары);
Если БИ.ПолучитьСубконто(ВидыСубконто.Товары) = 1 Тогда
   БИ.ВыбратьПериоды();
   текПериод = КонДата;
   Пока текПериод >= НачДата Цикл
    Если БИ.ПолучитьПериод(, текПериод) = 1 Тогда
       Сообщить(БИ.Операция);
       Сообщить(текПериод);
    КонецЕсли;
        текПериод = текПериод - 1;
   КонецЦикла;
КонецЕсли;

Суть: Использую 2-й параметр метода ПолучитьПериод() - значение даты начала периода, на который нужно спозиционироваться - который позволяет получить периоды на конкретную дату. Хочу получить документы от последнего к первому, т.е. в обратном порядке. Все работает, однако есть одно "но". Если на определенную дату (текПериод) есть несколько документов то выборка получает только первый документ. Собственно вопрос: как получить все документы за текПериод?
1 Builder
 
05.07.16
15:28
Продам СП, дорого.

ПолучитьПериод(<?>,)
Синтаксис:
ПолучитьПериод(<Номер>,<ДатаНачалаПериода>)
Назначение:
Получить из выборки следующий период. Выборка должна быть предварительно открыта при помощи метода ''ВыбратьПериоды''.
Возвращает 1 - следующий период выбран успешно;  0 - следующий период не выбран (отсутствует).

Метод как бы намекает на использование его в цикле.
Пока БИ.ПолучитьПериод(, текПериод) = 1 Цикл

КонецЦикла;
2 NikVars
 
05.07.16
15:33
(0) У тебя нет выборки по периодам. Ты выбираешь по операциям.
3 Builder
 
05.07.16
16:06
(2) В данном случае "Операция" и есть период, тут все правильно. ТС нужны документы.
Но код обработки странноватый...
4 wmonref
 
05.07.16
16:16
(1) Попробуйте, пожалуйста, выполнить этот код :

текПериод = КонДата;
Пока текПериод >= НачДата Цикл
    БИ.ВыбратьПериоды();
    Пока БИ.ПолучитьПериод(, текПериод) = 1 Цикл
    Сообщить(БИ.Операция);
    Сообщить(текПериод);
    КонецЦикла;
    текПериод = текПериод - 1;
КонецЦикла;
5 Builder
 
05.07.16
17:07
(4) Я похож на тестировщика?
Зачем мне выполнять чужой г..нокод?
Зафига тут цикл по периодам?
Какой тайный смысл обработки?
6 wmonref
 
05.07.16
18:37
А что-ж вы так занервничали??
Дело в том что если использовать ПолучитьПериод(, текПериод) в цикле то получается бесконечный цикл...

Объясню смысл данной обработки: требуется найти некоторые товары и получить для них дату и номер последнего документа прих. накладная (для этого и нужно "обратное получение периода"). Сейчас использую обработку типа:

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

что, естественно, не есть хорошо...  
Вот и хочу оптимизировать работу программы
7 wmonref
 
07.07.16
10:55
Ап
8 zenik
 
07.07.16
11:02
Запросом и быстрее и красивше...
9 Абыр
 
07.07.16
11:07
(6) Если вам нужен только последний документ, тогда чем вас не устраивает (0)?
а в (4) у вас бесконечный цикл, потому что вы сами его заложили в код
10 wmonref
 
07.07.16
15:30
(9) Код из (0) поста работает нормально, но! Если на определенную дату (текПериод) есть несколько документов то в выборку попадает только первый документ, тот что в начале дня, а если прих. накладная записана на конец дня, она не попадает сюда...
11 Абыр
 
07.07.16
15:59
(10) обратного порядка для выбора периодов не предусмотрели
Как в бухгалтерии удобнее и быстрее выбрать остатки товара по док. поставки?
12 wmonref
 
08.07.16
09:55
(11) ОК, поставлю вопрос по другому :)
Как получить все документы на <ДатаНачалаПериода> используя метод ПолучитьПериод(<Номер>,<ДатаНачалаПериода>)???

Потому что в "стандартном" использовании этого метода возвращается только первый документ за заданный период...
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший