И опять о наболевшем...
Код: Виділити все
charcode ="J1201004"; //НН – обязательно указать используемый шаблон
rsMain = App.DocumentsDataSet("PERDATE = '"+формат(PDate,"ДФ=yyyy.MM.dd")+"' AND CharCode='" + charcode + "'", True);
КвоСтрок = rsMain.RecordCount();
шапка.Очистить();
rsMain.First();
Пока Not rsMain.EOF() Цикл
НомСтроки = rsMain.RecNo();
Состояние(""+ КвоСтрок+" / "+НомСтроки);
СтрокаТЗ = Шапка.Добавить();
КвоКолонок = rsMain.Fields().Count();
//Для ххх=0 по квоКолонок-1 Цикл //Раскоментить для получения всей табцици
// Value = rsMain.Fields().Item(ххх).Value;
// Name = rsMain.Fields().Item(ххх).Name;
// ТекКолонка = Шапка.колонки.Найти(Name);
// Если ТекКолонка = неопределено Тогда
// ТекКолонка = Шапка.Колонки.Добавить(Name);
// КонецЕсли;
// СтрокаТЗ[Name] = Value;
//КонецЦикла;
СтрокаТЗ.CODE = rsMain.FldVal("CODE");
СтрокаТЗ.CRTDATE = rsMain.FldVal("CRTDATE");
СтрокаТЗ.MODDATE = rsMain.FldVal("MODDATE");
Doc_ = App.OpenDocumentByCode(СтрокаТЗ.Code);
rsMain_ = Doc_.DataSets(0);
rsMain_.First();
Пока Not rsMain_.EOF() Цикл
СтрокаТЗ.Num = rsMain_.FldVal("N2_1");
СтрокаТЗ.Dat = rsMain_.FldVal("N11");
// Этого условия не должно быть !!!
Если rsMain_.RecNo = rsMain_.RecordCount Тогда
Прервать;
КонецЕсли;
rsMain_.Next();
КонецЦикла;
// Этого условия не должно быть !!!
Если НомСтроки = КвоСтрок Тогда
Прервать;
КонецЕсли;
rsMain.Next();
КонецЦикла;
Допустим надо выбрать данные документа J1201004 № 8 от 10.03.2013, что мы делаем???
Код: Виділити все
rsMain = App.DocumentsDataSet("PERDATE = '"+формат(PDate,"ДФ=yyyy.MM.dd")+"' AND CharCode='" + charcode + "'", True);
РЕЗУЛЬТАТ - таблица с колонками: CODE IDORG FORM CHARCODE PERTYPE PERDATE CRTDATE MODDATE STATUS FLAGS NAME
DELETED IDREPCODE IDPARENT REPCODENUM SPECIF SENDSTT SORTCOLLVAL
эта строчка отрабатует быстро но среди полученных колонок нет даты и номера документа... нет колонок для болие точного позиционирования данных
как пример: ("PERDATE = '"+формат(PDate,"ДФ=yyyy.MM.dd")+"' AND CharCode='" + charcode + "'")
- условие срабатывает оч. быстро (~1 сек - 100 записей) но так мы выберем только док-ты за период... но не тот который нужен....
Допустим в выборке 100 записей и нужно найти код (CODE) нужного документа.. нам приходится извращаться...
Doc_ = App.OpenDocumentByCode(СтрокаТЗ.Code);
rsMain_ = Doc_.DataSets(0);
rsMain_.First();
Пока Not rsMain_.EOF() Цикл
СтрокаТЗ.Num = rsMain_.FldVal("N2_1");
СтрокаТЗ.Dat = rsMain_.FldVal("N11");
// Этого условия не должно быть !!!
Если rsMain_.RecNo = rsMain_.RecordCount Тогда
Прервать;
КонецЕсли;
rsMain_.Next();
КонецЦикла;
и вот это занимает около 30 секунд...
Получается если нам нужен документ по номеру или за конкретную дату - все равно приходится перебирать лишний
раз таблицу базы с "ШАПКОЙ" документов ...
З.Ы. если есть болие короткий путь - подскажите пожалуйста...