ИМПОРТ данных в 1С

Тема в разделе "1C и всё что с ней связано", создана пользователем zundey, 28 авг 2008.

  1. zundey

    zundey Гость

    Здравствуйте! Просто необходима помощь!!!
    У МЕНЯ ТАКАЯ ОБИДА: Существует Excel-файл, в котором содержаться данные по товару. Мне нужно создать несколько документов в 1С, по каждому каналу, и занести инфо об этих документах в журнал.
    Вид Excel-файла: Посмотреть вложение excel.bmp
    Представление данных в 1С.
    Журнал: Посмотреть вложение jur.bmp
    Документ: Посмотреть вложение doc.bmp
    ВНИМАНИЕ ВОПРОСЫ:
    1. Реально ли, вообще, занести эти данные в 1С в так виде?
    2. Может у кого имеются идеи, как такое реализовать?
    3. Если идеи все ж у кого появятся, не поделится ли он со мной)?!
    Заранее ОГРОМНОЕ спасибо!!!
     
  2. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    а какая у вас платформа? на семерке я не делел такого, а на восьмерке могу ответить завтра.

    а вообще-то тут все просто - подключаемся к екселю через OLE (см справку по 1с), создаем документы (зависит от платформы)в количестве каналов, выбираем данные в цикле и заполняем документы. журнал тут не причем. сложнее придумать соответствие между товарами экселя и 1С.

    если знаеш делфи - в архиве делфийский юнит для работы с эксел.
     

    Вложения:

    • MSExcel.rar
      Размер файла:
      2,6 КБ
      Просмотров:
      27
  3. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Да можно все это реализовать на любой платформе. Повозиться конечно прийдется - не без этого. Другое дело есть ли навыки работы с встроенным языком (желательно даже опыт)?
     
  4. zundey

    zundey Гость

    У нас семерка, точнее v.7.70 027.
    А, вот еще...
    Как в 1С будет восприниматься мой Excel-файл, ну т.е. как данные будут считываться (восприниматься/выглядеть), в какой последовательности?
    И если данные в ячейки заносятся с помощью формул, то будет ли 1С правильно воспринимать значения этих формул?
    Можно ли через 1С обращаться и работать с конкретной ячейкой Excel-файла?

    Я пока не против и восьмерки! Хоть гляну, как это, вообще, организуется! Если "ответишь", то спасибо!

    Через коды товаров из 1С разве нельзя :) ? //В 1С же каждому товару присваивается свой код

    Не думаю, что мне с Делфи дадут работать, тут все на лицензиях помешались :) Но за файл спасибо, гляну ;) !

    Навыка и опыта-то нет :), ВОТ СИЖУ НАБИРАЮСЬ!

    Лююди, тук-тук, не бросайте :( !!!
     
  5. jcnby

    jcnby Гость


    На форуме уже не раз подымалась тема взаимодействия 1с и Ехеля....

    http://codeby.net/forum/threads/19899.html - что-то похожее на твою проблему

    По поводу кодов - можно если они есть и в Ехеле.


    1.Реально - вот только смысл у них будет такой как и на картинках, а вид конечно будет немного помассивнее.
    2.Идея тут уже есть, вопрос только в реализации.
    3.Все нада делать - а это время. Но - если у вас есть желание- тогда вам нада уметь работать в конфигураторе, изучить внутренний язык 1с, уметь работать на нем ( языке ) с Документом ( программное создание и заполнение реквизитов ), уметь работать с Ехель через 1с ( это намного проще чем первое - да и на форуме любой подскажет ), работа с ФС, и конечно целеустремленность! В противном случае просите чтобы кто-то вам помог и сделал за вас эту обработку.
     
  6. zundey

    zundey Гость

    Я пробую на примере: создаем обработку, далее создаем справочник загрузка, с реквизитами Кол и Цена. На форме справочника отображаем: Код, Наименование, Кол, Цена (то же самое содержит Excel-файл). При записи данных в справочник программа сообщает, что элемент не выбран: "СпЗаг.УстановитьАтрибут("Код",ТекКод);
    {Обработка.Загрузка3.Форма.Модуль(89)}: Не выбран элемент!"
    Получается, что он не видит постоянные реквизиты, т.к. если убрать "добавление постоянных реквизитов" (код и наименование), то кол и цена добавляются. Вопрос: К ПОСТОЯННЫМ РЕКВИЗИТАМ НУЖНО КАК-ТО ПО-ОСОБОМУ ОБРАЩАТЬСЯ??? ЕСЛИ ДА, ТО КАК??? ИЛИ, В ЧЕМ, ВООБЩЕ, ПРОБЛЕМА :blink:

    До меня, примерно доперло, как осуществлять поиск по Excel-файлу (Отбор по каналам), вот только не совсем ясно как создавать документы. Мы проверяем есть ли указаный канал в справочнике каналов, если есть, то нам нужно создать документ с данными по товарам (Наименование, Кол, Цена). Вопрос: КАК ПРОГРАМНО СОЗДАТЬ ДОКУМЕНТ???
    И если мы создали документ мы осуществляем перебор данных по каждому товару (если данные отсутствуют, идем дальше), если данные по товару есть мы должны добавить наименование данного товара в документ из справочника товаров. Вопрос: КАКОЙ КОМАНДОЙ МОЖНО ЗАПОЛНИТЬ НАИМЕНОВАНИЕ ТОВАРА ИЗ СПРАВОЧНИКА В ДОКУМЕНТ, В СООТВЕТСТВИИ С КОДОМ ИЗ Excel-файла???
    И еще вопрос: ЕСЛИ МЫ, НАКОНЕЦ, СОЗДАЛИ ВСЕ ДОКУМЕНТЫ, В КОЛИЧЕСТВЕ КАНАЛОВ из Excel-файла, ТО БУДЕТ ЛИ ИНФОРМАЦИЯ ПО ЭТИМ ДОКУМЕНТАМ ЗАПИСЫВАТЬСЯ В ЖУРНАЛ САМА ИЛИ ЕЕ ТОЖЕ НУЖНО ДОБАВЛЯТЬ ВРУЧНУЮ???
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Документ = СоздатьОбъект("Документ.<Вид документа который нужно создать>") К примеру ПлатежноеПоручение. Какие и как дальше реквизиты нужно заполнять - нужно смотреть по конкретному документу.

    Тут имеет смысл построить запрос, и условием задать что-то типа Где справочник.код= кодизфайла. Если будут резутаты данного запроса - то получим ссылку на нужный товар
     
  8. jcnby

    jcnby Гость

    Вы дали перед этим команду своему справочнику по созданию в нем НОВОГО элемента?


    Можно сделать ТЗ если с запросами туго. ( в ТЗ забить коды, посредствам цикла из ТЗ заполнить документ)
     
  9. zundey

    zundey Гость

    У меня получилось создать документы(да, они сами в журнал записываются!), только мне ошибку выдает: "Значение не представляет агрегатный объект (Код):2".
    И в результате в документ не записывается наименование продукции и с цифрами какой-то хаос!!!
    Вот пример запроса:
    [codebox]ТекстЗап="
    |Период с (НачГода(ТекущаяДата())) по (КонГода(ТекущаяДата()));
    |_Прод = Справочник.Выгрузка.Наименование;
    |Условие(_Прод.Код = ТекКодП); //
    |";//}}ЗАПРОС
    Если ЗапПрод.Выполнить(ТекстЗап)=0 Тогда
    Предупреждение("Не могу выполнить запрос на продукцию");
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    СпПрод .Сортировать();
    Пока ЗапПрод.Группировка("_Прод") = 1 Цикл //Канал для плана
    Если СпПрод.НайтиЗначение(ЗапПрод._Прод)=0 Тогда
    СпПрод.ДобавитьЗначение(ЗапПрод._Прод);
    КонецЕсли;
    КонецЦикла;
    Для k=1 По СпПрод.РазмерСписка() Цикл
    _Прод = СпПрод.ПолучитьЗначение(k);
    КонецЦикла;
    ДокЗаг.Продукция = _Прод;
    ...
    ДокЗаг.Записать();
    ДокЗаг.Провести();[/codebox]
    Мож я что-то не то делаю ?_?

    И еще, я проверяю Excel-файл на отсутствие данных по количеству товара, какую мне написать команду, чтобы данные по этому товару вообще не записывать в документ?

    ЗЫ: Всем спасибо за советы, помогло!
     
  10. Isabela

    Isabela Гость

    и будет выдавать ошибку, ибо
    _Прод = Справочник.Выгрузка.Наименование;
    текст, а не элемент справочника, значит, и кода у него нет

    попробуй так
    |_ПродКОД = Справочник.Выгрузка.Код;
    |Условие(_ПродКОД = ТекКодП);

    А по второму вопросу - ставь простую проверку
    Если Колво > 0 тогда
    Док.НоваяСтрока()
     
  11. zundey

    zundey Гость

    Так мне же нужно из запроса вытаскивать наименование товара, соответствующее условию: "Код товара из справочника"="код товара из файла" :( . Как же тогда писать запрос :( ???
    [codebox]|_Прод = Справочник.Выгрузка.Наименование;
    |_Код = Справочник.Выгрузка.Код;
    |Условие(_Код = ТекКод);
    |Группировка _Прод;[/codebox]
     
  12. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    |_Прод = Справочник.Выгрузка.ТекущийЭлемент;
    |Условие(_Прод.Код = ТекКод);
    |Группировка _Прод;


    А так как у тебя основное представление справочника в виде наименования - то его-то ты и увидишь.
     
  13. zundey

    zundey Гость

    Вот с таким кодом:
    [codebox]...
    Для Ст=3 По Ширина Цикл //проверяем количество каналов в файле Excel
    ТекКодК=СокрЛП(Область.Cells(1,Ст).Text);
    Если (СпКан.НайтиПоКоду(ТекКодК,)=1) И ((Область.Cells(1,Ст).Text)<>"") Тогда
    ДокЗаг = СоздатьОбъект("Документ.Загрузка");
    ДокЗаг.Новый();
    ТекстЗап="
    |Период с (НачГода(ТекущаяДата())) по (КонГода(ТекущаяДата()));
    |_Канал = Справочник.Каналы.ТекущийЭлемент;
    |Условие(_Канал.Код = ТекКодК);
    |Группировка _Канал;
    |";//}}ЗАПРОС
    ...
    ДокЗаг.Канал = _Канал;
    Для Стр=2 По Высота Цикл
    ТекКодП=СокрЛП(Область.Cells(Стр,1).Text);
    Если СпВыг.НайтиПоКоду(ТекКодП,)=0 Тогда
    Сообщить("Не найдена продукция по коду: "+ТекКодП,"!");
    Продолжить;
    КонецЕсли;
    ТекКол=Число(Область.Cells(Стр,сч1).Text);
    ТекЦена=Число(Область.Cells(Стр,сч2).Text);

    Если (ТекКол>0) ИЛИ (ТекКол<>"") Тогда
    ДокЗаг.НоваяСтрока();
    ТекстЗап="
    |Период с (НачГода(ТекущаяДата())) по (КонГода(ТекущаяДата()));
    |_Прод = Справочник.Выгрузка.ТекущийЭлемент;
    |Условие(_Прод.Код = ТекКодП); //
    |Группировка _Прод;
    |";//}}ЗАПРОС
    ...
    ДокЗаг.УстановитьАтрибут("Кол",ТекКол);
    ДокЗаг.УстановитьАтрибут("Цена",ТекЦена);
    Попытка
    ДокЗаг.Записать();
    ДокЗаг.Провести();
    Исключение;
    Сообщить("Ошибка записи: "+ОписаниеОшибки(),"!");
    КонецПопытки;
    ...[/codebox]
    у меня получается такой результат:
    док1: 1.JPG
    док2: 2.JPG
    док3: 3.JPG
    из чего добавляю: 4.JPG
    Ну вот что не так-то :)
     
  14. kaa

    kaa Гость

    [codebox] Прайс=СоздатьОбъект("Excel.Application");
    Попытка
    Прайс.Application.Workbooks.Open(СокрЛП(Файл));
    Исключение
    Предупреждение("Ненайден файл!",20);
    СтатусВозврата(0);
    КонецПопытки;

    СпКан = СоздатьОбъект("Справочник.Каналы");
    ДокЗаг = СоздатьОбъект("Документ.Загрузка");

    Для Ст=3 По Ширина Цикл
    Если ПустоеЗначение(Строка(Прайс.ActiveSheet.Cells(1,Ст).Value))=1 Тогда
    Продолжить;
    КонецЕсли;
    Если СпКан.НайтиПоКоду(СокрЛП(Прайс.ActiveSheet.Cells(1,Ст).Value))=0 Тогда
    Сообщить("блабалабала","!!!");
    Продолжить;
    КонецЕсли;
    //Кстати надо еще уточнить код числовой или тестовый и подчиненный справочник или нет!!!
    ДогЗаг.Новый();
    ДогЗаг.Канал = СпКан.ТекущийЭлемент();
    Для Стр=2 По Высота Цикл

    Если СпВыг.НайтиПоКоду(СокрЛП(Прайс.ActiveSheet.Cells(Стр,1).Value))=0 Тогда
    Сообщить("Не найдена продукция по коду: "+СокрЛП(Прайс.ActiveSheet.Cells(Стр,1).Value),"!");
    Продолжить;
    КонецЕсли;

    Если Число(Прайс.ActiveSheet.Cells(Стр,Ст).Value)=0 Тогда
    Продолжить;
    КонецЕсли;
    ДогЗаг.НоваяСтрока();
    ДогЗаг.Товар = СпВыг.ТекущийЭлемент();
    ДогЗаг.Кол = Число(Прайс.ActiveSheet.Cells(Стр,Ст).Value);
    ДогЗаг.Цена= Число(Прайс.ActiveSheet.Cells(Стр,Ст+1).Value);
    КонецЦикла;
    Если ДогЗаг.КоличествоСтрок()>0 Тогда
    ДогЗаг.Записать();
    Попытка
    ДогЗаг.Провести();
    Исключение
    Сообщить(""+ОписаниеОшибки());
    КонецПопытки;
    КонецЕсли;
    КонецЦикла;
    //закрыть файл
    флагцикла = 0;
    СтрК = СокрЛП(Файл);
    Пока флагцикла = 0 Цикл
    ПозСим = Найти(СтрК,"\");
    Если ПозСим = 0 Тогда
    флагцикла = 1;
    Иначе
    СтрК = Сред(СтрК,ПозСим+1);
    КонецЕсли;
    КонецЦикла;
    Прайс.Windows(СтрК).Close(0);[/codebox]
     
  15. zundey

    zundey Гость

    ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ, все получилось :) !
    Справочники не подчиненные. А код у одного числовой, а у другого текстовый. На что это влияет? На форму записи ...Cells(Стр,1).Value или Text?
     
  16. kaa

    kaa Гость

    В одном случае полученый результат надо на всякий случай преабразовывать в число, в другом в текст
     
  17. zundey

    zundey Гость

    Это значит, где-то данные заносить как текст : ...СокрЛП(Область.Cells(Стр,1).Text); ?
    А где-то как число: ...Число(Область.Cells(Стр,1).Text); ?
    А, вообще, какая разница м/д Value и Text? (Типа, в 1ом мы принимаем содержимое ячейки в любом формате, а во 2ом видим текстовый?)

    О, у меня еще вопросик!!! Мне требуется защитить паролем лист в Excel-файле, но, при этом, оставить некоторую область доступной для редактирования. Для определения диапазона заполнения таблицы я использую CurrentRegion. На что 1С мне сообщает: "Область = Книга.WorkSheets(НЛ).Cells.CurrentRegion;
    {Обработка.Загрузка4.Форма.Модуль(42)}: Microsoft Office Excel: Нельзя использовать данную команду на защищенном листе."
    Можно ли это как-нить обойти?

    И, еще, как мне проверку поставить, что в данной книге (Excel-файле) содержится загружаемый лист?
     
  18. Isabela

    Isabela Гость

  19. kaa

    kaa Гость

    Посмотреть вложение _________________.rar Посмотри там есть очень много, это я для одной конторы делал (выгрузка загрузка документа) даже с комментариями, что будет непонятно спрашивай
     
Загрузка...

Поделиться этой страницей