8.х Заполнение значений в поле табличного документа формы документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем bel4onysh, 8 сен 2010.

  1. TopicStarter Overlay
    bel4onysh
    Offline

    bel4onysh

    Регистрация:
    7 сен 2010
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Всем доброго времени суток!

    Вопрос по заполнению значений поля табличного документа в форме.
    У документа есть две формы: 1 - основная, в ней заполняются все реквизиты документа; 2 - форма с полями табличного документа (как в декларациях). Пользователь заполняет основную форму, проводит или записывает документ, нажимает на кнопку и должна открыться 2-я форма, показывающая как будет выглядеть печатный документ, т.е. ячейки поля табличного документа должны содержат значения, соответствующие заполненному документу.

    Как при открытии 2ой формы заполнить значения в ячейках по данным документа? Надеюсь понятно?

    Посмотреть вложение 5248

    Посмотреть вложение 5249

    Вложения:

  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    самое простое: сделать в макете одну область, параметры назвать по имени реквизитов, которые заполняются,

    далее сделать:

    Область.Параметры.Заполнить(ЭтотОбъект.Ссылка);
    ТабДок.Вывести(Область);

    надеюсь, остальной код, нужный для вывода табличного документа, вы знаете.....
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ну можно подсмотреть как сделана в типовых налоговая отчетность. Хотя там конечно Ж.. Крыша поедет пока разберешься что откуда. Но смысл, что в табличном поле куча поименованных ячеек, куда все выводится.
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    ну ты дал совет :)
  5. TopicStarter Overlay
    bel4onysh
    Offline

    bel4onysh

    Регистрация:
    7 сен 2010
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Сделать в макете одну область и заполнить параметры конечно можно, вот только у меня не макет, а ПолеТабличногоДокумента в форме. Можно конечно создать макет для каждого поля таб. документа (а у меня их 26) в форме, потом отображать макеты с заполненными параметрами. Но мне хотелось бы чтоб заполнялись именно значения ячеек.

    Пока я дошел до этого:


    Код:
    Процедура ПриОткрытии()
    
    ПолеТабличногоДокумента1 = ЭлементыФормы.ПолеТабДок1;
    
    Для Инд=0 По ПолеТабличногоДокумента1.Области.Количество()-1 Цикл
    
    КоличествоОбластей = ПолеТабличногоДокумента1.Области.Количество();
    ОбрабатываемаяОбласть = ЭлементыФормы.ПолеТабДок1.Области[Инд];
    
    ОбрабатываемаяОбласть.Значение = (НЕ ЗНАЮ, ЧТО ТУТ НАПИСАТЬ);
    
    КонецЦикла;            
    
    КонецПроцедуры
    
    
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Зато по фэн-шую.. :) В лучших традиция. Значок 1С:Совместимо обеспечен.. :)
  7. TopicStarter Overlay
    bel4onysh
    Offline

    bel4onysh

    Регистрация:
    7 сен 2010
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Смысл понятен, а как вывести?
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    в случае прямой работы с таб.док. никаких областей нет - она одна - весь документ.
    бегать надо по ячейкам, т.е. Табдок.Область(1,1) - первая ячейка.
    Значение в данном случаее будет текст, т.е.
    ТабДок.Область(1,1).Текст = <ЗначениеРеквизита>;

    это какой-то мазохистский фэн-шуй :)
  9. TopicStarter Overlay
    bel4onysh
    Offline

    bel4onysh

    Регистрация:
    7 сен 2010
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Как раз этого я и пытаюсь избежать, то есть, конечно, можно так сделать, но у меня больше 100 именованных ячеек предполагается. Заполнять таким образом каждую не хотелось бы ((. Вот и хочется выяснить, можно ли как-нибудь их заполнить все сразу из запроса, например, или еще как? )) Имена в ячейках совпадают с именами реквизитов документа.
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Для примера, форма отчетности из типовой (старался найти попроще, скинул самую маленькую которую нашел).
    Там обратите внимание допустим на функцию "НачальнаяПодготовкаФормы()", и допустим "ЗаполнитьСведенияОбОрганизации()". В первой мы получаем в переменную мФорма, значение текущего табличного поля, а для примера во второй выводим в поле табличного документа ее название "мФормаОтчета.Области.ОргНазв.Значение = НаимЮЛПол;"

    Вложения:

  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Да никак не получится. Либо делаете макет с нужными параметрами в нужных ячейках, либо бегаете по ячейкам сами и устанавливаете текст - другого не дано.
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ну так это. А если так:
    Код:
        
    Область = Элементыформы.ПолеТабличногоДокумента.ПолучитьОбласть(...);
    Область.Параметры.Заполнить(МояВыборка);
    
    
    
    ?

    З.Ы. "ПолучитьОбласть" - там можно задавать область по строкам и колонкам.
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    кхм, это тоже самое, что ТабДок.Область(Х1,Y1,X2,Y2)
    заполнять, однако, можно тока МАКЕТ, у ТабДок, однако, нет метода .Параметры.Заполнить()
  14. TopicStarter Overlay
    bel4onysh
    Offline

    bel4onysh

    Регистрация:
    7 сен 2010
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Да уж, как видно, придется заполнять каждое значение по отдельности, либо заработать себе гемор на выяснении того, как это реализовано в типовых или делать через макет "СоставПоказателей", как в демо-конфах ((.

    Будем работать )
  15. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ооо... хотите идею (сам бы я правда так делать не стал.. :) )
    что-то вроде:
    Код:
    Для каждого Реквизит Из ДокументСсылка.Метаданные().Реквизиты Цикл
    МойРеквизит = Реквизит.Имя(); //представление() ??
    Попытка
    Элементыформы.ПолеТабличногоДокумента1.Области[МойРеквизит].Значение = Выборка[МойРеквизит];
    Исключение
    
    ;
    
    КонецПопытки;
    КонецЦикла;
    
    
    
    
    
    На третий раз получилось отредактировать..
  16. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    а имена областям кто давать будет? :)
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ммм.. а оно не надо. Попробуйте.

    Области[МойРеквизит] = Области.МойРеквизит
  18. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    для обращения к области Табдок по имени, нужно прежде поименовать её. Кто это будет делать? руками сто_тыщь_мильёнов имен заводить у нужных ячеек? :)
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Не, не понял. Сто тыщ мильенов имен в любом случае заводить надо будет. Хоть в ПолеТабличногоДокумента как имя элемента управления, хоть в ТабличныйДокумент как Параметр.
    Может мы о разных вещах говорим?
    Вот смотрите:
    Код:
    	Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка Как Поле1
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", элементыформы.полеввода1.Значение);
    
    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Элементыформы.ПолеТабличногоДокумента1.Области["Поле1"].Значение = ВыборкаДетальныеЗаписи["Поле1"];
    КонецЦикла;
    
    
    При этом на форме размещено ПолеТабличногоДокумента, в котором у одной из ячеек (абсолютно произвольной) в свойствах стоит галочка "Содержит значение", и для нее задано имя "Поле1". Все.
    И все работает. Никакие такие областя больше именовать не надо. :)
  20. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    это все прекрасно, но ТС нужно в НУЖНЫЕ ему ячейки ТабДока заносить значения реквизитов из документа.

    Как вы предлагаете в цикле бегать по НУЖНЫМ ячейкам ТабДок-а? Вот в этом вся загвоздка.

    Если бы ему тупо столбец или строчку надо было бы вывести, то вопросов не возникло бы

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