Таблица значений (в реализация 7.7)

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 17 мар 2010.

  1. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Здравствуйте. Возник такой вопрос: есть два справочника С1 и С2, где С2 подчинен справочнику С1. Надо чтобы на форму справочника С1 вывело в ТЗ все реквизиты с информацией справочника С2. Причем надо, чтобы строки можно было при двойном клике на строке ТЗ отредактировать, используя форму элемента справочника С2, и можно было с помощью кнопки Добавить, добавлять записи в ТЗ(также используя форму элемента справочника С2).
    Реализация 7.7
    Мой код(см. ниже) только задает заголовки столбцам и НИЧЕГО не выводит(хотя записи в справочнике С2 присутствуют). Данный код написан в модуле формы справочника С1:
    С2 это Справочник.Образование(который подчинен справочнику С1)
    Код (Text):
    Процедура ЗаполнитьТЗ()                 //название(вызов) этой процедуры прописано в ТЗ в Свойства -> Формула
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    СпрОбразование = СоздатьОбъект("Справочник.Образование");
    СпрОбразование.ИспользоватьВладельца(ТекущийЭлемент());
    СпрОбразование.ВыбратьЭлементы();
    Пока СпрОбразование.ПолучитьЭлемент()=1 цикл
    ТЗ.НоваяСтрока();         
    ТЗ.УчебЗав = СпрОбразование.УчебЗавед;
    ТЗ.ТипУчебЗав = СпрОбразование.ТипУчЗавед;
    ТЗ.ВидУчебЗав = СпрОбразование.ВидУчЗавед;
    ТЗ.Город = СпрОбразование.Город;
    КонецЦикла;
    КонецПроцедуры
    А вот в Свойства -> Формула кнопки Добавить я не знаю, как записать, чтобы открылась форма элемента, а не форма списка справочника С2. Подскажите пожалуйста, что делать.
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    колонки для ТЗ не определены
    ТЗ.НоваяКолонка() и т.д.

    Добавлено: для редактирования ТЗ надо в ее свойствах описать процедуру, которая будет анализировать колонку и обеспечивать ввод нового значения в нужную колонку и нужную строку
    Вот тебе пример процедуры, описанной в закладке "дополнительно", которая заполняет данными нужную колонку ТЗ (Load)
    Procedure WhenClick(Load)
    CurLine = Load.CurrentLine();
    if Load.CurrentLine() = 0 then
    Return;
    endif;

    CurrentColumn = Load.CurrentColumn();
    if CurrentColumn = "City" then
    Prompt = "Введите город ";
    Type = "Reference.Регион";

    GD = Load.GetValue(CurLine,CurrentColumn);
    if InputValue(GD,Prompt,Type) = 1 then
    Load.SetValue(CurLine,CurrentColumn,GD);
    endif;

    Goto ~Exit;
    elsif CurrentColumn = "Адрес" then
    Prompt = "Введите Адрес "
    elsif CurrentColumn = "КЛицо" then
    Prompt = "Введите контактное лицо "
    elsif CurrentColumn = "T" then
    Prompt = "Введите телефон "
    elsif CurrentColumn = "Time" then
    Prompt = "Введите Время работы "
    elsif CurrentColumn = "Cond" then
    Prompt = "Введите Особые условия "
    elsif CurrentColumn = "Custom" then
    Prompt = "Введите Признак таможни ";
    Type = "Enum.Boolean";
    GD = Load.GetValue(CurLine,CurrentColumn);
    if InputValue(GD,Prompt,Type) = 1 then
    Load.SetValue(CurLine,CurrentColumn,GD);
    endif;
    Goto ~Exit;
    elsif CurrentColumn = "GP" then
    Prompt = "Введите грузополучателя ";
    Type = "Reference.Грузополучатели";

    GD = Load.GetValue(CurLine,CurrentColumn);
    if InputValue(GD,Prompt,Type) = 1 then
    Load.SetValue(CurLine,CurrentColumn,GD);
    if EmptyValue(GD.Город) = 0 then
    Load.City = GD.Город;
    endif;
    if EmptyValue(GD.Адрес) = 0 then
    Load.Адрес = GD.Адрес;
    endif;
    endif;
    Goto ~Exit;
    endif;


    GD = Load.GetValue(CurLine,CurrentColumn);
    if InputString(GD,Prompt,60,,) = 1 then
    Load.SetValue(CurLine,CurrentColumn,GD);
    endif;
    ~Exit :
    Load.CurrentLine(CurLine);
    EndProcedure
    //********************************************************************************
    *******
     
  3. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Я колонки опеределила:
    Код (Text):
    Процедура ПриОткрытии()
    ТЗ.НоваяКолонка("УчебЗав","Справочник.УчебныеЗаведения",,,"Учебное заведение",30);
    ТЗ.НоваяКолонка("ТипУчебЗав","Справочник.ТипУчебЗаведения",,,"Тип учебного заведения",10);
    ТЗ.НоваяКолонка("ГодОкон","Число",4,0,"Год окончания",5);
    ТЗ.НоваяКолонка("Город","Справочник.ГородаРайоны",,,"Город",15);
    Заполнить();
    КонецПроцедуры
    Только при такой записис у меня вообще не открывается элемент справочника и пишет ошибку:
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    {Справочник.ФизическиеЛица.Форма.Модуль(13)}: Попытка присвоить значение недоступной для записи переменной (ТЗ)

    А если убрать Заполнить() из процедуры ПриОткрытии(), то ТЗ на форме справочника С1 пустая (только на колонки разбитая) и не выводит данные из подчиненного справочника С2.
     
  4. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Делал я такое, в структуру ТаблицыЗначений добавить колонку (не видимую) Элемент (в ней будет хранится ссылка на элемент подчиненного справочника):
    Код (Text):
    Процедура ЗаполнитьТЗ()
    СпрОбразование = СоздатьОбъект("Справочник.Образование");
    СпрОбразование.ИспользоватьВладельца(ТекущийЭлемент());
    СпрОбразование.ВыбратьЭлементы();
    Пока СпрОбразование.ПолучитьЭлемент()=1 цикл
    ТЗ.НоваяСтрока();         
    ТЗ.Элемент=СпрОбразование.ТекущийЭлемент();
    ТЗ.УчебЗав = ТЗ.Элемент.УчебЗавед;
    ТЗ.ТипУчебЗав = ТЗ.Элемент.ТипУчЗавед;
    ТЗ.ВидУчебЗав = ТЗ.Элемент.ВидУчЗавед;
    ТЗ.Город = ТЗ.Элемент.Город;
    КонецЦикла;
    КонецПроцедуры
    Процедура ЗаполнитьТЗ() в свойствах тз формула убрать, а необходимо добавить ОткрытьИзТаблицыЭлемент():
    Код (Text):
    Процедура ОткрытьИзТаблицыЭлемент()
    ТекСтрока=ТЗ.ТекущаяСтрока();
    ОткрытьФормуМодально(ТЗ.ПолучитьЗначение(ТекСтрока,"Элемент"));
    КонецПроцедуры
    Данная Процедура позволит открывать элементы подчиненного справочника ...
    Что бы добовлять элементы в таблицу необходимо добавить кнопку "Добавить" с процедурой добавитьЗначениеТЗ():
    Код (Text):
    Процедура ДобавитьЗначениеТЗ()
    ОткрытьФормуМодально("Элемент.Образование",,,ТекущийЭлемент());
    ТЗ.УдалитьСтроки();
    ЗаполнитьТЗ();
    КонецПроцедуры
    в процедуре ПриОткрытии() добавить две строки:
    Код (Text):
        ТЗ.УдалитьСтроки();
    ЗаполнитьТЗ();
    PS - в структуре ТЗ нужно добавить колонку "Элемент"
    Все работает на 100%
     
  5. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Извини, я не поняла что надо как сделать с структуре тЗ, это что просто прописать так?:
    Код (Text):
    Процедура ПриОткрытии()
    ОчиститьОкноСообщений();
    ТЗ.НоваяКолонка("УчебЗав","Справочник.УчебныеЗаведения",,,"Учебное заведение",30);
    ТЗ.НоваяКолонка("ТипУчебЗав","Справочник.ТипУчебЗаведения",,,"Тип учебного заведения",10);
    ТЗ.НоваяКолонка("ГодОкон","Число",4,0,"Год окончания",5);
    ТЗ.НоваяКолонка("Город","Справочник.ГородаРайоны",,,"Город",15);
    ТЗ.НоваяКолонка("Элемент");
    ТЗ.УдалитьСтроки();
    ЗаполнитьТЗ();
    КонецПроцедуры
    Добавлено: И у меня все время выскакиват ошибка:

    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    {Справочник.ФизическиеЛица.Форма.Модуль(12)}: Попытка присвоить значение недоступной для записи переменной (ТЗ)

    при двойном счелчке на ТЗ в Предприятии выскакивает ошибка:

    ОткрытьФормуМодально(ТЗ.ПолучитьЗначение(ТекСтрока,"Элемент"));
    {Справочник.ФизическиеЛица.Форма.Модуль(28)}: Номер за пределами значения!

    Я не могу ни открыть форму элемента справочника, а если убрать ЗаполнитьТЗ(); из процедуры ПриОткрытии(), то ТЗ пустая и при нажатии на кнопку Добавить тоже эта же ошибка.
     
  6. Andruha

    Andruha Гость

    смотри в стандартных конфах - там это реализовано (справ. Номенклатура)
     
  7. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Еще вопросик, а где ты определил строку ТЗ = СоздатьОбъект("ТаблицаЗначений"); ???
     
  8. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Когда добавляеш таблицу значений на форму, прописываеш ее уникальный идентификатор, в данном случае - ТЗ
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если она определена как таблицазначений на форме - эта строка не нужна
    И стоит проверить, не описана ли явно переменная ТЗ в модуле
     
  10. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    :) ;) может покажешь весь листинг???? Мы тебе и исправим ошибку!!! (выложи отдельным файлом ТХТ)
     
  11. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Ой, спасибо всем. Я уже все сделала) Вы мне очень помогли. :rolleyes:
     
  12. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Может если не трудно подскажите еще, как можно сделать так, чтобы пользователь не мог добавлять записи и редактировать уже существующие записи в справочнике, т.е. справочник служит только для просмотра?
    Еще вопросик :blush: : есть Спр1 и Спр2, ни один из них не подчинен другому. В Спр2 есть реквизит "Рек" с типом Справочник.Спр1. Как можно вызвать форму элемента Спр1, соответсвующую выбранному реквизиту Рек , при нажатии на кнопку на форме Спр2. Как вывести саму форму я догадываюсь, а вот как правильно сослаться на Спр1 по реквизиту Рек и открыть именно нужную форму элемента не совсем представляю. Подскажите пожалуйста.

    P.S.: извините за столько вопросов, но как же еще можно научиться практическим навыкам и применению языка, как если не спросить у знающих и имеющих опыт людей :rolleyes:
     
  13. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    1) - см.приложение, а для запрета добавления используй процедуру
    Код (Text):
    Процедура ВводНового()
    Сообщить("Ввод нового элемента проводится документом");
    СтатусВозврата(0);
    КонецПроцедуры
    ;
    2)
    Код (Text):
    ОткрытьФорму(Рек)
     

    Вложения:

    • __.jpg
      Размер файла:
      427 КБ
      Просмотров:
      39
  14. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    И можно еще наложить запрет на редактирование отдельных реквизитов справочника (с использованием ПолномочияПользователей, например)
     
Загрузка...

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