Загрузка из Excel в 1С 8.1 УТ
Показывать по
10
20
40
сообщений
- 1
- 2
06.10.2012
13:13
#1
"Элементы создаются, документ поступление создается, но вот установка цен номенклатуры ругается:
{Форма.Форма(209)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Рознизная : хххххххх : : 06.10.2012 0:00:00 (Регистр сведений: Цены номенклатуры; Номер строки: 7)
ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Проведение);
О чем говорит эта ошибка? номенклатура в экселе встречается несколько раз, и оно не может записаться в регистр сведений, так?
Скажите пожалуйста в чем проблема?
{Форма.Форма(209)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Рознизная : хххххххх : : 06.10.2012 0:00:00 (Регистр сведений: Цены номенклатуры; Номер строки: 7)
ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Проведение);
О чем говорит эта ошибка? номенклатура в экселе встречается несколько раз, и оно не может записаться в регистр сведений, так?
Скажите пожалуйста в чем проблема?
Процедура ЗагрузкаИзExcel() Экзель = Новый COMОбъект("Excel.Application"); Книга = Экзель.Application.Workbooks.Open(Путь); ТекЛист = Книга.WorkSheets(1); КолСтрок = ТекЛист.Cells(1,1).SpecialCells(11).Row; КолКолонок = ТекЛист.Cells(1,1).SpecialCells(11).Column; КоличествоСтраниц = 1; Для ТекНомер = 1 По КоличествоСтраниц Цикл Артикул = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Арт).Value); Наименование = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Наим).Value); Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,ШК).Value); КонецЕсли; Коллекция = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Коллекция1).Value); Цвет = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Цвет1).Value); Размер = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Размер1).Value); Количество = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Колич).Value); Цена = СокрЛП(Книга.Sheets(ТекНомер).Cells(1,Цен).Value); Сообщить("Внешняя накладная прочитана, начилась запись элементов справочника Номенклатура!"); счСтроки = НачСтрока; //// Заполняем шапку Документа Поступление товаров и услуг ////////////////////////////////////// НовыйДокПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); НовыйДокПоступление.Дата = Дата; НовыйДокПоступление.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад; НовыйДокПоступление.Организация = Организация; НовыйДокПоступление.Контрагент = Контрагент; НовыйДокПоступление.ДоговорКонтрагента = Дог; НовыйДокПоступление.ВалютаДокумента = ВалютаДок; НовыйДокПоступление.КурсВзаиморасчетов = 1; НовыйДокПоступление.КратностьВзаиморасчетов = 1; НовыйДокПоступление.СкладОрдер = Склад; НовыйДокПоступление.ОтражатьВУправленческомУчете = Истина; НовыйДокПоступление.ОтражатьВБухгалтерскомУчете = Истина; НовыйДокПоступление.ОтражатьВНалоговомУчете = Ложь; //// Создаю док УстановкаЦенНоменклатуры /////////////////////////////////////////////////////// ДокУстановкаЦенНоменклатуры = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); ДокУстановкаЦенНоменклатуры.Дата = Дата; ДокУстановкаЦенНоменклатуры.ТипыЦен.Очистить(); НовСтрТипыЦен = ДокУстановкаЦенНоменклатуры.ТипыЦен.Добавить(); ТипЦены = ТипЦен; // Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001"); НовСтрТипыЦен.ТипЦен = ТипЦены; Для ш = НачСтрока по КолСтрок Цикл Артикул = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Арт).Value); Наименование = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Наим).Value); Если (ШтрихКод = 0) Тогда Сообщить("ШтрихКод отсутсвует в данной номенклатуре!"); Иначе ШтрихКод = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value); КонецЕсли; //ШтрихКод = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,ШК).Value); Коллекция = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Коллекция1).Value); Цвет = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Цвет1).Value); Размер = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Размер1).Value); Количество = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Колич).Value); Цена = СокрЛП(Книга.Sheets(ТекНомер).Cells(СчСтроки,Цен).Value); счСтроки = счСтроки + 1; Если (Наименование = """") или (Наименование = Неопределено) или (Наименование = null) Тогда Продолжить; КонецЕсли; Запись = Истина; СпрНоменклатура = Справочники.Номенклатура; Если Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер).Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); Родитель = ГрпНом; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Артикул = Артикул; НовыйЭлемент.Коллекция = Коллекция; НовыйЭлемент.Цвет = Цвет; НовыйЭлемент.Размер = Размер; НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.НаименованиеПолное = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.ВидНоменклатуры = ВидНомен; НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер; НовыйЭлемент.Записать(); НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер; НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование; НовыйЕдИзмер.Коэффициент = 1; НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка; НовыйЕдИзмер.Записать(); НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка; НовыйЭлемент.СтавкаНДС = СтавкаНДС; //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина; НовыйЭлемент.Записать(); //Запись РегистраСведений Штрихкоды ЗаписьШК = Истина; РегСведШК = РегистрыСведений.Штрихкоды; ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать(); Пока ВыборкаРегСведШК.Следующий() Цикл Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда ЗаписьШК = Ложь; КонецЕсли; КонецЦикла; ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи(); ЗаписьВРегистрСвед.Владелец = НовыйЭлемент.Ссылка; ЗаписьВРегистрСвед.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ЗаписьВРегистрСвед.Штрихкод = ШтрихКод; ЗаписьВРегистрСвед.ТипШтрихкода = ЭлементыФормы.ТипШтрихкода.Значение;//ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13; ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод не будет добавлен к данному элементу: " + Наименование + " " + Цвет + " " + Размер); Иначе Попытка ЗаписьВРегистрСвед.Записать(); Исключение Сообщить("Номенклатура с таким штрихкодом существует!"); КонецПопытки; КонецЕсли; Иначе НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер); КонецЕсли; //Создадим Док Поступления товаров и услуг //////////////////////////////////////////////////// ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; ДокПоступление.Количество = Количество; ДокПоступление.Цена = Цена; ДокПоступление.Склад = Склад; ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент; ДокПоступление.СтавкаНДС = СтавкаНДС; ДокПоступление.Сумма = Количество * Цена; Сообщить(НовыйЭлемент.Наименование + " " + ШтрихКод + " : "+"Элемент записан"); //Запишем товар и цену в документ установки цен тчТовары = ДокУстановкаЦенНоменклатуры["Товары"]; СтрокаТаблицаТовары = тчТовары.Добавить(); СтрокаТаблицаТовары["Номенклатура"] = НовыйЭлемент.Ссылка; СтрокаТаблицаТовары["Валюта"] = ВалютаДок; СтрокаТаблицаТовары["ЕдиницаИзмерения"] = НовыйЭлемент.ЕдиницаХраненияОстатков; СтрокаТаблицаТовары["ТипЦен"] = ТипЦены; СтрокаТаблицаТовары["Цена"] = Цена; КонецЦикла; Попытка НовыйДокПоступление.Записать(РежимЗаписиДокумента.Проведение); ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Проведение); Исключение Сообщить("НЕ ЗАПИСАН"); КонецПопытки; КонецЦикла; Экзель.Quit(); Сообщить("Загрузка накладной успешно завершена!");КонецПроцедуры"
06.10.2012
13:53
#2
Проблема в точ, что для одной и той же номенклатуры, в один и тот же день нельзя установить 2 цены!
06.10.2012
14:01
#3
не совсем понял...ошибка выходит в строке номен 7, значит оно доходит до этой строки
06.10.2012
18:19
#4
это номер строки регистра сведений. А не документа. А вот какая номенклатура - это по отладчику. Короче выше написали - ищи установку цен по данному типу цен на ЭТУ ЖЕ ДАТУ!!! или поменяй дату установки цен (но это с умом надо)
08.10.2012
09:32
#5
У тебя одна и таже номенклатура встречается несколько раз в документе поступления. Такого не должно быть.
08.10.2012
09:40
#6
"да знаю, из-за этого были проблемы с записью ШК, но это проблемку решил. а в этом случает решил еще легче
а провожу рукой. как такой вариант?"
ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Запись);
а провожу рукой. как такой вариант?"
08.10.2012
09:49
#9
а как добавить к еще одну тип цены, то есть в одном доке установка цен два типа цен: первичная, вторичная?
08.10.2012
10:00
#10
"можно сделать так:
ДокУстановкаЦенНоменклатуры = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();"
ДокУстановкаЦенНоменклатуры.Дата = Дата;
ДокУстановкаЦенНоменклатуры.ТипыЦен.Очистить();
НовСтрТипыЦен = ДокУстановкаЦенНоменклатуры.ТипыЦен.Добавить();
ТипЦены = ТипЦен; // Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001");
НовСтрТипыЦен.ТипЦен = ТипЦены;
НовСтрТипыЦен = ДокУстановкаЦенНоменклатуры.ТипыЦен.Добавить();
ТипЦены2 = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
НовСтрТипыЦен.ТипЦен = ТипЦены2;
//Запишем товар и цену в документ установки цен
тчТовары = ДокУстановкаЦенНоменклатуры["Товары"];
СтрокаТаблицаТовары = тчТовары.Добавить();
СтрокаТаблицаТовары["Номенклатура"] = НовыйЭлемент.Ссылка;
СтрокаТаблицаТовары["Валюта"] = ВалютаДок;
СтрокаТаблицаТовары["ЕдиницаИзмерения"] = НовыйЭлемент.ЕдиницаХраненияОстатков;
СтрокаТаблицаТовары["ТипЦен"] = ТипЦены;
СтрокаТаблицаТовары["Цена"] = Цена;
СтрокаТаблицаТовары["ТипЦен"] = ТипЦены2;
СтрокаТаблицаТовары["Цена"] = Цена2;
- 1
- 2
Читают тему
(гостей: 1)