Имя: Пароль:
1C
1С v8
Обход данных таб части
0 dred999
 
21.06.17
14:34
Всем привет!
Бухгалтерия предприятия, редакция 3.0 (3.0.42.46)
Есть некий документ с таб частью "Полуфабрикаты".
В модуле формы заполняю эту таб часть, затем лезу в процедуру модуля объекта чтоб обойти эту таб часть а, но метод Полуфабрикаты.Выгрузить() говорит что она пустая!!!
Что я не правильно делаю ?
По пробовал в модуле форму после заполнения записать документ
        ДокументОбъект = РеквизитФормыВЗначение("Объект");
        ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
И только потом идти в модуль объекта дабы обойти ее но когда
делаю вызов процедуры в модуле объекта:
    Рек = РеквизитФормыВЗначение("Объект");
    Структура = Рек.ОбойтиТабПолуфабрикат();
вообще начинает ругаться"Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!"
1 HEKPOH
 
21.06.17
14:37
(0) "В модуле формы заполняю эту таб часть" - таб. часть нужно заполнять в модуле объекта
2 polosov
 
21.06.17
14:38
(1) Перегрелся чтоле?
(0) Показывай как заполняешь. И опиши чего хочешь.
3 HEKPOH
 
21.06.17
14:39
(2) обоснуй
4 polosov
 
21.06.17
14:40
(3) Если ты находишься в форме, то заполняй в форме. Зачем модуль объекта?
Если надо сделать серверные вызовы - пжалста, но к модулю объекта обращаться с формы это моветон.
5 dred999
 
21.06.17
14:41
(2) Ща покажу
6 HEKPOH
 
21.06.17
14:42
(4) Если ты полюбэ идешь в модуль объекта ("затем лезу в процедуру модуля объекта чтоб обойти эту таб часть"), то  и заполнял бы в объекте. Не?
7 dred999
 
21.06.17
14:42
&НаСервере
Процедура ЗаполнитьТаблицуПолфабрикаты(Идентификатор,Цех,пПродукция);
Отбор = Новый Структура;    
СтрокаПолуфабриката = Дерево.НайтиПоИдентификатору(Идентификатор);
        
    Отбор.Вставить("Номенклатура",СтрокаПолуфабриката.СтрокаНаименование);
    Отбор.Вставить("ЦехПроизводства",Цех);
    нСтроки = Объект.Полуфабрикаты.НайтиСтроки(Отбор);
    Если нСтроки.Количество() <> 0 Тогда
        нСтрока = нСтроки[0];
        нСтрока.Количество = нСтрока.Количество + СтрокаПолуфабриката.Количество;
    Иначе
        НоваяСтрокаПолуфабриката = Объект.Полуфабрикаты.Добавить();
        НоваяСтрокаПолуфабриката.Продукция        = пПродукция;
        НоваяСтрокаПолуфабриката.Номенклатура     = СтрокаПолуфабриката.СтрокаНаименование;
        НоваяСтрокаПолуфабриката.ЦехПроизводства= Цех;
        НоваяСтрокаПолуфабриката.Количество        = СтрокаПолуфабриката.Количество;
    КонецЕсли;
    
КонецПроцедуры
8 dred999
 
21.06.17
14:43
а дальше лезу записываю док и лезу в модуль объекта
9 polosov
 
21.06.17
14:44
(8) Ты пакетно обрабатываешь доки чтоле?
10 HEKPOH
 
21.06.17
14:45
(7) Объект.Полуфабрикаты - это не тч, а коллекция
11 dred999
 
21.06.17
14:45
Это на форме заполняю (10)
12 Buster007
 
21.06.17
14:45
Если у тебя в нескольких местах используется заполнение ТЧ, то вероятно ты сделал эту процедуру в модуле объекта..
Для этого лучше использовать модуль менеджера.
В процедуру модуля передаешь ТЧ, с которой надо что-то сделать.
13 HEKPOH
 
21.06.17
14:45
(11) так я и говорю об этом. посмотри в отладчике тип Объект.Полуфабрикаты
14 polosov
 
21.06.17
14:47
(11) Не вижу причин делать это на сервере.
А что ты собрался делать в модуле объекта?
Какую-то постобработку после записи?
Опиши вообще задачу в целом.
15 dred999
 
21.06.17
14:49
На форме заполняется ТЧ а дальше нужно обрабатывать эту таб часть несколькими дополнительными процедурами, и вывел их на в модуль объекта (14)
16 polosov
 
21.06.17
14:50
(15) В какой момент обрабатывать? При записи, при проведении?
Зачем вообще модуль объекта?
17 dred999
 
21.06.17
14:53
Так. Давайте по другому пославлю вопрос).
Псоле заполнения таб части в модуле формы почему данные таб части не видны в модуле объекта?
18 dezss
 
21.06.17
14:55
(17) а ты док после заполнения в модуле формы точно записываешь?
19 dred999
 
21.06.17
14:58
(18)     Попытка
        ДокументОбъект = РеквизитФормыВЗначение("Объект");
        ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
20 dred999
 
21.06.17
14:59
(18) Но после записи я не могу обратиться к процедуре на модуле объекта.
    Рек = РеквизитФормыВЗначение("Объект");
    Структура = Рек.ОбойтиТабПолуфабрикат();
21 dred999
 
21.06.17
14:59
Выскакивает
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!"
22 Неверный Параметр И
 
21.06.17
15:02
Зачем ты ея записываешь?
23 dred999
 
21.06.17
15:03
(22) Дабы долезть до данных из модуля объекта
24 Неверный Параметр И
 
21.06.17
15:06
(23) Запись, внезапно, нужна только для записи данных объекта в базу. Я повторюсь - зачем ты его записываешь?
25 Неверный Параметр И
 
21.06.17
15:07
Рек = РеквизитФормыВЗначение("Объект");
Структура = Рек.ОбойтиТабПолуфабрикат();
26 dred999
 
21.06.17
15:07
(24)Я не могу обойти Таб Часть в модуле объекта.
Она пустая, хотя перед этим я заполняю ее в модуле формы
27 polosov
 
21.06.17
15:10
(24) Мне кажется он смеется над нами.
28 dred999
 
21.06.17
15:11
(27) Пффффф .. Нифига не пойму :(
29 HEKPOH
 
21.06.17
15:12
(26) так передай данные из реквизита формы Таблица в тч :)
30 dred999
 
21.06.17
15:13
(29) придется так и сделать. Но я так и не понял почему данные не доступны из модуля объекта
31 HEKPOH
 
21.06.17
15:15
(30) прочитай, пожл (13) и ответь на вопрос, если не трудно
32 polosov
 
21.06.17
15:16
(28) Короче так. Ты на форме. Забудь про модуль объекта.
Заполняешь свою ТЧ.
Что мешает тебе ее тут же обработать?

Процедуры и функции модуля формы с директивами &НаСервере и &НаСервереБезКонтекста - это не модуль объекта.

Любая обработка в модуле объекта как правило производится в момент записи/проведения/отмены проведения.
33 lodger
 
21.06.17
15:25
а вам бы все в управляйке делать как в обычных формах...
если вы дадите описание ситуации полностью - вам подскажут как это сделать в клиент-серверном стиле.
34 polosov
 
21.06.17
15:50
(33) Онлайн-кассы в БП 2.0 не поддерживаются, вот все прогеры перманентно сидящие на обычных формах массово открывают для себя УФ
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший