Сравнение значений запроса с массиовм

1. 1c_uZer 29.05.17 08:52 Сейчас в теме
Здравствуйте! у меня такая ситуация. Есть определенный набор данных в массиве, и есть определенные значения, которые получились в результате запроса. Мне надо найти общие, подскажите как мне это реализовать?

Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Запрос.Текст =
	
	  "ВЫБРАТЬ РАЗЛИЧНЫЕ
	  |	НачислениеЗарплатыНачисления.Сотрудник КАК Сотрудник1,
	  |	РаботаСотрудниковНаОбъектеДанные.Сотрудник
	  |ИЗ
	  |	Документ.РаботаСотрудниковНаОбъекте.Данные КАК РаботаСотрудниковНаОбъектеДанные
	  |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
	  |		ПО (НачислениеЗарплатыНачисления.Сотрудник.Ссылка = РаботаСотрудниковНаОбъектеДанные.Сотрудник.Ссылка)
	  |ГДЕ
	  |	НачислениеЗарплатыНачисления.Ссылка = &Ссылка
	  |;
	  |
	  |////////////////////////////////////////////////////////////­////////////////////
	  |ВЫБРАТЬ РАЗЛИЧНЫЕ
	  |	НачислениеЗарплатыНачисления.Сотрудник
	  |ИЗ
	  |	Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
	  |ГДЕ
	  |	НачислениеЗарплатыНачисления.Ссылка = &Ссылка";
	 
	 Результат = Запрос.ВыполнитьПакет();
	 
	 Выборка1 = Результат[0].Выбрать();
	 
	 Выборка2 = Результат[1].Выбрать();
	 
	 //Сообщить (Выборка1.Сотрудник);
	 
	 Сотрудники = Новый Массив;
	 
	 Пока Выборка2.Следующий() Цикл
		 
		 Сотрудники.Добавить(Выборка2.Сотрудник);
		 
	 КонецЦикла;
Показать


Выборка2.Сотрудник это массив где есть все данные и мне нужна проверить элементы выборки1 в выборке 2 а я не знаю как это сделать....подскажите пожалуйста.
Вознаграждение за ответ
Показать полностью
Найденные решения
13. spe1c 5 29.05.17 10:37 Сейчас в теме +0.5 $m
(11)Тогда как я писал выше, используйте внутреннее соединение:

 "ВЫБРАТЬ РАЗЛИЧНЫЕ
      |    НачислениеЗарплатыНачисления.Сотрудник КАК Сотрудник1,
      |    РаботаСотрудниковНаОбъектеДанные.Сотрудник
      |ИЗ
      |    Документ.РаботаСотрудниковНаОбъекте.Данные КАК РаботаСотрудниковНаОбъектеДанные
      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
      |        ПО (НачислениеЗарплатыНачисления.Сотрудник= РаботаСотрудниковНаОбъектеДанные.Сотрудник)
      |ГДЕ
      |    НачислениеЗарплатыНачисления.Ссылка = &Ссылка
Показать


Никакие массивы не нужны, как и пакетный запрос.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 29.05.17 08:59 Сейчас в теме
обе таблицы во временные, если большие то индекс по полю соединения

Из ВтТабл1 КАК ВтТабл1
внутреннее соединение ВтТабл2 КАК ВтТабл2
По ...
3. TODD22 18 29.05.17 09:03 Сейчас в теме
Если в результате нужны только общие то передавай свой массив в качестве параметра в запрос. И получишь результат только по тем записям что есть в массиве и в результате запроса.
7. 1c_uZer 29.05.17 10:26 Сейчас в теме
(3) а не подскажете как передать массив в параметр запроса? просто я могу задать их в конструкторе запросов а как задать массив как параметр не догоняю
9. spe1c 5 29.05.17 10:28 Сейчас в теме
(7)Передать запросто, Запрос.УстановитьПараметр("МойПараметр", Массив).
Только ведь у вас массив и так в запросе получается? Тогда вам это не нужно делать.
11. 1c_uZer 29.05.17 10:34 Сейчас в теме
(9) вот я и решил сделать запрос который находит всех сотрудников в документе начисление зп и всех сотрудников в новом документе и выбрает сотрудников которые в новом документе из тех что есть в документе начисление зп
13. spe1c 5 29.05.17 10:37 Сейчас в теме +0.5 $m
(11)Тогда как я писал выше, используйте внутреннее соединение:

 "ВЫБРАТЬ РАЗЛИЧНЫЕ
      |    НачислениеЗарплатыНачисления.Сотрудник КАК Сотрудник1,
      |    РаботаСотрудниковНаОбъектеДанные.Сотрудник
      |ИЗ
      |    Документ.РаботаСотрудниковНаОбъекте.Данные КАК РаботаСотрудниковНаОбъектеДанные
      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
      |        ПО (НачислениеЗарплатыНачисления.Сотрудник= РаботаСотрудниковНаОбъектеДанные.Сотрудник)
      |ГДЕ
      |    НачислениеЗарплатыНачисления.Ссылка = &Ссылка
