Имя: Пароль:
1C
 
Посчитать количество строк табличной части
0 Sakura
 
16.02.09
15:21
Сразу оговорюсь, большую часть данного проекта писала не я, мне поручено его только доработать :) собственно, суть вопроса:
Есть документ, содержащий в числе прочего табличную часть, некоторые значения из которой выводятся в табличное поле формы. Табличная часть каким-то боком привязана к справочнику, но каким и где, я не разобралась :) По клику кнопки вызывается форма обработки, которая, в свою очередь, использует экспортную процедуру из общего модуля. И вот в этой самой процедуре требуется посчитать количество строк в табличной части. Как это можно сделать?
Обращение к документу и через него к табличной части не срабатывает вообще -  выводится ошибка, подсчет строк в табличном поле дает 0 :(
1 butterbean
 
16.02.09
15:24
(0) все зависит от того, что переадется в эту процедуру... код показывай... и фотку
2 Живой Ископаемый
 
16.02.09
15:26
типа ТЧ.Количество() - некошерно в силу каких-то причин?
3 Defender aka LINN
 
16.02.09
15:29
(2) Религиозные убеждения, не иначе
4 Sakura
 
16.02.09
15:29
кошерно, но не срабатывает :( из модуля формы документа оно не хочет никуда передаваться, а в других модулях или дает 0, или ошибку :(
5 Stepa86
 
16.02.09
15:30
(2) это устаревшие и не гламурные методы...
6 Stepa86
 
16.02.09
15:30
"Обращение к документу и через него к табличной части не срабатывает вообще -  выводится ошибка, подсчет строк в табличном поле дает 0 :("

чо за ошибка?
7 Живой Ископаемый
 
16.02.09
15:33
Видимо в процедуру нужно как-то передать ссылку на документ?
8 Sakura
 
16.02.09
15:35
таблГПА = Форма.ГПА;
Количество = таблГПА.Количество(); //дает 0

обращение к документу дает ошибку
ДокВыработка = Документы.Выработка;
Количество = ДокВыработка.ТабличнаяЧасть.Количество();
{ОбщийМодуль.ОбщийМодуль(655)}: Поле объекта не обнаружено (ТабличнаяЧасть)
   Количество = ДокВыработка.ТабличнаяЧасть.Количество();
9 Stepa86
 
16.02.09
15:36
(8) какой тип у ДокВыработка и так ли называется его табличная часть??? отладчиком смотреть нужно
10 Salvador Limones
 
16.02.09
15:37
(8) Ну правильно. У тебя ДокументМенеджер.
11 tsr
 
16.02.09
15:37
(8) Без фотки могу только сказать, что код неправильный
12 Живой Ископаемый
 
16.02.09
15:38
а вот Форма.ГПА это ваще что? вернее даже Форма - это что?
13 Stepa86
 
16.02.09
15:38
чую проект там опупенный получится в итоге =) Нетленко, не иначе...
14 Sakura
 
16.02.09
15:40
//варианты
Количество = ДокВыработка.ГПА.Количество();
//и
Количество = ДокВыработка.ДокументТабличнаяЧасть.ГПА.Количество();
//как оно значится в свойствах табличного поля
дают все ту же ошибку :(
15 Stepa86
 
16.02.09
15:41
начнем с азов: про точки останова и режим отладки слышала чо нить?
16 Живой Ископаемый
 
16.02.09
15:42
божечки... Ну вот подумать мозгом!
Количество = ДокВыработка.ГПА.Количество();
у какого документа мы путаемся определить количество строк? у среднего?
17 rie
 
16.02.09
15:42
(14) См. (10). У тебя не ДокументОбъект и не ДокументСсылка, а ДокументМенеджер. Ты смотришь не табличную часть документа, а что-то загадочное.
18 Sakura
 
16.02.09
15:51
Знаю, что вопрос тупой, но как мне обратиться к ДокументСсылка?
Компилятор выдает ошибку:
{ОбщийМодуль.ОбщийМодуль(654,17)}: Переменная не определена (ДокументСсылка)
   ДокВыработка = <<?>>ДокументСсылка.Выработка;

Очень извиняюсь, я не блондинка, я просто с 1С всего вторую неделю работаю :)
19 rie
 
16.02.09
15:52
(18) Какие параметры передаются в процедуру и откуда эта процедура вызывается?
20 Sakura
 
16.02.09
15:54
//объявление процедуры
Процедура ЗаполнениеИзФайла(НомерСтроки, ФормаДокумента, ФормаОбработки, Дата) Экспорт
//и ее вызов по кнопке
Процедура КнопкаВыполнитьНажатие(Элемент)
ФормаДокумента = Документы.Выработка.ПолучитьФорму("ФормаДокумента", ЭтаФорма);

Для i = 0 По Тпнаработка.Количество() - 1 Цикл
      ЗаполнениеИзФайла(i, ФормаДокумента, ЭтаФорма, ТекущаяДата());    
КонецЦикла;
ЭтаФорма.Закрыть();
КонецПроцедуры
21 Живой Ископаемый
 
16.02.09
15:56
где кнопка находится?
22 rie
 
16.02.09
15:57
(20) Процедура ЗаполнениеИзФайла - что должна сделать?
В приведенных процедурах нет документа. О каком документе идёт речь?
23 Sakura
 
16.02.09
16:02
Кнопка - на форме обработки.
Обработка считывает данные из файла, а эта процедура по замыслу должна эти данные вносить в документ.
Этот самый документ, точнее, его форма документа, вызывает обработку, а там уже вызывается процедура.
24 Живой Ископаемый
 
16.02.09
16:05
2(23) вот секундочку...
"Этот самый документ, точнее, его форма документа, вызывает обработку"
имеется в иду - что вы открыли или создали конкретный документ, у него есть номер, дата, видна табличная часть?
Каким кодом дальше вы открываете из документа форму обработки?
25 Sakura
 
16.02.09
16:07
//я открываю уже имеющийся документ, его форму документа, щелкаю там на кнопку и //вызываю обработку:

Процедура ДействияФормыЗагрузитьИзФайла(Кнопка)
 Дата = ТекущаяДата();    
 тзКМП.Очистить();
 АгрегатыВГПА.Очистить();
 Количество = ГПА.Количество();
 Форма = Обработки.ВВодНаработки.ПолучитьФорму("ВводНаработки", ЭтаФорма);
 Форма.ОткрытьМодально();    
КонецПроцедуры
26 Sakura
 
16.02.09
16:08
когда я открываю форму документа, на ней есть несколько табл. полей, одно из которых отображает некоторые поля табл. части.
27 Живой Ископаемый
 
16.02.09
16:10
2(25) Прще всего у вас должно быть так:

 Форма = Обработки.ВВодНаработки.ПолучитьФорму("ВводНаработки", ЭтаФорма);
 Форма.ДокументССылка = ЭтотОбъект.Ссылка;//<<== сюда смотреть
 Форма.ОткрытьМодально();    


ДокументСсылка определить как ссылка на документ Выработка в форме обработки "ВВодНаработки"
28 Живой Ископаемый
 
16.02.09
16:12
примерно
===
но все равно  вот это

Процедура КнопкаВыполнитьНажатие(Элемент)
ФормаДокумента = Документы.Выработка.ПолучитьФорму("ФормаДокумента", ЭтаФорма);

нужно будет очень сильно менять
29 Sakura
 
16.02.09
16:14
Спасибо, сейчас попробую.
30 Живой Ископаемый
 
16.02.09
16:15
(29) ай, все равно у вас ничего не выйдет...
31 Sakura
 
16.02.09
16:22
да, как было 0, так и осталось. Правда, теперь хоть ошибку не выдает :)
32 Manfy
 
16.02.09
16:22
(8) Если в процедуру передать Объект документ, то можно все посчитать. Приведенный кусок кода работать и не должен, поскольку неправильно используется менеджер документов
33 Sakura
 
17.02.09
12:44
То ли руки у меня кривые, то ли мозг :( не получается у меня объект и все тут. Беру ссылку, она берется, данные вроде как есть, но собственно ссылки нет, пишет, что объект не найден. Соответвенно объект я получить тоже не могу :(
Просьба тапками и прочим не кидаться, а объяснить, где и что у меня не так.

ДокументСсылка = Документы.Выработка.ПолучитьСсылку();
Объект = ДокументСсылка.ПолучитьОбъект();
Количество = ДокументСсылка.ГПА.Количество();

как итог в табло вижу:
ДокументСсылка <Объект не найден> (785:ae13001c253fdef511ddfcd730c36c7b)
Объект    Неопределено
34 Sakura
 
17.02.09
12:44
Ну и количество, естественно, все так же 0
35 Salvador Limones
 
17.02.09
12:45
(33) ГДЕ? В каком месте ты позиционируешься на определённом документе, чтобы считать его количество?
36 Sakura
 
17.02.09
12:48
В смысле?
37 Живой Ископаемый
 
17.02.09
12:49
2(36) В смысле в каком месте ты позиционируешься на документе №5 от 5 брамбрабря надцатого года?
38 hhhh
 
17.02.09
12:50
(36) вот описание функции ПолучитьСсылку(). Объясни с какого она здесь боку, и зачем ты нам ее постоянно подсовываешь?

ПолучитьСсылку(<Уникальный идентификатор>)
Параметры:
<Уникальный идентификатор> (необязательный)
Тип: УникальныйИдентификатор. Уникальный идентификатор, из которого будет формироваться ссылка.
Возвращаемое значение:
Тип: ДокументСсылка.
Описание:
Формирует ссылку из значения типа УникальныйИдентификатор.
Данный уникальный идентификатор может быть в дальнейшем получен из ссылки методом УникальныйИдентификатор.
Примечание:
Если параметр не указан или передано значение Неопределено, то будет сформирована новая уникальная ссылка.
39 Живой Ископаемый
 
17.02.09
12:52
Ладно, давайте на пальцах...
Перед вами стоит задача - посчитать количество квадратных метров в вашей комнате?
Вопрос как вы будете это делать?
Тоже нарисуете асбтрактный прямоугольник и умножите ширину на длину?
40 Живой Ископаемый
 
17.02.09
12:53
или все-таки измерите ширину и длину вашей комнаты... Вопрос - каким образом вы перешли от абстрактной комнаты (документ.менеджер) к конкретно вашей комнате (Документ.Объект)?
41 Sakura
 
17.02.09
12:54
Живой Ископаемый:
еще раз говорю, я новичок в 1С, всего вторую неделю работаю)) поэтому не знаю иногда самых элементарных вещей...
Я пытаюсь взять ссылку на документ и по ссылке получить данный конкретный объект
42 Живой Ископаемый
 
17.02.09
12:55
абстрактная комната и ваша комната - э
то мегаэлементарная вещь, о которой знают 6-летние дети, и вам намекнули еще вчера...
Еще раз - ссылку на какой именно документ вы пытаетесь взять?
43 Sakura
 
17.02.09
12:56
на документ Выработка
44 Живой Ископаемый
 
17.02.09
12:58
2(43) У вас в базе 1000 документов выработка... Да-да, 1000, представьте себе такую ситуацию. Это ровно в 1000 раз больше чем вы представляли до сих пор... У какого из этой 1000 документов вы пытаетесь посчитать количество строк вашим кодом?
45 Salvador Limones
 
17.02.09
12:59
(43) Номер какой? От какого числа? :-)))
46 Живой Ископаемый
 
17.02.09
12:59
У вас в доме 1000 комнат.. как вы будете мерять площадь именно своей комнаты?
47 MRAK
 
17.02.09
12:59
Форма.ДокументССылка = ЭтотОбъект.Ссылка;//<<== сюда смотреть
48 MRAK
 
17.02.09
13:00
(47) + в форме дока "ЭтотОбъект.Ссылка"
49 Живой Ископаемый
 
17.02.09
13:04
чувствую 1000 это много...  ладно, у вас в базе 2 документа Выработка
С №1 от 03.01.09 и №2 от 18.01.09
у какого именно документа вы хотите посчитать количество строк?
50 Живой Ископаемый
 
17.02.09
13:05
У вас в доме две комнаты... кухня и спальня... какая именно комната ваша и как вы будете мерять ее площадь?
51 Sakura
 
17.02.09
13:07
у второго документа.
да нет, дело не том, сколько их, а в том, что я не понимаю, где именно находится различие. Не в чем оно, а где оно хранится ))
52 Sakura
 
17.02.09
13:08
я не знаю, к какому документу из этой 1000 мне обращаться и как ((
когда был создан последний из них по дате, я тоже не знаю ((
53 MRAK
 
17.02.09
13:09
Можно НайтиПоНомеру... или как-то так...
но лучше, как в (27)
54 Живой Ископаемый
 
17.02.09
13:10
и мы не знаем... но то что вы пытались сделать - это найти количество строк у документа-менеджера... физически не бывает
55 Sakura
 
17.02.09
13:11
так... а предположим, я знаю дату создания последнего документа. Тогда как мне выбрать нужный?
56 Живой Ископаемый
 
17.02.09
13:13
(55) см. (53)
57 hhhh
 
17.02.09
13:23
(55) тебе нужно вывести список документов на экран, пусть пользователь выберет.
58 Sakura
 
17.02.09
13:27
не-а, так нельзя, прога эта предназначена как раз-таки для автоматизации производства :) она считывает данные из файла, перезаписывает документ, внося туда все изменившиеся данные, и при необходимости должна информировать о том, что некоторые агрегаты пора в ремонт/на осмотр :)
59 MRAK
 
17.02.09
13:30
(58)
НайтиПоНомеру(<Номер документа>, <Дата интервала>)
Параметры:
<Номер документа> (обязательный)
Тип: Число, Строка. Номер искомого документа. Тип передаваемого значения зависит от установки в конфигураторе представления номера документа.
<Дата интервала> (необязательный)
Тип: Дата. Дата из интервала, в котором проводится поиск по номеру. Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
Параметр используется для документов с периодической нумерацией.
60 MRAK
 
17.02.09
13:31
но если тебе известна дата дока с точностью до секунду, то лучше запросом... однако криво все это.
ты лучше сначала опредились, по каким критериям нужно найьти док.
61 AntonioS
 
17.02.09
13:33
(0)а какие параметры у этой процедуры в глобальном модуле?

запости код после слова процедура.
62 Живой Ископаемый
 
17.02.09
13:34
(58) какой документ она должна перезаписать? из 2? Из 1000? Как она это узнает?
63 Живой Ископаемый
 
17.02.09
13:36
Возможно пользователь сначала открывает документ, потом из формы этого уже вполне определенного, выбранного им документа открывает форму обработки, обпаботка считывает из файла и вносит изменения в это, открытый документ, из которого она была вызвана?
64 Sakura
 
17.02.09
13:36
Именно так
65 Sakura
 
17.02.09
13:37
И теперь меня мучает вопрос, как передать некоторые значения из модуля документа в модуль обработки :)
66 MRAK
 
17.02.09
13:37
(64) тогда еще раз внимательно курим (27)
67 Живой Ископаемый
 
17.02.09
13:37
тогда возвращаемся к (27)... у тебя в обработке уже есть ссылка на открытый пользователем документ.
68 Живой Ископаемый
 
17.02.09
13:38
(65) вот так:
ФормаМоейОбработки.ПараметрКоторыйЯХочуПередать=ЗначениеКотороеЯхочуПередать;
69 AntonioS
 
17.02.09
13:40
(66) (67) фишка в том, что к документу надо обратиться не из обработки, а из процедуры глобального модуля.
Вот и вопрос, передается ли в эту процедуру ссылка на документ или форму обработки хотя бы.
70 Живой Ископаемый
 
17.02.09
13:44
Ну, если она процедуру глобального модуля вызывает из обработки, то значит может передать ей ссылку
71 Sakura
 
17.02.09
13:47
к документу можно обратиться и из обработки, принципиальной разницы нет, где будут считываться эти значения - уже в самой процедуре, или передаваться ей из обработки в качестве параметров.
В процедуру передаются обе формы, документа и обработки.
72 Живой Ископаемый
 
17.02.09
13:49
тогда в обработку нужно передавать не ссылку на открытый документ, а сам документ-объект, чтобы в процедуру передать именно открытый уже экземпляр фыормы, а не новую не открытую форму инициализировать и передавать
73 Живой Ископаемый
 
17.02.09
13:50
наверное...
74 AntonioS
 
17.02.09
13:50
(71) ну тогда так

<ИмяФормыДокумента так как передается в процедуру>.Сслылка.<ИмяТабЧасти>.Количество()
75 Живой Ископаемый
 
17.02.09
13:51
(74) ааа! молодец, действительно.. :)
76 Aprobator
 
17.02.09
14:09
Жесть. А перед отдачей документа в обработку он записывается?
При конструкции  
Форма = Обработки.ВВодНаработки.ПолучитьФорму("ВводНаработки", ЭтаФорма);

В обработке количество строк документа должно получаться так:
ВладелецФормы.ДокументОбъект.ИмяТЧ.Количество()
или ВладелецФормы.ЭлементыФормы.ИмяТабличногоПоля.Значение.Количество().
AdBlock убивает бесплатный контент. 1Сергей