|
загрузка данных из 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)
Если ТипЗнч(ТчСтр.Материал) = ТипЗнч(Выборка.Наименование) Тогда ТчСтр.Материал = Выборка.Наименование; Иначе ТчСтр.Материал = Выборка.Ссылка; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |