Забавный рефакторинг у меня случился. Обратился пользователь с проблемой, что не все проводки формируются правильно, большинство ОК, но некоторые нет.
Что бы вы думали, в коде я нашел, что этот участок уже правили, но поправили не до конца корректно.
Ударили так сказать, индийским кодом по индийскому коду. Пришлось применять свой Гений 1С.
В задаче нужно было обработать таблицу значений и для каждой строки вычислить дополнительные поля, зависящие от номенклатуры.
Что сделал первый индус?
Он выгрузил колонку номенклатуры в таблицу и подсунул ее в запрос. На выходе для каждой номенклатуры были эти дополнительные поля.
Конечно, если бы засунуть в запрос всю таблицу, то на выходе был бы уже готовый результат, но в 1С нет оператора * для колонок таблицы, пришлось бы нудно и долго описывать все колонки.
Поэтому после получения результата запроса Индус Первый перебирал все строки результата запроса и искал строку с таким же номером в исходной таблице, дописывая туда вычисленные значения для номенклатуры.
Проблема была в том, что 1с не гарантирует в запросе соблюдение исходного порядка переданной таблицы. Поэтому код глючил и не работал, но все же чаще показывал нормальный результат.
Пользователи начали жаловаться и призвали Индуса Второго.
Тот просто добавил сортировку обеих таблиц - исходной и результата запроса и посчитал, что дело сделал.
Но тут произошло то, что должно было произойти - на вход поступила таблица, где в нескольких строчках была одинаковая номенклатура. Общее количество строк осталось одинаковым, но в пределах одной позиции порядок не гарантировался. И опять пользователи пожаловались.
Тогда пришел Гений 1С.
Он добавил в исходную таблицу колонку Номер, пронумеровал в этой колонке строки таблицы и в запрос передавал таблицу уже с колонками Номенклатура и Номер.
Соответственно, в результате запроса было точно известно, к какой строке исходных данных обращаться.
После этого алгоритм заработал как часы и у клиента, наконец-то, наступило простое человеческое бизнес-счастье!
Journal information