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

Автор Тема: Изменить поиск в обработке  (Прочитано 710 раз)

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

Оффлайн SkyNetYar

  • ****
  • Сообщений: 351
  • РЕПУТАЦИЯ: 10
  • КПД: 3%
  • Регистрация: 2014-10-25
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день! УТ 11.1.10 (8.3.7)

Обработка импорта из EXCEL,заполняет документ из файла,ищет номенклатуру в справочнике Номенклатура по наименованию,если не находит то создает ее,и переносит в документ.
Помогите изменить условие поиска с Номенклатура.наименование на Номенклатура.доп реквизит "номенклатура поставщика" строковый тип.
&НаСервере
Функция ПолучитьНоменклатуру( мЗначения, фСоздаватьНовые = Истина )

Запрос = Новый Запрос;

Если мЗначения.Свойство("ШтрихКод") Тогда
Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ
| 1 КАК ПорядокВывода,
| Штрихкоды.Номенклатура КАК Ссылка,
| Штрихкоды.Номенклатура.Артикул как Артикул
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод
| И Штрихкоды.Номенклатура Ссылка Справочник.Номенклатура
|
|ОБЪЕДИНИТЬ ВСЕ
|";
Запрос.УстановитьПараметр("ШтрихКод", мЗначения.ШтрихКод);
КонецЕсли;

Если мЗначения.Свойство("Артикул") Тогда
мЗначения.Артикул = Формат(мЗначения.Артикул, "ЧГ=0");
Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ
| 2 КАК ПорядокВывода,
| Номенклатура.Ссылка,
| Номенклатура.Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &НаименованиеТочно
| И Номенклатура.Артикул = &Артикул
| И Номенклатура.ЭтоГруппа = Ложь
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 3,
| Номенклатура.Ссылка,
| Номенклатура.Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул
| И Номенклатура.ЭтоГруппа = Ложь
|
|ОБЪЕДИНИТЬ ВСЕ
|";
Запрос.УстановитьПараметр("Артикул", мЗначения.Артикул);
КонецЕсли;

Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ
| 4,
| Номенклатура.Ссылка,
| Номенклатура.Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &НаименованиеТочно
| И Номенклатура.ЭтоГруппа = Ложь";
//|
//|ОБЪЕДИНИТЬ ВСЕ
//|
//|ВЫБРАТЬ
//| 5,
//| НоменклатураПоставщиков.Номенклатура,
//| НоменклатураПоставщиков.Номенклатура.Артикул
//|ИЗ
//| Справочник.НоменклатураПоставщиков КАК НоменклатураПоставщиков
//|ГДЕ
//| Номенклатура.Наименование = &НаименованиеТочно
//| И Номенклатура.ЭтоГруппа = Ложь";
//////////////////////////////////////////////////////////////////////
Запрос.УстановитьПараметр("НаименованиеТочно", мЗначения.Наименование);
Запрос.УстановитьПараметр("НаименованиеПодобно", Строка(мЗначения.Наименование)+"%");
Запрос.УстановитьПараметр("НаименованиеПриблизительно", "%"+Строка(мЗначения.Наименование)+"%");

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

Если Результат.Следующий() Тогда

//ШтрихКод может другой передаваться - его записываем в карточку
Если мЗначения.Свойство("ШтрихКод") Тогда
Если мЗначения.ШтрихКод <> "" Тогда
Набор = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Штрихкод.Установить(мЗначения.ШтрихКод);
//
НовыйШК = Набор.Добавить();
НовыйШК.Штрихкод = мЗначения.ШтрихКод;
НовыйШК.Номенклатура = Результат.Ссылка;
НовыйШК.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Набор.Записать();
КонецЕсли;
КонецЕсли;

Для Каждого Свойство из мЗначения Цикл
//Доп реквизиты
//Сообщить(мДопРеквизиты.НайтиПоЗначению(Свойство.Ключ)<> Неопределено);
СтрокиДоп = мДопРеквизиты.НайтиСтроки(Новый Структура("ПредставлениеБезНедСимволов",Свойство.Ключ));


Если СтрокиДоп.Количество() > 0 Тогда

СтрокаДопРеквизита = СтрокиДоп.Получить(0);

Отбор = Новый Структура;
Отбор.Вставить("Свойство", СтрокаДопРеквизита.Ссылка);
РеквизитОбъекта = Результат.Ссылка.ДополнительныеРеквизиты.НайтиСтроки(Отбор);


Если Перезаписывать = Истина Тогда //Если флажок то перезаписываем доп значения без условий. //+
НоменклатураОбъект = Результат.Ссылка.ПолучитьОбъект();  //+
ДобавитьРеквизит(НоменклатураОбъект, СтрокаДопРеквизита.Ссылка, Свойство.Значение); //+
    НоменклатураОбъект.Записать();                           //+
Иначе 
Если РеквизитОбъекта.Количество() = 0 Тогда  //Записываем только если пустой доп реквизит.

     НоменклатураОбъект = Результат.Ссылка.ПолучитьОбъект();
     ДобавитьРеквизит(НоменклатураОбъект, СтрокаДопРеквизита.Ссылка, Свойство.Значение);
     НоменклатураОбъект.Записать();

КонецЕсли;
КонецЕсли;
КонецЕсли;

//-Доп реквизиты
КонецЦикла;

Возврат Результат.Ссылка;

ИначеЕсли фСоздаватьНовые Тогда

фУслуга = Ложь;
Если мЗначения.Свойство("Группа") Тогда
фУслуга = ?(Сред(мЗначения.Группа, 1, 2)="У ", Истина, Ложь);
КонецЕсли;

ТекОбъект = Справочники.Номенклатура.СоздатьЭлемент();
Для Каждого Свойство из мЗначения Цикл
Если ТекОбъект.Метаданные().Реквизиты.Найти(Свойство.Ключ) <> Неопределено Тогда
ТекОбъект[Свойство.Ключ] = Свойство.Значение;
КонецЕсли;

//Доп реквизиты
//Сообщить(мДопРеквизиты.НайтиПоЗначению(Свойство.Ключ)<> Неопределено);
СтрокиДоп = мДопРеквизиты.НайтиСтроки(Новый Структура("ПредставлениеБезНедСимволов",Свойство.Ключ));
Если СтрокиДоп.Количество() > 0 Тогда

СтрокаДопРеквизита = СтрокиДоп.Получить(0);
//пИмяСвойства = СтрЗаменить(Строка(Свойство.Ключ), "_", " ");
//пИмяСвойства = ЗаменитьНедопустимыеСимволыВИмениФайла(Строка(Свойство.Ключ),"_");
ДобавитьРеквизит(ТекОбъект, СтрокаДопРеквизита.Ссылка, Свойство.Значение);
КонецЕсли;
//-Доп реквизиты

КонецЦикла;

Если мЗначения.Свойство("Артикул") Тогда
ТекОбъект.Артикул = мЗначения.Артикул;
Иначе
ТекОбъект.Артикул = z_ОбщийМодуль.ПолучитьНовыйАртикул();
КонецЕсли;

ТекОбъект.Наименование = мЗначения.Наименование;
ТекОбъект.НаименованиеПолное = мЗначения.Наименование;
ТекОбъект.ВидНоменклатуры = ?(фУслуга, Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуга"), Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар"));
ТекОбъект.ТипНоменклатуры = ?(фУслуга, Перечисления.ТипыНоменклатуры.Услуга, Перечисления.ТипыНоменклатуры.Товар);
ТекОбъект.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
//ТекОбъект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры;
ТекОбъект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
ТекОбъект.ИспользоватьУпаковки = Ложь;
ТекОбъект.КодДляПоиска = ТекОбъект.Артикул;
ТекОбъект.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
ТекОбъект.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ТекОбъект.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");

Если мЗначения.Свойство("Производитель") Тогда
ТекОбъект.Производитель = ПолучитьПроизводителя(мЗначения.Производитель);
КонецЕсли;

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

фЗаписан = Ложь;
//Записываем для использования в дальнейшем как владельца
Попытка
ТекОбъект.Записать();
фЗаписан = Истина;
Исключение
ТекОбъект.Наименование = ТекОбъект.Наименование + " ("+ТекОбъект.Артикул+")";
ТекОбъект.НаименованиеПолное = ТекОбъект.Наименование + " ("+ТекОбъект.Артикул+")";
Попытка
ТекОбъект.Записать();
фЗаписан = Истина;
Исключение
Сообщить("Наименование " + ТекОбъект.Наименование + " не уникально !!!");
КонецПопытки;
КонецПопытки;

Если фЗаписан Тогда
//Штрих-коды !!!
пКод = ТекОбъект.Артикул;
Попытка
пКод = Число(пКод);
Исключение
пКод = 0;
КонецПопытки;
Если пКод <> 0 Тогда
НовыйШтрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НовыйШтрихкод.Номенклатура = ТекОбъект.Ссылка;
пШтрихкод = "2"+Формат(пКод, "ЧЦ=11; ЧВН=; ЧГ=");
НовыйШтрихкод.Штрихкод = пШтрихкод+РегистрыСведений.ШтрихкодыНоменклатуры.КонтрольныйСимволEAN(пШтрихкод, 13);
//НовыйШтрихкод.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
НовыйШтрихкод.Записать();
КонецЕсли;

Если мЗначения.Свойство("ШтрихКод") Тогда
Если мЗначения.ШтрихКод <> "" Тогда
Набор = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Штрихкод.Установить(мЗначения.ШтрихКод);
//
НовыйШК = Набор.Добавить();
НовыйШК.Штрихкод = мЗначения.ШтрихКод;
НовыйШК.Номенклатура = ТекОбъект.Ссылка;
//НовыйШК.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Набор.Записать();
КонецЕсли;
КонецЕсли;
//-Штрих-коды

Возврат ТекОбъект.Ссылка;
Иначе

Возврат Справочники.Номенклатура.ПустаяСсылка();

КонецЕсли;

КонецЕсли;

Возврат Неопределено;

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

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

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


Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Попробуй искать не через "=", а через "ПОДОБНО"

Оффлайн Luzer1C

  • ****
  • Сообщений: 411
  • РЕПУТАЦИЯ: 41
  • КПД: 10%
  • Регистрация: 2014-02-17
  • Сайт: 
  • Профессия: Программист 1С
Нужно заменить это
Номенклатура.Наименование = &НаименованиеТочно
на
Номенклатура.НоменклатураПоставщика = &НаименованиеТочно
Помочь мне очень сложно. Но можно.
Помогаю просто так...
Матёрый разработчик УПП + Бит Финанс

Оффлайн SkyNetYar

  • ****
  • Сообщений: 351
  • РЕПУТАЦИЯ: 10
  • КПД: 3%
  • Регистрация: 2014-10-25
  • Сайт: 
  • Профессия: Ученик 1С
Дополнительный реквизит в смысле не реквизит который был создан в конфигураторе, а через Предприятие Изменен состав дополнительных реквизитов и добавлено строковое поле "Номенклатура поставщика"

Пробую так
"ВЫБРАТЬ
                              | 4,
                              | Номенклатура.Ссылка,
                              | Номенклатура.Артикул,
                              | Номенклатура.ДополнительныеРеквизиты.(
                              | ТекстоваяСтрока
                              | )
                              |ИЗ
                              | Справочник.Номенклатура КАК Номенклатура
                              |ГДЕ
                              //| Номенклатура.Наименование = &НаименованиеТочно
                              | Номенклатура.ЭтоГруппа = ЛОЖЬ
                              | И Номенклатура.ДополнительныеРеквизиты.ТекстоваяСтрока ПОДОБНО &НаименованиеТочно";
Создает новую номенклатуру при изменении наименования и дописывает артикул в наименование ниже по коду..
Но не ищет именнно по строке дополнительного реквизита.. :dfbsdfbsdf:
Добавлено: 01 Дек 2015, 12:19

Через консоль запросов получает пустое значение строки,они не тут хранятся?
Добавлено: 01 Дек 2015, 14:58

Разобрался!
Вот решение,может пригодится кому!
Запрос.Текст = Запрос.Текст + "
  |ВЫБРАТЬ
  |таб.Ссылка,
  |таб.Ссылка.Артикул КАК Артикул
  |ИЗ
  |Справочник.Номенклатура.ДополнительныеРеквизиты КАК таб
  |ГДЕ
  |таб.Значение=&НаименованиеТочно
  |И таб.Свойство=&Свойство
  |И НЕ таб.Ссылка.ЭтоГруппа";
Запрос.УстановитьПараметр("Свойство" , ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Номенклатура поставщика"));
Запрос.УстановитьПараметр("НаименованиеТочно", мЗначения.Наименование);

Последний раз редактировалось: SkyNetYar; 01 Дек 2015, 14:58. Причина: Объединение сообщений


Теги:
 


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

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

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


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

* Реклама

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

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

oleg-x
89 Сообщений
alex0402
43 Сообщений
AIFrame
42 Сообщений
Oldman06
31 Сообщений
vitasw
29 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
29 Сообщений
Golickoff Golickoff
27 Сообщений
Liv98 Liv98
20 Сообщений
MuI_I_Ika MuI_I_Ika
18 Сообщений
DmitriyF DmitriyF
14 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal