Имя: Пароль:
1C
1С v8
Как обойтись без запроса
,
0 kible
 
25.10.11
14:37
Запрос выполняется в цикле. Можно ли обойтись без запроса?

Функция НайтиЭлементСправочника(СтрокаТЧ)
   Запрос = Новый Запрос;
   Запрос.Текст = "
   |ВЫБРАТЬ
   |    СпособыОтраженияЗарплатыВРеглУчете.Ссылка
   |ИЗ
   |    Справочник.СпособыОтраженияЗарплатыВРеглУчете КАК СпособыОтраженияЗарплатыВРеглУчете
   |ГДЕ
   |   СпособыОтраженияЗарплатыВРеглУчете.СчетДт = &СчетДт
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоДт1 = &СубконтоДт1
   |    И СпособыОтраженияЗарплатыВРеглУчете.СчетКт = &СчетКт
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоКт1 = &СубконтоКт1
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоКт2 = &СубконтоКт2
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоКт3 = &СубконтоКт3
   |    И СпособыОтраженияЗарплатыВРеглУчете.СчетДтНУ = &СчетДтНУ
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоДтНУ1 = &СубконтоДтНУ1
   |    И СпособыОтраженияЗарплатыВРеглУчете.СчетКтНУ = &СчетКтНУ
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоКтНУ1 = &СубконтоКтНУ1
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоКтНУ2 = &СубконтоКтНУ2
   |    И СпособыОтраженияЗарплатыВРеглУчете.СубконтоКтНУ3 = &СубконтоКтНУ3";
   Запрос.УстановитьПараметр("СубконтоДт1",    СтрокаТЧ.Сорудник);    
   Запрос.УстановитьПараметр("СубконтоДтНУ1",    СтрокаТЧ.Сорудник);    
   Запрос.УстановитьПараметр("СубконтоКт1",    СтрокаТЧ.СубконтоБУ1);    
   Запрос.УстановитьПараметр("СубконтоКт2",    СтрокаТЧ.СубконтоБУ2);    
   Запрос.УстановитьПараметр("СубконтоКт3",    СтрокаТЧ.СубконтоБУ3);    
   Запрос.УстановитьПараметр("СубконтоКтНУ1",    СтрокаТЧ.СубконтоНУ1);    
   Запрос.УстановитьПараметр("СубконтоКтНУ2",    СтрокаТЧ.СубконтоНУ2);    
   Запрос.УстановитьПараметр("СубконтоКтНУ3",    СтрокаТЧ.СубконтоНУ3);
   Запрос.УстановитьПараметр("СчетДт",    ПланыСчетов.Типовой.КраткосрочнаяЗадолженностьПоОплатеТруда);    
   Запрос.УстановитьПараметр("СчетДтНУ",    ПланыСчетов.Налоговый.ВзаиморасчетыСРаботниками);    
   Запрос.УстановитьПараметр("СчетКт",    СтрокаТЧ.СчетБУ);    
   Запрос.УстановитьПараметр("СчетКтНУ",    СтрокаТЧ.СчетНУ);
   РезультатЗапроса = Запрос.Выполнить();
   Возврат РезультатЗапроса;
КонецФункции //НайтиЭлементСправочника
1 qeos
 
25.10.11
14:39
можно
2 Wobland
 
25.10.11
14:39
(0) можно
3 ДенисЧ
 
25.10.11
14:39
Выгрузить ТЧ во временную таблицу и сджойниться с ней?
4 kible
 
25.10.11
14:39
(1) Как сделать такое?
5 Reset
 
25.10.11
14:39
Можно даже без цикла обойтись
6 Пришел в тапках
 
25.10.11
14:39
(0)можно
7 qeos
 
25.10.11
14:40
(5) +
8 Рэйв
 
25.10.11
14:40
Имхо, нельзя.

Набор параметров через И для каждого сотрудника может быть разный.
9 Рэйв
 
25.10.11
14:41
+ для каждой строки ТЗ тоесть
10 kible
 
25.10.11
14:42
(8) Будет разный. Смысл запроса в том чтобы проверить есть ли в справочнике элемент с параметрами какждой строки.
11 Рэйв
 
25.10.11
14:43
(10)А как ты набор параметров каждой строки для списка передашь?
12 Рэйв
 
25.10.11
14:43
+(11)Там жесткая И, не ИЛИ
13 kible
 
25.10.11
14:44
(11) Для какого списка?
14 Рэйв
 
25.10.11
14:45
(13)ТЧ перебирается в цикле.Если убирать из цикла запрос -то будет один список
15 luckyluke
 
25.10.11
14:48
(0) чем тебе (3) не нравится?
16 kible
 
25.10.11
14:49
(14) Ну да. Так я и спрашиваю можно ли реализовать другим способом. Можно было бы сделать без запроса, если были бы реквизиты справочника индексируемые.
17 qeos
 
25.10.11
14:52
не удивлючь если гдето в коде используется
Если НайтиЭлементСправочника(СтрокаТЧ).Количество() > 0...
18 mishgan75
 
25.10.11
14:53
а почему так категорично "Без Запроса". Может быть надо решить задачу без Запроса В ЦИКЛЕ?
19 kible
 
25.10.11
14:59
(17) Не используется.
(18) Да вопрос не правильно поставлен. Нужно без запроса в цикле.
20 qeos
 
25.10.11
15:00
(19) попробуй использовать НайтиПоРеквизитам
21 kible
 
25.10.11
15:08
(3), (15) Как-то так получается.

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|    РазовыеУдержанияУниверсальныйСотрудники.СчетБУ,
|    РазовыеУдержанияУниверсальныйСотрудники.СубконтоБУ1,
|    РазовыеУдержанияУниверсальныйСотрудники.СубконтоБУ2,
|    РазовыеУдержанияУниверсальныйСотрудники.СубконтоБУ3,
|    РазовыеУдержанияУниверсальныйСотрудники.СчетНУ,
|    РазовыеУдержанияУниверсальныйСотрудники.СубконтоНУ1,
|    РазовыеУдержанияУниверсальныйСотрудники.СубконтоНУ2,
|    РазовыеУдержанияУниверсальныйСотрудники.СубконтоНУ3,
|    ЕСТЬNULL(СпособыОтраженияЗарплатыВРеглУчете.Ссылка, &ПустаяСсылка) КАК СпособОтражения
|ИЗ
|    Документ.РазовыеУдержанияУниверсальный.Сотрудники КАК РазовыеУдержанияУниверсальныйСотрудники
|        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпособыОтраженияЗарплатыВРеглУчете КАК СпособыОтраженияЗарплатыВРеглУчете
|        ПО РазовыеУдержанияУниверсальныйСотрудники.СчетБУ = СпособыОтраженияЗарплатыВРеглУчете.СчетКт
|            И РазовыеУдержанияУниверсальныйСотрудники.СубконтоБУ1 = СпособыОтраженияЗарплатыВРеглУчете.СубконтоКт1
|            И РазовыеУдержанияУниверсальныйСотрудники.СубконтоБУ2 = СпособыОтраженияЗарплатыВРеглУчете.СубконтоКт2
|            И РазовыеУдержанияУниверсальныйСотрудники.СубконтоБУ3 = СпособыОтраженияЗарплатыВРеглУчете.СубконтоКт3
|            И РазовыеУдержанияУниверсальныйСотрудники.СчетНУ = СпособыОтраженияЗарплатыВРеглУчете.СчетКтНУ
|            И РазовыеУдержанияУниверсальныйСотрудники.СубконтоНУ1 = СпособыОтраженияЗарплатыВРеглУчете.СубконтоКтНУ1
|            И РазовыеУдержанияУниверсальныйСотрудники.СубконтоНУ2 = СпособыОтраженияЗарплатыВРеглУчете.СубконтоКтНУ2
|            И РазовыеУдержанияУниверсальныйСотрудники.СубконтоНУ3 = СпособыОтраженияЗарплатыВРеглУчете.СубконтоКтНУ3
|            И РазовыеУдержанияУниверсальныйСотрудники.Сорудник = СпособыОтраженияЗарплатыВРеглУчете.СубконтоДт1
|            И РазовыеУдержанияУниверсальныйСотрудники.Сорудник = СпособыОтраженияЗарплатыВРеглУчете.СубконтоДтНУ1
|            И (&СчетЗП = СпособыОтраженияЗарплатыВРеглУчете.СчетДт)
|            И (&СчетЗПНУ = СпособыОтраженияЗарплатыВРеглУчете.СчетДтНУ)
|ГДЕ
|    РазовыеУдержанияУниверсальныйСотрудники.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("ПустаяСсылка",    <ПустаяСсылка>);
Запрос.УстановитьПараметр("Ссылка",    <Ссылка>);     //Разовые удержания (универсальный)
Запрос.УстановитьПараметр("СчетЗП",    <СчетЗП>);     //Типовой план счетов бухгалтерского учета
Запрос.УстановитьПараметр("СчетЗПНУ",    <СчетЗПНУ>);     //Налоговый план счетов
РезультатЗапроса = Запрос.Выполнить();
22 mishgan75
 
25.10.11
15:08
тогда 2 варианта. Первый самый простой для Вас:
1. Получаете таблицу в одним запросом с СпособыОтраженияЗарплатыВРеглУчете.СубконтоДт1 В (&СубконтоДт1)
где СубконтоДт1 это список сотрудников. (можно ограничить списком др параметров)
2. а далее либо с помощью простой структуры, либо при помощи построителя переберите таблицу в цикле и получите требуемые значения для каждой строки.
Второй вариант посложнее уже предлагал ДенисЧ. Но для этого вам надо литературу почитать. Рейва не слушайте он чет не понял про временные таблицы
23 Рэйв
 
25.10.11
15:10
(22)Ладно, постою в сторонке , посмотрю что получится:-))
24 kible
 
25.10.11
15:16
(21)+ Вроде бы работает из без временных таблиц.