|   |   | 
| 
 | Импорт Контрагентов из Екселя в 1с | ☑ | ||
|---|---|---|---|---|
| 0
    
        V1rus93 15.08.19✎ 17:30 | 
        Добрый вечер ! Вот в первые столкнулся с данной возможностью 1с и уже пару дней мучаюсь, не могу всё красиво оформить. Мне надо создать контрагентов в справочники и заполнить их данными из ексель файла. Так же создать в РегистрСведений.КонтактнаяИнформация данные контрагентов. И создать договора контрагентов.
 Процедура КнопкаВыполнитьНажатие(Кнопка) //Номер листа в книге Excel для получения данных НомерЛиста = 1; ИмяФайла = СокрЛП(ИмяГлавногоФайла); //Пытаемся подключиться к Excel Попытка Excel = новый COMОбъект("Excel.Application"); Исключение Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel."); КонецПопытки; //Подключились удачно, открываем файл Excel.Workbooks.Open(ИмяФайла); //Открываем необходимый лист Excel.Sheets(НомерЛиста).select(); //Получим количество строк и колонок. //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count; ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13); Иначе ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; тзКонтр = Новый ТаблицаЗначений; тзКонтр.Колонки.Добавить("ПолноеНаименование"); тзКонтр.Колонки.Добавить("КодПоЭГРПОУ"); тзКонтр.Колонки.Добавить("Регион"); тзКонтр.Колонки.Добавить("Телефон"); тзКонтр.Колонки.Добавить("Почта"); тзКонтр.Колонки.Добавить("Код"); тзКонтр.Колонки.Добавить("Контакт"); тзКонтр.Колонки.Добавить("Наименование"); тзКонтр.Колонки.Добавить("Валюта"); тзКонтр.Колонки.Добавить("СпособОплаты"); Для нс = 2 по ФайлСтрок Цикл НоваяСтрока = тзКонтр.Добавить(); НоваяСтрока.Код = Excel.Cells(НС, 1).Value; НоваяСтрока.Наименование = Excel.Cells(НС, 3).Value; НоваяСтрока.ПолноеНаименование = Excel.Cells(НС, 19).Value; НоваяСтрока.КодПоЭГРПОУ = Excel.Cells(НС, 16).Value; НоваяСтрока.Регион = Excel.Cells(НС, 8).Value; НоваяСтрока.Телефон = Excel.Cells(НС, 10).Value; НоваяСтрока.Почта = Excel.Cells(НС, 11).Value; НоваяСтрока.Контакт = Excel.Cells(НС, 12).Value; НоваяСтрока.Валюта = Excel.Cells(НС, 15).Value; НоваяСтрока.СпособОплаты = Excel.Cells(НС, 4).Value; КонецЦикла; // Закрыть COM соединение для экономии памяти Excel.Application.Quit(); //поместить считанные данные в форму обработки ЭлементыФормы.ТабличноеПоле1.Значение = тзКонтр; ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки(); мФорма = ПолучитьФорму(Справочники.Контрагенты.ПолучитьФормуНовогоЭлемента()); СозданиеКонтрагента(мФорма); мСообщение = Новый СообщениеПользователю(); мСообщение.Текст = "Контрагенты загружены"; мСообщение.Сообщить(); КонецПроцедуры Процедура СозданиеКонтрагента (мФорма) ТекстОшибок = ""; Для Каждого СтрокаТаблицы из ТабличноеПоле1 Цикл НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент(); НовыйОбъект.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели"); НовыйОбъект.Наименование = СтрокаТаблицы.Наименование; НовыйОбъект.НаименованиеПолное = СтрокаТаблицы.ПолноеНаименование; Если НовыйОбъект.ЮрФизЛицо = СтрДлина("12345678") И НовыйОбъект.ЮрФизЛицо <> Неопределено Тогда НовыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо; Иначе НовыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо; КонецЕсли; НовыйОбъект.Покупатель = Истина; НовыйОбъект.Регион = Справочники.Регионы.НайтиПоКоду("000000001"); НовыйОбъект.Код = СтрокаТаблицы.Код; НовыйОбъект.КодПоЕДРПОУ = СтрокаТаблицы.КодПоЭГРПОУ; Попытка НовыйОбъект.Записать(); Исключение ТекстОшибок = ТекстОшибок + ?(ТекстОшибок = "", "", Символы.ПС); ТекстОшибок = ТекстОшибок + "Ошибка создания контрагента '" + СтрокаТаблицы.Наименование + "'"; Продолжить; КонецПопытки; КонтрагентСсылка = НовыйОбъект.ЭтотОбъект; МоеЗаполнение = Новый Структура("Представление,Тип,Вид,Объект", СтрокаТаблицы.Телефон, Перечисления.ТипыКонтактнойИнформации.Телефон, Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента, КонтрагентСсылка); Мен_Записи = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи(); //СоздатьНаборЗаписей(); // ЗаполнитьЗначенияСвойств(Мен_Записи, МоеЗаполнение); Мен_Записи.Объект = КонтрагентСсылка; Мен_Записи.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; Мен_Записи.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента; Мен_Записи.Поле1 = СтрокаТаблицы.Телефон; НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); НовыйДоговор.Организация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяОрганизация"); НовыйДоговор.Владелец = КонтрагентСсылка; НовыйДоговор.Наименование = "Основной договор"; НовыйДоговор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом; НовыйДоговор.ВалютаВзаиморасчетов = СтрокаТаблицы.Валюта; НовыйДоговор.ВестиПоДокументамРасчетовСКонтрагентом = Истина; НовыйДоговор.ВестиПоДокументамРасчетовСКонтрагентомРегл = Истина; НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем; КонецЦикла; Если ТекстОшибок <> "" Тогда мСообщение = Новый СообщениеПользователю(); мСообщение.Текст = ТекстОшибок; мСообщение.Сообщить(); КонецЕсли; | |||
| 1
    
        V1rus93 15.08.19✎ 17:33 | 
        Проблема в следующем: Не правильно работает Перечисления ЮрФизЛицо. Я хочу чтобы был ФизЛицо если 8 чисел или пусто, а остальное ЮрЛицо
 И не создаются Договора и Данные в регистр. Контрагенты создаются. | |||
| 2
    
        Маленький Вопросик 15.08.19✎ 17:34 | 
        за тебя написать все?     | |||
| 3
    
        V1rus93 15.08.19✎ 17:35 | 
        (2) Да нет, просто подсказать в чем ошибка. И если не сложно подкорректировать код. Я только начинаю изучать и с этой функцией впервые столкнулся     | |||
| 4
    
        Builder 15.08.19✎ 17:36 | 
        Если НовыйОбъект.ЮрФизЛицо = СтрДлина("12345678") ....
 Это шедеврально! | |||
| 5
    
        V1rus93 15.08.19✎ 17:37 | 
        (4) Спасибо) Я старался !     | |||
| 6
    
        mikecool 15.08.19✎ 17:38 | 
        использовать загрузку из табличного документа с ИТС
 дописать немного правила для нее профит | |||
| 7
    
        Builder 15.08.19✎ 17:38 | 
        НовыйОбъект.ЮрФизЛицо = СтрДлина("12345678") 
 Может надо количество цифр в ИНН проверять? | |||
| 8
    
        dka80 15.08.19✎ 17:40 | 
        "Я хочу чтобы был ФизЛицо если 8 чисел или пусто"
 Приведи пример реальных данных. Я подозреваю, что речь идет об ИНН, но ты ИНН нигде не загружаешь в таблицу значений тзКонтр | |||
| 9
    
        Builder 15.08.19✎ 17:41 | 
        НовыйДоговор - надо записать, нигде не вижу записи!     | |||
| 10
    
        dka80 15.08.19✎ 17:42 | 
        (9) чтобы записать договор, нужно сначала контрагента записать, а у нас вот это КонтрагентСсылка = НовыйОбъект.ЭтотОбъект;     | |||
| 11
    
        V1rus93 15.08.19✎ 17:42 | 
        (8) Код ЕГРПОУ
 2906810394 20472557 Вот разница. | |||
| 12
    
        V1rus93 15.08.19✎ 17:44 | 
        (9) Исправил !     | |||
| 13
    
        V1rus93 15.08.19✎ 17:44 | 
        (10)  Попытка 
 НовыйОбъект.Записать(); | |||
| 14
    
        dka80 15.08.19✎ 17:45 | 
        Если СтрДлина(СтрокаТаблицы.КодПоЭГРПОУ) = 8 ИЛИ ПустаяСтрока(СтрокаТаблицы.КодПоЭГРПОУ) Тогда  НовыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;     | |||
| 15
    
        Builder 15.08.19✎ 17:45 | 
        (11) Ну так и проверяй длину КодПоЭГРПОУ !
 Если СтрДлина(СокрЛП(КодПоЭГРПОУ))=8 Тогда | |||
| 16
    
        dka80 15.08.19✎ 17:45 | 
        (13) КонтрагентСсылка = НовыйОбъект.Ссылка     | |||
| 17
    
        V1rus93 15.08.19✎ 17:48 | 
        (16) Вопрос почему ссылка ? Если в форме элемента справочника контрагенты мы на закладку контакты (где у нас контактная инфа) передаем объект, а не ссылку.     | |||
| 18
    
        GreyK 15.08.19✎ 17:49 | 
        (0) А зачем вы засунули контрагентов в эксель?     | |||
| 19
    
        V1rus93 15.08.19✎ 17:51 | 
        (18) Это не я, а клиент. Там более 1000 наименований и вводить это вручную сложно. Поэтому вот пытаюсь обработкой. Они то создаются и всё норм. Надо только разобраться с контактной информацией и договорами.     | |||
| 20
    
        dka80 15.08.19✎ 17:52 | ||||
| 21
    
        V1rus93 15.08.19✎ 18:14 | 
        Спасибо всем ! буду разбираться. Хотя бы уже ошибки выводит и есть с чем работать     | |||
| 22
    
        V1rus93 15.08.19✎ 18:28 | 
        Всё заработало, остался последний момент. Как добавить к одному контрагенту несколько данных в регистрсведений.контактнаяинформация
 В моем коде оно добавляет только телефон. А как сделать добавление разных типов и видов данных на одного контрагента? | |||
| 23
    
        Михаил Козлов 15.08.19✎ 18:37 | 
        (22) 1. Создаете набор записей регистра (вне цикла). 
 2. Устанавливаете отбор по контрагенту (уже записанному, чтобы была Ссылка). Чистите его. 3. По каждому виду контактной информации добавляете в это набор записи с нужными значениями (тип КИ, вид КИ, представление). 4. Записываете набор записей. | |||
| 24
    
        V1rus93 15.08.19✎ 18:39 | 
        (23) Я понял ! Спасибо большое )     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |