• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы zundey
  • Дата начала
Z

zundey

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

evgenyatam

а какая у вас платформа? на семерке я не делел такого, а на восьмерке могу ответить завтра.

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

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

Вложения

  • MSExcel.rar
    2,6 КБ · Просмотры: 142
K

KiR

Да можно все это реализовать на любой платформе. Повозиться конечно прийдется - не без этого. Другое дело есть ли навыки работы с встроенным языком (желательно даже опыт)?
 
Z

zundey

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

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

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

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

Другое дело есть ли навыки работы с встроенным языком (желательно даже опыт)?
Навыка и опыта-то нет :), ВОТ СИЖУ НАБИРАЮСЬ!

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

jcnby

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


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


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


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


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

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


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

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

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


ВНИМАНИЕ ВОПРОСЫ:
1. Реально ли, вообще, занести эти данные в 1С в так виде?
2. Может у кого имеются идеи, как такое реализовать?
3. Если идеи все ж у кого появятся, не поделится ли он со мной)?!
Заранее ОГРОМНОЕ спасибо!!!

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

zundey

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

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

KiR

КАК ПРОГРАМНО СОЗДАТЬ ДОКУМЕНТ???
Документ = СоздатьОбъект("Документ.<Вид документа который нужно создать>") К примеру ПлатежноеПоручение. Какие и как дальше реквизиты нужно заполнять - нужно смотреть по конкретному документу.

КАКОЙ КОМАНДОЙ МОЖНО ЗАПОЛНИТЬ НАИМЕНОВАНИЕ ТОВАРА ИЗ СПРАВОЧНИКА В ДОКУМЕНТ, В СООТВЕТСТВИИ С КОДОМ ИЗ Excel-файла???

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

jcnby

При записи данных в справочник программа сообщает, что элемент не выбран: "СпЗаг.УстановитьАтрибут("Код",ТекКод);

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


КАКОЙ КОМАНДОЙ МОЖНО ЗАПОЛНИТЬ НАИМЕНОВАНИЕ ТОВАРА ИЗ СПРАВОЧНИКА В ДОКУМЕНТ, В СООТВЕТСТВИИ С КОДОМ ИЗ Excel-файла???

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

zundey

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

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

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

Isabela

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

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

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

zundey

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

puh14

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


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

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
Ну вот что не так-то :)
 
K

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]
 
Z

zundey

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

kaa

А код у одного числовой, а у другого текстовый. На что это влияет? На форму записи ...Cells(Стр,1).Value или Text?
В одном случае полученый результат надо на всякий случай преабразовывать в число, в другом в текст
 
Z

zundey

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!