Особенности нейминга в универсальном случае

Скачал с Инфостарта обработку по очистке базы. Обработка классная, включил ее в свой инструментарий:

Особенно понравился индикатор выполнения, я уже и отвык от него в управляемых формах, а в обычных формах это было must have.

Жаль, конечно, нельзя удалять регистры, ну да ладно.

В процессе очистки документов я столкнулся с ошибкой выполнения вот такого кода:

Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	КОЛИЧЕСТВО(*) КАК КоличествоВсего,
		|	СУММА(ВЫБОР
		|			КОГДА " + ДокИмя + ".Проведен
		|				ТОГДА 1
		|			ИНАЧЕ 0
		|		КОНЕЦ) КАК КоличествоПроведенных,
		|	СУММА(ВЫБОР
		|			КОГДА " + ДокИмя + ".ПометкаУдаления
		|				ТОГДА 1
		|			ИНАЧЕ 0
		|		КОНЕЦ) КАК КоличествоПомеченныхНаУдаление
		|ИЗ
		|	Документ." + ДокИмя + " КАК " + ДокИмя);

Если в документе есть табличная часть, которая соответствует имени документа, выдается ошибка.

Я переписал код запроса, чтобы у документа был псевдоним Т (как видите, я по привычке и форматирование поправил):

Запрос = Новый Запрос(
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоВсего,
| СУММА(ВЫБОР
| КОГДА Т.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоПроведенных,
| СУММА(ВЫБОР
| КОГДА Т.ПометкаУдаления
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоПомеченныхНаУдаление
|ИЗ
| Документ." + ДокИмя + " КАК Т")

В итоге ошибка пропала, но если в документе вдруг встретится табличная часть с именем Т, ошибка опять вернется. Это маловероятно, но решение не универсально.

Чтобы его сделать универсальным, надо использовать вместо Т уникальный GUID. Тогда гарантированно совпадений не будет.

Я кстати часто, когда мне нужно добавить в таблицу значений колонку для хранения промежуточных данных, использовал идентификатор колонки в виде GUID. Хороший метод, защищает от ненужных совпадений.

Сообщил автору разработки о своем предложении в личку, возможно, возьмет на заметку.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. rzd:

    Запрос = Новый Запрос(
    «ВЫБРАТЬ
    | КОЛИЧЕСТВО(*) КАК КоличествоВсего,
    | КОЛИЧЕСТВО(ВЫБОР
    | КОГДА Проведен
    | ТОГДА Ссылка
    | КОНЕЦ) КАК КоличествоПроведенных,
    | КОЛИЧЕСТВО(ВЫБОР
    | КОГДА ПометкаУдаления
    | ТОГДА Ссылка
    | КОНЕЦ) КАК КоличествоПомеченныхНаУдаление
    |ИЗ
    | Документ.» + ДокИмя)

    • да, в данном случае так тоже можно (без алиасов), но я о более общем случае, когда без алиасов не обойтись.

Добавить комментарий для fixin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *