Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Слои и реквизиты табличной части документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
wmatik
1С Предприятие 7.7(сетевая версия) - 7.70.027,Конф: ПУБ(7.70.010)
Есть четыре слоя:Основной, Общий, СпецификацияКДоговору и ДополнительноеСоглашениеКДоговору.
Необходимо поместить таблицы на два слоя СпецификаяКДоговору и ДополнительноеСоглашениеКДоговору. Возникла проблема, когда помещаю таблицу на слой СпецификацияКДоговору все хорошо, но как только перехожу на слой Дополнение через добавление реквизитов на форму, выбираю из списка нужный реквизит, нажимаю вставить, он вставляется в ту таблицу, которая находится на слое СпецификацияКДоговору. Но в принципе таблицы должны быть идентичные, может как-то по иному можно это сделать?
nysysimara
Возможно, для просмотра у Вас открыты оба слоя, но флажок редактирования стоит напротив слоя Спецификация...

Если
Цитата
Но в принципе таблицы должны быть идентичные,

нельзя ли обойтись одной таблицей на одном из слоев
или создать новый слой с общими реквизитами из этих двух
Zaval
Что такое "Таблица"?
Если речь о табличной части - то в 7.7 она может быть только одна.
wmatik
для просмотра открыт один слой, обойтись одной таблицей нельзя, и создать слой с общими реквизитами тоже нельзя, данные в таблице разные должны быть

да, речь идет о табличной части
Ardi
Купите восьмёрку. Там это реализовано.
wmatik
а как же тогда поступить?(
Zaval
Таблица значений. Только для сохранения ее придется преобразовывать в строку неограниченной длины.
В серверном варианте(с каким-то из SQL), помнится, были траблы с этим.
Изврат порядочный.

Еще можно для этого отдельный документ создать и выводить на форму уже его ТЧ.

А если порядок строк не важен - это могут быть элементы справочника, подчиненного Контрагенту... правда по Договору отбирать придется.

Много чего можно придумать... но, все через ТЗ.
nysysimara
1 вариант: 2 таблицы значений - для каждого слоя своя, описать заполнение их отрисовку ,
2 вариант попытаться обойтись только табличной частью

заполнять таблицы значений из табличной части
MATEVI
Еще можно через подчиненный документ. Но мне больше нравится вариант ТЗ. Хотя про траблы с СКЛ не слыхал, и не сталкивался.

ЗЫ не увидел полный ответ Zaval
Zaval
Цитата(MATEVI @ 20.10.11, 15:40) необходимо зарегистрироваться для просмотра ссылки
Еще можно через подчиненный документ. Но мне больше нравится вариант ТЗ. Хотя про траблы с СКЛ не слыхал, и не сталкивался.

ЗЫ не увидел полный ответ Zaval


Возможно, траблы были в ранних релизах платформы( с СКЛ2000?). Какая-то некорректность с этими строками.

ЗЫ. Я его дописал)))
wmatik
пошла учить таблицы значений
Zaval
Блин... знакомое что-то... неужели под Метро кроИте?
MATEVI
Может поможет необходимо зарегистрироваться для просмотра ссылки
Взял необходимо зарегистрироваться для просмотра ссылки
wmatik
Разбираясь с этим вариантом представления двух табличных частей, я столкнулась с проблемкой, создаю в своей базе документ, делаю все так же, но при открытии документа вылазит ошибка:
ИдентификаторКолонки = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Идент
ификатор;
{Документ.ДоговорРасходный.Форма.Модуль(87)}: Поле агрегатного объекта не обнаружено (Идентификатор)

Процедура ЗаполнениеТаблиц(Таб,Наименование)    
    ВидДок = ТекущийДокумент().Вид();
    ПараметрыТаб = Метаданные.Документ(ВидДок).РеквизитШапки(Наименование).Комментарий;
    КолКолонокТаб = Число(глПолучитьЭлемент(ПараметрыТаб,1,","));
    КолСтрокТаб = ПолучитьАтрибут(Наименование);
    Таб.НоваяКолонка("Номер","Число",3,,"№",3);
    Таб.Фиксировать(,1);
    Для К = 1 По КолКолонокТаб Цикл
        ИдентификаторРеквизита = глПолучитьЭлемент(ПараметрыТаб,К + 1,",");
        ИдентификаторКолонки = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Идентификатор;
        НазваниеКолонки = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Синоним;
        ТипКолонки = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Тип;
        ШиринаКолонки = Число(Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Комментарий);
        Если ТипКолонки = "Число" Тогда                                                      
            ДлинаКолонки = Число(Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Длина);
            ТочностьКолонки = Число(Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Точность);
            РазделятьТриады =  Число(Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).РазделятьТриады);
            ФорматКолонки = "Ч"+ДлинаКолонки+"."+ТочностьКолонки+"."+?(РазделятьТриады=1,",","");
            Таб.НоваяКолонка(ИдентификаторКолонки,ТипКолонки,ДлинаКолонки,ТочностьКолонки,НазваниеКолонки
,ШиринаКолонки,ФорматКолонки,2);
        ИначеЕсли ТипКолонки = "Строка" Тогда                                                      
            ДлинаКолонки = Число(Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Длина);
            Таб.НоваяКолонка(ИдентификаторКолонки,ТипКолонки,ДлинаКолонки,,НазваниеКолонки,ШиринаКолонки,
,1);
        ИначеЕсли (ТипКолонки = "Справочник") или (ТипКолонки = "Документ")  Тогда
            ВидКолонки = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентификаторРеквизита).Вид;
            Таб.НоваяКолонка(ИдентификаторКолонки,ТипКолонки+"."+ВидКолонки,ДлинаКолонки,,НазваниеКолонки,ШиринаКолонки,,1);
        Иначе
            Таб.НоваяКолонка(ИдентификаторКолонки,ТипКолонки,,,НазваниеКолонки,ШиринаКолонки,,1);
        КонецЕсли;    
    КонецЦикла;            
    Для Л = 1 По КолСтрокТаб Цикл
        Если ПолучитьСтрокуПоНомеру(Л) = 1 Тогда
            Таб.НоваяСтрока();
            Для К = 1 По КолКолонокТаб Цикл
                ИдентификаторРеквизита = глПолучитьЭлемент(ПараметрыТаб,К + 1,",");
                ЗначениеРеквизита = ПолучитьАтрибут(ИдентификаторРеквизита);
                Таб.УстановитьЗначение(Л,ИдентификаторРеквизита,ЗначениеРеквизита);
            КонецЦикла;
            Таб.Номер = Таб.НомерСтроки;
        КонецЕсли;    
    КонецЦикла;
    Форма.Закладки.ДобавитьЗначение(Наименование,Метаданные.Документ(ВидДок).РеквизитШапки(Наименование).Синоним);    
    СписокТаб.ДобавитьЗначение(Таб,Наименование);
КонецПроцедуры    // ЗаполнениеТаблиц
Ardi
Сочиняйте код с нуля под конкретные данные. Не переусложняйте себе жизнь километрами универсального кода.
wmatik
ок
MATEVI
Ну если прям совсем просто.
1) В шапку добавляем реквизит строка неограниченной длины например - ТЗстр
2) Добавляем свою ТЗ на форму.
3)
Процедура ПриОткрытии()
//..........
          ТабЗн.НоваяКолонка("Счет"      ,,,,"Счет аванса",10);
          ТабЗн.НоваяКолонка("Контрагент",,,,"Контрагент",15);
          ТабЗн.НоваяКолонка("Договор"   ,,,,"Договор",15);
          ТабЗн.НоваяКолонка("Сумма","Число",15,2,,10);
    
          Т = ЗначениеИзСтроки(Тзстр);
          ТабЗн.Загрузить(Т);
КонецПроцедуры

4)
Процедура ПриЗаписи()
///...
        Тзстр = ЗначениеВСтроку(ТабЗн);
КонецПроцедуры

5) Вешаем кнопки для добавления удаления строк. Тут просто или ТабЗн.УдалитьСтроку
или ТабЗн.НоваяСтрока();
6) Описываем работу с ТЗ при кликании на ее строка, колонках. типа ...
Процедура ИзмТаблЗначений()
    ТКол="";
    ТКол=ТабЗн.ТекущаяКолонка();
    Если ТКол="Сумма" Тогда
        См = ТабЗн.Сумма;
        Рез=ВвестиЧисло(См,"Сумма",15.2,2);
        Если Рез=1 Тогда
            ТабЗн.Сумма=См;
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры //ИзмТаблЗначений

7) Если надо получать какие то данные из этой таблицы при проведении то в модуле
опять значениеизстроки получаете свою таблицу и работаете с ней
mister-x
Цитата
Т = ЗначениеИзСтроки(Тзстр);
як на мене, окремий довідник надійніше - тоді робити відбір там по даному документу-лінку
wmatik
Подскажите, мне необходимо чтобы в таблице при выборе товара подтягивался его код, я прописываю процедурку, потом её объявляю, но почему то не подсоединяется код:
Процедура Подбор()
    ИмяТаб = Форма.Закладки.ПолучитьЗначение(Форма.Закладки.ТекущаяСтрока());
    Таб = СписокТаб.Получить(ИмяТаб);
    ТекущаяСтрока = Таб.ТекущаяСтрока();
    Если ПустоеЗначение(ТекущаяСтрока) = 1 Тогда
        Возврат;
    КонецЕсли;  

    ИмяКолонки = Таб.ТекущаяКолонка();
    
    ТипКолонки = "";
    ДлинаКолонки = "";
    ТочностьКолонки = "";
    
    Таб.ПолучитьПараметрыКолонки(ИмяКолонки,ТипКолонки,ДлинаКолонки,ТочностьКолонки);
    
    Значение = 0;
    Если ТипКолонки = "Число" Тогда  
        Если ВвестиЧисло(Значение,"Введите значение ("+ИмяКолонки+")",ДлинаКолонки,ТочностьКолонки,0) = 1 Тогда
            Таб.УстановитьЗначение(ТекущаяСтрока,ИмяКолонки,Значение);
            Форма.Обновить(1);
        КонецЕсли;
    ИначеЕсли ТипКолонки = "Строка" Тогда
        Если ВвестиСтроку(Значение,"Введите значение ("+ИмяКолонки+")",ДлинаКолонки,0,0) = 1 Тогда
            Таб.УстановитьЗначение(ТекущаяСтрока,ИмяКолонки,Значение);
            Форма.Обновить(1);
        КонецЕсли;
    ИначеЕсли ТипКолонки = "Дата" Тогда
        Если ВвестиДату(Значение,"Введите значение ("+ИмяКолонки+")",0) = 1 Тогда
            Таб.УстановитьЗначение(ТекущаяСтрока,ИмяКолонки,Значение);
            Форма.Обновить(1);
        КонецЕсли;                                                                      
    ИначеЕсли (Лев(ТипКолонки,10) = "Справочник") или (Лев(ТипКолонки,8) = "Документ") Тогда
        Если ВвестиЗначение(Значение,"Введите значение ("+ИмяКолонки+")",ТипКолонки) = 1 Тогда
            Таб.УстановитьЗначение(ТекущаяСтрока,ИмяКолонки,Значение);
            ПриВыбореТМЦ();
            Форма.Обновить(1);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры


Процедура ПриВыбореТМЦ()
    КодДК = ТМЦ.КодДК;
КонецПроцедуры
nysysimara
если нужен непосредственно код элемента справочника, тогда
КодДК = ТМЦ.Код;
wmatik
нет, нужен реквизит КодДК из справочника ТМЦ
nysysimara
КодДК = Таб.ТМЦ.КодДК;

если колонка в Таб имеет идентификатор "ТМЦ"

а
    КодДК = ТМЦ.КодДК;

берет КодДК из текущей строки табличной части документа, реквизита "ТМЦ"
или переменной "ТМЦ", если у Вас таковая есть
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.