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

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

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

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

techh

Скачать ОбработкаДляForum1C.epf с WebFile.RU

&НаКлиенте
Функция РазложитьСтрокуПосимвольно(Стр)

Список = Новый СписокЗначений;

ДлинаСтроки = СтрДлина(Стр);
Для К = 1 По ДлинаСтроки Цикл
ТекСимвол = Сред(Стр, К, 1);
Список.Добавить(ТекСимвол);
КонецЦикла;

Возврат Список;

КонецФункции

&НаКлиенте
Функция СобратьСтрокуИзСимволов(Список)

Стр = "";

ДлинаСписка = Список.Количество();
Для К = 0 По ДлинаСписка - 1 Цикл
//ТекЦифра = Список[ДлинаСписка-К-1];
ТекЦифра = Список[К];
Стр = Стр + ТекЦифра;
КонецЦикла;

Возврат Стр;

КонецФункции

&НаКлиенте
Процедура НайтиОшибку(Команда)

// проверим, возможно, бухгалтер обсчитался, и сумма слагаемых совпадает с подотчётной
СуммаСлагаемых = Объект.Слагаемые.Итог("Слагаемое");
Если СуммаСлагаемых = Объект.СуммаОтчета Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка отсутсвует."; 
Сообщение.Сообщить();
Возврат;
КонецЕсли;

НашлиОшибку = Ложь;
ТекСтрока = 0;
Для Каждого ТекСтр Из Объект.Слагаемые Цикл
ТекСтрока = ТекСтрока + 1;

ТекСлагаемое = ТекСтр.Слагаемое;
СуммаБезТекущегоСлагаемого = СуммаСлагаемых - ТекСлагаемое;

СтрСлагаемое = Строка(ТекСлагаемое);
СтрСлагаемое = СтрЗаменить(СтрСлагаемое, Символы.НПП, "");

ДлинаСлагаемого = СтрДлина(СтрСлагаемое);
Если ДлинаСлагаемого > 1 Тогда   // цифры слагаемого можно переставлять, если в слагаемом их хотя бы две
Цифры = РазложитьСтрокуПосимвольно(СтрСлагаемое);

Для К = 0 По ДлинаСлагаемого-2 Цикл
Инд = ДлинаСлагаемого-1-К;

Цифра = Цифры[Инд].Значение;
Если (Цифра = "0") И (К = ДлинаСлагаемого - 2) Тогда
Продолжить;
КонецЕсли;

НовЦифры = Цифры.Скопировать();
НовЦифры.Сдвинуть(Инд, -1);

СтрНовСлагаемое = СобратьСтрокуИзСимволов(НовЦифры);

НовСлагаемое = Число(СтрНовСлагаемое);
НовСумма = СуммаБезТекущегоСлагаемого + НовСлагаемое;
Если НовСумма = Объект.СуммаОтчета Тогда
НашлиОшибку = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Если НашлиОшибку Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Сообщение = Новый СообщениеПользователю;
Если НашлиОшибку Тогда
Сообщение.Текст = "Ошибка находится в строке " + ТекСтрока + ". Правильное значение: " + НовСлагаемое;
Иначе
Сообщение.Текст = "Ошибка не найдена."
КонецЕсли;
Сообщение.Сообщить();

КонецПроцедуры

Alex_k


michael2k

Вот, в формате 8.2 в режиме обычного приложения.

Alex_k


Санчес

Файл обработки во вложении.
Версия платформы: 8.2

Evga

прикрепляю обработку

iPach89

Конечно на коленке сделанная, но чтото :)
http://rusfolder.com/35447573

mzelensky

Обработка во вложении. Платформа 8.2.16.362

Evgeny

http://yadi.sk/d/sqXJkekM3FsBL   обработка лежит на яндекс диске

AAlexandra

8.2, Управляемые формы.

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

Поиск