Версия для печати темы (https://pro1c.org.ua/index.php?s=f45c25b4e450f99959a91a6bfe7aabe7&showtopic=38623)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ загрузка свойств номенклатуры из xls

Автор: Korotkiy 12.07.17, 21:44

Добрый вечер!
1с7.7 платформа 7.70.027
Типовая конфигурация "Торговля+Склад" редакция 9,2
Оптово-розничная конфигурация 7.70.935

Подскажите что у меня неправильно. Никак непойму чтото , выкидывает ошибку

Цитата
<<?>>Процедура ПоКнопкеЗагрузить() Далее
{H:\загрузка свойств.ert(56)}: Определения процедур и функций должны размещаться перед операторами основной программы

Ну и в целом правильно ли я написал ?
Вообщем нужно в номенклатуре присвоить ряд свойств. в ручную не вариант т.к. номенклатуры 50к позиций
решил сдалать обработку которая загрузит из экселя, в голове понимаю что должно быть , а вот с реализацией не очень ...
Перем НомерСтроки;   
Перем Ид;
Перем Эксель;
Перем Книга;
Перем Лист;
Перем ИмяФайлаЗагрузки;


Запрос = СоздатьОбъект("Запрос");
СпрСвойств = СоздатьОбъект("Справочник.ВидыСвойств");        
СпрЗначСвойств = СоздатьОбъект("Справочник.ЗначенияСвойств");
СпрСвойствНом = СоздатьОбъект("Справочник.СвойстваНоменклатуры");  


//******************************************************************************
// ПоКнопкеЗагрузить()
//
//
// Вызывается из формул элементов диалога:
//  Кнопка "Загрузить".
//
// Описание:  
//    Вызывается при нажатии кнопки "Загрузить". заполняются значения из таблицы эксель
//

Процедура  ПоКнопкеЗагрузить() Далее


//откроем эксель
    
        Попытка
        Эксель = СоздатьОбъект("Excel.Application");
        Исключение
        Сообщить (ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
        Возврат;
        КонецПопытки;

//откроем наш файл и установим параметры

        Если ПустоеЗначение(ИмяФайлаЗагрузки)=1 Тогда  
            Сообщить ("Не выбран файл для загрузки!");
            Возврат;
        Иначе
            Книга = Эксель.WorkBooks.Open(ИмяФайлаЗагрузки);
            Эксель.Visible=0;
               Эксель.DisplayAlerts=0;
               Эксель.ScreenUpdating = 0;
               Эксель.EnableEvents = 0;  
               Лист = Книга.WorkSheets(1);
           КонецЕсли;

//зациклим чтобы прочитать каждую строку
//получим значение ID из нашей таблицы
        НомерСтроки=1;
        
        Пока ПустоеЗначение (Лист.Cells(НомерСтроки, 1).Value)=0 Цикл    
            НомерСтроки=НомерСтроки+1;
            Ид=  Лист.Cells(НомерСтроки, 1).Value;
//найдем элемент номенклатуры по коду
            СпрСвойствНом.ИспользоватьВладельца(Запрос.Номенклатура);
            СпрСвойствНом.НайтиПоКоду(Ид);
                Если СпрСвойствНом.выбран()=1 Тогда
                СпрСвойствНом = СпрСвойствНом.ТекущийЭлемент();
//проверим совпадают ли артикулы
                    Если Запрос.Номенклатура.Артикул = Лист.Cells(НомерСтроки, 2).Value Тогда
//найдем значение производителя
                          СпрСвойств.НайтиПоКоду("20030");
//проверим заполнено ли оно
                        Если СпрСвойствНом.НайтиПоРеквизиту("ВидСвойства",СпрСвойств.ТекущийЭлемент(),0) = 0 Тогда
//присвоим значение полученое из таблицы
          
                        СпрСвойств.Новый();
                        СпрСвойств.ЗначениеСвойства = Лист.Cells(НомерСтроки, 3).Value;
                        СпрСвойств.ВидСвойства      = СпрСвойств.НайтиПоКоду("20030");
                            СпрСвойств.Записать();
                        КонецЕсли;
//найдем значение модель
                          СпрСвойств.НайтиПоКоду("20034");
//проверим заполнено ли оно
                        Если СпрСвойствНом.НайтиПоРеквизиту("ВидСвойства",СпрСвойств.ТекущийЭлемент(),0) = 0 Тогда
//присвоим значение полученое из таблицы

                        СпрСвойств.Новый();
                        СпрСвойств.ЗначениеСвойства = Лист.Cells(НомерСтроки, 5).Value;
                        СпрСвойств.ВидСвойства      = СпрСвойств.НайтиПоКоду("20034");
                            СпрСвойств.Записать();
                        КонецЕсли;
        
                    КонецЕсли;
                КонецЕсли;
        КонецЦикла;
        Эксель.Quit();  
КонецПроцедуры

Автор: 1Cv77 12.07.17, 22:03

Korotkiy @ Сегодня, 20:44 * ,
Строки

Запрос = СоздатьОбъект("Запрос"); 
СпрСвойств = СоздатьОбъект("Справочник.ВидыСвойств");        
СпрЗначСвойств = СоздатьОбъект("Справочник.ЗначенияСвойств");
СпрСвойствНом = СоздатьОбъект("Справочник.СвойстваНоменклатуры");


Перенеси ЗА строчку
Процедура  ПоКнопкеЗагрузить() Далее



 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 9
 

Автор: Korotkiy 12.07.17, 22:29

1Cv77 @ Сегодня, 23:03 * ,

тогда становится еще хуже

Цитата
Возврат<<?>>;
{H:\загрузка свойств.ert(67)}: Оператор Return (Возврат) не может употребляться вне процедуры или функции
Эксель.Quit();<<?>>
{H:\загрузка свойств.ert(117)}: Обнаружено логическое завершение исходного текста модуля
<<?>>КонецПроцедуры
{H:\загрузка свойств.ert(118)}: Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (ПоКнопкеЗагрузить)


1Cv77 @ Сегодня, 23:03 * ,

нашел , нужно было
Далее
убрать

Автор: 1Cv77 13.07.17, 7:52

Korotkiy @ Вчера, 21:29 * ,
09000000.gif
Блин, я не внимателен(((((
не обратил внимание на "Далее"

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua