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

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

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. Причина: Объединение сообщений


Теги:
 

Кнопка "Изменить"

Автор LanniaРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 16
Просмотров: 417
Последний ответ 03 Июн 2017, 01:50
от Dethmontt
Изменить иерархию отчета в настройках самого отчета(СКД)

Автор SamManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1343
Последний ответ 26 Апр 2015, 20:16
от vitasw
Изменить имя поля в форме "ВидыКонтактнойИнформации"

Автор Space_minusРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1019
Последний ответ 09 Авг 2016, 10:41
от Space_minus
Изменить отчет "Анализ заказов Покупателей"

Автор ConstantusРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 1078
Последний ответ 21 Сен 2015, 08:48
от Constantus
Можно ли програмно изменить одну из колонок таблицы формы регистра сведений при создании формы

Автор RassvetniyРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 1019
Последний ответ 21 Фев 2016, 17:00
от vitasw

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

alex0402
94 Сообщений
oleg-x
71 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
66 Сообщений
Golickoff Golickoff
51 Сообщений
AIFrame
46 Сообщений
ilyay ilyay
42 Сообщений
Амал
30 Сообщений
lansy
22 Сообщений
Dethmontt Dethmontt
22 Сообщений
BuhRust
22 Сообщений

* Кто онлайн

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal