Проблемка с переносом из Excel в 1с 8 (в справочник)
Показывать по
10
20
40
сообщений
- 1
- 2
08.09.2009
02:29
#1
" Для Каждого Строка Из Данные Цикл
ТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ТМЦ.Пустая() или ИмяТМЦ.Пустая() Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Код = Строка.Код;
НоваяНоменклатура.Наименование = Строка.Наименование;
НоваяНоменклатура.
НоваяНоменклатура.Записать();
КонецЕсли;
КонецЦикла;
Вот проблемка!
Есть у меня справочник(реквизиты - Код, Наименование), Ексель файл.
Написал обработку - загружается в таблыцу - все ок!
После этого с таблицы пытаюсь загрузить данные в справочник - загружает!
Второй раз - выдает ошибку
{Форма.Форма(93)}: Ошибка при вызове метода контекста (Записать): Код не уникален!
НоваяНоменклатура.Записать();
Но ведь там же есть проверка на идентичность
Что там не так не могу въехать! Хелп ми..."
ТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ТМЦ.Пустая() или ИмяТМЦ.Пустая() Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Код = Строка.Код;
НоваяНоменклатура.Наименование = Строка.Наименование;
НоваяНоменклатура.
НоваяНоменклатура.Записать();
КонецЕсли;
КонецЦикла;
Вот проблемка!
Есть у меня справочник(реквизиты - Код, Наименование), Ексель файл.
Написал обработку - загружается в таблыцу - все ок!
После этого с таблицы пытаюсь загрузить данные в справочник - загружает!
Второй раз - выдает ошибку
{Форма.Форма(93)}: Ошибка при вызове метода контекста (Записать): Код не уникален!
НоваяНоменклатура.Записать();
Но ведь там же есть проверка на идентичность
Что там не так не могу въехать! Хелп ми..."
08.09.2009
08:12
#2
> Если ТМЦ.Пустая() или ИмяТМЦ.Пустая() Тогда
Какова логика этого условия?
Возможно Вы хотели реализовать следующий алгоритм:
1) Ищем по коду.
2) Если не находим по коду, то ищем по наименованию.
3) Если не нашли ни по коду, ни по наименованию, то создаем новый элемент.
Так?
Какова логика этого условия?
Возможно Вы хотели реализовать следующий алгоритм:
1) Ищем по коду.
2) Если не находим по коду, то ищем по наименованию.
3) Если не нашли ни по коду, ни по наименованию, то создаем новый элемент.
Так?
08.09.2009
10:59
#3
"Да, именно это мне и нужно!
Дело в том, что я хочу связать прайс-лист с 1с(как запись в него так и чтение с него - надоело одну и ту же запись делать в разных приложениях).
В чем прикол (пришлось посидеть чуть) что в,
ТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ТМЦ.Пустая() или ИмяТМЦ.Пустая() Тогда
если убрать ТМЦ.Пустая() а оставить ИмяТМЦ.Пустая() то все работает
Если ИмяТМЦ.Пустая() Тогда
.....
но мне нужна проверка на наличие элемента с таким же кодом!
Как быть (я начинающий - помогите)"
Дело в том, что я хочу связать прайс-лист с 1с(как запись в него так и чтение с него - надоело одну и ту же запись делать в разных приложениях).
В чем прикол (пришлось посидеть чуть) что в,
ТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ТМЦ.Пустая() или ИмяТМЦ.Пустая() Тогда
если убрать ТМЦ.Пустая() а оставить ИмяТМЦ.Пустая() то все работает
Если ИмяТМЦ.Пустая() Тогда
.....
но мне нужна проверка на наличие элемента с таким же кодом!
Как быть (я начинающий - помогите)"
08.09.2009
12:47
#4
"
ТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
Если ТМЦ.Пустая() Тогда
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ИмяТМЦ.Пустая() Тогда
//Создать элемент!
КонецЕсли;
КонецЕсли;"
ТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
Если ТМЦ.Пустая() Тогда
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ИмяТМЦ.Пустая() Тогда
//Создать элемент!
КонецЕсли;
КонецЕсли;"
08.09.2009
13:38
#5
"В примере описанном выше ПСВ будет произведен поиск элемента справочника по коду и, если не найден, то попытается найти элемент по наименованию. Если и в этом случае не найдется подходящего элемента, то только тогда будет создан новый элемент. Я бы еще добавил (для синхронизации по коду и повторной загрузки) следующее:
Если ИмяТМЦ.Пустая() Тогда
НовЭл = Справочники.Номенклатура.СоздатьЭлемент();
НовЭл.Наименование = Строка.Наименование;
Иначе
НовЭл = ИмяТМЦ.ПолучитьОбъект();
КонецЕсли;
НовЭл.Код = Строка.Код;
НовЭл.Записать();
т.е. присвоить код из Excel найденному по наименованию элементу."
Если ИмяТМЦ.Пустая() Тогда
НовЭл = Справочники.Номенклатура.СоздатьЭлемент();
НовЭл.Наименование = Строка.Наименование;
Иначе
НовЭл = ИмяТМЦ.ПолучитьОбъект();
КонецЕсли;
НовЭл.Код = Строка.Код;
НовЭл.Записать();
т.е. присвоить код из Excel найденному по наименованию элементу."
08.09.2009
22:04
#6
"Ваша доработка не очень коректна....то есть не в моём случае
Вот такой код:
//-----------------
Для Каждого Строка Из Данные Цикл
кодТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
Если кодТМЦ.Пустая() Тогда
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ИмяТМЦ.Пустая() Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Код = Строка.Код;
НоваяНоменклатура.Наименование = Строка.Наименование;
Иначе
НоваяНоменклатура = ИмяТМЦ.ПолучитьОбъект();
КонецЕсли;
НоваяНоменклатура.Код = Строка.Код;
НоваяНоменклатура.Записать();
КонецЕсли;
КонецЦикла;
//-----------------------------
Ошибку выкидывает - Код не уникальный
и показывает на строку - НоваяНоменклатура.Записать();
Дело в том, что при первой загрузке все залитает в справочник нормально.
А вот при второй - Код не уникальный.
Ну никак не могу понять ...вродьбы все правильно с точки зрения логики
"
Вот такой код:
//-----------------
Для Каждого Строка Из Данные Цикл
кодТМЦ = Справочники.Номенклатура.НайтиПоКоду(Строка.Код);
Если кодТМЦ.Пустая() Тогда
ИмяТМЦ = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование);
Если ИмяТМЦ.Пустая() Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Код = Строка.Код;
НоваяНоменклатура.Наименование = Строка.Наименование;
Иначе
НоваяНоменклатура = ИмяТМЦ.ПолучитьОбъект();
КонецЕсли;
НоваяНоменклатура.Код = Строка.Код;
НоваяНоменклатура.Записать();
КонецЕсли;
КонецЦикла;
//-----------------------------
Ошибку выкидывает - Код не уникальный
и показывает на строку - НоваяНоменклатура.Записать();
Дело в том, что при первой загрузке все залитает в справочник нормально.
А вот при второй - Код не уникальный.
Ну никак не могу понять ...вродьбы все правильно с точки зрения логики
"
08.09.2009
22:37
#7
Задача такова:
- есть красивый прайс в ексел формате.
- нада сделать связь ексель-1с и наоборот.
Это нада для того, что бы когда в 1с добавлялось что то новое, то оно минялось и в прайсе(ексель файле)
А сейчас мне нада забить справочник "Номенклатура" данными из екселя.
В ексель прайсе есть нюанс один.
Там 2 столбца: - Код
Товар
Но когда список однотипного товара заканчиваеться, другой начинается с названия группы товара(в 2 колонке), и за ним снова идет список товаров!
Код Товар
Комплекти для новонародженого
1,1 К-т для новонар.нарядний 7-ми пред.(пел-2, льол-2, кут, шап-2)
1,2 К-т для новонар.нарядний 8-ми пр.(підк, кут, пел-2, льол-2, чепч-2 тепл.легк.)(бязь, фланель)
1,8 К-т для новонар.нарядний 2-х пр.(підк, куточок) біла бязь з мереживом
1,9 К-т для новонар.3-х пр фланелевий (повзуни-1, льоля зр-1, чепчик-1)
Пелюшки
3,1 Пелюшка для купання фланелева (90x90)
3,2 Пелюшка для купання фланелева (110x110)
Ну тоесть задача в том, когда шчитывает Пелюшка - забить в справочник его как группа и все что под ним (Пелюшка для купання фланелева (90x90)....) забивать в эту группу(то есть в группу "Пелюшка")
Все что без кода явлется названием группы.!
- есть красивый прайс в ексел формате.
- нада сделать связь ексель-1с и наоборот.
Это нада для того, что бы когда в 1с добавлялось что то новое, то оно минялось и в прайсе(ексель файле)
А сейчас мне нада забить справочник "Номенклатура" данными из екселя.
В ексель прайсе есть нюанс один.
Там 2 столбца: - Код
Товар
Но когда список однотипного товара заканчиваеться, другой начинается с названия группы товара(в 2 колонке), и за ним снова идет список товаров!
Код Товар
Комплекти для новонародженого
1,1 К-т для новонар.нарядний 7-ми пред.(пел-2, льол-2, кут, шап-2)
1,2 К-т для новонар.нарядний 8-ми пр.(підк, кут, пел-2, льол-2, чепч-2 тепл.легк.)(бязь, фланель)
1,8 К-т для новонар.нарядний 2-х пр.(підк, куточок) біла бязь з мереживом
1,9 К-т для новонар.3-х пр фланелевий (повзуни-1, льоля зр-1, чепчик-1)
Пелюшки
3,1 Пелюшка для купання фланелева (90x90)
3,2 Пелюшка для купання фланелева (110x110)
Ну тоесть задача в том, когда шчитывает Пелюшка - забить в справочник его как группа и все что под ним (Пелюшка для купання фланелева (90x90)....) забивать в эту группу(то есть в группу "Пелюшка")
Все что без кода явлется названием группы.!
09.09.2009
06:39
#8
"Используйте:
НайтиПоНаименованию(Строка.Наименование, Истина);
а то у Вас поиск по наименованию происходит не на точное совпадение.
И еще, при создании новой номенклатуры уберите присвоение ей кода - присвоение идет ниже (см. мой пример)."
НайтиПоНаименованию(Строка.Наименование, Истина);
а то у Вас поиск по наименованию происходит не на точное совпадение.
И еще, при создании новой номенклатуры уберите присвоение ей кода - присвоение идет ниже (см. мой пример)."
09.09.2009
06:47
#9
"ГруппаСпр = Справочники.Номенклатура.ПустаяССылка();
Для Строка Из Данные Цикл
Если ПустаяСтрока(Строка.Код) Тогда
ГруппаСпр = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование, Истина);
Продолжить;
КонецЕсли;
// Далее все как описано выше, но только при создании новго элемента добавляете
НоваяНоменклатура.Родитель = ГруппаСпр;
...
Проблема такого подхода возникнет когда в Excel-е будут записаны товары, которые не относятся ни к одной группе (лежат на верхнем уровне) - они будут занесены в последнюю группу (т.е. в Excel-е они должны быть в самом верху таблицы). Для однозначной идентификации данных в Excel и 1С нужно добавить колонку "КодГруппы" и "ЭтоГруппа" на страницу Excel."
Для Строка Из Данные Цикл
Если ПустаяСтрока(Строка.Код) Тогда
ГруппаСпр = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Наименование, Истина);
Продолжить;
КонецЕсли;
// Далее все как описано выше, но только при создании новго элемента добавляете
НоваяНоменклатура.Родитель = ГруппаСпр;
...
Проблема такого подхода возникнет когда в Excel-е будут записаны товары, которые не относятся ни к одной группе (лежат на верхнем уровне) - они будут занесены в последнюю группу (т.е. в Excel-е они должны быть в самом верху таблицы). Для однозначной идентификации данных в Excel и 1С нужно добавить колонку "КодГруппы" и "ЭтоГруппа" на страницу Excel."
09.09.2009
12:46
#10
"Кароче ничего не выходит.
Когда в справочник закидывает - неверный код!
Хотя по логике сделано все правильно!
НоваяНоменклатура.Родитель = ГруппаСпр;
Тож ничего не выходить. Мне б полностю рабочий код - я б разобрался, а так тыкать туда, сюда. Я ж ведь начинающий всетаки.
ГруппаСпр = Справочники.Номенклатура.ПустаяССылка(); - что это означает?
"
Когда в справочник закидывает - неверный код!
Хотя по логике сделано все правильно!
НоваяНоменклатура.Родитель = ГруппаСпр;
Тож ничего не выходить. Мне б полностю рабочий код - я б разобрался, а так тыкать туда, сюда. Я ж ведь начинающий всетаки.
ГруппаСпр = Справочники.Номенклатура.ПустаяССылка(); - что это означает?
"
- 1
- 2
БП 1.6.17.4 Выделение одной организации из общей ИБОшибки в 1С:Предпритие 7.7 при работе с контрагентами релиз 7.70.632
Читают тему
(гостей: 1)