Класс «Быстрые итоги»
Номер текущей версии: 2.1k, дата выпуска: 29.09.05
Версия 2.1k
Добавлено:
- Новый метод ВидыДляВыбора(СписокВидовДокументов): позволяет формировать запрос по отдельным видам документов. Строка СписокВидовДокументов представляет собой список видов документов, разделенных запятой. Список может предваряться ключевым словом "НЕ ", означающим, что в запрос попадут все документы, кроме перечисленных в списке. Имеет смысл только для запросов, детализированных по операциям (документам) или проводкам. При использовании метода суммы начального и конечного сальдо по группировкам запроса не расчитывается.
- Новый метод НомерСтрокиДокумента(): возвращает номер строки документа, соответствующий полученному периоду (проводке) запроса. Имеет смысл только для запросов, детализированных по проводкам.
Исправлено:
- Исправлена ошибка: из-за ошибок конвертирования переменных в хранимой процедуре в запрос могли не попасть некоторые значения, если дата начала запроса соответствовала концу календарного месяца.
- Исправлена ошибка: при вызове функции ВыгрузитьИтоги() с переименованием колонки документа значения документов не типизировались.
- Исправлено: оптимизирована работа функции ВыполнитьЗапрос()
- Исправлено: добавлена новая хранимая процедура SQL_QueryVerstamp, возвращающая номер версии хранимых процедур. Начиная с текущей версии, обновление хранимых процедур происходит автоматически.
- Исправлено: изменен текст хранимой процедуры; при формировании запросов по проводкам номер строки документа выбирается SQL-сервером.
- Исправлено: добавлена новая колонка в таблице итогов по проводкам: СтрокаДокумента
- Исправлено: изменено внутреннее представление проводки в запросе по проводкам без детализации по документам (список значений с тремя элементами; третий элемент - номер строки документа).
- Исправлено: при чтении значения функции ТекущийДокумент() или атрибута Документ номер строки документа берется из результатов запроса, подготовленных SQL-сервером, а не определяется через отдельный запрос.
Версия 2.1j
Добавлено:
- Новый метод ВыгрузитьИтоги(ТЗ = "", СтрокаГруппировок = "", ФлОчищать = 1, ФлСуммироватьИтоги = 0): выгружает текущий контекст выборки в таблицу значений.
- Новый метод ВыполнитьИнструкцию(ТекстЗапроса, ТЗ = "", ФлОчищать = 1, ФлУчитыватьКонтекст = 1, СписокПараметров = 0): выполняет произвольный SQL-запрос к таблице запроса, отобранной методом ВыполнитьЗапрос(). Таблица запроса доступна для ссылок в тексте запроса через идентификатор $ТаблицаИтогов. Запрос может быть выполнен как с учетом текущего контекста выборки, так и вне его. Тип возвращаемого значения аналогичен типу возвращаемого значения одноименного метода класса ODBCRecordSet.
- Новый метод ВыполнитьСкалярный(ТекстЗапроса, ФлУчитыватьКонтекст = 1, СписокПараметров = 0): выполняет произвольный SQL-запрос к таблице запроса, отобранной методом ВыполнитьЗапрос(). Таблица запроса доступна для ссылок в тексте запроса через идентификатор $ТаблицаИтогов. Запрос может быть выполнен как с учетом текущего контекста выборки, так и вне его. Тип возвращаемого значения аналогичен типу возвращаемого значения одноименного метода класса ODBCRecordSet.
- Новый метод УстановитьКонтекст(СтрокаГруппировок, ЗначениеГруппировки1, ...): используется для быстрой установки контекста перед вызовом методов групповой обработки данных.
- Новый метод ВНачалоВыборки(): очищает стек выборок выполненного запроса.
- Новый метод НеКонтролироватьПорядокВыборки(): отключает контроль последовательного вызова группировок по субконто (по умолчанию контроль включен).
- Новый атрибут СтрокаСостояния (для чтения и записи): позволяет включить/отключить вывод сообщений в строку состояния 1С при построении запроса или расчета итогов. По умолчанию (при создании объекта класса) режим вывода сообщений включен.
Исправлено:
- Исправлена ошибка: При вызове некоторых методов класса вносились несанкционированные изменения в переменные, переданные этим методам в качестве параметров.
- Исправлена ошибка: Если суммы дебетового и кредитового оборотов по текущей группировке были равны нулю, при попытке развернуть такую группировку по периодам выдавалось сообщение об ошибке.
- Исправлена ошибка: Если период краткого запроса был установлен методом ПериодДень() и дата периода была передана как значение типа "Строка", при попытке рассчитать конечное сальдо по такому запросу выдавалось сообщение об ошибке.
- Исправлена ошибка: В режиме кратких запросов при подсчете конечного сальдо на позицию документа не учитывались движения самого документа.
- Исправлено: Выполнена оптимизация текстов SQL-запросов с учетом возможностей 1cpp.dll версии 1.8.1.4.
Замечание:
Обновление хранимой процедуры при переходе с версий 2.1g-2.1i не требуется.
Версия 2.1i
Добавлено:
- Новый метод ВыбратьДокументы(ВидСортировки = -1). Может быть использован только в запросе, детализированном по операциям или проводкам. Открывает выборку по документам, причем результаты такой выборки для запроса, выполненного с детализацией по проводкам, будут сгруппированы по операциям (документам).
- Новый метод ПолучитьДокумент(Номер = 0, Значение = ""). Может быть использован только в запросе, детализированном по операциям или проводкам. Позиционируется на очередную операцию в текущей выборке, открытой методом ВыбратьДокументы().
- Новый метод ТекущийДокумент(). Возвращает текущее значение документа из открытой выборки документов (или обычной выборки периодов для запроса, детализированного по операциям или проводкам). В случае открытой выборки по проводкам, если текущей проводке соответствует определенная строка табличной части текущего документа, курсор табличной части будет спозиционирован на эту строку.
- Новый метод ВыбратьПроводки(ВидСортировки = -1). Может быть использован только в запросе, детализированном по проводкам. Открывает выборку по проводкам. Может быть использован совместно с методами ВыбратьДокументы()/ПолучитьДокумент() - в этом случае во вложенную выборку проводок будут попадать только проводки текущего документа из выборки документов.
- Новый метод ПолучитьПроводку(Номер = 0, Значение = ""). Может быть использован только в запросе, детализированном по проводкам. Позиционируется на очередную проводку в текущей выборке, открытой методом ВыбратьПроводки().
- Новый метод НомерПроводки(). Возвращает номер текущей проводки в текущей операции. Может быть использован только в запросе, детализированном по проводкам.
- Новый метод ЗначениеГруппировки(ИдГруппировки). Возвращает текущее значение группировки запроса по переданному идентификатору (регистрозависим). Помимо характеристик субконто, поддерживаются следующие идентификаторы: РазделительУчета, Счет, Субконто1, Субконто2, Субконто3, Валюта, Период, Документ, Проводка. Значение группировки "Период" при детализации до проводок возвращается в виде операции, спозиционированной на проводке. Значение группировки "Период" при детализации до операций или документов возвращается в виде операции. Значение группировки "Документ" (выборка формируется методом ВыбратьДокументы()) возвращается в виде документа. Значение группировки "Проводка" внутри выборки документов (метод ВыбратьПроводки() внутри выборки документов) возвращается в виде номера проводки документа; значение группировки "Проводка" извне выборки документов возвращается в виде операции, спозиционированной на проводке.
- Новый необязательный параметр НомерИндекса в методе СоздатьИндекс(НаправлениеСортировки, НомерИндекса = 0). Позволяет создавать несколько индексов для одного и того же запроса. Все созданные индексы уничтожаются при разрушении объекта класса.
- Значения характеристик субконто теперь доступны как динамические атрибуты класса (непосредственно в теле выборки по данной характеристике либо в цикле выборки по связанному виду субконто).
Исправлено:
- Исправлена ошибка: Неверно рассчитывались суммы начального и конечного сальдо запроса внутри выборки по периодам.
- Исправлена ошибка: При использовании индексированного запроса с детализацией по периодам в модуле проведения документа (а также внутри некоторых транзакций), при фиксации результатов транзакции работа программы аварийно завершалась с сообщением об ошибке.
- Исправлена ошибка: Попытка обратиться к функции СКД() в кратком запросе к текущей ИБ приводило к сообщению об ошибке на SQL-сервере.
- Исправлена ошибка: Из-за неверной организации внутренней структуры класса процедура Деструктор() никогда не выполнялась, что приводило к засорению ИБ на сервере временными таблицами с префиксом SQL_AccntVT.
- Исправлена ошибка: При использовании выборок по характеристикам субконто не выполнялась сортировка по субконто, заданная в третьем параметре метода ВыбратьСубконто().
- Исправлена ошибка: При формировании выборки, вложенной в выборку разделителей учета, в некоторых случаях не учитывалось текущее значение разделителя учета (формировалась одинаковая вложенная выборка вне зависимости от текущего значения разделителя учета).
Замечание:
Обновление хранимой процедуры при переходе с версий 2.1h/2.1g не требуется.
Версия 2.1h
Добавлено:
- Новый атрибут (только для чтения) Документ. Если открыта выборка по периодам (операциям или проводкам) и получено значение периода, возвращает документ, соответствующий полученному периоду. Если выполняется разворот по проводкам и при проведении документа проводке была сопоставлена определенная строка документа, документ будет спозиционирован на этой строке.
Исправлено:
- Исправлена ошибка: если был установлен отбор по субконто, при попытке развернуть такую выборку по периодам возникало сообщение об ошибке.
- Исправлена ошибка: демонстрационные отчеты example1.ert и example2.ert выдавали сообщение об ошибке при открытии в SQL-базе без разделителя учета.
Версия 2.1g
Добавлено:
- Поддержка оборотных субконто в (1) полных запросах к текущей или произвольной ИБ, (2) кратких запросах к текущей ИБ.
Исправлено:
- Исправлена ошибка, связанная с сортировкой выборок по представлению субконто.
- Исправлена ошибка: виртуальная таблица итогов не удалялась с сервера в случае последовательного выполнения сначала полного, а затем краткого запроса через один и тот же объект класса.
- Исправлена ошибка: в случае одновременного выполнения запросов с разных подключений к серверу (в т.ч. с разных компьютеров) в некоторых случаях один запрос мог затереть данные отборов по счетам или субконто другого запроса.
Версия 2.1f
Добавлено:
- Новый метод ВыбратьХарактеристики(ИдХарактеристики, СпособСортировки = -1) - открывает выборку по предопределенным характеристикам субконто.
- Новый метод ПолучитьХарактеристику(ИдХарактеристики, НомерВыборки = 0, Значение = ""): позиционируется на следующее значение характеристики субконто в открытой выборке.
- Новый метод Характеристика(ИдХарактеристики): возвращает текущее значение характеристики по ее идентификатору. Если выборка по характеристике с таким идентификатором не открыта, возвращает значение данной характеристики для текущего элемента в выборке по связанному виду субконто.
Исправлено:
- Исправлена ошибка: если в выборке по субконто встречалось пустое значение (напр., пустой элемент справочника), выборка никогда не завершалась (входила в бесконечный цикл).
Версия 2.1e
Добавлено:
- Новый метод УстПараметрыПодключения(RecordSet, ИДРазделителяУчета = ""): позволяет подключаться к произвольной базе, выполнять в ней бухгалтерские запросы и получать их результаты.
- Новый метод РассчитатьИтоги(ДатаКвартала): позволяет программно открывать новый период бухгалтерских итогов.
Исправлено:
- Исправлена ошибка: не открывалась выборка по разделителям учета, если не был задан разворот по значению разделителя учета (методы ВыбратьРазделители() и ПолучитьРазделитель() всегда возвращали 0).
- Исправлена ошибка: при подключении характеристик по виду субконто с порядковым номером 2 или 3 и отсутствию разворотов по предыдущим видам субконто появлялось сообщение об ошибке.
Замечания:
- Вызов метода УстПараметрыПодключения() интерпретируется как отключение объекта класса от текущей и подключение к произвольной SQL-базе. Повторная ре-инициализация объекта класса (возврат к текущему подключению) не предусмотрена.
- После вызова метода УстПараметрыПодключения() обязателен вызов метода ИспользоватьПланСчетов().
- В существующие методы ИспользоватьПланСчетов(), ИспользоватьРазделительУчета(), ИспользоватьСубконто() добавлены новые параметры, обязательные к указанию при работе с произвольной БД. Примеры использования методов приведены в файле readme.rtf
- При подключении к произвольной базе все отборы и группировки бухгалтерского запроса (за исключением дат периодов) задаются и возвращаются в виде строковых идентификаторов (ID объектов).
- При необходимости строковое представление субконто-справочника из произвольной базы может быть получено с помощью метода ПредставлениеСубконто() (при условии, что перед выполнением запроса была задана характеристика данного вида субконто по наименованию или коду, см. метод ХарактеристикаСубконто()).
- При получении периода с детализацией "Проводка" в произвольной базе атрибут Операция вернет список значений, в котором первым значением будет ID соответствующего документа, вторым - номер проводки в операции этого документа (начиная с нуля).
- В монопольном режиме 1С не отлавливает изменение границы итогов методом РассчитатьИтоги() - т.е. после вызова метода РассчитатьИтоги() в монопольном режиме метод КонецРассчитанногоПериодаБИ() будет возвращать предыдущее значение границы итогов (до перезагрузки 1С:Предприятия).
Версия 2.1d
Исправлено:
- Исправлена ошибка: при попытке открыть выборку по любому типу периодов (кроме периода типа "Операция" ("Документ")) появлялось сообщение об ошибке.
- Исправлена ошибка: при развороте по периодам индексированного запроса нельзя было получить валютную сумму дебетового оборота.
- Исправлена ошибка: при вызове методов ПолучитьРазделитель(), ПолучитьСубконто(), ПолучитьСчет(), ПолучитьВалюту(), ПолучитьПериод() с переданным значением нужной группировки появлялось сообщение об ошибке.
Версия 2.1c
Добавлено:
- Новый метод СоздатьИндекс(НаправлениеВыборки) - индексирует виртуальную таблицу, созданную методом ВыполнитьЗапрос(). Ускоряет разбор сложных выборок или выборок, связанных с большим объемом получаемых данных.
- Новый метод ОбратныйПорядок(Режим) - задает порядок сортировки по умолчанию для всех нижеследующих методов построения выборок (ВыбратьРазделители(), ВыбратьСубконто(), ВыбратьСчета(), ВыбратьВалюты(), ВыбратьПериоды()).
- Новый параметр ВидСортировки во всех функциях построения выборок (ВыбратьСчета(), ВыбратьРазделители(), ВыбратьСубконто(), ВыбратьВалюты(), ВыбратьПериоды()).
- Новый параметр ПолеСортировки в функции ВыбратьСубконто(): определяет характеристику субконто, по которой будет выполняться сортировка.
Исправлено:
- Исправлена ошибка: все экземпляры класса пытались работать с одной и той же виртуальной таблицей.
- Переработаны методы построения выборок (оптимизация по скорости выполнения).
- Переработаны методы получения результатов запроса (оптимизация по скорости выполнения).
Версия 2.1b
Добавлено:
- Новый метод ВыполнитьЗапрос(ДатаНач, ДатаКон, Счет, КоррСчет, Валюта, ТипИтогов, Периодичность, ТипСуммы); список параметров метода аналогичен списку параметров аналогичного метода объекта "БухаглтерскиеИтоги". В данной версии класса игнорируются параметры КоррСчет (анализ корреспонденций не проводится вообще), ТипИтогов (всегда рассчитываются только остатки и обороты по счету в целом), ТипСуммы (всегда расчитываются все три типа суммы).
- Новый метод Опции(ВклЗабалансовыеСчета). Флаг ВклЗабалансовыеСчета определяет, будут ли включаться в запрос по всему плану счетов данные по забалансовым счетам.
- Новый метод ВыбратьРазделители() - открывает выборку по разделителям учета; возвращает 0 если выборка пуста и 1 если есть хотя бы одно значение в выборке.
- Новый метод ПолучитьРазделитель(НомерВыборки = 0, Значение = "") - позиционируется на следующее значение в выборке. Параметр "НомерВыборки" определяет номер выборки в общем стеке выборок по запросу. Возвращает 0 - если выборка завершена или 1 - если значение получено успешно.
- Новый метод ВыбратьСчета() - открывает выборку по счетам, возвращает 0 если выборка пуста или 1 если есть хотя бы один счет.
- Новый метод ПолучитьСчет(НомерВыборки = 0, Значение = "") - позиционируется на следующее значение счета. Параметр "НомерВыборки" определяет номер выборки в общем стеке выборок по запросу; параметр "Значение", если указан, может быть счетом или его кодом. Возвращает 0 - если выборка завершена или 1 - если значение получено успешно.
- Новый метод ВыбратьВалюты() - открывает выборку по валютам, возвращает 0 если выборка пуста или 1 если есть хотя бы одна валюта.
- Новый метод ПолучитьВалюту(НомерВыборки = 0, Значение = "") - позиционируется на следующее значение валюты. Параметр "НомерВыборки" определяет номер выборки в общем стеке выборок по запросу. Возвращает 0 - если выборка завершена или 1 - если значение получено успешно.
- Новый метод ВыбратьСубконто(НомерВидСубконто) - открывает выборку по указанному виду субконто, возвращает 0 если выборка пуста или 1 если есть хотя бы одно значение субконто.
- Новый метод ПолучитьСубконто(НомерВидСубконто, НомерВыборки = 0, Значение = "") - позиционируется на следующее значение субконто указанного вида. Параметр "НомерВыборки" определяет номер выборки в общем стеке выборок по запросу. Возвращает 0 - если выборка завершена или 1 - если значение получено успешно.
- Новый метод Субконто(НомерВидСубконто). Возвращает значение субконто указанного вида, полученное методом ПолучитьСубконто() или, если выборка не открыта, установленное для отбора методом ИспользоватьСубконто().
- Новый метод ПредставлениеСубконто(НомерВидСубконто). Возвращает строковое представление значения субконто указанного вида, полученного методом ПолучитьСубконто() или, если выборка не открыта, установленного для отбора методом ИспользоватьСубконто().
- Новый метод ВыбратьПериоды() - открывает выборку по периодам, возвращает 0 если выборка пуста или 1 если есть хотя бы один период.
- Новый метод ПолучитьПериод(НомерВыборки = 0, Значение = "") - позиционируется на следующий период. Параметр "НомерВыборки" определяет номер выборки в общем стеке выборок по запросу, параметр "Значение", если указан, должен быть датой начала периода (если запрос разворачивается по годам/кварталам/месяцам/неделям/дням) или документом (если запрос разворачивается по операциям/проводкам). Возвращает 0 - если выборка завершена или 1 - если значение получено успешно.
- Новый атрибут (только для чтения) РазделительУчета. Возвращает значение разделителя учета, полученное методом ПолучитьРазделитель() или, если выборка не открыта, установленное методом ИспользоватьРазделительУчета().
- Новый атрибут (только для чтения) Счет. Возвращает значение счета, полученное методом ПолучитьСчет() или, если выборка не открыта, установленное при вызове методов ВыполнитьЗапрос()/ПолучитьТаблицуИтогов().
- Новый атрибут (только для чтения) Валюта. Возвращает значение валюты, полученное методом ПолучитьВалюту() или, если выборка не открыта, установленное при вызове методов ВыполнитьЗапрос()/ПолучитьТаблицуИтогов().
- Новый атрибут (только для чтения) НачДата. Возвращает дату начала запроса или, если открыта выборка по периодам и получено значение периода, дату начала текущего периода.
- Новый атрибут (только для чтения) КонДата. Возвращает дату окончания запроса или, если открыта выборка по периодам и получено значение периода, дату окончания текущего периода.
- Новый атрибут (только для чтения) Операция. Если открыта выборка по периодам (операциям или проводкам) и получено значение периода, возвращает операцию, соответствующую полученному периоду. Если выполняется разворот по проводкам, операция будет спозиционирована на соответствующей проводке.
- Добавлена поддержка обращения к результатам выполненного запроса в функции ДО(), КО(), СНД(), СКД(), СНК(), СКК() с учетом открытых выборок. При обращении к функциям получения сальдо учитывается значение текущего счета (полученного методом ПолучитьСчет() или использованного при построении запроса); суммы сальдо преобразуются в соответствии с флагом активно-пассивности текущего счета. Если выборка по счетам не открыта, а в запросе использованы несколько счетов, ненулевой результат возвращают только функции подсчета дебетового сальдо.
- Добавлена поддержка отборов по субконто и разделителям учета - новый параметр в методах ИспользоватьСубконто() и ИспользоватьРазделительУчета(). При установке отбора в виртуальной таблице не создается колонка со значениями субконто и значениями разделителей учета.
Отличия от соответствующих методов объекта "БухгалтерскиеИтоги":
- В данной версии класса выборки не сортируются по представлению значений. Планируется опциональная сортировка по кодам счетов, наименованиям валют, наименованиям разделителей и характеристикам субконто в одной из следующих версий класса.
- В данной версии класса в выборку по счетам не попадают счета-группы. Планируется опциональное включение счетов-групп в одной из следующих версий класса.
- Функции СНД(), СКД(), СНК(), СКК() всегда возвращают нулевой результат, если внутри открытой выборки по периодам существует любая другая открытая выборка.
- В данной версии класса отсутствует поддержка запросов по коррсчетам.
- В данной версии класса отсутствует поддержка функций развернутого сальдо.
Замечания
- Функция ВыполнитьЗапрос() создает виртуальную таблицу на SQL-сервере, дальнейшее обращение к результатам запроса происходит с помощью SQL-запросов к этой таблице. Время выполнения запроса в бытовых условиях всегда меньше времени выполнения соответствующего запроса через объект "БухгалтерскиеИтоги".
- Методы построения выборок и позиционирования на очередном значении выборки добавлены для (обратной) совместимости с типовым объектом "БухгалтерскиеИтоги". Следует помнить, что код этих методов написан на встроенном языке 1С:Предприятия, поэтому время их выполнения превышает время выполнения соответствующих методов объекта "БухгалтерскиеИтоги". Планируется дальнейшая оптимизация стека выборок и кэширование функций получения результатов запроса.
- Время создания и инициализации объекта класса обычно сравнимо со временем выполнения небольшого запроса. Рекомендуется создавать объект класса один раз в глобальном модуле и использовать уже созданный объект в отчетах и документах конфигурации.
Версия 2.0 fb2
Исправлено:
- Значения субконто типа "Дата" терялись при типизации таблицы итогов. Связано с тем, что значения таких субконто хранятся в БД в строковом формате, а не в формате datetime. Колонки со значениями таких субконто будут преобразовываться в строковый тип, а не в тип "Дата".
- Попытка сформировать запрос за длительный период времени (например, три года) приводила к ошибке из-за внутреннего переполнения буфера строки (NB: попытка сформировать запрос за период длиной, например, в 7 лет все равно приведет к ошибке, однако на данный момент считаю такой результат достаточным.)
- При формировании запроса с начальной позицией, равной концу календарного месяца, неверно рассчитывались суммы начального и конечного сальдо.
Добавлено:
- Добавлена поддержка номера субконто счета в процедуре ИспользоватьСубконто (например, ИспользоватьСубконто(1))
- Добавлена поддержка характеристик-реквизитов субконто, значения которых попадают в отдельные колонки итоговой таблицы. Добавлен метод ХарактеристикаСубконто(НомерВидСубконто, ИмяРеквизита, ИмяКолонки = ""). Подробное описание метода см. в синтаксис-помощнике.
- Поддержка отборов по субконто неагрегатных типов (число, строка, дата).
Версия 2.0
(Первая опубликованная версия)