Опер.ВыбратьОперацииСПроводками(...) в виде запроса

Новая тема
Показывать по 10 20 40 сообщений
"Есть такой простенький код:

Опер=СоздатьОбъект("Операция");
СпрК=СоздатьОбъект("Справочник.Контрагенты");
СпрД=СоздатьОбъект("Справочник.Договоры");  
...
Опер.ИспользоватьСубконто(ВидыСубконто.Контрагенты,СпрК.ТекущийЭлемент());
Опер.ИспользоватьСубконто(ВидыСубконто.Договоры,СпрД.ТекущийЭлемент());  
//*****************************************************************************
Опер.ВыбратьОперацииСПроводками('01.01.03',,"50,76.1");    
Пока Опер.Получитьпроводку()=1 Цикл                
ТабЗн.НоваяСтрока();
      ТабЗн.НомерДок=Опер.НомерПроводки();
      ТабЗн.НомерДокумента=Опер.Документ.НомерДок;
      ТабЗн.ДатаПров=Опер.ДатаОперации;
      ТабЗн.СчетДебета=Опер.Дебет.Счет;
      ТабЗн.СчетКредита=Опер.Кредит.Счет;
КонецЦикла;
.....
Все хорошо, но возникла большая проблема по быстродействию - ну очень медленно работает, если еще давать
выборку по всей базе, то вообще усе встает. Может запрос будет побыстрее шевелиться, я пробовал сочинить такой запрос:

ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с дата1 по дата2;
|ОбрабатыватьОперации Все;
|ДатаОперации = Операция.ДатаОперации;
|СуммаОперации = Операция.СуммаОперации;
|СчетД = Операция.Дебет.Счет;
|СчетК = Операция.Кредит.Счет;
|ТекущийДокумент = Операция.ТекущийДокумент;
|Контрагенты = Операция.Дебет.Контрагенты, Операция.Кредит.Контрагенты;
|Договоры = Операция.Дебет.Договоры, Операция.Кредит.Договоры;
|Условие(СчетД=""""50"""");
|Условие(СчетК=""""76.1"""");
|Условие(Контрагенты=СпрК.ТекущийЭлемент());
|Условие(Договоры  =СпрД.ТекущийЭлемент());
|"//}}ЗАПРОС

Но он не работает - одна из заковык (определил методом тыка) в строках СчетД, СчетК - чтобы по
ним шла выборка (по моему скромному мнению) должна быть группировка по проводке в операции - а как ее дать?
Вставляю в запрос строки:  < Пров=Операция.Проводка и далее Группировка(Пров) > идет ругательство на Операция.Проводка.
Может кто подскажет-поделиться своим опытом???? =C уважением Л.Владимир "
А не легче ли сделать это через Бухгалтерские Итоги?
Исходная задача - перенос платежей из 1с в другую учетную систему. Для этого мне необходимо
идентифицировать платеж по счету дебета-кредита, контрагенту и какому-то уникальному номеру (я беру - номер проводки+номер документа, до внутренних номеров записей 1с я не смог добраться), чтобы в последующем выгруженный платеж не обрабатывать повторно. Платеж может быть в выписке, операции, введенной вручную и т.д... А БИ, (как я понял) все это делают (я смотрел документы Анализ субконто, Анализ счета по субконото), но вот уникальный номер документа-проводки они мне не дадут, - а   если бы дали, то усе было бы ОК - задача решена. Я, кстати, нашел на еще одном 1с форуме обсуждение этой же задачи (происходило год назад) - как заменить ВыбратьОперацииСПроводками запросом с той же целью (что бы было быстрее), но увы, на 7 страницах рассуждений все остались при своих мнениях...
">но вот уникальный номер документа-проводки они мне не дадут, - а
>если бы дали, то усе было бы ОК - задача решена

Как это так?

БИ.ВыбратьПериоды(, 1);
   Пока БИ.ПолучитьПериод() = 1 Цикл
   оп = би.операция; // доступ к операции
   док = би.операция.Документ;  // доступ к документу, который ввел данную операцию
   .......

Можно выбрать как операции, так и в разрезе проводок:
БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)

"
Огромное спасибо - да, прочитал, разобрался - все так и есть...
"> >но вот уникальный номер документа-проводки они мне не дадут, - а
> >если бы дали, то усе было бы ОК - задача решена
>
> Как это так?
>
> БИ.ВыбратьПериоды(, 1);
>     Пока БИ.ПолучитьПериод() = 1 Цикл
>     оп = би.операция; // доступ к операции
>     док = би.операция.Документ;  // доступ к документу, который ввел данную операцию
>     .......
>
> Можно выбрать как операции, так и в разрезе проводок:
> БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)
>
>

Я понимаю что это давно было но кто нибудь может по подробнее прокомментировать??
"
>Я понимаю что это давно было но кто нибудь может по подробнее прокомментировать??
>

"БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)"

Здесь мы вибираем все проводки, удовлетворяющие нашему условию с детализацией до проводки.
и в добавок человеку надо было получить доступ к документу, создавшему
данную проводку. (чтобы прочитать его номер, номер проводки)
собственно, через бухгалтерские итоги это легко делается.

Чувствую, что вопрос в другом - уточнили бы :)
"Уточняю:  Как в мне в этом модуле обратиться к номеру и дате документа, по которому были переданы материалы сотруднику.
Процедура Сформировать()

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

БИ.ВыбратьСубконто(2);
Пока БИ.ПолучитьСубконто(2)=1 Цикл
ОСТАТКИк = (БИ.СКД("К"));
ОСТАТКИс = (БИ.СКД("С"));
Если (ОСТАТКИк>0) И(ОСТАТКИс>0) Тогда
  Мат= Строка(БИ.Субконто(2));
Код1= Строка(БИ.Субконто(2).Код);

БИ.ВыбратьСубконто(3);
Пока БИ.ПолучитьСубконто(3)=1 Цикл
  Назначения= Строка(БИ.Субконто(3));
Код3= Строка(БИ.Субконто(3).Код);
КонецЦикла;

Таб.ВывестиСекцию("Строка1");
КонецЕсли;
КонецЦикла;
КонецЦикла;

  Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,0,0);
Таб.Показать("""");

КонецПроцедуры"
"%)
Это работает?

Как было выше сказано:
БИ.операция - ссылка на операцию
БИ.операция.Документ;  ссылка на документ

т.е.
док = БИ.операция.Документ;
номер = док.НомерДок;
дата_док = док.ДатаДок;
"
"БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
Сотр= Строка(БИ.Субконто(1));
Код2= Строка(БИ.Субконто(1).Код);
СотрСКД = (БИ.СКД("С"));
БИ.ВыбратьПериоды(, 1);
  Пока БИ.ПолучитьПериод() = 1 Цикл
  Оп = БИ.операция; // доступ к операции
  Док = БИ.операция.Документ;  // доступ к документу, который ввел данную операцию
  Ном=Док.НомерДок;
  Дат=Док.ДатаДок;
    КонецЦикла;
БИ.ВыбратьСубконто(2);
Пока БИ.ПолучитьСубконто(2)=1 Цикл

ОСТАТКИк = (БИ.СКД("К"));
ОСТАТКИс = (БИ.СКД("С"));
Если (ОСТАТКИк>0) И(ОСТАТКИс>0) Тогда
   Мат= Строка(БИ.Субконто(2));
Код1= Строка(БИ.Субконто(2).Код);
поместил этот цикл в цикл который перебирает субконто "Сотрудники", теперь выводит номера и даты но не по всем субконто почемуто?
в чем может быть причина?"
Читают тему
(гостей: 1)

Быстрый переход