|
Импорт Контрагентов из Екселя в 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) Я понял ! Спасибо большое )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |