Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Загрузка номенклатуры из Excel в 1С 8  (Прочитано 32397 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Evgen09
Гость
« : 25-02-2009 10:19 » new

Здравствуйте! Подскажите, пожалуйста! Загружаю из Excel данные, хочу обратиться к именованной области, выдает следующую ошибку: "Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec)
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
по причине:
Произошла исключительная ситуация (0x800a03ec)"





Процедура ОсновныеДействияФормыЗагрузить(Кнопка)

НомерКолонкиАртикул = ЭлементыФормы.ТабличныйДокумент.Область("R2C1";
НомерКолонкиНаименованияТовара = ЭлементыФормы.ТабличныйДокумент.Область("R2C2";
НомерКолонкиЕдиницаИзмерения = ЭлементыФормы.ТабличныйДокумент.Область("R2C3";
НомерКолонкиСтрана = ЭлементыФормы.ТабличныйДокумент.Область("R2C4";

//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Excel = новый COMОбъект("Excel.Application";


Версия = Лев(Excel.Version,Найти(Excel.Version,"."-1);
Если Версия = "8" тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
ФайлКолонок = Excel.Cells(2,1).SpecialCells(21).Column;
Конецесли;


// Выбираем данные из файла
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл

//Полуим данные из соответсвующих ячеек
Артикул = СокрЛП(Excel.Cells(а,Артикул).Value);
НаименованиеТовара = СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
ЕдиницаИзмерения = СокрЛП(Excel.Cells(а,НомерКолонкиЕдиницаИзмерения).Value);

Товар = Справочники.Номенклатура.ПустаяСсылка();

// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;

// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
Конецесли;

//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = НаименованиеТовара;
Товар.Артикул = Артикул;
Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
Товар.СтранаПроисхождения = НомерКолонкиСтрана;
Товар.Записать();
Конецесли;
КонецЦикла;


КонецПроцедуры
« Последнее редактирование: 29-11-2009 09:24 от Kivals » Записан
Lirik
Гость
« Ответ #1 : 27-11-2009 09:09 » 

Добрый день. А у меня вопрос возник по той же теме. Пока за сам код не брался, потому что хочу понять, а куда лучше присобачить процедуру загрузки из Exel в 1с(справочник Номенклатура), чтобы она один раз использовалась и потом пользователь и не знал бы о ее существоании.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 27-11-2009 10:09 » 

Во внешнюю обработку
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #3 : 28-11-2009 04:32 » 

Evgen09
Посмотри отладчиком на какой строке вылетает программа
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 28-11-2009 18:57 » 

Dest, там пост от 25 февраля Улыбаюсь
А исключительная ситуация скорее всего связана с защитой листа - если не ошибаюсь SpecialCells с ними некорректно работает (у меня были с ним проблемы, правда с параметром xlCellTypeLastCell = 11, а здесь - 21)
Записан
Lirik
Гость
« Ответ #5 : 28-11-2009 20:01 » 

Kivals, как создать эту внешнюю обработку? в 2 словах
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 28-11-2009 20:24 » 

8-ка?
В конфигураторе: Файл - Новый - Внешняя обработка
Записан
Lirik
Гость
« Ответ #7 : 29-11-2009 08:33 » 

Спасибо!

У меня теперь проблема с документом установки цен.
Код исполняется,ошибок не выдает, но при открытии проведенного документа пишется сообщение:
Документ Установка цен номенклатуры 00000000001 от 28.11.2009 20:05:52 был записан некорректно! Информация о ценах очищена.

Код такой:

ТекущаяСтрока=5;
КолонкаЦены=5;

Товар=Справочники.Номенклатура.СоздатьЭлемент();
...................
Товар.Записать();

Документ=Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Документ.Дата=ТекущаяДата();
       НоваяСтрока=Документ.Товары.Добавить();
    НоваяСтрока.ТипЦен=Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
      НоваяСтрока.Номенклатура=Товар.Ссылка;
      НоваяСтрока.Валюта=Справочники.Валюты.НайтиПоНаименованию("руб.");
      НоваяСтрока.Цена=Число(Док.sheets(1).cells(ТекущаяСтрока,КолонкаЦены).value);
   
Документ.Записать(Режимзаписидокумента.Запись);
Документ.Записать(Режимзаписидокумента.Проведение);

Что я не так делаю?

И кстати, где можно узнать свойства ячеек Exel'я, как они обозначаются. Например, как получить цвет ячейки?
« Последнее редактирование: 29-11-2009 09:23 от Sel » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 29-11-2009 09:22 » 

Проверка записи документа осуществляется в модуле документа, там возможны разные предопределенные процедуры: ПередЗаписью, ПриЗаписи, ОбработкаПроведения... - одним словом ищи часть строки ошибки, которая тебе выдалась и разматывай алгоритм вверх чтобы определить причину (возможно понадобится отладчик). Также возможны и процедуры для событий ПриЗаписи, ПередЗаписью в форме документа, но это по идее не правильно алгоритмически (это в случае если в модуле не найдешь)

Узнать значения свойств Excel - используй запись макросов в Excel, редактор Visual Basic в нем и встроенную система помощи Excel API. Алгоритм прост: начинаешь запись, меняешь цвет ячейки, останавливаешь запись. Открываешь записанный макрос в редакторе и смотришь что тебе записало: изучаешь непонятные слова с помощью справки.
Записан
Lirik
Гость
« Ответ #9 : 29-11-2009 11:28 » 

Kivals, и еще раз спасибо! Нашел я причину. Процедура с этим сообщением на самом деле была в модуле формы документа (ПриОткрытии) Улыбаюсь
Проблему решило добавление строчки

Документ.ТипыЦен.Добавить().ТипЦен=Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");

А вот насчет макросов, если честно, я не понял) Нашел только, что к цвету ячейки можно обратиться как Док.sheets(1).cells(5,5).interior.ColorIndex;
А как этот Visual Basic найти) Он к каждому Exel'ю прилагается? ("2007 офис" у меня)
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 29-11-2009 14:55 » 

До 2003-го точно прилагался, но по-моему справку нужно указывать отдельно при установке - по умолчанию она не ставится. Попробуй снова запустить установку, выбери изменить и поройся в настройках Excel...
Как в 2007 не знаю - не нравится он мне, даже не ставил себе никогда. В 2003 в меню это: Сервис - Макрос - Редактор Visual Basic
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines