gifts2017

Поиск пропусков в нумерации документов запросом

Опубликовал Сергей (ildarovich) в раздел Отчеты - Анализ учета

Предлагается отчет на основе системы компоновки данных для выявления нарушений последовательности нумерации документов. Применяются методы из статей "Выразить строку как число и строку как дату в запросе" [http://infostart.ru/public/170336/] и "Быстрое определение интервалов в запросе" [http://infostart.ru/public/402534/] Это позволяет решить задачу быстро и непосредственно в запросе.

Идея решения заключается в том, что сначала строковые номера документов выбранного вида преобразуется в числовые номера. Метод из статьи "Выразить строку как число и строку как дату в запросе" позволяет игнорировать префиксы, так как нечисловые символы номера автоматически заменяются нулями. Затем на множестве числовых номеров определяются интервалы между соседними номерами. Как нарушение выводятся все интервалы, величина которых больше единицы.

Интервалы определяются методом из статьи "Быстрое определение интервалов в запросе". За счет этого достигается гибкость и высокое быстродействие отчета.

Приводятся две версии отчета. Один для обычных форм, а второй - для управляемых. Они построены на основе СКД и содержат минимум вспомогательного кода. Настройки отчета содержат только период выборки документов. Запрос выбирает данные по всем организациям информационной базы и всем видам документов, которые определены в метаданных конфигурации.

Основой всего является запрос:

ВЫБРАТЬ	"0" КАК Цифра, 0 КАК Позиция, 1 КАК Вес
ПОМЕСТИТЬ СистемаСчисления
ОБЪЕДИНИТЬ ВЫБРАТЬ "1", 1, 10
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", 2, 100
ОБЪЕДИНИТЬ ВЫБРАТЬ "3", 3, 1000
ОБЪЕДИНИТЬ ВЫБРАТЬ "4", 4, 10000
ОБЪЕДИНИТЬ ВЫБРАТЬ "5", 5, 100000
ОБЪЕДИНИТЬ ВЫБРАТЬ "6", 6, 1000000
ОБЪЕДИНИТЬ ВЫБРАТЬ "7", 7, 10000000
ОБЪЕДИНИТЬ ВЫБРАТЬ "8", 8, 100000000
ОБЪЕДИНИТЬ ВЫБРАТЬ "9", 9, 1000000000
ОБЪЕДИНИТЬ ВЫБРАТЬ "10",10,10000000000
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ	"РеализацияТоваровУслуг" КАК ТипДокумента, Организация КАК Организация, Ссылка, Номер
ПОМЕСТИТЬ Документы
ИЗ Документ.РеализацияТоваровУслуг
ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода
;
ВЫБРАТЬ	ТипДокумента, Ссылка, Организация, СУММА(СтепениДесяти.Вес * Цифры.Позиция) / МИНИМУМ(СтепениДесяти.Вес) КАК Номер
ПОМЕСТИТЬ Дано
ИЗ Документы
СОЕДИНЕНИЕ СистемаСчисления КАК СтепениДесяти ПО (ИСТИНА)
СОЕДИНЕНИЕ СистемаСчисления КАК Цифры ПО (ПОДСТРОКА(Номер, 11 - СтепениДесяти.Позиция, 1) = Цифры.Цифра)
СГРУППИРОВАТЬ ПО ТипДокумента, Ссылка, Организация
;
ВЫБРАТЬ ТипДокумента, Организация, Номер + 1 КАК НомерПары, Номер КАК НижняяГраница, Номер КАК ВерхняяГраница
ПОМЕСТИТЬ Тур0
ИЗ Дано
;
ВЫБРАТЬ	ТипДокумента, Организация, ВЫРАЗИТЬ(НомерПары / 2 КАК ЧИСЛО(15, 0)) КАК НомерПары
	, МИНИМУМ(НижняяГраница) КАК НижняяГраница,	МАКСИМУМ(ВерхняяГраница) КАК ВерхняяГраница, МИНИМУМ(ВерхняяГраница) КАК НачалоИнтервала, МАКСИМУМ(НижняяГраница) КАК КонецИнтервала
ПОМЕСТИТЬ Тур1
ИЗ Тур0
СГРУППИРОВАТЬ ПО ТипДокумента, Организация, ВЫРАЗИТЬ(НомерПары / 2 КАК ЧИСЛО(15, 0))
;
ВЫБРАТЬ ТипДокумента, Организация, НачалоИнтервала, КонецИнтервала
ПОМЕСТИТЬ Интервалы
ИЗ Тур1
ГДЕ НачалоИнтервала + 1 < КонецИнтервала
;
ВЫБРАТЬ	Интервалы.ТипДокумента, Интервалы.Организация, Дано1.Ссылка КАК Документ1, Дано2.Ссылка КАК Документ2
ИЗ Интервалы КАК Интервалы 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Дано1 ПО Интервалы.ТипДокумента = Дано1.ТипДокумента И Интервалы.Организация = Дано1.Организация И Интервалы.НачалоИнтервала = Дано1.Номер
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Дано2 ПО Интервалы.ТипДокумента = Дано2.ТипДокумента И Интервалы.Организация = Дано2.Организация И Интервалы.КонецИнтервала = Дано2.Номер

Перед компоновкой текст данного запроса "распаковывается" для обработки всех видов документов и для выполнения необходимого числа "итераций" определения интервалов. Для 11-значных номеров требуется 37 итераций.

Целью создания отчетов было расширение области применения методов из указанных статей и демонстрация их практической полезности.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Отчет "Пропуски в нумерации" (обычная форма)
.erf 11,54Kb
30.12.15
8
.erf 8.2 11,54Kb 8 Скачать
Отчет "Пропуски в нумерации" (управляемая форма)
.erf 12,06Kb
30.12.15
11
.erf 8.3 12,06Kb 11 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Николай Зайков (Mortiferus) 30.12.15 10:08
пытался запустить в своей УТ11 (11.1.2.31), платформа 8.3.5.1517. сначала ругается на строку 14 (ЭтотОбъект недоступно). При исправлении и запуске дальнейшем выходит такая ошибка:
Прикрепленные файлы:
2. Сергей (ildarovich) 30.12.15 12:14
(1) Mortiferus, видимо, я недостаточно протестировал отчеты - не во всех конфигурациях. Проблема, кажется, была в документах с числовой нумерацией. Преобразование номеров этим документам не нужно. Сейчас пока я такие документы вообще исключил из анализа. Отчеты обновил, попробуйте теперь!
3. Николай Зайков (Mortiferus) 30.12.15 14:34
(2) ildarovich, скачал заново. та же ошибка.
4. Сергей (ildarovich) 30.12.15 14:51
(3) Mortiferus, хорошо, тогда мне нужно время, чтобы воспроизвести именно эту ситуацию (комбинацию конфигурации и платформы). Сообщите также версию СУБД.
5. Николай Зайков (Mortiferus) 30.12.15 14:55
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа