Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 11:50

Среда. Вопрос 7

Автор mixqn, 13 мар 2013, 00:49

0 Пользователей и 2 гостей просматривают эту тему.

vlad___2011___

Обработка проверки отчета

SergioSS


&НаКлиенте
Процедура Проверка(Команда)
Ошибка = Ложь;
Массив = Новый Массив;
Для каждого Элемент Из Объект.ТаблИсходныеДанные Цикл
Массив.Добавить(Элемент.Число);
КонецЦикла;


Если Объект.Сумма = СуммаПоОтчету(Массив) Тогда
Сообщить("Ошибка отсутствует");
Иначе
Для Индекс = 0 По Массив.Количество()-1 Цикл
Если Объект.Сумма = СуммаПоОтчету(Массив) Тогда Прервать;
КонецЕсли;

Для ИндексСтр = 1 По СтрДлина(Массив[Индекс]) Цикл

ЧислоСтр = Массив[Индекс];

Если Число(Сред(ЧислоСтр,ИндексСтр,1)) = 0 Тогда Продолжить
КонецЕсли;

ПраваяЧасть = Сред(ЧислоСтр,ИндексСтр+2,СтрДлина(ЧислоСтр)-ИндексСтр-1);
ЛеваяЧасть = Лев(ЧислоСтр,ИндексСтр-1);

Если ИндексСтр = 1 Тогда
Массив[Индекс] = Число(Сред(ЧислоСтр,ИндексСтр+1,1) + Сред(ЧислоСтр,ИндексСтр,1) + ПраваяЧасть);
Иначе
Массив[Индекс] = Число(ЛеваяЧасть + Сред(ЧислоСтр,ИндексСтр+1,1) + Сред(ЧислоСтр,ИндексСтр,1) + ПраваяЧасть);
КонецЕсли;


Если СуммаПоОтчету(Массив) = Объект.Сумма Тогда Сообщить("Ошибка находится в строке" + Число(Индекс+1) + "Правильное значение: " + Массив[Индекс]);
Ошибка = Истина;
Прервать;
Иначе Массив[Индекс] = ЧислоСтр;

КонецЕсли;


КонецЦикла;

КонецЦикла;
Если Ошибка = Ложь Тогда Сообщить("Ошибка не найдена")
КонецЕсли;
КонецЕсли;
КонецПроцедуры


&НаКлиенте
Функция СуммаПоОтчету(Массив)
Сумма = 0;
Для Номер = 0 По Массив.Количество() - 1 Цикл

Сумма = Сумма + Массив[Номер];
КонецЦикла;
Возврат Сумма;
КонецФункции // СуммаОтчета()





Efa

Без рекурсии по поиску разницы в 9 между цифрами соседнего порядка, запрос будет  выглядеть примерно так:

выбрать
12 как ф1,
26 как ф2,
45 как ф3,
119 как сумма
поместить  ВТ
;
выбрать
вт.ф1+вт.ф2+вт.ф3 как суммаПолей,
(вт.ф1+вт.ф2+вт.ф3 - вт.сумма) как разность,
(выбор когда
    (вт.ф1+вт.ф2+вт.ф3) = вт.сумма тогда
    "ошибка отсутствует"
    иначе
    выбор когда ((вт.ф1+вт.ф2+вт.ф3) - вт.сумма)/9 = Выразить(((вт.ф1+вт.ф2+вт.ф3) - вт.сумма)/9 как число(10)) тогда
    "можно найти ошибку" 
    иначе
    "ошибка не найдена"
    конец
    конец)
    как ответ
    из ВТ

Теги:
Рейтинг@Mail.ru

Поиск