Показать


Никакие массивы не нужны, как и пакетный запрос.
14. 1c_uZer 29.05.17 10:39 Сейчас в теме
(13) блин а ведь точно тогда он выберет тех которые используется в обоих документах. спасибо большое.
4. akR00b 22 29.05.17 09:06 Сейчас в теме
ВЫБРАТЬ
	Таблица1.Сотрудник
ПОМЕСТИТЬ Таблица1
ИЗ
	Таблица1 КАК Таблица1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Таблица2.Сотрудник
ПОМЕСТИТЬ Таблица2
ИЗ
	Таблица2 КАК Таблица2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Таблица1.Сотрудник КАК СотрудникТаблица1,
	Таблица2.Сотрудник КАК СотрудникТаблица2
ИЗ
	Таблица1 КАК Таблица1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
		ПО Таблица1.Сотрудник = Таблица2.Сотрудник

Показать


Соответственно меняешь в тексте Таблица 1 и Таблица 2 на свои значения.
5. spe1c 5 29.05.17 10:15 Сейчас в теме
Всё можно сделать в самом запросе, просто в первом запросе вашего пакета меняете левое соединение на внутренее. Но если запрос менять неудобно, то можно загнать выборку 2 тоже в массив и сравнить два массива:

Функция НайтиОбщиеЭлементыМассивов(Массив1, Массив2)
      МассивОбщихЭлементов = Новый Массив;
      Для каждого элемент из Массив1 цикл
          если Массив2.найти(элемент)<>неопределено тогда
           МассивОбщихЭлементов.добавить(элемент);
         конецесли;
     КонецЦикла;
     возврат МассивОбщихЭлементов;
КонецФункции

Показать
6. 1c_uZer 29.05.17 10:23 Сейчас в теме
(5) попробовал но в консоли запросов результат один и тот же хотя он видимо и не должен меняться видимо)
8. spe1c 5 29.05.17 10:27 Сейчас в теме
(6)А что вы вообще хотите получить? Зачем всё это с пакетными запросами, массивами и т.п? Как у вас задача поставлена?
10. 1c_uZer 29.05.17 10:30 Сейчас в теме
(8) Задача там непростая долго объяснять но сейчас именно у меня есть сотрудники которым начислена зп, и есть сотрудники с определенными показателями (это отдельно созданный документ, проведен по отдельному регистру) так вот мне нужно выбрать этих сотрудников с определенными показателями из списка всех сотрудников.
12. spe1c 5 29.05.17 10:34 Сейчас в теме
(10)Всех или указанных в определенном документе? Вы же передаете в запрос параметр - ссылку на документ начисление зарплаты.
15. spe1c 5 29.05.17 10:39 Сейчас в теме
И вот тут по моему ошибочка:
ПО (НачислениеЗарплатыНачисления.Сотрудник.Ссылка = РаботаСотрудниковНаОбъектеДанные.Сотрудник.Ссылка)


У вас разве сотрудник это не ссылка сама по себе?
16. 1c_uZer 29.05.17 10:40 Сейчас в теме
(15) а это играет большое значение? просто тут у меня тоже есть недопонимания.
17. spe1c 5 29.05.17 10:41 Сейчас в теме
(16)Да, это ухудшает производительность запроса. Старайтесь не писать .ссылка от полей, которые и так ссылки.
18. 1c_uZer 29.05.17 10:43 Сейчас в теме
(17) спасибо, буду знать но смысл же идет верный? сотрудник и сотрудник.ссылка вроде одно и то же?
19. spe1c 5 29.05.17 10:47 Сейчас в теме
(18)Смысл то верный, но есть парочка НО:
1) если со временем база будет расти, такие запросы начнут сильно влиять на скорость работы. А если это в какой-то транзакции, например в процедуре проведения, то пойдут избыточные блокировки, ошибки отказы в проведении документов по причине превышения времени на блокировке. Т.е. это будет у пользователей выглядеть как ошибки проведения в документах. Такие явления носят лавинообразный характер как правило, т.к. об одну зависшую транзакцию начинают "спотыкаться" остальные. Начальство такие вещи будут нервировать.
2) если вам придется трудоустраиваться или сдавать экзамен на специалиста по платформе, то с такими запросами вас запросто могут завернуть:)
21. 1c_uZer 29.05.17 11:06 Сейчас в теме
20. TODD22 18 29.05.17 10:48 Сейчас в теме
(18)Одно и то же. Только программа при обращении через точку к полю делает не явное левое соединение. И к ссылке ещё раз присоединяет ссылку.
22. 1c_uZer 29.05.17 11:06 Сейчас в теме
(20) Спасибо за пояснение, вроде все понятно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот