Сравнение значений реквизитов

1. alexie.j 07.06.17 15:32 Сейчас в теме
Добрый день. Помогите пожалуйста новичку разобраться с проблемой.
Загружаю в базу файл Excel. Из файла берутся только столбцы артикул, производитель, описание и ссылка на картинку.
Дальше создала кнопку, при нажатии на которую, по идее, артикул и производитель должен сравниваться со значениями в Справочнике Номенклатура, а при совпадении этих значений в Номенклатуру должны записываться данные из строки описание и ссылка на картинку.
Пишу вот так(вообще не уверена что мысль правильная):


&НаКлиенте
Процедура Объединить(Команда)
	Для Каждого Стр Из Объект.ДанныеПоискаИзExcel Цикл	
	Сравнение = Сравнение.Сравнить(Объект.Артикул, Объект.ДанныеПоискаИзExcel.Артикул);
	Сравнение2 = Сравнение.Сравнить(Объект.Объект.Производитель, Объект.ДанныеПоискаИзExcel.Производитель);
		Если Объект.Артикул <> Объект.ДанныеПоискаИзExcel.Артикул или
			 Объект.Производитель <> Объект.ДанныеПоискаИзExcel.Производитель Тогда 
               Прервать
		КонецЕсли
	КонецЦикла; 
	
	 Для Каждого Стр Из Объект.ДанныеПоискаИзExcel Цикл

	Если Объект.Артикул = Объект.ДанныеПоискаИзExcel.Артикул и 
		 Объект.Производитель = Объект.ДанныеПоискаИзExcel.Производитель Тогда
		 Объект.Описание = Объект.ДанныеПоискаИзExcel.ОписаниеТовара;
		 Объект._ПутьКартинкамНаСайте = Объект.ДанныеПоискаИзExcel.СсылкаНаКартинку;
		  	Прервать
		КонецЕсли
		КонецЦикла;
		  
КонецПроцедуры
Показать



Когда в базе нажимаю кнопку, чтобы прошла операция выходит вот такая ошибка:
{Обработка.КартинкиИОписанияИзПрайса.Форма.Форма1.Форма(80)}: Поле объекта не обнаружено (Артикул)
Сравнение = Сравнение.Сравнить(Объект.Артикул, Объект.ДанныеПоискаИзExcel.Артикул);

Я понимаю, что вероятнее всего нужно на Сервере вызвать справочник..

Подскажите, пожалуйста, как это можно сделать?
По теме из базы знаний
Найденные решения
8. Dondarrion 08.06.17 13:25 Сейчас в теме
(7)
Могу только посоветовать читать книги по 1С. Для написания запросов в 1с механизм Конструктор запросов с ним легко можно написать нужный запрос.
1)
| ПОМЕСТИТЬ ВыбНоваяСтрока

раз у тебя данные уже в объекте хранятся, то можно не помещать во временную таблицу,
2) зачем справочник номенклатура во вложенном запросе?
3)
 | ЛЕВОЕ СОЕДИНЕНИЕ Справочники.Номенклатура.Объект.Описание КАК НоваяСтрока.ОписаниеТовара И Справочники.Номенклатура.Объект._ПутьКартинкамНаСайте КАК НоваяСтрока.СсылкаНаКартинку";

Неправильно
4)
Запрос.УстановитьПараметр("Справочники.Номенклатура", ВыгружатьХарактеристики)

куда устанавливается параметр? имя параметра не должно содержать точку.

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

Дальше через цикл выборки обходишь результат запроса и для каждой номенклатуры получаешь объект (Выборка.Ссылка.ПолучитьОбъект()),и уже в объект вставляешь СсылкаНаКартинку и ОписаниеТовара и только потом записываешь объект
alexie.j; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dondarrion 07.06.17 15:37 Сейчас в теме
(1)зачем цикл используешь если ты его не применяешь?
замени
Объект.ДанныеПоискаИзExcel.Артикул

на
Стр.Артикул
alexie.j; +1 Ответить
3. Dondarrion 07.06.17 15:43 Сейчас в теме
я так понимаю, Объект.ДанныеПоискаИзExcel это у тебя таблица значений?
Если да, то смотри метод НайтиСтроки. И никакого сравнения не нужно будет
4. alexie.j 07.06.17 15:51 Сейчас в теме
(3) Цикл я убрала.
Действительно, глупая ошибка. Спасибо.
Да, это таблица, которая берётся из Экселя.
А можно использовать этот метод если мне в начале сравнение нужно провести? Сейчас посмотрю.
5. Dondarrion 07.06.17 16:06 Сейчас в теме
т.е. я правильно понимаю, тебе нужно дозаполнить справочник номенклатура данными?
Тогда делай так, или обработка, или кнопка на форме списка. сначала выгружаешь ексель в таблицу значений, потом эту таблицу значений в запрос через временную таблицу.
И потом в запросе, полученную временную таблицу соединяй со справочником номенклатура, по двум полям "Артикул" и "производитель" левым соединением.
поля выбора у тебя будет Ссылка из справочника и 2 поля из временной таблицы "описание" и "ссылка на картинку". В выборке получаешь объект справочника, записываешь в него недостающие реквизиты и записываешь сам объект.
alexie.j; +1 Ответить
6. alexie.j 07.06.17 16:07 Сейчас в теме
(5) Спасибо большое! Попробую сделать.
7. alexie.j 07.06.17 18:29 Сейчас в теме
(5)
Получилось вот так:
&НаСервере
Процедура ЗаполнитьХарактеристикиНаСервере(ВыгружатьХарактеристики)
	 	
	   Запрос = Новый Запрос;
       Запрос.Текст = "
              | ВЫБРАТЬ
              | НоваяСтрока.Артикул,
              | НоваяСтрока.Производитель,
              | НоваяСтрока.СсылкаНаКартинку,
			  | НоваяСтрока.ОписаниеТовара,
              | ПОМЕСТИТЬ ВыбНоваяСтрока
              | 
              |ИЗ
              | Объект.ДанныеПоискаИзExcel КАК ВременнаяТаблица; 
			  | (ВЫБРАТЬ
              | Справочники.Номенклатура КАК ДанныеПоискаИзExcel,
			  | Справочники.Номенклатура.Объект.Артикул КАК НоваяСтрока.Артикул, 
			  | Справочники.Номенклатура.Объект.Производитель КАК НоваяСтрока.Производитель, 
              |ИЗ
              | Справочники.Номенклатура) КАК ДанныеПоискаИзExcel;
              | ЛЕВОЕ СОЕДИНЕНИЕ Справочники.Номенклатура.Объект.Описание КАК НоваяСтрока.ОписаниеТовара И Справочники.Номенклатура.Объект._ПутьКартинкамНаСайте КАК НоваяСтрока.СсылкаНаКартинку";                         
			  Запрос.УстановитьПараметр("Справочники.Номенклатура", ВыгружатьХарактеристики);
					
КонецПроцедуры
Показать


Вот только не знаю как с кнопкой это связать...Чтобы из таблицы записались данные в номенклатуру
8. Dondarrion 08.06.17 13:25 Сейчас в теме
(7)
Могу только посоветовать читать книги по 1С. Для написания запросов в 1с механизм Конструктор запросов с ним легко можно написать нужный запрос.
1)
| ПОМЕСТИТЬ ВыбНоваяСтрока

раз у тебя данные уже в объекте хранятся, то можно не помещать во временную таблицу,
2) зачем справочник номенклатура во вложенном запросе?
3)
 | ЛЕВОЕ СОЕДИНЕНИЕ Справочники.Номенклатура.Объект.Описание КАК НоваяСтрока.ОписаниеТовара И Справочники.Номенклатура.Объект._ПутьКартинкамНаСайте КАК НоваяСтрока.СсылкаНаКартинку";

Неправильно
4)
Запрос.УстановитьПараметр("Справочники.Номенклатура", ВыгружатьХарактеристики)

куда устанавливается параметр? имя параметра не должно содержать точку.

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

Дальше через цикл выборки обходишь результат запроса и для каждой номенклатуры получаешь объект (Выборка.Ссылка.ПолучитьОбъект()),и уже в объект вставляешь СсылкаНаКартинку и ОписаниеТовара и только потом записываешь объект
alexie.j; +1 Ответить
9. alexie.j 08.06.17 13:49 Сейчас в теме
(8) Спасибо большое!
Тяжело понять, когда первый раз делаешь :(
Да, литературу с удовольствием почитаю.
Потому что мне даже от Выборки страшно.
Получается нужно сделать выборку по Ссылке на картинку и Описанию в номенклатуре, а в конце записать туда данные?
10. alexie.j 08.06.17 19:13 Сейчас в теме
(8) Разобралась, спасибо!)
Оставьте свое сообщение

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