Имя: Пароль:
1C
1С v8
Обработка заполнения табличных частей
, , ,
0 nulback
 
24.01.18
21:00
Добрый день уважаемые форумчане. Подскажите пож-та сделал обработку по заполнению табличных частей, через отладку все отлично заполняется и показывает строки в таб части, если запускать из табчасти то она остается пустая. Не могу понять в чем причина? Подскажите плз. Спасибо.
1 trooba
 
24.01.18
21:28
(0) не указана табличная часть, не указан документ. Где код?
2 trooba
 
24.01.18
21:28
(0) Телепаты в отпусках
3 nulback
 
24.01.18
21:38
(1) так через эту же обработку в режиме отладки все ок заполняется.
4 nulback
 
24.01.18
21:41
(3)

Процедура Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПолеОбъекта = Неопределено) Экспорт
    
    
    СчетДляОтбора = ВыбранноеЗначение;
    
    ВыборкаОС = ОстаткиОС(,ВыбранноеЗначение.Значение);
    
    Для Каждого СтрокаОС Из ВыборкаОС Цикл
        
        НоваяСтрока = Объект.ОС.Добавить();
        
        НоваяСтрока.ОсновноеСредство       = СтрокаОС.ОсновноеСредство;
        НоваяСтрока.СтоимостьПоДаннымУчета = СтрокаОС.ВосстановительнаяСтоимость;
        НоваяСтрока.НаличиеПоДаннымУчета   = Истина;
        
    КонецЦикла;
    
КонецПроцедуры
5 Serg_1960
 
24.01.18
22:31
(4) Непонятен контекст вызова обработки (клиент, сервер?), вызывает подозрение обращение к "ВыбранноеЗначение.Значение" (элемент формы?) и есть ли записи в "ВыборкаОС" после всех этих манипуляций.
6 nulback
 
24.01.18
23:05
(5) блин пишу же если запускаю как обработку, через файл -открыть, то документ заполняется. такое ощущение что не обновляется форма после добавления данных в табличную часть.
7 Михаил Козлов
 
24.01.18
23:14
(6) Табличное поле в объекте связано с табличной частью?
8 Ёпрст
 
24.01.18
23:17
(6) ты просто путаешь Объект и ССылку на объект..
9 Ёпрст
 
24.01.18
23:21
хотя не, в коде всё верно, окромя вот этого:
ВыбранноеЗначение.Значение
10 Ёпрст
 
24.01.18
23:22
нет там ничего в момент вызова Инициализировать...

воткни Сообщить() в код и увидишь сам, что там кукишь и останков тоже нема. вот ничем и не заполняется ТЧ дока.
11 nulback
 
24.01.18
23:25
(9) да даже без этого все равно пустая табличная часть убрал если вам мешает
сделал так ВыборкаОС = ОстаткиОС();
Выборка ОС количество 5,
После цикла Объект.ОС количество -5 на форме пустая таб часть
12 nulback
 
24.01.18
23:26
(10) воткул Сообщить() сообщение выводится
13 Ёпрст
 
24.01.18
23:31
Как ты проверяешь, что ТЧ пустая ?
14 Ёпрст
 
24.01.18
23:32
в цикл хоть попадает ?
15 Ёпрст
 
24.01.18
23:32
туда воткни сообщить для проверки
16 Ёпрст
 
24.01.18
23:35
если после цикла, количество строк - 5, то всё заполняет у тебя. Просто типы не совпадают. вот и видишь ты 5 пустых строк.
17 Мимохожий Однако
 
24.01.18
23:41
(11) Как называется табличная часть и где в коде добавление строк в эту несчастную табличную часть?
18 Franchiser
 
гуру
24.01.18
23:50
Это под толстый клиент?
19 nulback
 
24.01.18
23:54
(17) табличная часть "ОС" называется, добавляется тут Объект.ОС.Добавить()
(18) да толстый клиент
(13) я же вижу форма открыта из которой запускаю обработку, которая подключена в справочник как обработка заполнения табличных частей
20 Franchiser
 
