|
Обработка для Новых контрагентов из Экселя | ☑ | ||
---|---|---|---|---|
0
DEaD_EGOR
04.04.16
✎
12:02
|
Народ, пишу обработку... Столкнулся с проблемой...
Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. КонецПроцедуры Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Заголовок = "Выберите файл"; Если ДиалогВыбора.Выбрать() Тогда ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры Процедура ПрочитатьНажатие(Элемент) //подключаемся к эксел Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайла); Состояние("Обработка файла Microsoft Excel..."); Исключение Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка //Открываем необходимый лист Excel.Sheets(1).Select(); // лист 1, по умолчанию Исключение //Закрываем Excel Excel.ActiveWorkbook.Close(); Excel = 0; Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!"); ОтменитьТранзакцию(); Возврат; КонецПопытки; //Получим количество строк и колонок. //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count; ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 27); Иначе ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; //создание колонок табличного документа ТабЗнач = Новый ТаблицаЗначений; ТабЗнач.Колонки.Добавить("Завод"); ТабЗнач.Колонки.Добавить("Имя"); ТабЗнач.Колонки.Добавить("НазваниеФирмы"); ТабЗнач.Колонки.Добавить("КППОбъекта"); ТабЗнач.Колонки.Добавить("КодРегиона"); ТабЗнач.Колонки.Добавить("Регион"); ТабЗнач.Колонки.Добавить("ПИндекс"); ТабЗнач.Колонки.Добавить("Город"); ТабЗнач.Колонки.Добавить("Улица"); ТабЗнач.Колонки.Добавить("НомерДома"); ТабЗнач.Колонки.Добавить("Дополнение"); ТабЗнач.Колонки.Добавить("Телефон"); //считываем первую строку и генерируем колонки Для НС = 2 По ФайлСтрок Цикл НоваяСтрока = ТабЗнач.Добавить(); НоваяСтрока.Завод = Excel.Cells(НС, 1).Value; НоваяСтрока.Имя = Excel.Cells(НС, 2).Value; //Это грузополучатели-торговые точки НоваяСтрока.НазваниеФирмы = (Excel.Cells(НС, 4).Value); //это контрагенты - плательщики НоваяСтрока.КППОбъекта = (Excel.Cells(НС, 9).Value); НоваяСтрока.КодРегиона = Excel.Cells(НС, 12).Value; НоваяСтрока.Регион = Excel.Cells(НС, 13).Value; НоваяСтрока.ПИндекс = Excel.Cells(НС, 14).Value; НоваяСтрока.Город = Excel.Cells(НС, 15).Value; НоваяСтрока.Улица = Excel.Cells(НС, 16).Value; НоваяСтрока.НомерДома = Excel.Cells(НС, 17).Value; НоваяСтрока.Дополнение = Excel.Cells(НС, 18).Value; //проверять на наличие НоваяСтрока.Телефон = Excel.Cells(НС, 19).Value; КонецЦикла; // Закрыть COM соединение для экономии памяти Excel.Application.Quit(); //поместить считанные данные в форму обработки ЭлементыФормы.Таблица.Значение = ТабЗнач; ЭлементыФормы.Таблица.СоздатьКолонки(); мФорма = ПолучитьФорму (Справочники.Контрагенты.ПолучитьФормуНовогоЭлемента()); СозданиеКонтрагента(мФорма); мСообщение = Новый СообщениеПользователю(); мСообщение.Текст = "Контрагенты загружены"; мСообщение.Сообщить(); КонецПроцедуры Процедура СозданиеКонтрагента (мФорма) Для Каждого СтрокаТаблицы из Таблица Цикл НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент(); НовыйОбъект.ГоловнойКонтрагент = СтрокаТаблицы.НазваниеФирмы; НовыйОбъект.Наименование = СтрокаТаблицы.Имя; НовыйОбъект.НаименованиеПолное = СтрокаТаблицы.Имя; НовыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо; НовыйОбъект.КПП = СтрокаТаблицы.КППОбъекта; Попытка НовыйОбъект.Записать(); Исключение Продолжить; КонецПопытки; КонтагентСсылка = НовыйОбъект.Ссылка; МоеЗаполнение = Новый Структура("Представление,Тип,Вид",Строка(СтрокаТаблицы.ПИндекс) + " " + СтрокаТаблицы.Регион + " " + СтрокаТаблицы.Город + " " + СтрокаТаблицы.Улица + " " + СтрокаТаблицы.НомерДома,Перечисления.ТипыКонтактнойИнформации.Адрес,Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации); НЗ_КИ = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); НЗ_КИ.Отбор.Объект.Значение = КонтагентСсылка; НЗ_КИ.Отбор.Объект.Использование = Истина; НЗ_КИ.Отбор.Тип.Значение = Перечисления.ТипыКонтактнойИнформации.Адрес; НЗ_КИ.Отбор.Тип.Использование = Истина; НЗ_КИ.Отбор.Вид.Значение = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента; НЗ_КИ.Отбор.Вид.Использование = Истина; НЗ_КИ.Прочитать(); НаборЗаписей = НЗ_КИ.Выгрузить(); Для Каждого СтрокаТаблицы Из Таблица Цикл НЗ = НаборЗаписей.Добавить(); //НЗ.Период = СтрокаТаблицы.?; // дата хранения адреса НЗ.Объект = СтрокаТаблицы.Имя; // ссылка на владельца адреса //НЗ.Тип = СтрокаТаблицы.?; // ссылка на тип КИ //НЗ.Вид = СтрокаТаблицы.?; // ссылка на вид КИ НЗ.Поле1 = СтрокаТаблицы.ПИндекс; НЗ.Поле2 = СтрокаТаблицы.Регион; //НЗ.Поле3 = СтрокаТаблицы.?; //район НЗ.Поле4 = СтрокаТаблицы.Город; //НЗ.Поле5 = СтрокаТаблицы.?; //село если не город НЗ.Поле6 = СтрокаТаблицы.Улица; //НЗ.Поле7 = СтрокаТаблицы.Дополнение;//если не определено, тогда пустая строка НЗ.Поле8 = СтрокаТаблицы.НомерДома; //НЗ.Поле9 = СтрокаТаблицы.?; //квартира //НЗ.Поле10 = СтрокаТаблицы.?; //не заполнено в оригинале НЗ.Представление = МоеЗаполнение.Представление; //НЗ.Комментарий = СтрокаТаблицы.?; //НЗ.ФорматАдреса = Российский; //как записать правильно? НоваяЗаписьНабора = НаборЗаписей.Добавить(); НоваяЗаписьНабора.Объект = КонтагентСсылка; НоваяЗаписьНабора.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; НоваяЗаписьНабора.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента; НоваяЗаписьНабора.Представление = МоеЗаполнение.Представление; НЗ_КИ.Загрузить(НаборЗаписей); НЗ_КИ.Записать(Истина);// если 'ИСТИНА' - будет замещение данных //НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); //НовыйДоговор.Организация = Справочники.Организации.НайтиПоКоду(""); //по какому коду? //НовыйДоговор.Владелец = НовыйОбъект.ссылка; //НовыйДоговор.Наименование = "Основной договор"; //НовыйДоговор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом; //НовыйДоговор.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду(643); //НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем; //как устанавливать, если пятёрочка-грузополучатель? //Попытка // НовыйДоговор.Записать(); //Исключение //КонецПопытки; КонецЦикла; КонецЦикла; КонецПроцедуры Функция ПроверитьКонтрагента (Наименование) Контр = Справочники.Контрагенты.НайтиПоНаиенованию(Наименование); Если Контр <> Справочники.Контрагенты.ПустаяСсылка() Тогда Возврат Контр; КонецЕсли; КонецФункции; В таком виде Конт.инфа не заполняется.... ЧЯДНТ? |
|||
1
Господин ПЖ
04.04.16
✎
12:08
|
мизда - лучший отладчик
|
|||
2
DEaD_EGOR
04.04.16
✎
12:12
|
(1) да как раз в отладчике и дело((( запускаю отладку, если всё как в коде выше, выдаёт ошибку при записи.... смотрю значения НаборЗаписей и НЗ_КИ... и тут начинается для меня непонятка. если строки НоваяЗаписьНабора закоменчены-то не заполняются поля Объект, тип и вид. если незакоменчены-то появляются 2 строки.. в одной по отладке адрес без заполенных тех полей, в другой-заполненные поля но без адреса...
|
|||
3
Господин ПЖ
04.04.16
✎
12:14
|
1с не твое. бери метлу в руки
|
|||
4
DEaD_EGOR
04.04.16
✎
12:15
|
(3) спс за совет новичку.. а я всё думал, почему у меня не получается?.. оказывается решение то вот оно! на поверхности!!
|
|||
5
ДенисЧ
04.04.16
✎
12:16
|
"выдаёт ошибку при записи"
Текст ошибки мы должны протелепать? А сколько будет приз? |
|||
6
DEaD_EGOR
04.04.16
✎
12:17
|
(5) {Форма.Форма.Форма(155)}: Ошибка при вызове метода контекста (Записать)
НЗ_КИ.Записать(Истина);// если 'ИСТИНА' - будет замещение данных по причине: Не удалось записать: "Контактная информация"! Прошу прощения, пока дополнял пост, отвлекли.. |
|||
7
ДенисЧ
04.04.16
✎
12:19
|
просто не удалось? Ой, почему я такой весь из себя Станиславский... И Немирович одновременно, который Данченко...
|
|||
8
DEaD_EGOR
04.04.16
✎
12:20
|
(7) я скопировал полный текст ошибки..
|
|||
9
CountR
04.04.16
✎
12:43
|
(0) Иногда все таки миста веселит!
Давай сюда весь код из конфигурации, а то так непонятно! |
|||
10
DDwe
04.04.16
✎
12:49
|
(0) Пользуемся отладчиком, смотрим внимательно, долго думаем. Наступает просветление, исправляем ошибки и все работает.
|
|||
11
Rie
04.04.16
✎
12:52
|
(0) Вот это особо радует:
НЗ_КИ.Загрузить(НаборЗаписей); НЗ_КИ.Записать(Истина)// если 'ИСТИНА' - будет замещение данных Тем более в цикле. |
|||
12
DEaD_EGOR
04.04.16
✎
12:53
|
(9) я в (0) выложил весь код(((( Я уже и правда начинаю сомневаться, ту ли я профессию выбрал?((
(10) Не поверишь, я уже 2й день думаю и варианты перебираю(( (11) в этом я разобрался, цикл лишний убрал.. |
|||
13
Rie
04.04.16
✎
12:54
|
Первая строка сообщения (12) несколько противоречит третьей.
|
|||
14
Rie
04.04.16
✎
12:55
|
+(13) Заодно и таблицу значений убери.
Открой "Справку" в Конфигураторе и посмотри, какие методы есть у набора записей. Ну а насчёт того, чтобы книжки вумные почитать - об этом молчу, молчу, молчу. |
|||
15
DDwe
04.04.16
✎
12:56
|
(12) Не нужно перебирать варианты и гадать, нужно увидеть ошибку. Далее по тексту.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |