Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Загрузка номенклатуры и УКТВЭД из XLS в Альфа-Авто          
bizisoft Подменю пользователя
сообщение 08.01.14, 14:33
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Здравствуйте.
Используется:
1С:Предприятие 8.2 (8.2.14.540)
Типовое отраслевое решение
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1"
Разработка: "1С-Рарус" Локализация: "АБИ Украина" (4.1.11.01)

Потребовалось из XLS файла подгрузить номенклатуру с УКТВЭД в Альфа-авто.
Пробовал стандартной обработкой "Загрузка данных в справочники или в табличную часть", что как-то не сложилось с этой обработкой - не грузит почему-то.

Написал свою, но столкнулся с трудностью, которая заключается в следующем.
Не получается загружать УКТВЭД, т.к. что-то тма замудрено.
Если вручную добавлять позицию товара, нужно заполнить карточку товара, сохранить, только после этого поле выбора ГТД и УКТВЭД станет активным.
Ладно допустим это решаемо.
Дальше жму кнопку и открывается справочник ГТД в котором нужно указать номер ГТД (xxxx/yyyyy/zzzz), дату и выбрать УКТВЭД.
Нажимаю для выбора УКТВЭД открывается справочник УКТВЭД в который добавляю номер УКТВЭД, сохраняю, выбираю.
В ГТД жму в Наименовании сгенерировать - формируется наименование вида (xxxx/yyyyy/zzzz от <дата> <номер УКТВЭД>), потом жму ОК и только после этого в реквезите УКТВЭД товара отображается его наименование.

Например в 1С8.2. Бухгалтерия нет таких заморочек с ГТД (его там вообще нет) и заполнение УКТВЭД сводится к обычному заполнению справочника УКТВЭД.

Подскажите пожалуйста, как можно это организовать программно.
Т.е. вначале я добавляю позицию товара в Номенклатуру, сохраняю, после на его основании создаю ГТД и к нему УКТВЭД, но как это организовать ума не приложу.

Спасибо.
С Уважением, Дмитрий.


 ! 

Правила, п. 4,5
 


Сообщение отредактировал logist - 08.01.14, 15:33


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Ardi Подменю пользователя
сообщение 08.01.14, 15:44
Сообщение #2

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Переделайте систему как вам удобно
(Тоесть выржте гтд и т.д.) так как гтд сейчас не нужна.
Если есть более свкжая альфаавто - то смотрите в ней.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

bizisoft Подменю пользователя
сообщение 15.01.14, 13:24
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Как говорится "отпустил" проблему и через день пришло озарение.
Вот что из этого получилось.
//------------------------------------------------------------------------------------------
Функция НайтиСоздатьНоменклатураГТД(ТаможенныйКод, Владелец, Страна)            
    НомГТД = Справочники.НоменклатураГТД;
    НайденНомГТД = НомГТД.НайтиПоНаименованию(ТаможенныйКод,,Владелец,Владелец);
    Если НайденНомГТД.Пустая() и ЗначениеЗаполнено(ТаможенныйКод) Тогда
        Попытка
            НовыйГТД = НомГТД.СоздатьЭлемент();
            НовыйГТД.Владелец = Владелец;
            //НовыйГТД.НомерГТД = НайтиСоздатьГТД(Владелец, Страна);    // т.к. пока не используется, но сделал на всякий случай (на работоспособность не проверял)
            НовыйГТД.КодУКТВЭД = НайтиСоздатьКТВЭД(ТаможенныйКод);
            НовыйГТД.СформироватьНаименование();
            НовыйГТД.УстановитьНовыйКод();    
            НовыйГТД.Записать();
            Возврат НовыйГТД.Ссылка;
        Исключение
            Сообщить("ОШИБКА добавления Номенклатура ГТД: """ + ТаможенныйКод + """ | " + ОписаниеОшибки());
        //    Возврат НайденНомГТД.Пустая();
        КонецПопытки;    
    Иначе        
        Возврат НайденНомГТД.Ссылка;
    КонецЕсли;        
КонецФункции
//------------------------------------------------------------------------------------------
Функция НайтиСоздатьГТД(Владелец, Страна)
    НайденаГТД = Справочники.ГТД.НайтиПоНаименованию(СокрЛП(Владелец));
    Если НайденаГТД.Пустая() и ЗначениеЗаполнено(Владелец) Тогда    
        Попытка
            НовыйГТД = Справочники.ГТД.СоздатьЭлемент();
            НовыйГТД.УстановитьНовыйКод();
            НовыйГТД.Наименование = Владелец;
            НовыйГТД.Страна = Справочники.КлассификаторСтранМира.НайтиПоНаименованию(Страна);
            НовыйГТД.Дата = ТекущаяДата();
            НовыйГТД.Записать();
            Возврат НовыйГТД.Ссылка;
        Исключение
            Сообщить("ОШИБКА добавления ГТД: """ + Владелец + """ | " + ОписаниеОшибки());
            //Возврат НайденаГТД.Пустая();
        КонецПопытки;
    Иначе
        Возврат НайденаГТД.Ссылка;    
    КонецЕсли;                        
КонецФункции
//------------------------------------------------------------------------------------------
Функция НайтиСоздатьКТВЭД(ТаможенныйКод)           
    НайденКодУКТВЭД = Справочники.КлассификаторУКТВЭД.НайтиПоКоду(СокрЛП(ТаможенныйКод));
    Если НайденКодУКТВЭД.Пустая()и ЗначениеЗаполнено(ТаможенныйКод) Тогда
        Попытка
            НовыйКодУКТВЭД = Справочники.КлассификаторУКТВЭД.СоздатьЭлемент();             
            НовыйКодУКТВЭД.Код = СокрЛП(ТаможенныйКод);
            НовыйКодУКТВЭД.Наименование = СокрЛП(ТаможенныйКод);
            НовыйКодУКТВЭД.НаименованиеПолное = СокрЛП(ТаможенныйКод);
            НовыйКодУКТВЭД.Записать();
            Возврат НовыйКодУКТВЭД.Ссылка;
        Исключение
            Сообщить("ОШИБКА добавления УКТВЭД: """ + ТаможенныйКод + """ | " + ОписаниеОшибки());
            //Возврат НайденКодУКТВЭД.Пустая();
        КонецПопытки;
    Иначе
        Возврат НайденКодУКТВЭД.Ссылка;  
    КонецЕсли;            
КонецФункции
//--------------------------------------------------------------------------------------------------------------
Функция НайтиПроизводителя(Производитель)   // В xls есть столбец с производителем
    НайденПроизводитель = Справочники.Производители.НайтиПоНаименованию(СокрЛП(Производитель));
    Если НайденПроизводитель.Пустая() = Ложь Тогда
        Возврат НайденПроизводитель.Ссылка;
    Иначе        
        Возврат НайденПроизводитель.Пустая();
    КонецЕсли;           
КонецФункции
//--------------------------------------------------------------------------------------------------------------
Процедура КнопкаВыполнитьНажатие(Кнопка)
    СтандартнаяОбработка=ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл";
    Диалог.ПолноеИмяФайла = "";
    Фильтр = "Excel (*.xls)|*.xls";
    Диалог.Фильтр = Фильтр;
        Диалог.МножественныйВыбор = Ложь;
    Диалог.Каталог = "";
    Если Диалог.Выбрать() Тогда                
        ПутьКДаннымXLS = Диалог.ПолноеИмяФайла;
        Excel = Новый COMОбъект("Excel.Application");   //создаем объект COMОбъект отвечает за работу с форматом XLS
        Excel.Application.Workbooks.Open(ПутьКДаннымXLS);     //Открываем файл XLS в переменной ПутьКДаннымXLS путь к файлу        
        ЛистExcel= Excel.Sheets(1);  //Подключаемся к странице. функция получения листа Sheets(«указываем номер листа»);        
        // Определяем число строк на листе
        Строк = Excel.Cells.CurrentRegion.Rows.Count;
        ЭлементыФормы.ИндикаторВыполнения.МинимальноеЗначение = 0;
        ЭлементыФормы.ИндикаторВыполнения.МаксимальноеЗначение = Строк-НомерНачальнойСтроки;
        //Перебираем строки в цикле с помощью функции Cells(«номер строки», «номер колонки») и сразу получаем значение ячейки Value    
        Для Строка=НомерНачальнойСтроки По Строк Цикл          
            ПерНомКаталог = ЛистExcel.Cells(Строка, 1).Value;
            ПерНомАльтернатива = ЛистExcel.Cells(Строка, 2).Value;
            ПерНомКорейский = ЛистExcel.Cells(Строка, 3).Value;
            ПерНаименование = ЛистExcel.Cells(Строка, 4).Value;
            ПерАнглНаименование = ЛистExcel.Cells(Строка, 6).Value;
            ПерУкрНаименование = ЛистExcel.Cells(Строка, 7).Value;
            ПерМарка = ЛистExcel.Cells(Строка, 8).Value;
            ПерМодель = ЛистExcel.Cells(Строка, 9).Value;
            ПерБренд = ЛистExcel.Cells(Строка, 10).Value;
            ПерУКТВЭД = ЛистExcel.Cells(Строка, 18).Value;
                        Если ФлОбновитьГТД = Ложь Тогда
                Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ПерНомКаталог));
                Если Товар.Пустая() = Истина Тогда
                    // Если ненайдет - создаем
                    Попытка
                        Товар = Справочники.Номенклатура.СоздатьЭлемент();    
                        Товар.Артикул = СокрЛП(ПерНомКаталог);
                        Товар.АртикулАльт = СокрЛП(ПерНомАльтернатива);
                        Товар.АртикулКор = СокрЛП(ПерНомКорейский);
                        Товар.Наименование = СокрЛП(ПерНаименование);
                        Товар.НаименованиеИностранное = СокрЛП(ПерАнглНаименование);
                        Если СокрЛП(ПерУкрНаименование) = "" Тогда
                            Товар.НаименованиеПолное = СокрЛП(ПерНаименование);
                        Иначе
                            Товар.НаименованиеПолное = СокрЛП(ПерУкрНаименование);
                        КонецЕсли;                                
                        Товар.ТипНоменклатуры = ПолеТипНоменклатуры;
                        Товар.ВидНоменклатуры = ПолеВидНоменклатуры;
                        Товар.ВалютаУчета = ПолеВалюта;
                        Товар.БазоваяЕдиницаИзмерения = ПолеБазоваяЕдиница;
                        Товар.ОсновнаяЕдиницаИзмерения = ПолеОсновнаяЕдиница;
                        Товар.Производитель = НайтиПроизводителя(ПерБренд);                                                
                        Товар.СтранаПроисхождения = ПолеСтрана;
                        Товар.СтавкаНДС = ПолеСтавкаНДС;                                
                        Товар.Родитель = ПолеРодительНоменклатуры;
                        Товар.УстановитьНовыйКод();
                        Товар.Записать();
                        //Переоткрываем и записываем значение ГТД                        
                        Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ПерНомКаталог));
                        Если Товар.Пустая() = Ложь Тогда     
                            Объект = Товар.ПолучитьОбъект();
                            Попытка
                                Объект.НоменклатураГТД = НайтиСоздатьНоменклатураГТД(ПерУКТВЭД, Объект.Ссылка, Объект.СтранаПроисхождения);
                                Объект.Записать();                        
                            Исключение
                                Сообщить("ОШИБКА модификации. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                            КонецПопытки;                
                        КонецЕсли;  
                    Исключение
                        Сообщить("ОШИБКА добавления. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                    КонецПопытки;    
                ИначеЕсли флОбновлятьСправочник = Истина Тогда
                    // Если найде и отмечен флаг ОбновлятьСправочник
                    Попытка
                        Объект = Товар.ПолучитьОбъект();
                        Объект.Артикул = СокрЛП(ПерНомКаталог);
                        Объект.АртикулАльт = СокрЛП(ПерНомАльтернатива);
                        Объект.АртикулКор = СокрЛП(ПерНомКорейский);
                        Объект.Наименование = СокрЛП(ПерНаименование);
                        Объект.НаименованиеИностранное = СокрЛП(ПерАнглНаименование);
                        Если СокрЛП(ПерУкрНаименование) = "" Тогда
                            Объект.НаименованиеПолное = СокрЛП(ПерНаименование);
                        Иначе
                            Объект.НаименованиеПолное = СокрЛП(ПерУкрНаименование);
                        КонецЕсли;                                
                        Объект.ТипНоменклатуры = ПолеТипНоменклатуры;
                        Объект.ВидНоменклатуры = ПолеВидНоменклатуры;
                        Объект.ВалютаУчета = ПолеВалюта;
                        Объект.БазоваяЕдиницаИзмерения = ПолеБазоваяЕдиница;
                        Объект.ОсновнаяЕдиницаИзмерения = ПолеОсновнаяЕдиница;                        
                        Объект.Производитель = НайтиПроизводителя(ПерБренд);
                        Объект.СтранаПроисхождения = ПолеСтрана;
                        Объект.СтавкаНДС = ПолеСтавкаНДС;
                        Объект.НоменклатураГТД = НайтиСоздатьНоменклатураГТД(ПерУКТВЭД, Объект.Ссылка, Объект.СтранаПроисхождения);
                        Объект.Родитель = ПолеРодительНоменклатуры;                        
                        Объект.Записать();                        
                    Исключение
                        Сообщить("ОШИБКА модификации. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                    КонецПопытки;                
                КонецЕсли;
            Иначе            
                Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ПерНомКаталог));
                Если Товар.Пустая() = Ложь Тогда     
                    Объект = Товар.ПолучитьОбъект();
                    Попытка
                        Объект.НоменклатураГТД = НайтиСоздатьНоменклатураГТД(ПерУКТВЭД, Объект.Ссылка, Объект.СтранаПроисхождения);
                        Объект.Записать();                        
                    Исключение
                        Сообщить("ОШИБКА модификации. """ + ПерНомКаталог + """ | " + ОписаниеОшибки());
                    КонецПопытки;                
                КонецЕсли;      
            КонецЕсли;    
            ЭлементыФормы.ИндикаторВыполнения.Значение = ЭлементыФормы.ИндикаторВыполнения.Значение+1;
        КонецЦикла;        
        //По окончанию работы закрываем файл
        Excel.Quit();
        Предупреждение("Обработка выполнена успешно");
        ЭлементыФормы.ИндикаторВыполнения.Значение = 0;
    КонецЕсли;      
КонецПроцедуры


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Спасибо сказали: Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 23.04.24, 13:24
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!