Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Які дані треба призначити реквізиту із типом значень Справочники
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
vizit73
1С Предприятие 7.7 (сетевая версия) (7.70.025)
Підготував в Excel довідник Імена, складається з двох стовпчиків. В першому імена у другому приналежність до статі відповідно Ж або Ч.
У конфігурації створив Довідник Имена, у Наименовании зберігаються Імена + Реквізит Пол, який обирається із довідника Пол.
Довідник Пол у Наименовании зберігаються скорочені назви Ж або Ч відповідний код 1 або 2.

Імпортую за допомогою наступного коду:
Процедура ВыборФайла()
ИмяВыбрФайла="";
ИмяПутиКФайлу="";
    Если ФС.ВыбратьФайл(0,ИмяВыбрФайла,ИмяПутиКФайлу,"","(*.xls)|*.xls","XLS")=0 Тогда
        Форма.Закрыть();
        Возврат;
    КонецЕсли;
    ФайлИмпорта=ИмяПутиКФайлу+ИмяВыбрФайла;
КонецПроцедуры

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

Для стр=СтрокиОт По СтрокиДо Цикл
    Имя=СокрЛП(Эксель.Cells(стр,1).Value);
    ПолИмени=СокрЛП(Эксель.Cells(стр,2).Value);
    Если СпрПол.НайтиПоНаименованию(ПолИмени, 0, 1)=1 Тогда
        СокрПол=СпрПол.Наименование; //КодПол=СпрПол.Код;
    КонецЕсли;
    Состояние(""+СтрокиОт+"/"+СтрокиДо+"  "+Имя);
    Если СпрИмена.НайтиПоНаименованию(Имя, 0, 1)=0 Тогда
    //если элемент с таким наименованием не найден, то создаем его
        СпрИмена.Новый();
        СпрИмена.Наименование=Имя;
    СпрИмена.Пол=СокрПол; //СпрИмена.Пол=КодПол;
        СпрИмена.Записать();
    КонецЕсли;    
КонецЦикла;
КонецПроцедуры


Імена експортуються, поле Стать не заповнюється чи так чи інакше. Що треба присвоювати Код чи Нименование?
СокрПол=СпрПол.Наименование; //КодПол=СпрПол.Код;
.......
СпрИмена.Пол=СокрПол; //СпрИмена.Пол=КодПол;

logist
Цитата(vizit73 @ 21.08.12, 21:58) необходимо зарегистрироваться для просмотра ссылки
Що треба присвоювати Код чи Нименование?

Ни то ни то, нужно - Ссылка
vizit73
Цитата(logist @ 21.08.12, 22:01) необходимо зарегистрироваться для просмотра ссылки
Ни то ни то, нужно - Ссылка


Архітектура зрозуміла, як витягти цю Ссылку та присвоювати СпрИмена.Пол ?
logist
Вероятно
СокрПол=СпрПол.Ссылка;
vizit73
Цитата(logist @ 21.08.12, 22:32) необходимо зарегистрироваться для просмотра ссылки
Вероятно
СокрПол=СпрПол.Ссылка;


Ні, видає помилку:
СсылкПол=СпрПол.Ссылка;//СокрПол=СпрПол.Наименование; КодПол=СпрПол.Код;
{Обработка.ИмпортСправочников.Форма.Модуль(30)}: Поле агрегатного объекта не обнаружено (Ссылка)
тобто я так розумію, компілятор/інтерпритатор 1С вважає Ссылка полем об'єкту довідника, якого там зрозуміло немає.
Може є якийсь метод? Переглянув знову розділ Работа со Справочниками том. 1 нічого на думку не приходить.
Vofka
Цитата(logist @ 21.08.12, 22:32) необходимо зарегистрироваться для просмотра ссылки
СокрПол=СпрПол.Ссылка;

В 7.7, по-моему, поля Ссылка нету.

Если СпрПол имеет тип нужного справочника, то надо по-моему либо так:
СокрПол=СпрПол;

либо так
СокрПол=СпрПол.ТекущийЭлемент;
vizit73
Цитата(Vofka @ 21.08.12, 23:01) необходимо зарегистрироваться для просмотра ссылки
В 7.7, по-моему, поля Ссылка нету.


Дякую
СокрПол=СпрПол.ТекущийЭлемент;
підійшов, імпорт відбувся.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.