|
|
|
Посчитать количество строк табличной части | ☑ | ||
|---|---|---|---|---|
|
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
|
Жесть. А перед отдачей документа в обработку он записывается?
При конструкции Форма = Обработки.ВВодНаработки.ПолучитьФорму("ВводНаработки", ЭтаФорма); В обработке количество строк документа должно получаться так: ВладелецФормы.ДокументОбъект.ИмяТЧ.Количество() или ВладелецФормы.ЭлементыФормы.ИмяТабличногоПоля.Значение.Количество(). |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |