Вход | Регистрация

  1  2   
1С:Предприятие ::

Метки:

Как работать с табличной частью открытой программно формы?

Ø [gr13, 29.03.04 - 11:20]
Я
   Мученик
25.03.04 - 12:15
Совсем замучился: нужно из документа Док1 открыть Док2 и программно создать строки в табличной части Док2. Форма.Док2 имеет две закладки и слои.
 Делаю так:
     Конт=0;
     ОткрытьФорму("Документ.Док2",Конт,);
     Если ТипЗначения(Конт)=100 Тогда
         Конт.ДатаДок=ДатаДок;
         Конт.Фирма=Фирма;
         Конт.Контрагент=Контрагент;
         Конт.Проект=Проект;
         Конт.Форма.Закладки.ТекущаяСтрока(2);
         Конт.Форма.ИспользоватьСлой("Шапка,ТабличнаяЧасть,Подвал");
         Конт.НоваяСтрока();
         Конт.Содержание="Текст";
         Конт.Форма.Обновить(1);
    КонецЕсли;
Все получается, кроме создания строки и присвоения значений атрибутам сторки - не работает метод НоваяСтрока(); ПОСОВЕТУЙТЕ, ЧТО ДЕЛАТЬ????
 
  Рекламное место пустует
   dvk
 
1 - 25.03.04 - 12:20
Попробуй
Док1.ВыгрузитьТабличнуюЧасть(ТаблЗнач);
ЗагрузитьТабличнуюЧасть(ТаблЗнач);
   GrayT
 
2 - 25.03.04 - 12:21
Или ПолучитьСтрокуПоНомеру()
   Рупор абсурда
 
3 - 25.03.04 - 12:54
Док = СоздатьОбъект("Документ.Док2");
Док.Новый();
Док.ДатаДок=ДатаДок; 
...
Док.Записать();
ОткрытьФорму(Док,Конт);
   327
4 - 25.03.04 - 12:59
(3) Некрасиво ....
   Рупор абсурда
 
5 - 25.03.04 - 13:04
(4) Красиво ...
   It is me
 
6 - 25.03.04 - 13:14
Рабби, что хорошего в обрезании?
Во-первых, это красиво...
   Мученик
7 - 25.03.04 - 13:21
В том-то и дело, что в Док1 нет табличной части, поэтому не могу
   Док1.ВыгрузитьТабличнуюЧасть(ТаблЗнач); 
   ЗагрузитьТабличнуюЧасть(ТаблЗнач);

и не нужно мне записывать док2 - это должен решить юзер в диалоге!
сейчас попробую через ТЗ
   Рупор абсурда
 
8 - 25.03.04 - 13:27
(7) Штатными средствами пока этого никто сделать не смог ...
   327
9 - 25.03.04 - 14:25
(7) Легко делается.... Причем штатными средствами .... И с табличной частью.... и без табличной части .... И юзер решает, что делать с этим доком ....
   327
10 - 25.03.04 - 14:25
тьфу.... (9) - это к (8)
 
 
   Рупор абсурда
 
11 - 25.03.04 - 14:27
(9) Гон!
   Кое-кто@где-то.там
12 - 25.03.04 - 14:38
Присоединяюсь к 11.
Уточню: никто, средствами языка, не смог открытьформу незаписанного документа (созданного ч/з СоздатьОбъект) или заполнить табличную часть открытой формы незаписанного документа ...
   327
13 - 25.03.04 - 14:43
Хи-Хи.....
Вся задача (0) решается через  ОткрытьФорму.......

с параметрами.... И небольшим дописыванием
либо ПриОткрытии
либо ВоодНаосновании... смотря что нравится.....


лично мне нравится Ввод На основаниии
   Кое-кто@где-то.там
14 - 25.03.04 - 14:44
Забыл добавить:
"... не изменяя модуля формы самого документа"
   327
15 - 25.03.04 - 14:51
(12)
"заполнить табличную часть открытой формы незаписанного документа ... " --- ласково его надо ..... ласково ... за вымя...

Он же только родился... а ты его грязными руками....

Будь проще .... и документ к тебе потянется ....
   327
16 - 25.03.04 - 14:52
(14) ....
"... не изменяя модуля формы самого документа"

Вроде и это через шаблон раскручивал кто то.... но мне шаблон не нравится.... так что не подскажу как... но решение было ....
   Кое-кто@где-то.там
17 - 25.03.04 - 14:53
(15) представил описанную картину. содрогнулся ... :)
   327
18 - 25.03.04 - 14:56
А коньяк то пьшь? .... так вот знай - его гонят из коровы ....
   Рупор абсурда
 
19 - 25.03.04 - 14:58
Я понял ..., pit сегодня чем-то возбуждён ...
   gr13
 
20 - 25.03.04 - 15:09
послушайте а нельзя так:
Док1 = создатьОбъект("Документы.НекийДокумент1");
Док1.Новый();
....

//присваиваем нужные атрибуты шапки


....
ТаблицаЗаказа.ВыбратьСтроки();
Пока ТаблицаЗаказа.ПолучитьСтроку() = 1 Цикл
Док1.НоваяСтрока();
Док1.Артикул = ТаблицаЗаказа.Товар.Артикул;
Док1.Товар = ТаблицаЗаказа.Товар;
Док1.Единица = ТаблицаЗаказа.Товар.ЕдиницаПоУмолчанию;
Док1.Количество = ТаблицаЗаказа.Кол;
Док1.Коэффициент = 1;
Док1.Цена = ТаблицаЗаказа.Цена;
Док1.Сумма = ТаблицаЗаказа.Сумма;
КонецЦикла;
Док1.Записать();

соответственно последнюю строку можно сделать через попрос пользователю
   Рупор абсурда
 
21 - 25.03.04 - 15:12
(20) Смело! ... Глупо, но смело! ...
   327
22 - 25.03.04 - 15:25
Да напишу я последовательность действий для (0)

Попозже..... сейчас курицу жарить надо... кусать хоцетеся ....
   gr13
 
23 - 25.03.04 - 15:27
(21) Рупор, я понимаю, что не большой спец по программированию в 1с, мне интересно в таком случае как это сделать не глупо? данный алгоритм у меня уже работает.А как по другому, более просто- пока не знаю.
   Рупор абсурда
 
24 - 25.03.04 - 15:29
(23) Не обижайся ...
   gr13
 
25 - 25.03.04 - 15:31
(24) я не обижаюсь- на обиженных воду возят, мне интересно КАК?
   Рупор абсурда
 
26 - 25.03.04 - 15:34
(25) Когда никто не знает ответа на вопрос, очень уместным будет, задать его Рупору ...
   Рупор абсурда
 
27 - 25.03.04 - 15:35
(26)+ Ты (8) видел?
   gr13
 
28 - 25.03.04 - 15:35
(26) а что Рупор тоже не знает?...
   gr13
 
29 - 25.03.04 - 15:36
(27) видел, но 327 говорил, что можно вот и интересно, да и почему глупо то что я написал? Неужели надо делать как-то по другому?
   Рупор абсурда
 
30 - 25.03.04 - 15:36
(28) Невероятно, правда?
   Рупор абсурда
 
31 - 25.03.04 - 15:38
(29) 327 любит растопыренными пальцами покрутить ...
И это у него хорошо получается ...
   gr13
 
31 - 25.03.04 - 15:38
(30) все мы люди...
   gr13
 
33 - 25.03.04 - 15:39
(31) но ты написал, что глупо почему? как это сделать по другому мне действительно интересно
 
 
   Дмитрий
 
34 - 25.03.04 - 15:46
(23) Твой пример правильный. Только здесь немножко не о том. (Это на правах апа, чтобы Некоторые после курицы не забыли об обещанном :)
   Рупор абсурда
 
35 - 25.03.04 - 15:47
(33) Глупо, потому, что это вовсе не ответ на вопрос ...
А смело, потому, что я то тут и молчание не входит в список моих привычек ... :))
   gr13
 
36 - 25.03.04 - 15:49
(35) спасибо, улыбнулся хоть, но во всяком случае хотел как лучше, а получилось как всегда
   Рупор абсурда
 
37 - 25.03.04 - 16:03
(36) Если ты сможешь сделать сабж, я первый скажу, что ты монстр! ...
Никто ещё этого не сделал, равно как никто и не доказал, что сделать этого невозможно ...
   Мученик
38 - 25.03.04 - 16:30
Рупор, по-моему, совершенно прав. Без записи дока не удается работать с его табличной частью...Убедился. Поскольку задача стояла управлять формой (заполить реквизиты шапки и табл.) дока, но сам док не менять, то ПриОткрытии() и ВводНаОсновании() не хотелось бы модифицировать... Тем не менее, если 327 напишет последовательность действий - буду рад!
   Рупор абсурда
 
39 - 25.03.04 - 16:33
(38) Я знаю 2 способа, как это можно сделать ...
Оба они внештатные ...
Один очень внештатный, но зато очень простой ...
Второй не очень внештатный, но зато очень извращённый ...
   Мученик
40 - 25.03.04 - 16:39
Рупор, эти способы - очень секретные?
   Рупор абсурда
 
41 - 25.03.04 - 16:41
(40) Нет, не секретные ... Обычные ...
   Z1
42 - 25.03.04 - 16:45
(0) pit прав. Читай его внимательно и все получиться.
   Мученик
43 - 25.03.04 - 16:46
Почему-бы не опубликовать?
   Дмитрий
 
44 - 25.03.04 - 17:07
В принципе, если использовать ПриОткрытии, то можно заполнять табличную часть при помощи глобальных переменных. Одна из них флаг Заполнять/Не заполнять, другая таблица значений, из которой берутся данные табличной части.
   327
45 - 25.03.04 - 17:11
Обработка
//*******************************************

Процедура Сформировать()  
    
   // делаем нужные дела по добыванию из базы 

   // нужной инфы 

    
   // затем формируем данные для передачи в документ

    
    
    сз=CreateObject(\"ValueList\");            
    тз = CreateObject(\"ValueTable\");        
    
   // загоняем в СЗ нужные значения реквизитов шапки

    
    СЗ.Set (\"ИмяПараметра\", ЗначениеПараметра);  
    СЗ.Set (\"Контрагент\", ВыбКонтрагент); 
    ....... 
    остальные параметры
    
   // в ТЗ по результатам запроса или иных действий

   // формируем табличную часть будущего дока

   // то, что там нужно...

      
    
   // загоняем ТЗ в параметры            

    СЗ.Set (\"ТЗ\", ТЗ); 
    
   // открываем новый документ 

   // ОБРАТИТЬ ВНИМАНИЕ НА ПЕРВЫЙ ПАРАМЕТР 

   // в ОткрытьФорму

    
    
    OpenForm(\"Document.РасходнаяНакладная\",СЗ); 
    
   // закроем форму обработки

    Form.Close(0);
КонецПроцедуры                                       

=====================================================

в доке в предопределенной процедуре InputNew
пишем

if ValueTypeStr(Form.Parameter) =\"СписокЗначений\" then 
   // достаем из СЗ все туда уложенное 

    
   // т.е. параметры зависят от документа 

    
    Контрагент=Form.Parameter.Get(\"Контрагент\");
    Договор   =Form.Parameter.Get(\"Документ\"); 
                              
   // достаем ТЗ

    ТЗ= Form.Parameter.Get(\"ТЗ\"); 

   // из полученной ТЗ - заполняем табл часть

    
   //-----------------------------------------

    for Индекс = 1 to ТЗ.LinesCnt() do 
        ТЗ.GetLineByNumber(Индекс);    
        
        NewLine(); 
       ...............
       заполнение новой строки по ТЗ
       ...............
           
    endDo;   
    
   // завершающие действия -

   // по смыслу дока 

   // т.е. многое можно взять из того, что делается 

   // при интерактивном вводе...

   //-----------------------------------------   

else   
   // здесь - действия, которые отрабатываются при 

   // интерактивном вводе нового дока

    
endIf; 


Документ открыт и не записан... но заполнен
   327
46 - 25.03.04 - 17:19
Хрня какая то.... Обратные косые я не писал ....

чой то не то скрипт творит.....
   Рупор абсурда
 
47 - 25.03.04 - 17:20
(42) В чём он прав?
(43) А тебе какой больше нравится?
(45) Серёжка Осипов отдыхает!
   327
48 - 25.03.04 - 17:22
да... можно как вариант попробовать воткнуться в процедуру глобальника, которая отрабатывает в при открытии.. (в бухии это глПроверкаРазрешенияРедактирования)

и попробовать сделать то, что в ПриОткрытии в ней ... тогда доки править не надо....

Но в любом случае надо менять (дописываать) конфу ...
   Дмитрий
 
49 - 25.03.04 - 17:25
(45) Круто. Ничего не скажешь.
 
  Рекламное место пустует
   327
50 - 25.03.04 - 17:29
Как вариант - можно разделить действия на 2 пинка ...

Первым открыть форму нового дока
Вторым - заполнить форму нового дока...

Но зачем ненужный геморой ....
   327
51 - 25.03.04 - 17:30
(49) - чего здесь крутого? Последовательное использование стандартных методов .... и процедур ....
   Мученик
52 - 25.03.04 - 17:32
(45)327 - спасибо, попробую, я все мучился с управлением из открывающего дока, действительно можно передать все в открываемый и там обработать. Единственно, придется подправить модуль формы стандарного дока конфы, не хотел я его трогать...
(41)Рупор, все же, если знаешь изящный способ - не томи!
   Рупор абсурда
 
53 - 25.03.04 - 17:34
(52) Их два, оба я знаю! Скажу больше, один из них мой! Тебе какой нравится?
   Мученик
54 - 25.03.04 - 17:37
(53) На твой выбор: какой больше по душе
   Дмитрий
 
55 - 25.03.04 - 17:39
(51) Ну, до такой последовательности пусть и стандартных методов и процедур еще додуматься надо. Только не думая, что я подлизываюсь ))
   327
56 - 25.03.04 - 17:41
(53) Методика с RollBack.....  не очень нравится ....
   Рупор абсурда
 
57 - 25.03.04 - 17:45
(54) Лучше не мой, мой сложный очень ...
Ладно, устал я тебя мучить ...
Колюсь :))
Есть компонента от АЛьФ'а FormEx называется
http://consult.legion.ru/alf/formex.shtml
Очень классная вещичка, рекомендую ...
Так вот: для решения твоей задачки её всего лишь загрузить надо ...
ЗагрузитьВнешнююКомпоненту()
После этого, все что не получалось, само собой получится ...
Это не шутка!
Всего одна строчка, и твой код из (0) заработает сам собой ...
   Рупор абсурда
 
58 - 25.03.04 - 17:48
(56) "не очень нравится ...", это потому, наверно, что нерабочая она ...
Ты же не думаешь, что я буду нерабочий метод предлагать? ...
   Композитор
 
59 - 25.03.04 - 17:49
(55) ... еще додуматься надо. Только не думая...
   327
60 - 25.03.04 - 17:50
(58) Да работает она.... но иногда непонятки...

Альфовская компонента - хорошо... но я уже налетел на какой то версии винды.... падала одноЭсина....

P.S. ты еще TurboBl вспомни....
   Рупор абсурда
 
61 - 25.03.04 - 17:51
А что 327 с подлизами делает? Подлизываться к нему, ващще, стоит или нет?
   Рупор абсурда
 
62 - 25.03.04 - 17:53
(60) Да, Да ... Она работает ... Круто работает ... Пока юзер вдруг док записать не захочет ...
   327
63 - 25.03.04 - 17:55
стОит  или стоИт ?
   Мученик
64 - 25.03.04 - 17:57
(57) Спасибо, Рупор! А ты ее часто используешь?
Спасибо ака АЛьФ!!!
Буду ее пробовать уже завтра...
   Дмитрий
 
65 - 25.03.04 - 17:57
(61) Он их в погребе закапывает, а потом лампу ультрафиолетовую от УПСа включает. Горит 40 минут.
   Рупор абсурда
 
66 - 25.03.04 - 18:09
(64) Со всей ответственностью заявляю, я не АЛьФ!
(65) Тогда не буду подлизываться! Тем более, что обидел он меня когда-то очень-очень ...
   Мученик
67 - 25.03.04 - 18:44
(66) Я просто поблагодарил АЛьФа отдельно
   Рупор абсурда
 
68 - 25.03.04 - 19:00
(67) Меня там смутило "ака" ...
   Рупор абсурда
 
69 - 25.03.04 - 19:01
(67) Хорошо, что ты не выбрал второй геморройный способ без использования ВК ...
   Мученик
70 - 25.03.04 - 19:12
(69) А способ с ВК FormEx -  первый геморройный?
   Рупор абсурда
 
71 - 25.03.04 - 19:55
(70) :))
   Дмитрий
 
72 - 26.03.04 - 09:29
(56) Так? И почему не нравится? Зато не надо в модуль формы документа лезть. И всякие компоненты подключать
        НачатьТранзакцию();
        Док=СоздатьОбъект("Документ.<>");
        Док.Новый();
        Док.ДатаДок=РабочаяДата();
        Док.УстановитьНовыйНомер();
//Заполняем документ как угодно, например так...

        Док.НоваяСтрока();
        Док.НоваяСтрока();
        Док.Записать();                          
        Конт=0;   
        ОткрытьФорму(Док.ТекущийДокумент(),Конт);
        ОтменитьТранзакцию();
   327
73 - 26.03.04 - 13:32
А если в документе юзерь нажмет кнопочку ОК..... то все так ХХХХХХХХХ .... мало не покажется ....

Без хитрого финта эта методика не работает ...
   Рупор абсурда
 
74 - 26.03.04 - 13:39
(73) "Хитрый финт" отменяет запись, создаёт и записывает копию дока ... и подсовывает глупому юзеру уже его форму?
   Дмитрий
 
75 - 26.03.04 - 15:01
(73) Возможно. счас попробую ОК нажать ))
   Рупор абсурда
 
76 - 26.03.04 - 15:04
(75) Не на рабочей конфе только пробуй ...
   Дмитрий
 
77 - 26.03.04 - 15:05
Да. Не пашет )) А так все классно было ))
   327
