|   |   | 
| 
 | загрузка данных из excel | ☑ | ||
|---|---|---|---|---|
| 0
    
        Liya1203 23.11.16✎ 09:21 | 
        добрый день! загружаю данные из Excel. отбор данных происходит по полю "ТипМарка". После нахождения ТипМарки из файла в справочнике номенклатура подставляется соответствующее наименование. проблема в том, что Тип Марка не уникальное поле( существуют записи с одинаковой тип маркой, но с разным наименование) и в связи с этим подставляется не правильное наименование. Как осуществить поиск элемента по 2-м реквизитам?
 &НаСервере Функция ЗагрузитьКомплектовочнуюВедомостьНаСервере(ТЗ) НомерСтроки = 0; ТЗОшибки = Новый ТаблицаЗначений; ТЗОшибки.Колонки.Добавить("СообщОшиб"); ЕдИзмСправ = Справочники.КлассификаторЕдиницИзмерения; спрНоменклатура = Справочники.Номенклатура; СпрВидыРабот = Справочники.ВидыРабот; Для Каждого Строка Из ТЗ Цикл НомерСтроки = НомерСтроки + 1; ПолныйКод = СокрЛП(СтрЗаменить(Строка(Строка.ПолныйКод),".","/")); ВидРабот = ""; ВидРабот = СпрВидыРабот.НайтиПоКоду(ПолныйКод,Истина); ТипМарка = Строка.ТипМарка; Материал = ""; Материал = спрНоменклатура.НайтиПоРеквизиту("ТипМарка",ТипМарка); Если (не Материал = Справочники.Номенклатура.ПустаяСсылка()) и (не ВидРабот = Справочники.ВидыРабот.ПустаяСсылка()) // и СокрЛП(ВидРабот.Наименование) = СокрЛП(Строка.Наименование) Тогда ТЧСтр = ЭтотОбъект.Объект.Материалы.Добавить(); ТчСтр.Материал = Материал; ТчСтр.Количество = Строка.КоличествоПоПроекту; //ТчСтр.ВидРабот.ПолныйКод = Строка.ПолныйКод; ТчСтр.ВидРабот = ВидРабот; ТчСтр.Цена = Строка.ЦенаЗаЕдиницу; Если ЗначениеЗаполнено(Строка.ЦенаЗаЕдиницу) и ЗначениеЗаполнено(Строка.КоличествоПоПроекту) Тогда ТчСтр.Итого = Строка.ЦенаЗаЕдиницу * Строка.КоличествоПоПроекту; КонецЕсли; Если НЕ СокрЛП( ВРег(СтрЗаменить(Материал.Наименование," ",""))) = СокрЛП(ВРег(СтрЗаменить(Строка.НаименованиеМатериала," ",""))) Тогда //Наименование в файле<> Наименование в 1С предупреждение стрОшиб = ТЗОшибки.Добавить(); стрОшиб.СообщОшиб = Строка.ТипМарка+ " наименование из файла '" + Строка.НаименованиеМатериала + "' не совпадает с 1С '" + Материал.Наименование+"'"; Сообщить(Строка.ТипМарка+ " наименование из файла '" + Строка.НаименованиеМатериала + "' не совпадает с 1С '" + Материал.Наименование+"'",СтатусСообщения.БезСтатуса); КонецЕсли; Иначе стрОшиб = ТЗОшибки.Добавить(); стрОшиб.СообщОшиб = "НЕ ЗАГРУЖЕН "+?(Строка.ТипМарка = "","'Нет кода'",Строка.ТипМарка) + " '" + Строка.НаименованиеМатериала+ "' , т.к.отсутствует в справочнике 1С."; Сообщить("НЕ ЗАГРУЖЕН "+?(Строка.ТипМарка = "","'Нет кода'",Строка.ТипМарка) + " '" + Строка.НаименованиеМатериала+ "' , т.к.отсутствует в справочнике 1С.",СтатусСообщения.ОченьВажное); Продолжить; КонецЕсли; КонецЦикла; ТабОшибок = ВывестиОшибки(ТЗОшибки); Возврат ТабОшибок; КонецФункции | |||
| 1
    
        Мимохожий Однако 23.11.16✎ 09:24 | 
        Я бы
 Для Каждого Строка Из ТЗ Цикл заменил на Для Каждого ТекСтрока Из ТЗ Цикл. | |||
| 2
    
        Romyr 23.11.16✎ 09:25 | 
        (0) >Как осуществить поиск элемента по 2-м реквизитам? 
 Выборкой или Запросом. | |||
| 3
    
        Romyr 23.11.16✎ 09:27 | 
        или в чем проблема?     | |||
| 4
    
        Liya1203 23.11.16✎ 09:37 | 
        Проблема в формировании запроса 
 Запрос = Новый Запрос("Запрос"); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ТипМарка = &ТипМарка | И Номенклатура.НаименованиеПолное ПОДОБНО &НаименованиеПолное"; Запрос.Параметры.Вставить("НаименованиеПолное", спрНоменклатура.НайтиПоКоду(Строка.НаименованиеМатериала)); Запрос.Параметры.Вставить("ТипМарка", ТипМарка); | |||
| 5
    
        Maniac 23.11.16✎ 09:38 | 
        Проблема в твоей голове а не запросе     | |||
| 6
    
        Maniac 23.11.16✎ 09:39 | 
        спрНоменклатура.НайтиПоКоду(Строка.НаименованиеМатериала)
 возвращает ссылку на элемент А ты в запросе пытаешся как текст потом ее втюхать | |||
| 7
    
        Romyr 23.11.16✎ 09:53 | 
        Глубоко уважаемый Маньяк правильно заметил.
 Вы либо в условиях в запросе вместо наименования ищите сразу по ссылке или в Параметр НаименованиеПолное передавайте Строка.НаименованиеМатериала а не ссылку. | |||
| 8
    
        Liya1203 23.11.16✎ 10:54 | 
        (7) не могли бы Вы пример привести как это сделать?     | |||
| 9
    
        Lazy Stranger 23.11.16✎ 11:08 | 
        (8) да также как с типом, в чем разница?
 Запрос.Параметры.Вставить("НаименованиеПолное", Строка.НаименованиеМатериала); | |||
| 10
    
        Liya1203 24.11.16✎ 11:23 | 
        (9) Как присвоить результат запроса колонке Материал таб.части. реквизит материал имеет тип СправочникСсылка.Номенклатура
 Функция ЗагрузитьКомплектовочнуюВедомостьНаСервере(ТЗ) НомерСтроки = 0; ТЗОшибки = Новый ТаблицаЗначений; ТЗОшибки.Колонки.Добавить("СообщОшиб"); ЕдИзмСправ = Справочники.КлассификаторЕдиницИзмерения; спрНоменклатура = Справочники.Номенклатура; СпрВидыРабот = Справочники.ВидыРабот; Для Каждого Строка Из ТЗ Цикл НомерСтроки = НомерСтроки + 1; ПолныйКод = СокрЛП(СтрЗаменить(Строка(Строка.ПолныйКод),".","/")); ВидРабот = ""; ВидРабот = СпрВидыРабот.НайтиПоКоду(ПолныйКод,Истина); Запрос = Новый Запрос("Запрос"); Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.ТипМарка, | Номенклатура.Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ТипМарка = &ТипМарка | И Номенклатура.Наименование = &Наименование"; Запрос.УстановитьПараметр("Наименование", Строка.НаименованиеМатериала); Запрос.УстановитьПараметр("ТипМарка", Строка.ТипМарка); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если (не ВидРабот = Справочники.ВидыРабот.ПустаяСсылка()) и (не Выборка.Следующий()=спрНоменклатура.ПустаяСсылка()) Тогда //(не Материал = Справочники.Номенклатура.ПустаяСсылка()) и ТЧСтр = ЭтотОбъект.Объект.Материалы.Добавить(); ТчСтр.Материал = Выборка.Наименование; ТчСТР.ТипМарка=Строка(Выборка.ТипМарка); ТчСтр.Количество = Строка.КоличествоПоПроекту; //ТчСтр.ВидРабот.ПолныйКод = Строка.ПолныйКод; ТчСтр.ВидРабот = ВидРабот; ТчСтр.Цена = Строка.ЦенаЗаЕдиницу; Если ЗначениеЗаполнено(Строка.ЦенаЗаЕдиницу) и ЗначениеЗаполнено(Строка.КоличествоПоПроекту) Тогда ТчСтр.Итого = Строка.ЦенаЗаЕдиницу * Строка.КоличествоПоПроекту; КонецЕсли; Иначе стрОшиб = ТЗОшибки.Добавить(); стрОшиб.СообщОшиб = "НЕ ЗАГРУЖЕН "+?(Строка.ТипМарка = "","'Нет кода'",Строка.ТипМарка) + " '" + Строка.НаименованиеМатериала+ "' , т.к.отсутствует в справочнике 1С."; Сообщить("НЕ ЗАГРУЖЕН "+?(Строка.ТипМарка = "","'Нет кода'",Строка.ТипМарка) + " '" + Строка.НаименованиеМатериала+ "' , т.к.отсутствует в справочнике 1С.",СтатусСообщения.ОченьВажное); Продолжить; КонецЕсли; КонецЦикла; КонецЦикла; ТабОшибок = ВывестиОшибки(ТЗОшибки); Возврат ТабОшибок; КонецФункции | |||
| 11
    
        catena 24.11.16✎ 11:26 | 
        (10)Колонка Материал - какой тип? Выборка.Наименование - какой тип? Зачем так мучить бедное животное?     | |||
| 12
    
        Liya1203 24.11.16✎ 11:32 | 
        (11) Колонка Материал-СправочникСсылка.Номенклатура
 Выборка.Наименование- строка | |||
| 13
    
        catena 24.11.16✎ 11:34 | 
        (12)Есть такая игрушка - сортер. Для деток от 6 мес. Учит не засовывать квадратное в круглое.     | |||
| 14
    
        sur0k 24.11.16✎ 23:17 | 
        (12)
 Если ТипЗнч(ТчСтр.Материал) = ТипЗнч(Выборка.Наименование) Тогда ТчСтр.Материал = Выборка.Наименование; Иначе ТчСтр.Материал = Выборка.Ссылка; КонецЕсли; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |