Загрузка из Excel в 1С 8.1 УТ

Новая тема
Показывать по 10 20 40 сообщений
"Элементы создаются, документ поступление создается, но вот установка цен номенклатуры ругается:

{Форма.Форма(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();        Сообщить("Загрузка накладной успешно завершена!");КонецПроцедуры



 
"
Проблема в точ, что для одной и той же номенклатуры, в один и тот же день нельзя установить 2 цены!
не совсем понял...ошибка выходит в строке номен 7, значит оно доходит до этой строки
это номер строки регистра сведений. А не документа. А вот какая номенклатура - это по отладчику. Короче выше написали - ищи установку цен по данному типу цен на ЭТУ ЖЕ ДАТУ!!! или поменяй дату установки цен (но это с умом надо)
У тебя одна и таже номенклатура встречается несколько раз в документе поступления. Такого не должно быть.
"да знаю, из-за этого были проблемы с записью ШК, но это проблемку решил. а в этом случает решил еще легче


ДокУстановкаЦенНоменклатуры.Записать(РежимЗаписиДокумента.Запись); 



а провожу рукой. как такой вариант?"
И "рукой" документ проводится?
а в доке нет проблем, проводится и вся номенклатура вводится
а как добавить к еще одну тип цены, то есть в одном доке установка цен два типа цен: первичная, вторичная?
"можно сделать так:


ДокУстановкаЦенНоменклатуры = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();		
ДокУстановкаЦенНоменклатуры.Дата = Дата;
ДокУстановкаЦенНоменклатуры.ТипыЦен.Очистить();
НовСтрТипыЦен = ДокУстановкаЦенНоменклатуры.ТипыЦен.Добавить();
ТипЦены = ТипЦен; // Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001");
НовСтрТипыЦен.ТипЦен = ТипЦены;
НовСтрТипыЦен = ДокУстановкаЦенНоменклатуры.ТипыЦен.Добавить();
ТипЦены2 = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
НовСтрТипыЦен.ТипЦен = ТипЦены2;


//Запишем товар и цену в документ установки цен


тчТовары = ДокУстановкаЦенНоменклатуры["Товары"];
СтрокаТаблицаТовары = тчТовары.Добавить();
СтрокаТаблицаТовары["Номенклатура"] = НовыйЭлемент.Ссылка;
СтрокаТаблицаТовары["Валюта"] = ВалютаДок;
СтрокаТаблицаТовары["ЕдиницаИзмерения"] = НовыйЭлемент.ЕдиницаХраненияОстатков;
СтрокаТаблицаТовары["ТипЦен"] = ТипЦены;
СтрокаТаблицаТовары["Цена"] = Цена;
СтрокаТаблицаТовары["ТипЦен"] = ТипЦены2;
СтрокаТаблицаТовары["Цена"] = Цена2;
"
Читают тему
(гостей: 1)

Быстрый переход