Имя: Пароль:
1C
1С v8
Хочется уйти от запроса в цикле
0 mataranga
 
02.04.14
08:22
Добра всем.

Есть Excel файлик с колонкой в которой СНИЛС ( маска 999-999-999 99 ) где только цифры.

Для R=2 По КоличествоСтрокExcel Цикл
Если НЕ ПроверкаСНИЛС(Лист.Cells(R,столбик.СНИЛС).value) Тогда
ТекстОшибки=ТекстОшибки+"Некорректо написан СНИЛС в ячейке R["+R+"]C["+столбик.СНИЛС+"]."+Символы.ПС;
КонецЕсли
КонецЦикла


&НаСервере
Функция ПроверкаСНИЛС(Знач СтрокаПараметр)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
                |    &Стр
                |ГДЕ
                |    &Стр ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Стр",СтрокаПараметр);
Запрос.УстановитьПараметр("Шаблон","[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9] [0-9][0-9]");

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

КонецЦикла;

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



Как вариант передать массивом на сервер и там проверять, но опять же запрос в цикле будет.


или только через RegExp
1 butterbean
 
02.04.14
08:24
(0) нет обращения к базе так что пох на запрос в цикле, а вот 100500 обращений к серверу — это не гуд
2 vde69
 
модератор
02.04.14
08:25
перегоняем ексель в ТЗ
ТЗ помещаем во временную таблицу
одним запросом проверяем
3 Andy13
 
02.04.14
08:27
(1)+ Пакет, две таблицы - правильно, неправильно.
4 mataranga
 
02.04.14
08:28
(1) То есть если я массив кину на сервер и там в цикле переберу это норма?
(2) как в запросе сделать перебор строк?
5 Kurbash
 
02.04.14
08:29
пока результат.следующий()
6 mataranga
 
02.04.14
08:30
(5) Эм... может я где то Вашу мысль не уловил...

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

"ВЫБРАТЬ
                |    &Стр
                |ГДЕ
                |    &Стр ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Стр",СтрокаПараметр);
Запрос.УстановитьПараметр("Шаблон","[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9] [0-9][0-9]");



Мне все равно для каждого надо будет выполнить это запрос
7 butterbean
 
02.04.14
08:35
(6)
1. можно сервер передать весь файл и его разбирать там
2. можно сделать из файла структуру (адрес ячейки, значение), ее на сервер и там разбирать уже

на сервере — собираешь таблицу значений, ее в запрос, в запросе твое условие, перебираешь результат запроса и лепишь таб документ или что там у тебя
8 butterbean
 
02.04.14
08:36
(7)+
* 1. можно НА сервер передать...

я за второй вариант
9 mataranga
 
02.04.14
09:53
перебираешь результат запроса (С)

дак я переберу, только у меня будет Цикл для Каждого Стр
и в цикле уже будет


"ВЫБРАТЬ
                |    &Стр
                |ГДЕ
                |    &Стр ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Стр",СтрокаПараметр);
Запрос.УстановитьПараметр("Шаблон","[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9] [0-9][0-9]");


где СТР это
10 StanleyMarsh
 
02.04.14
09:54
(2) +1
11 mataranga
 
02.04.14
10:01
окей, предположим что ТЗ у меня состоит из одной колонки (ячейки)


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    Таблица.Ячейка как ячейка
               |ИЗ
               |    &Таблица КАК Таблица";

Запрос.УстановитьПараметр("Таблица",ТЗ);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
                |    &Стр
                |ГДЕ
                |    &Стр ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Стр",Выборка.ячейка);
Запрос.УстановитьПараметр("Шаблон","[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9] [0-9][0-9]");
    

КонецЦикла;


накидал от руки могут быть ошибки.

все равно в цикле будет...
Или я вообще не о том?
12 butterbean
 
02.04.14
10:05
(11)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    Таблица.Ячейка как ячейка
               |ПОМЕСТИТЬ ВрТабл
               |ИЗ
               |    &Таблица КАК Таблица;
                |ВЫБРАТЬ
                |    Ячейка
               |ИЗ
               |    ВрТабл КАК ВрТабл;
                |ГДЕ
                |    Ячейка ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Таблица",ТЗ);
Запрос.УстановитьПараметр("Шаблон","[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9] [0-9][0-9]");

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    
     // тут вывод на печать или куда надо

КонецЦикла;
13 mataranga
 
02.04.14
10:06
ой точно, простите за потраченное время... совсем затупил
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.