Имя: Пароль:
1C
1С v8
Обновление таб части из обработки
0 skvitronit
 
29.06.17
13:56
Всем привет.
Есть обработка заполнения табличной части документа, после добавления строк в таб часть она не обновляется, в инете конкретных рабочих примеров не нашёл, может кто-то помочь ? Формы - обычные.
1 skvitronit
 
29.06.17
13:57
*Нужно обновление таб части без записи дока.
2 Рэйв
 
29.06.17
14:05
Форма.ИмяТабличногоПоля.Создатьколонки()
3 Рэйв
 
29.06.17
14:06
Или ЭтаФрма.Обновить()
4 skvitronit
 
29.06.17
15:12
(2) (3) не катит, Перечитать() тоже... Не ужели из обработки обновить/перечитать таб часть нельзя ?
5 Гипервизор
 
29.06.17
15:22
Должно обновляться, код в студию.
6 skvitronit
 
29.06.17
15:27
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
        ЗаполнитьТЧ ();
        
    
КонецПроцедуры


Процедура ПриОткрытии()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СпецификацииНоменклатуры.Ссылка
    |ИЗ
    |    Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НоваяСтрока = ТабЧа.Добавить();
        НоваяСтрока.Наименование = ВыборкаДетальныеЗаписи.Ссылка;
    КонецЦикла;
    
КонецПроцедуры

Процедура ЗаполнитьТЧ()
    Док = СсылкаНаОбъект.ПолучитьОбъект();
    
    Для Каждого ТекСтр ИЗ ТабЧа Цикл
        Если ТекСтр.Количество = 0 Тогда
        Иначе
            Для каждого ТекущаяСтрокаСправочника из ТекСтр.Наименование.ИсходныеКомплектующие Цикл
                НоваяСтрока = Док.Материалы.Добавить();
                ТекЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(ТекущаяСтрокаСправочника.Номенклатура.Наименование);
                НоваяСтрока.Номенклатура = ТекЭлемент;
                НоваяСтрока.Количество      = ТекущаяСтрокаСправочника.Количество * ТекСтр.Количество;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
          Док.Записать();
КонецПроцедуры

//В модуле обработки
Процедура Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПолеОбъекта = Неопределено) Экспорт
    
    СсылкаНаОбъект = Объект.Ссылка;
    
    ЭтотОбъект.ПолучитьФорму("Форма").ОткрытьМодально();
    
КонецПроцедуры
7 skvitronit
 
29.06.17
15:36
:/
8 h-sp
 
29.06.17
15:40
(6) это что за херня?

    Док = СсылкаНаОбъект.ПолучитьОбъект();


ты пишешь совсем в другой объект.
9 skvitronit
 
29.06.17
15:43
(8) Док = док в который в тч которого я добавляю строки.
10 h-sp
 
29.06.17
15:44
(9) ты создаешь клоны. В один объект пишешь, другой объект просматриваешь. Неужели не видишь?
11 Гипервизор
 
29.06.17
15:48
Обработка заполнения ТЧ подключается к документу и в форме документа появляется кнопка заполнения ТЧ.
Необходимым условием является наличие экспортной процедуры Инициализировать(), почитайте как ОЗТЧ работает. Вы что-то невероятное наворотили, какие-то лишние процедуры. Зачем?
12 skvitronit
 
29.06.17
15:52
(11) :( первый раз на обычных формах, делал чтобы как-то работало...
13 Гипервизор
 
29.06.17
15:53
И если вам "Нужно обновление таб части без записи дока", то для чего у вас в коде Док.Записать() ?
14 skvitronit
 
29.06.17
15:53
(13) это были тестовые пробы =)
15 Гипервизор
 
29.06.17
15:55
Может тут у вас что-то хитрое и я просто не догоняю?
Что за форму открываете?
Почему нельзя в процедуре Инициализировать() сразу замутить запрос и обход выборки с заполнением ТЧ?
16 skvitronit
 
29.06.17
16:00
(15) запрос кидает данные на форму обработки, там вводятся количество, и после  нажатия кнопки выполнить, должна заполнятся тч дока.
17 h-sp
 
29.06.17
16:02
(16) ну так и пиши

    Количество = ЭтотОбъект.ПолучитьФорму("Форма").ОткрытьМодально();

зачем какую-то фигню придумал с переносами ссылок и созданием армии объектов?
18 skvitronit
 
29.06.17
16:18
(17) не сильно понимаю чем мне это может помочь
19 h-sp
 
29.06.17
16:22
(18) в общем у вас есть процедура

Процедура Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПолеОбъекта = Неопределено) Экспорт

в ней есть Объект, в него и пишите.

типа

              НоваяСтрока = Объект.Материалы.Добавить();
                ТекЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(ТекущаяСтрокаСправочника.Номенклатура.Наименование);
                НоваяСтрока.Номенклатура = ТекЭлемент;
                НоваяСтрока.Количество      = ТекущаяСтрокаСправочника.Количество * ТекСтр.Количество;
20 skvitronit
 
29.06.17
16:28
(19) Мне нужно что бы заполнение тч вызывалось после нажатия на кнопку Выполнить, мне из процедуры нажатия вызывать Инициализировать() и в неё опять же передавать Объект = СсылкаНаОбъект ?
21 h-sp
 
29.06.17
16:31
(20) Объект должен быть, который тебе передан. Он не равен СсылкаНаОбъект. Ты же попал в свою форму из Инициализировать, значит туда и вернешься по кнопке Выполнить. И уже в ней заполняй Объект. А не в каком-то ПриОткрытии.
Независимо от того, куда вы едете — это в гору и против ветра!