гуру
25.01.18
00:11
(19) может у тебя не обновилась обработка в справочнике внешних обработок? Повставляй Сообщить()
21 Serg_1960
 
25.01.18
11:04
(6) "такое ощущение что не обновляется форма" - ну так поставь в алгоритм Обновить() :(
22 Гипервизор
 
25.01.18
11:13
А почему ИмяТабличнойЧасти = Неопределено?
Разве при подключении обработки не надо указать документ и ТЧ, которую обработка будет заполнять? Попробуйте убрать "= Неопределено" и написать так Объект[ИмяТабличнойЧасти].Добавить();
23 Serg_1960
 
25.01.18
11:20
Да, уж... у автора в алгоритме много скрытых возможностей на тему "сам себе злобный Буратино"(цы) :(

(22) В данном алгоритме второй и третий параметры обработки вообще не используются. От слова "совсем" :)
24 nulback
 
25.01.18
12:03
повставлял везде где только можно сообщить в итоге получил следующую картину:
Заходим в документ. Меню заполнить добавленная мной обработка
Документ: Инвентаризация ОС 00001 от 01.01.2018
Количество строк в выборке: 0

Заходим в справочник внешних отчетов обработок табличных частей, сохраняю в отдельную папку обработку по которой не заполняется. Далее рисую форму для обработки на форме размещаю реквизит СсылкаНаОбъект - Тип значения ДокументСсылка.ИнвентаризацияОС, в модуле в процедуре "КнопкаВыполнитьНажатие" пишу  Инициализировать(СсылкаНаОбъект.ПолучитьОбъект(), "ОС", ТабличноеПолеОбъекта = Неопределено)
Далее через файл - открыть, указываю наш созданный документ в итоге кроме редактирования формы обработки не поменялось ничего, но имею следующую ситуацию:

Документ: Инвентаризация ОС 00001 от 01.01.2018
Количество строк в выборке: 1
Добавляем строку в табчасть
25 nulback
 
25.01.18
12:05
(24) заменяю вновь подредактированной обработкой получаю заполняя из документа:

Документ: Инвентаризация ОС 00001 от 01.01.2018
Количество строк в выборке: 0

Открываю ее же заново через файл открыть
Документ: Инвентаризация ОС 00001 от 01.01.2018
Количество строк в выборке: 1
Добавляем строку в табчасть
26 Serg_1960
 
25.01.18
12:25
(24)  "Инициализировать(СсылкаНаОбъект.ПолучитьОбъект()..." - sorry, но это на грани бреда. В типовых конфигурациях в первый параметр вставляется "ЭтотОбъект".
Если хочешь, то проверку типа первого параметра можно сделать в обработке и привести к нужному типу в переменную.

(25) Если желаешь, то обращение к "ВыбранноеЗначение" можно уточнить через ЭтаФорма...ЭлементыФормы...БлаБлаБла...

Но, обращение в элементам формы  - это моветон :(
27 Serg_1960
 
25.01.18
12:32
Фишка в том, что Вы можете получить трудновыявляемую проблему, связанную с областью видимости переменных.
28 nulback
 
25.01.18
12:39
(26) спс за разьяснения
(27) ну вот я просто не могу понять, почему один и тот же запрос, выдает через различные варианты не одинаковый результат, кстати в консоли запросов, запрос который формирует выборку тоже имеет одну строку, в итоге запрос одинаков, а результат заполнения различными методами разный.
29 Serg_1960
 
25.01.18
13:12
(28) Мне трудно ответить на Ваш вопрос так, как я не знаю что в функции ОстаткиОС() находится. В принципе, чисто теоретически рассуждая, можно предположить то, что эта функция тоже контекстно-чувствительная.
30 Franchiser
 
гуру
25.01.18
13:34
(28) ВыборкаОС  у тебя пустая когда ты запускаешь из внешних обработок, ищи причину в этой функции.
Напиши Сообщить(ВыбранноеЗначение.Значение)
Напиши Сообщить(ВыбранноеЗначение)
Приведи код функции ОстаткиОС()
Независимо от того, куда вы едете — это в гору и против ветра!