Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
13 Дек 2017, 11:02
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Обработка поиска с заданным значением по справочнику  (Прочитано 5232 раз)

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

Оффлайн Tgr11

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-06-27
  • Сайт: 
Добрый день, уважаемые пользователи данного форума. Обращаюсь к Вам вот с таким вопросом: есть обработка поиска по справочнику, в этой обработке есть 5 полей поиска, одно из них НомерДополнения-которое задается пользователем, например-19. Данное поле должно искать по справочнику не просто равно или подобно 19, а отбирать строки справочника, где оно задано последним. Чтобы было яснее: Есть две строки справочника
1.НомерДополнения-19/25/
2.НомерДополнения-11/6/19 , то есть из данных строк мне нужно выбрать именно вторую строку, а первая не нужна.. сейчас у меня обработка ищет только строки, где содержится заданное число. Подскажите где лучше в моем коде и может быть как если кто то знает лучше реализовать данное решение. Прилагаю код, то что у меня на данный момент:
[/Процедура ОсновныеДействияФормыОК(Кнопка)
Если НЕ ЗначениеЗаполнено(СНБ) Тогда
Возврат;
  КонецЕсли;
 
  текстЗапроса = "ВЫБРАТЬ
| Справочник.Ссылка
|ИЗ
| Справочник.Расценки КАК Справочник
|ГДЕ
| Справочник.СНБ = &СНБ";
 
 
 
  ФильтрПоНаименованию = ПолучитьСтрокуФильтра("Наименование",ПолеВидСравненияНаименование, Наименование);
  ФильтрПоШифру   = ПолучитьСтрокуФильтра("Ид",ПолеВидСравненияШифр, Шифр);
  ФильтрПоСоставуРабот = ПолучитьСтрокуФильтра("СоставРабот", ПолеВидСравненияРаботы, Работы);
  ФильтрПоНомеруДополнения = ПолучитьСтрокуФильтра("НомерДополнения", ПолеВидСравненияНомерДополнения, НомерДополнения);
  текстЗапроса = текстЗапроса + ?(НЕ ФлагСборник,""," И ( Справочник.Владелец  В ИЕРАРХИИ (&Сборник)) ");
  текстЗапроса = текстЗапроса + ?(ФлагШифр    И ЗначениеЗаполнено(ФильтрПоШифру)," И ("+ФильтрПоШифру+")" , "");
  текстЗапроса = текстЗапроса + ?(ФлагНаименование И ЗначениеЗаполнено(ФильтрПоНаименованию)," И ("+ФильтрПоНаименованию+")", "");
    текстЗапроса = текстЗапроса + ?(ФлагРаботы   И ЗначениеЗаполнено(ФильтрПоСоставуРабот)," И Справочник.Ссылка В ("+ФильтрПоСоставуРабот+")", "");
  текстЗапроса = текстЗапроса + ?(ФлагНомерДополнения    И ЗначениеЗаполнено(ФильтрПоНомеруДополнения)," И ("+ФильтрПоНомеруДополнения+")" , "");
  Запрос = Новый Запрос;
  Запрос.Текст = ТекстЗапроса;
  Запрос.УстановитьПараметр("СНБ", СНБ);
  Запрос.УстановитьПараметр("Сборник", Сборник);
  мРасценок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
 
  глСтруктураОтбораРасценок.Вставить("Шифр", Шифр);
  глСтруктураОтбораРасценок.Вставить("Наименование", Наименование);
  глСтруктураОтбораРасценок.Вставить("Работы", Работы);
  глСтруктураОтбораРасценок.Вставить("ФлагШифр", ФлагШифр);
  глСтруктураОтбораРасценок.Вставить("ФлагНаименование", ФлагНаименование);
  глСтруктураОтбораРасценок.Вставить("ФлагРаботы", ФлагРаботы);
  глСтруктураОтбораРасценок.Вставить("НомерДополнения", НомерДополнения);
    глСтруктураОтбораРасценок.Вставить("ФлагНомерДополнения", ФлагНомерДополнения);
  Закрыть(мРасценок);
КонецПроцедуры

Функция ПолучитьСтрокуФильтра(Ид,ВидСравнения = Неопределено,Строка = "") Экспорт

Фильтр ="";
Если Ид = "СоставРабот" Тогда
 
  Если ВидСравнения = "Подобно" Тогда
   Фильтр = СтрЗаменить(Строка," ","");
   Фильтр = "СНСоставРабот.Работа.Наименование ПОДОБНО ""%"+Фильтр;
   Фильтр = СтрЗаменить(Фильтр,"//","%"" ИЛИ СНСоставРабот.Работа.Наименование ПОДОБНО ""%");
   Фильтр = СтрЗаменить(Фильтр,"/","%"" И СНСоставРабот.Работа.Наименование ПОДОБНО ""%");
   Фильтр = Фильтр + "%""";
  Иначе
   Фильтр = "СНСоставРабот.Работа.Наименование = """+Строка+"""";
  КонецЕсли;
 
  ТекстЗапроса ="ВЫБРАТЬ РАЗЛИЧНЫЕ
  | СНСоставРабот.Расценка КАК Ссылка
  |ИЗ
  | РегистрСведений.СНСоставРабот КАК СНСоставРабот
  |ГДЕ
  |  " + Фильтр;
  возврат ТекстЗапроса;
КонецЕсли;

Если ЗначениеНеЗаполнено(Строка) Тогда
  возврат "";
КонецЕсли;

 
Если ВидСравнения = "Подобно" Тогда
  Фильтр = СтрЗаменить(Строка," ","");
  Фильтр = "Справочник."+Ид+" ПОДОБНО ""%"+Фильтр;
    Фильтр = СтрЗаменить(Фильтр,"//","%"" ИЛИ Справочник."+Ид+" ПОДОБНО ""%");
  Фильтр = СтрЗаменить(Фильтр,"/","%"" И Справочник."+Ид+" ПОДОБНО ""%");
  Фильтр = Фильтр + "%""";
Иначе
Фильтр = "Справочник."+Ид+" = """+Строка+"""";
КонецЕсли;
возврат Фильтр;
КонецФункции
дальше я так понимаю должно что то похожее на функцию поиска именно того что я хочу
Функция ПолучитьНомерПоследнегоДополненияВСтроке(НомерДополнения)
стрДоп = НомерДополнения;
Пока Найти(стрДоп,"/") Цикл
  стрДоп = Прав(стрДоп, СтрДлина(стрДоп) - Найти(стрДоп,"/"));
КонецЦикла;
возврат стрДоп;
КонецФункции // ()

И моя проблема я не могу соединить это все вместе..подскажите пожалуйста если кто нибудь знает и понял как лучше мне поступить в данном вопросе?


Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
"ВЫбрать * ИЗ Справочник ГДЕ Наименование Подобно %[/"+СтрокаПоиска+" СПЕЦСИМВОЛ ["
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Tgr11

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-06-27
  • Сайт: 
хорошо, но как программа поймет что искать именно последнее значение? ведь мне не просто НомерДополнения +/ найти, а именно в строке НомерДополнения найти Номердополнения+/ где значение последнее, пример я приводила выше. Приведу еще раз:
Стол-НомерДополнения=19/25/19/
Стул-НомерДополнения=19/
Картина-НомерДополнения=20/19/10/
Итог: Попасть после отбора в массив должны Стол и Стул

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Тогда тебе нужно условие что после такого значений "19/" ничего нет, а спереди может быть произвольное количество знаков
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Tgr11

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-06-27
  • Сайт: 
переделала добавила+"/",но осталось все тоже самое, потому что он ищет все НомерДополнения+/
 Если Ид = "НомерДополнения" Тогда
 
  Если ВидСравнения = "Подобно" Тогда
  СпецСимвол=прав("/",1);
  Фильтр = СтрЗаменить(Строка," ","");
  Фильтр = "Справочник."+Ид+" ПОДОБНО ""%"+Фильтр+Спецсимвол;
  Фильтр = Фильтр + "%""";
Иначе
    Фильтр = "Справочник."+Ид+" = """+Строка+"""";
КонецЕсли;
возврат Фильтр;

Добавлено: 27 Июн 2013, 14:09

Тогда тебе нужно условие что после такого значений "19/" ничего нет, а спереди может быть произвольное количество знаков
спасибо, а как задается в 1с данное условие не подскажите или где почитать про это? не встречалась с таким просто никогда

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
хм...
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Tgr11

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-06-27
  • Сайт: 
спасибо сейчас попробую, напишу результат
Добавлено: 27 Июн 2013, 14:32

ругается сделала так
{Обработка.Поиск.Форма.ФормаПоискаРасценок.Форма(38)}: Ошибка при вызове метода контекста (Выполнить)
      мРасценок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
по причине:
{(7, 62)}: Строка, не закрывающаяся кавычкой
Справочник.СНБ = &СНБ И (Справочник.НомерДополнения ПОДОБНО <<?>>"%19/)

Если Ид = "НомерДополнения" Тогда
      
      Если ВидСравнения = "Подобно" Тогда
      СпецСимвол="/";
      Фильтр = СтрЗаменить(Строка," ","");
      Фильтр = "Справочник."+Ид+" ПОДОБНО ""%"+Фильтр+Спецсимвол;
      Фильтр = Фильтр+"";
   Иначе
       Фильтр = "Справочник."+Ид+" = """+Строка+"""";
   КонецЕсли;

   возврат Фильтр;
    КонецЕсли;

Добавлено: 27 Июн 2013, 14:35

получилось)))действительно забыла кавычки..спасибо огромное вам и этому сайту

Последний раз редактировалось: Tgr11; 27 Июн 2013, 14:35. Причина: Объединение сообщений

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Ковычек маловато
Добавлено: 27 Июн 2013, 14:38

|   Новый.Наименование ПОДОБНО ""%"+МоеЗначение+"\""";
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
172 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
38 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 882
  • Точка Скрытых: 0
  • Точка Пользователей: 13
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal