Опер.ВыбратьОперацииСПроводками(...) в виде запроса
31.03.2006
10:35
#1
"Есть такой простенький код:
Опер=СоздатьОбъект("Операция");
СпрК=СоздатьОбъект("Справочник.Контрагенты");
СпрД=СоздатьОбъект("Справочник.Договоры");
...
Опер.ИспользоватьСубконто(ВидыСубконто.Контрагенты,СпрК.ТекущийЭлемент());
Опер.ИспользоватьСубконто(ВидыСубконто.Договоры,СпрД.ТекущийЭлемент());
//*****************************************************************************
Опер.ВыбратьОперацииСПроводками('01.01.03',,"50,76.1");
Пока Опер.Получитьпроводку()=1 Цикл
ТабЗн.НоваяСтрока();
ТабЗн.НомерДок=Опер.НомерПроводки();
ТабЗн.НомерДокумента=Опер.Документ.НомерДок;
ТабЗн.ДатаПров=Опер.ДатаОперации;
ТабЗн.СчетДебета=Опер.Дебет.Счет;
ТабЗн.СчетКредита=Опер.Кредит.Счет;
КонецЦикла;
.....
Все хорошо, но возникла большая проблема по быстродействию - ну очень медленно работает, если еще давать
выборку по всей базе, то вообще усе встает. Может запрос будет побыстрее шевелиться, я пробовал сочинить такой запрос:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с дата1 по дата2;
|ОбрабатыватьОперации Все;
|ДатаОперации = Операция.ДатаОперации;
|СуммаОперации = Операция.СуммаОперации;
|СчетД = Операция.Дебет.Счет;
|СчетК = Операция.Кредит.Счет;
|ТекущийДокумент = Операция.ТекущийДокумент;
|Контрагенты = Операция.Дебет.Контрагенты, Операция.Кредит.Контрагенты;
|Договоры = Операция.Дебет.Договоры, Операция.Кредит.Договоры;
|Условие(СчетД=""""50"""");
|Условие(СчетК=""""76.1"""");
|Условие(Контрагенты=СпрК.ТекущийЭлемент());
|Условие(Договоры =СпрД.ТекущийЭлемент());
|"//}}ЗАПРОС
Но он не работает - одна из заковык (определил методом тыка) в строках СчетД, СчетК - чтобы по
ним шла выборка (по моему скромному мнению) должна быть группировка по проводке в операции - а как ее дать?
Вставляю в запрос строки: < Пров=Операция.Проводка и далее Группировка(Пров) > идет ругательство на Операция.Проводка.
Может кто подскажет-поделиться своим опытом???? =C уважением Л.Владимир "
Опер=СоздатьОбъект("Операция");
СпрК=СоздатьОбъект("Справочник.Контрагенты");
СпрД=СоздатьОбъект("Справочник.Договоры");
...
Опер.ИспользоватьСубконто(ВидыСубконто.Контрагенты,СпрК.ТекущийЭлемент());
Опер.ИспользоватьСубконто(ВидыСубконто.Договоры,СпрД.ТекущийЭлемент());
//*****************************************************************************
Опер.ВыбратьОперацииСПроводками('01.01.03',,"50,76.1");
Пока Опер.Получитьпроводку()=1 Цикл
ТабЗн.НоваяСтрока();
ТабЗн.НомерДок=Опер.НомерПроводки();
ТабЗн.НомерДокумента=Опер.Документ.НомерДок;
ТабЗн.ДатаПров=Опер.ДатаОперации;
ТабЗн.СчетДебета=Опер.Дебет.Счет;
ТабЗн.СчетКредита=Опер.Кредит.Счет;
КонецЦикла;
.....
Все хорошо, но возникла большая проблема по быстродействию - ну очень медленно работает, если еще давать
выборку по всей базе, то вообще усе встает. Может запрос будет побыстрее шевелиться, я пробовал сочинить такой запрос:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с дата1 по дата2;
|ОбрабатыватьОперации Все;
|ДатаОперации = Операция.ДатаОперации;
|СуммаОперации = Операция.СуммаОперации;
|СчетД = Операция.Дебет.Счет;
|СчетК = Операция.Кредит.Счет;
|ТекущийДокумент = Операция.ТекущийДокумент;
|Контрагенты = Операция.Дебет.Контрагенты, Операция.Кредит.Контрагенты;
|Договоры = Операция.Дебет.Договоры, Операция.Кредит.Договоры;
|Условие(СчетД=""""50"""");
|Условие(СчетК=""""76.1"""");
|Условие(Контрагенты=СпрК.ТекущийЭлемент());
|Условие(Договоры =СпрД.ТекущийЭлемент());
|"//}}ЗАПРОС
Но он не работает - одна из заковык (определил методом тыка) в строках СчетД, СчетК - чтобы по
ним шла выборка (по моему скромному мнению) должна быть группировка по проводке в операции - а как ее дать?
Вставляю в запрос строки: < Пров=Операция.Проводка и далее Группировка(Пров) > идет ругательство на Операция.Проводка.
Может кто подскажет-поделиться своим опытом???? =C уважением Л.Владимир "
03.04.2006
16:14
#3
Исходная задача - перенос платежей из 1с в другую учетную систему. Для этого мне необходимо
идентифицировать платеж по счету дебета-кредита, контрагенту и какому-то уникальному номеру (я беру - номер проводки+номер документа, до внутренних номеров записей 1с я не смог добраться), чтобы в последующем выгруженный платеж не обрабатывать повторно. Платеж может быть в выписке, операции, введенной вручную и т.д... А БИ, (как я понял) все это делают (я смотрел документы Анализ субконто, Анализ счета по субконото), но вот уникальный номер документа-проводки они мне не дадут, - а если бы дали, то усе было бы ОК - задача решена. Я, кстати, нашел на еще одном 1с форуме обсуждение этой же задачи (происходило год назад) - как заменить ВыбратьОперацииСПроводками запросом с той же целью (что бы было быстрее), но увы, на 7 страницах рассуждений все остались при своих мнениях...
идентифицировать платеж по счету дебета-кредита, контрагенту и какому-то уникальному номеру (я беру - номер проводки+номер документа, до внутренних номеров записей 1с я не смог добраться), чтобы в последующем выгруженный платеж не обрабатывать повторно. Платеж может быть в выписке, операции, введенной вручную и т.д... А БИ, (как я понял) все это делают (я смотрел документы Анализ субконто, Анализ счета по субконото), но вот уникальный номер документа-проводки они мне не дадут, - а если бы дали, то усе было бы ОК - задача решена. Я, кстати, нашел на еще одном 1с форуме обсуждение этой же задачи (происходило год назад) - как заменить ВыбратьОперацииСПроводками запросом с той же целью (что бы было быстрее), но увы, на 7 страницах рассуждений все остались при своих мнениях...
04.04.2006
05:27
#4
">но вот уникальный номер документа-проводки они мне не дадут, - а
>если бы дали, то усе было бы ОК - задача решена
Как это так?
БИ.ВыбратьПериоды(, 1);
Пока БИ.ПолучитьПериод() = 1 Цикл
оп = би.операция; // доступ к операции
док = би.операция.Документ; // доступ к документу, который ввел данную операцию
.......
Можно выбрать как операции, так и в разрезе проводок:
БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)
"
>если бы дали, то усе было бы ОК - задача решена
Как это так?
БИ.ВыбратьПериоды(, 1);
Пока БИ.ПолучитьПериод() = 1 Цикл
оп = би.операция; // доступ к операции
док = би.операция.Документ; // доступ к документу, который ввел данную операцию
.......
Можно выбрать как операции, так и в разрезе проводок:
БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)
"
10.08.2009
06:46
#6
"> >но вот уникальный номер документа-проводки они мне не дадут, - а
> >если бы дали, то усе было бы ОК - задача решена
>
> Как это так?
>
> БИ.ВыбратьПериоды(, 1);
> Пока БИ.ПолучитьПериод() = 1 Цикл
> оп = би.операция; // доступ к операции
> док = би.операция.Документ; // доступ к документу, который ввел данную операцию
> .......
>
> Можно выбрать как операции, так и в разрезе проводок:
> БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)
>
>
Я понимаю что это давно было но кто нибудь может по подробнее прокомментировать??
"
> >если бы дали, то усе было бы ОК - задача решена
>
> Как это так?
>
> БИ.ВыбратьПериоды(, 1);
> Пока БИ.ПолучитьПериод() = 1 Цикл
> оп = би.операция; // доступ к операции
> док = би.операция.Документ; // доступ к документу, который ввел данную операцию
> .......
>
> Можно выбрать как операции, так и в разрезе проводок:
> БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)
>
>
Я понимаю что это давно было но кто нибудь может по подробнее прокомментировать??
"
10.08.2009
07:26
#7
>Я понимаю что это давно было но кто нибудь может по подробнее прокомментировать??
>
"БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)"
Здесь мы вибираем все проводки, удовлетворяющие нашему условию с детализацией до проводки.
и в добавок человеку надо было получить доступ к документу, создавшему
данную проводку. (чтобы прочитать его номер, номер проводки)
собственно, через бухгалтерские итоги это легко делается.
Чувствую, что вопрос в другом - уточнили бы
>
"БИ.ВыполнитьЗапрос(нач_дата, ,,"50", "76.1",, 1, "Проводка", 1)"
Здесь мы вибираем все проводки, удовлетворяющие нашему условию с детализацией до проводки.
и в добавок человеку надо было получить доступ к документу, создавшему
данную проводку. (чтобы прочитать его номер, номер проводки)
собственно, через бухгалтерские итоги это легко делается.
Чувствую, что вопрос в другом - уточнили бы
10.08.2009
07:50
#8
"Уточняю: Как в мне в этом модуле обратиться к номеру и дате документа, по которому были переданы материалы сотруднику.
Процедура Сформировать()
БИ= СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники);
БИ.ИспользоватьСубконто(ВидыСубконто.Материалы);
БИ.ИспользоватьСубконто(ВидыСубконто.НазначенияИспользования);
БИ.ВыполнитьЗапрос(,Дата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);
Таб.Показать("""");
КонецПроцедуры"
Процедура Сформировать()
БИ= СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники);
БИ.ИспользоватьСубконто(ВидыСубконто.Материалы);
БИ.ИспользоватьСубконто(ВидыСубконто.НазначенияИспользования);
БИ.ВыполнитьЗапрос(,Дата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);
Таб.Показать("""");
КонецПроцедуры"
10.08.2009
08:18
#9
"%)
Это работает?
Как было выше сказано:
БИ.операция - ссылка на операцию
БИ.операция.Документ; ссылка на документ
т.е.
док = БИ.операция.Документ;
номер = док.НомерДок;
дата_док = док.ДатаДок;
"
Это работает?
Как было выше сказано:
БИ.операция - ссылка на операцию
БИ.операция.Документ; ссылка на документ
т.е.
док = БИ.операция.Документ;
номер = док.НомерДок;
дата_док = док.ДатаДок;
"
10.08.2009
08:25
#10
"БИ.ВыбратьСубконто(1);
Пока БИ.ПолучитьСубконто(1)=1 Цикл
Сотр= Строка(БИ.Субконто(1));
Код2= Строка(БИ.Субконто(1).Код);
СотрСКД = (БИ.СКД("С"));
БИ.ВыбратьПериоды(, 1);
Пока БИ.ПолучитьПериод() = 1 Цикл
Оп = БИ.операция; // доступ к операции
Док = БИ.операция.Документ; // доступ к документу, который ввел данную операцию
Ном=Док.НомерДок;
Дат=Док.ДатаДок;
КонецЦикла;
БИ.ВыбратьСубконто(2);
Пока БИ.ПолучитьСубконто(2)=1 Цикл
ОСТАТКИк = (БИ.СКД("К"));
ОСТАТКИс = (БИ.СКД("С"));
Если (ОСТАТКИк>0) И(ОСТАТКИс>0) Тогда
Мат= Строка(БИ.Субконто(2));
Код1= Строка(БИ.Субконто(2).Код);
поместил этот цикл в цикл который перебирает субконто "Сотрудники", теперь выводит номера и даты но не по всем субконто почемуто?
в чем может быть причина?"
Пока БИ.ПолучитьСубконто(1)=1 Цикл
Сотр= Строка(БИ.Субконто(1));
Код2= Строка(БИ.Субконто(1).Код);
СотрСКД = (БИ.СКД("С"));
БИ.ВыбратьПериоды(, 1);
Пока БИ.ПолучитьПериод() = 1 Цикл
Оп = БИ.операция; // доступ к операции
Док = БИ.операция.Документ; // доступ к документу, который ввел данную операцию
Ном=Док.НомерДок;
Дат=Док.ДатаДок;
КонецЦикла;
БИ.ВыбратьСубконто(2);
Пока БИ.ПолучитьСубконто(2)=1 Цикл
ОСТАТКИк = (БИ.СКД("К"));
ОСТАТКИс = (БИ.СКД("С"));
Если (ОСТАТКИк>0) И(ОСТАТКИс>0) Тогда
Мат= Строка(БИ.Субконто(2));
Код1= Строка(БИ.Субконто(2).Код);
поместил этот цикл в цикл который перебирает субконто "Сотрудники", теперь выводит номера и даты но не по всем субконто почемуто?
в чем может быть причина?"
4 суток происходит открытие оперативного периода в комплексной конфигурации.Помогите.Создание роли для нового пользователя!
Читают тему
(гостей: 1)