8.х Вывести значения типа программно в ПолеВвода

Тема в разделе "Установка платформы "1С:Предприятие 8"", создана пользователем mauar, 9 ноя 2010.

  1. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Есть обычное поле ввода, тип у него Справочник.Пользователи.

    Есть переменная она получает данные ячейки из Экселя, а именно выводится имя пользователя точно такое же как и в справочники Пользователи:

    Код:
    ФайлСтрок = СокрЛП(Ex.Cells(2,2).Value); 
    
    Как сделать так чтобы эта переменная отобразилась в ПолеВвода у которого тип Справочники.Пользователи?

    Делаю так, не работает:
    Код:
    ЭлементыФормы.СИО.Значение=ФайлСтрок;  // СИО - ПолеВвода
    
    Может сделать что то вроде отбора и услвия, если имя такое есть то вывести это имя в это поле?

    А как можно программно вывести определенное имя в ПолеВвода с данным типом?
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
    ЭлементыФормы.СИО.Значение=Справочники.Контрагенты.НайтиПоНаименованию(ФайлСтрок) 
    
  3. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Нет не работает!
  4. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    ЭлементыФормы.СИО.Значение = Справочники.Пользователи.НайтиПоНаименованию("Admin");

    Открыла ползователя Admin, а как бы тут извратиться и занести эту же запись в ПолеВвода но с переменной ФайлСтрок?!
  5. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Посмотрите какое значение в ФайлСтрок через отладчик
  6. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    ФайлСтрок = СокрЛП(Ex.Cells(2,2).Value);

    Ну вообще это строка, она получается из ячейки Эксель, может её как нибуть можно переконвертировать в другое значения?

    Или может я не там посмотрел, что именно Вы имели в виду?
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Вставьте в код
    Код:
    Сообщить(ТипЗнч(ФайлСтрок));
    
    И на всякий случай
    Код:
    Сообщить(ФайлСтрок);
    
  8. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Мдя не подумал я про это :)

    Строка
    Ефремова Оксана Петровна

    Тип строка имя Получила точно такое же без пробелов.
  9. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Попробуйте вручную выбрать в поле этого пользователя, а затем
    вставьте следующий код:
    Код:
    Равно = (ЭлементыФормы.СИО.Значение.Наименование = ФайлСтрок);
    Сообщить(Равно);
    
  10. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Пишет: Ложь!
  11. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Значит наименования не равны... проверяйте по буквам, может где латинские буквы закрались
  12. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Странно, я специально скопировал из Справочника и вставил в эксель, оно должно быть равно!

    Тут человек на другом форуме вот что пишет

    Имя пользователя всегда <> элементу справочника с таким НАИМЕНОВАНИЕМ.

    Как из этой ситуации выйти?
  13. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
    	Спр = ЭлементыФормы.СИО.Значение;
    Минимум = Мин(СтрДлина(Спр.Наименование), СтрДлина(ФайлСтрок));
    Для К = 1 По Минимум Цикл
    Если Сред(Спр.Наименование, К, 1) <> Сред(ФайлСтрок, К, 1) Тогда
    Сообщить("Не совпадают символы №" + К + " в справочнике: " + Сред(Спр.Наименование, К, 1) + ", в файле: " + Сред(ФайлСтрок, К, 1));
    КонецЕсли;
    КонецЦикла;
    
    
  14. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Не подставился но написала истина
  15. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Получилось, а если допустим в таблице Эксель есть несколько пользователей и этих пользователей надо подставить в 1С в табличное поле -> полеввода но у этого поля реквезит Справочники.Контрагенты? Как Вы написали не выходит!
  16. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    А связь какая-то между пользователями и контрагентами есть?
  17. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Есть, в документе Экселе есть пользователь он один это просто его ФИО оно находиться в определенной ячейки, для этого пользователя там же в экселе список контрагентов, пользователя мы его получаем, теперь надо этот список контрагентов загрузить в 1С в документе в колонке табличной часть поляввода с реквезитом Справочник.Контрагенты подгрузить контрагентов.
  18. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Все аналогично предыдущему, только работаете с реквизитами ТЧ.
    Код:
    НоваяСтрока = ТЧ.Добавить();
    НоваяСтрока.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(НаимКонт);
    
    
  19. TopicStarter Overlay
    mauar
    Offline

    mauar Опытный в 1С

    Регистрация:
    19 окт 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое, только почему у меня контрагенты расползлись по всей колонке, в самом низу
    там подставляются одинаковые значения контрагента, вниз до конца всей таблицы в 1С, там просто по условию сделано до 70 строки Экселя делаю отбор

    Если НоваяСтрока.НомерСтроки=70 тогда
    Возврат;
    КонецЕсли;

    А можно как нибуть сделать чтобы 1С проверила до какой строки данные заполнины и до этой строки сделать получение данных, в Экселе есть между заполненных строк пустые строки но их не >5.

    Или хотя бы чтобы она не заполняла до 70 строки контрагентов а только до той какая строка существует.


    Код:
    Процедура ЗагрузитьНажатие(Элемент)
    ТЧ.Очистить();
    //проверим что файл существует
    ФайлНаДиске = Новый Файл(Файл);
    Если Не ФайлНаДиске.Существует() Тогда
    Предупреждение("Файл не найден!");
    Возврат;
    КонецЕсли;	
    
    Ex = ПолучитьТаблицуExcel(Файл);
    
    СтруктураДанных = Новый Структура("НомерСтроки, ДеньПосещения, Контрагент, Класс,  ВремяПосещения, БюллетеньКонсультантИнформ, ВКИ, БюллетеньКонсультантПлюс, НКИ, СИО ");
    НС = 1;
    Пока Истина <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл		</span>
    СтруктураДанных.НомерСтроки =    СокрЛП(Ex.Cells(НС,1).Value);
    СтруктураДанных.ДеньПосещения =  СокрЛП(Ex.Cells(НС,2).Value);
    //СтруктураДанных.Контрагент =     СокрЛП(Ex.Cells(НС,3).Value);
    
    /// контрагент
    
    Контр=СокрЛП(Ex.Cells(НС,2).Value);
    СтруктураДанных.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Контр);
    
    
    /// - Конец Контрагента - ///
    
    
    СтруктураДанных.Класс =          СокрЛП(Ex.Cells(НС,4).Value);
    СтруктураДанных.ВремяПосещения = СокрЛП(Ex.Cells(НС,5).Value);
    СтруктураДанных.БюллетеньКонсультантИнформ = СокрЛП(Ex.Cells(НС,6).Value);
    СтруктураДанных.ВКИ =            СокрЛП(Ex.Cells(НС,7).Value);
    СтруктураДанных.БюллетеньКонсультантПлюс = СокрЛП(Ex.Cells(НС,8).Value);
    СтруктураДанных.НКИ =            СокрЛП(Ex.Cells(НС,9).Value);
    
    
    
    #Если Клиент Тогда
    Состояние("Номер обработанной строки: " + НС);	
    #КонецЕсли
    
    НоваяСтрока = ТЧ.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураДанных);
    
    НС = НС + 1;
    
    
    // тут я до 70 строки в экселе делаю выбор
    
    Если НоваяСтрока.НомерСтроки=70 тогда
    
    
    //СИО	
    ФайлСтрок = СокрЛП(Ex.Cells(2,2).Value);
    Спр = ЭлементыФормы.СИО.Значение;
    Минимум = Мин(СтрДлина(Спр.Наименование), СтрДлина(ФайлСтрок));
    ЭлементыФормы.СИО.Значение=Справочники.Пользователи.НайтиПоНаименованию(ФайлСтрок);
    Возврат;
    КонецЕсли;		
    КонецЦикла;
    
    Ex.Quit();
    
    КонецПроцедуры
    
    

    А так я получаю Эксель файл

    Код:
    
    Функция ПолучитьТаблицуExcel(ИмяФайла) Экспорт
    Попытка 
    Ex = Новый COMОбъект("Excel.Application");
    Исключение       
    Предупреждение("MS Excel не установлен на компьютере!",10);
    Возврат Неопределено;                                  
    КонецПопытки;
    Ex.DisplayAlerts = 0;
    Ex.Visible = 0;  
    
    ИмяФайла_ = ИмяФайла;
    Дл  = СтрДлина(ИмяФайла_);
    Инд = Найти(ИмяФайла_,"\");
    Пока Инд > 0 Цикл
    ИмяФайла_ =	Прав(ИмяФайла_,Дл - Инд);	
    Дл  = СтрДлина(ИмяФайла_);
    Инд = Найти(ИмяФайла_,"\");
    КонецЦикла;
    ИмяФайла_ = СокрЛП(ИмяФайла_);
    
    Попытка
    Ex.Application.Workbooks.Open(ИмяФайла);
    Исключение
    Попытка 
    Ex.Application.Workbooks(ИмяФайла_).Save();
    Исключение	КонецПопытки;
    Попытка 
    Ex.Application.Workbooks(ИмяФайла_).Close();
    Исключение	КонецПопытки;
    Ex.DisplayAlerts = 1;
    Ex.Visible = 1;
    Предупреждение("Не удалось открыть файл " + ИмяФайла,10);
    Возврат неопределено;                                  
    КонецПопытки;
    
    Возврат Ex;	
    
    КонецФункции
    
    
    
    
  20. Itsys
    Offline

    Itsys Опытный в 1С

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

Поделиться этой страницей