1.
NGPhoenix
8
20.06.13 22:49
Сейчас в теме
Есть несколько замечаний по коду:
1) Регистр надо сохранять не после обработки каждой записи по дебету или кредиту, а после обработки всего набора записей документа, т.е. в конце внешнего цикла
2) Не стоит искать значение плана вида характеристик по наименованию, когда известно его значение заранее
3) Подсчет записей происходит неверно, т.к. считается число строк, а в значении "из" число документов.
4) Если в запросе поставить "выбирать различные", то и сворачивать таблицу по регистратору не нужно
После всего вышесказанного код будет выглядеть так + вставил прерывание на всякий случай:
Процедура Обработать() Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕПСБУСубконто.Регистратор
|ИЗ
| РегистрБухгалтерии.ЕПСБУ.Субконто КАК ЕПСБУСубконто
|ГДЕ
| ЕПСБУСубконто.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ЕПСБУСубконто.Вид = &Вид
| И ЕПСБУСубконто.Значение = НЕОПРЕДЕЛЕНО
|
|УПОРЯДОЧИТЬ ПО
| ЕПСБУСубконто.Регистратор.Дата";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
Запрос.УстановитьПараметр("Вид", ВыбСубконто);
Результат = Запрос.Выполнить().Выгрузить();
КолЗ = Результат.Количество();
КолД = Результат.Количество();
ТекДата = ТекущаяДата();
Сообщить("количество документов " + КолД + ". Количество записей " + КолЗ + " " + ТекущаяДата());
н = 0;
Для Каждого Стр Из Результат Цикл
Док = Стр.Регистратор;
Рег = РегистрыБухгалтерии.ЕПСБУ.СоздатьНаборЗаписей();
Рег.Отбор.Регистратор.Значение = Док;
Рег.Прочитать();
Для Каждого Дв Из Рег Цикл
Для Каждого Субконто Из Дв.СубконтоДт Цикл
Если Субконто.Ключ = ВыбСубконто Тогда
Если Субконто.Значение = Неопределено Тогда
Дв.СубконтоДт.Вставить(ВыбСубконто, ТипСубконто.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Субконто Из Дв.СубконтоКт Цикл
Если Субконто.Ключ = ВыбСубконто Тогда
Если Субконто.Значение = Неопределено Тогда
Дв.СубконтоКт.Вставить(ВыбСубконто, ТипСубконто.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Рег.Записать();
н = н+1;
Состояние("Записан " + н + " из " + КолЗ + ". Скорость " + Окр((ТекущаяДата() - ТекДата)/н,5) + " " + Строка(Док));
ОбработкаПрерыванияПользователя();
КонецЦикла;
Сообщить("Обработка завершена");
КонецПроцедуры