78 - 26.03.04 - 17:48
(77) Обломался? А ведь можно..... Но геморойно ...
   Рупор абсурда
 
79 - 26.03.04 - 17:58
(78) Опять звездишь? Без переделок в конфигурашке - нельзя!
   Рупор абсурда
 
80 - 26.03.04 - 17:59
(79) Т.е. не так ..., не "нельзя", а нету такого решения пока ...
... и у тебя тоже ...
   Рупор абсурда
 
81 - 26.03.04 - 18:02
(80)+ Штатный ввод на основании я не учитываю, как частный тривиальный случай ...
   327
82 - 26.03.04 - 18:05
Даже подключение альфовской компоненты - уже переделка ....

Кстати, ты не пробовал TurboBl?  Весьма рекомендую.... Особенно нравится ее управление ....
   Рупор абсурда
 
83 - 26.03.04 - 18:06
Ещё я знаю, как можно штатно заполнить одну строку в ТЧ ..., только одну ...
   Рупор абсурда
 
84 - 26.03.04 - 18:06
(82) Почему переделка? Я могу подгрузить её из внешнего отчёта ...
   327
85 - 26.03.04 - 18:28
Уговорил, уговорил...

Да, без переделки кода некоторые вещи сделать нельзя...
С переделкой - можно ....
Имеются в виду именно штатные возможности...

С формЭксом и дурак сумеет....
   Рупор абсурда
 
86 - 26.03.04 - 18:32
(85) Хе ... :))
Я делал это и без ФормЭкса ...
   327
87 - 26.03.04 - 18:44
БПр......
   327
