Консультация № 65083
01.12.2006, 12:29
0.00 руб.
0 2 1
Доброго времени суток!
Вопрос:
Нужно выяснить из чего (каких документов и на какие суммы) состоит, допустим, кредиторская задолженность по счету 60.1
Делаю так:
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,,1);
Ит.ИспользоватьСубконто(ВидыСубконто.Договоры,,1);
Ит.ВыполнитьЗапрос(ОтчДата,ОтчДата,СчетПоКоду("60.1"));
Если Ит.СКК()>0 Тогда
ИтДоп.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Ит.Субконто(1),1);
ИтДоп.ИспользоватьСубконто(ВидыСубконто.Договоры,Ит.Субконто(2),1);
ИтДоп.ВыполнитьЗапрос(ДатаНачалаВеденияУчета1С,ОтчДата,СчетПоКоду("60.1"),,,3,3);
ИтДоп.ВыбратьПериоды(1,2);
Пока ИтДоп.ПолучитьПериод()=1 Тогда

Тут загоняю все в таблицу значений, сортирую в обратном (по Дате и Времени) порядке и могу выяснить какие же документы составляют это сальдо, но проблема в том что это долго. Безумно долго. База уже 5 лет и документов которые надо перебрать очень много.
1. Есть ли типа переключатель "обратный порядок" для Бухгалтерских Итогов ?
2. Как это сделать быстрее другими способами?

Обсуждение

Неизвестный
01.12.2006, 13:37
общий
это ответ
Здравствуйте, Игорь К.!
Модернизация может быть в том, что в ИтДоп.ВыполнитьЗапрос вы выполняете запрос по одному контрагенту, а нужно выполнить этот запрос 1 раз, но по всем контрагентам.

Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,,1);
Ит.ИспользоватьСубконто(ВидыСубконто.Договоры,,1);
Ит.ВыполнитьЗапрос(ОтчДата,ОтчДата,СчетПоКоду("60.1"));
ИтДоп.ИспользоватьСубконто(ВидыСубконто.Контрагенты);
ИтДоп.ИспользоватьСубконто(ВидыСубконто.Договоры);
ИтДоп.ВыполнитьЗапрос(ДатаНачалаВеденияУчета1С,ОтчДата,СчетПоКоду("60.1"),,,3,3);
Если Ит.СКК()>0 Тогда
Если ИтДоп.ПолучитьСубконто(1,,Ит.Субконто(1))=1 Тогда
Если ИтДоп.ПолучитьСубконто(2,,Ит.Субконто(2))=1 Тогда
ИтДоп.ВыбратьПериоды(1,2);
Пока ИтДоп.ПолучитьПериод()=1 Тогда

Таким образом, страшно долгий запрос выполнится 1 раз.
ПолучитьСубконто работает очень быстро.
Неизвестный
01.12.2006, 14:27
общий
To : Шахрайчук Владимир АнатольевичКак раз наоборот. В тексте пропущены 2 строчки с циклами по контрагентам и договорам от первого запроса, думаю это и так понятно.таким образом подзапросы ИтДоп крутятся только у тех контрагентов с договорами у которых есть СКК, в сумме по времени получается быстрее. Ваш ответ прыжок в сторону.Ниже более полный кусок:Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,, 1);Ит.ИспользоватьСубконто(ВидыСубконто.Договоры,, 1);Ит.ИспользоватьСубконто(ВидыСубконто.ОтделыМГ,, 1);Если Ит.ВыполнитьЗапрос(КонДата, КонДата, СчетПоКоду("60.1")) = 0 Тогда Возврат;КонецЕсли; Состояние("Выбираем данные");Ит.ВыбратьСубконто(1);Пока Ит.ПолучитьСубконто(1) = 1 ЦиклИт.ВыбратьСубконто(2);Пока Ит.ПолучитьСубконто(2) = 1 ЦиклИт.ВыбратьСубконто(3);Пока Ит.ПолучитьСубконто(3) = 1 ЦиклЕсли (Ит.СКК()>0) ТогдаИт0.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Ит.Субконто(1), 1);Ит0.ИспользоватьСубконто(ВидыСубконто.Договоры,Ит.Субконто(2), 1); Ит0.ИспользоватьСубконто(ВидыСубконто.ОтделыМГ,Ит.Субконто(3), 1); Ит0.ВыполнитьЗапрос("01.01.2002",КонДата,СчетПоКоду("60.1"),,,3,2,"С");Ит0.ВыбратьПериоды();Пока Ит0.ПолучитьПериод() = 1 Цикл . . . КонецЦикла; КонецЕсли;КонецЦикла;КонецЦикла;КонецЦикла;
Форма ответа