88 - 26.03.04 - 18:44
Но лучше ну ее ХХХХХХХ
   Рупор абсурда
 
89 - 26.03.04 - 18:49
(87) Я не знаю (не понял), что это ...
Я делал с использованием скриптов (WSH), если если интересно, могу намылить ссылочку ...
   327
90 - 26.03.04 - 19:27
Быстрая Продажа
   327
91 - 26.03.04 - 19:28
А WSH - зависимость от среды исполнения.... Охота париться ?
   Рупор абсурда
 
92 - 26.03.04 - 19:37
(91) Не, не охота ... Гемор ещё тот ...
Пусть уж лучше АЛьФ в таких случаях потрудится :))
   skunk
 
93 - 27.03.04 - 01:39
(89)интересно... намыль...
(91)а под чем работает 1с, где нету wsh?
   spock
 
94 - 27.03.04 - 12:39
А мне вот как-то захотелось сделать такую фишку:
В документе Инвентаризация сделать кнопку "Заполнить" - заполнение таб. части.
По нажатию этой кнопки должна открываться обработка (НЕ МОНОПОЛЬНО), в которой выполнялся множественный подбор ТМЦ в список на форме. Потом нажав кнопку выполнить, обработка делала запрос на остаток по подобранным товарам и переносила в документ.
Сначала бился в лоб....что зря.
Потом выяснилось, что делается элементарно.
Смысл:
Обработка сделав запрос, делала открытие того самого документа

глТаблицаДляПодбора = Табл; // это глоб. переменная типа ТаблицаЗначений
Если Докум.ТекущийДокумент().Выбран() = 1 Тогда// Докум - контекст документа 

                                               //Инвентаризация

   ОткрытьФорму(Докум.ТекущийДокумент(), Докум);// если док. записан, то                                                        // открываем его же.

Иначе
   ОткрытьФорму("Документ.Инвентаризация", Докум);// не записан, откроем новый

                                                  // если заметили, без "#"

КонецЕсли;

А в документе дописываем предопределенную процедуру ПриПовторномОткрытии()

Процедура ПриПовторномОткрытии()
  Если ТипЗначенияСтр(глТаблицаДляПодбора) = "ТаблицаЗначений" Тогда
    Если глТаблицаДляПодбора.КоличествоСтрок() > 0 Тогда
      ЗагрузитьТабличнуюЧасть(глТаблицаДляПодбора);// загрузили в док. строки

      глТаблицаДляПодбора.УдалитьСтроки();// очистили глоб. ТЗ, так пров. на                                              // кол. строк (см. выше)КонецПроцедуры


ВСЕ!!!
А теперь почему я использовал глоб. ТЗ?
Потому как мне нужен был контекст докуента в обработке, на случай, если документ закроют, пока открыта обработка. Иначе получается некрасивая ошибка, кто знает поймет :-)
   GrayT
 
95 - 27.03.04 - 12:55
А что ОбработкойПодбора воспользоваться нельзя было? Или внешняя обработка ?
   spock
 
96 - 27.03.04 - 13:01
Ну можно было весь справочник загнать в документ, потом по кнопке удалить товары с остатком = 0. Но хотелось изящного решения.
   327
97 - 27.03.04 - 13:11
Накручено то....
Можно было воспользоваться либо формой списка в справочнике
Либо через подбор (форма списка или обработка в конфе)...
Либо затолкать запрос прямо в форму дока...
   romix
 
98 - 27.03.04 - 13:16
Решения, как минимум, три:
1) Ввод на основании.
2) Записать текущий документ - создать новый - открыть форму нового.
3) ОткрытьФорму("Документ.ХХХХХ", Контекст); Контекст - это ключевое слово, см. книжки; этот способ позволяет не сохранять документы.
   spock
 
99 - 27.03.04 - 13:22
2(pit)Ну вот нужна была мне конфетка :-)
Чета давно не ходишь на тяпницы...
   327
100 - 27.03.04 - 13:23
Холодно

  1  2   

Список тем форума
Рекламное место пустует   Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует