|
|||
antik777666
05.08.08 — 08:14 |
Подскажите пожалуйста как из модуля объекта документа обратиться к реквизиту табличной части документа |
||
Night_Wolf
1 — 05.08.08 — 08:53 |
Один способ такой: Пишешь в модуле Перем блабла Экспорт; |
||
akiDemon666
2 — 05.08.08 — 09:09 |
ЭтотОбъект.ВашаТабличнаяЧасть |
||
akiDemon666
3 — 05.08.08 — 09:14 |
или ЭтаФорма, кароч хз |
||
GenV
4 — 05.08.08 — 09:16 |
(0) Лучше если модуль объекта вообще не будет знать о существовании формы … И обращения будут только к данным в БД. |
||
Андрюха
5 — 05.08.08 — 09:17 |
Надо помнить, что табличная часть является многострочной, а по сему и к реквизиту табличной части нужно обращаться с учетом строки, в которой находится нужное значение |
||
akiDemon666
6 — 05.08.08 — 09:19 |
ну табчасть полюбому перебором юзать , а в базу знаний он канешна незря рекомендовал это… |
||
Rovan
7 — 05.08.08 — 09:37 |
(+2) ЭтотОбъект.ВашаТабличнаяЧасть[НомерСтроки].Реквизит |
||
antik777666
8 — 05.08.08 — 10:28 |
ЭтотОбъект.ВашаТабличнаяЧасть[НомерСтроки].Реквизит |
||
hhhh
9 — 05.08.08 — 10:36 |
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) |
||
antik777666
10 — 05.08.08 — 10:59 |
Если Документы.гсм_Реализация.Товары.ВидНефтепродукта = «Бензин» тогда |
||
Rovan
11 — 05.08.08 — 11:11 |
(10) тут неверная конструкция «Документы.гсм_Реализация» |
||
Serg_1960 12 — 05.08.08 — 11:21 |
Для Каждого Строка Из Товары Цикл |
TurboConf — расширение возможностей Конфигуратора 1С
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
1 |
|
Обращение к реквизиту ТЧ23.03.2016, 14:46. Показов 25654. Ответов 8
Плаваю ещё в 1С программировании…
0 |
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
23.03.2016, 14:57 |
2 |
для чего это необходимо? что делать будете с реквизитом тч?
1 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||||||||||
23.03.2016, 16:17 |
3 |
|||||||||||
Тамика, для изменения текущей строки
для прохождения по всем строкам используйте цикл:
для добавления новой строки:
1 |
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
23.03.2016, 17:38 [ТС] |
4 |
GreenkO, прошу прощения, но у меня снова ступор. Сбросила конфигурацию(не знаю верно ли выгрузила…). Проблема с документом НачисленияЗарплат. В модуле объекта я сделала автоподстановку оклада по фамилии… То есть, при выборе фамилии поле СтавкаЗаМесяц должно заполнится само. А оно мало того, что не заполняется, так ещё отладчик показал, что даже не заходит в функцию ПриИзменении…
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
23.03.2016, 18:43 |
5 |
Тамика, у меня проблемы при загрузке конфигурации из файлов. На Configuration.xml выдает несоответствие XDTO.
0 |
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
23.03.2016, 18:51 [ТС] |
6 |
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
23.03.2016, 18:57 |
7 |
Тамика, а можете перед выгрузкой установить режим совместимости? У вас платформа 8.3.7, у меня 8.3.6, не открывает. После выгрузки можно будет все вернуть. Миниатюры
0 |
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
23.03.2016, 19:52 [ТС] |
8 |
Поставила режим совместимости с 8.3.6. Или всё-таки лучше поставить с 8.3.4?
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
23.03.2016, 20:12 |
9 |
|||
РешениеТамика, события элементов формы описываются &НаКлиенте(так было и по умолчанию, вы видимо изменили). Обращение к данным регистра сведений происходит &НаСервере, т.е. вам надо было вызвать функцию на сервере для получения ставки. Измененный код:
1 |
Как обратиться к данным табличной формы с модуля объекта документа
Автор damir-it, 25 фев 2016, 07:41
0 Пользователей и 1 гость просматривают эту тему.
Уважаемые форумчане
Начал изучать 1с8.2, раньше работал на семерке, возникла необходимость создать новый документ в восьмерке по аналогу документа с седьмой версии, в модуле объекта документа простой формы в обработке проведения мне нужно использовать данные которые находятся в табличной части модуля формы
СТЧ = ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные;
мне нужно в модуле объекта документа использовать СТЧ.Сумма , как правильно к ней обратиться?
в семерке в модуле документа просто используешь реквизит табличной части Сумма и он его прекрасно обрабатывает, в восьмерке как я понимаю нужно сначала получить элементы формы , как правильно сделать?
С Уважением Дамир
ТекСтрока = Элементы.ТабличнаяЧасть1.ТекущиеДанные;
ТекСтрока.Сумма — это и есть твое поле
вы хотя бы неправильные советы не давайте новичку!
во первых у него НЕуправляемые формы
во вторых, автор задает вопрос про модуль объекта! какие элементы?
обратиться к данным документа в неуправляемых формах можно просто через имя табличной части,
пример перебора строк.
Для каждого лкСтрока Из Товары Цикл
//лкСтрока.Номенклатура;
//лкСтрока.Сумма;
КонецЦикла;
если помогло нажмите: Спасибо!
-
05.04.2015, 14:28
#1
Гость форума
Обращение к реквизиту табличной части другого документа
Здравствуйте! У меня есть документ «ПервичныйЗавозТовара» с табличной частью «Товар» с реквизитами табличной части Наименование и Количество. Регистр накопления «КоличествоТовара»: измерение — «Наименование», ресурсы — «Количество». И документ «Продажа»,табличная часть «Товар», реквизиты «Наименование», «Количество» ,в котором я создал форму «ФормаДокумента1». (1С — Предприятие 8.2)
В модуле формы в функции я создаю запрос на вытаскивание Наименования и Количества товаров из РегистраНакопления, мне нужно сравнивать Наименование товара который я выбрал для продажи в документе с наименованием товаров вытащенных из регистранакопления и если они совпадают, то возвращать в колонку «Количество» количество товаров на складе данного наименования. Как обратиться к реквизиту табличной части документа ПервичныйЗавозТовара?
Код:
&НаСервереБезКонтекста функция ВыбираемИзЗапроса() Перем КолТов; Запрос = Новый Запрос("Выбрать Количество, Наименование ИЗ РегистрНакопления.КоличествоТовара"); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); СтрокаТабличнойЧасти = Элементы.ПервичныйЗавозтовара.Товар.ТекущиеДанные; ОбъектДляЧегоТо = ПолучитьИмя(СтрокаТабличнойЧасти.Наименование); СтрокаТабличнойЧасти.Наименование = ОбъектДляЧегоТо; Пока Выборка.Следующий() Цикл Если Выборка.Наименование = ОбъектДляЧегоТо Тогда КолТов = Выборка.Количество; КонецЕсли; КонецЦикла; Возврат КолТов; КонецФункции
-
28.08.2015, 20:01
#2
Гость форума
Re: Обращение к реквизиту табличной части другого документа
Если делаете на сервере тогда через Объект, если хотите заполнить таблицу на форме, тогда на клиенте делать надо.
Вызывайте на клиенте серверную функцию, которая будет возвращать массив структур и потом уже на клиенте проверяете с таблицой и заполняете.
-
31.08.2015, 10:19
#3
Гордость форума PRO
Re: Обращение к реквизиту табличной части другого документа
В модуле формы в функции я создаю запрос на вытаскивание Наименования и Количества товаров из РегистраНакопления
А зачем это делать (запрос поиска количества конкретного товара) в модуле формы? Делайте это в модуле объекта документа, а из модуля формы легко можно получить доступ к результирующей табличной части документа
Модуль объекта
Модуль объекта есть почти у всех основных прикладных объектов конфигурации в 1С.
У справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнес-процессов и задач он называется Модуль объекта. У константы — Модуль менеджера значения. У последовательностей, регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета и перерасчетов — Модуль набора записей.
Чтобы открыть модуль объекта нужно в окне свойств объекта на закладке «Прочее» нажать кнопку «Модуль объекта»
Также модуль объекта можно открыть из контекстного меню объекта:
Или из меню Действия:
Модуль объекта выполняется при создании объекта. В нем можно объявлять переменные модуля. Экспортные процедуры и функции можно вызывать у созданных программных объектов. К экспортным переменным можно обращаться как к свойствам программных объектов. В модуле есть прямой доступ к реквизитам и табличным частям объекта.
Вызов методов модуля объекта
Для примера создадим в конфигурации справочник «Номенклатура» с реквизитом «Артикул» и табличной частью «Остатки». У табличной части будет 2 реквизита: «Склад» и «Остаток»:
В модуле объекта напишем следующий код:
//переменные Перем ОбщийОстаток Экспорт; Перем ПолноеНаименование; //процедуры и функции Функция ПолноеНаименованиеНоменклатуры() Возврат "Системный блок в сборе"; КонецФункции Функция ОбщийОстаток() Экспорт Возврат 300; КонецФункции Процедура ЗаполнитьРеквизиты() Экспорт Артикул = "Арт1"; НовСтр = Остатки.Добавить(); НовСтр.Склад = "Основной"; НовСтр.Остаток = 100; НовСтр = Остатки.Добавить(); НовСтр.Склад = "Торговый зал"; НовСтр.Остаток = 200; КонецПроцедуры
Теперь создадим обработку с одной формой и в модуле обработки в событии ПриСозданииНаСервере напишем следующий код:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //заполняем экспортную переменную модуля объекта вызвав экспортную функцию ОбъектНоменклатура.ОбщийОстаток = ОбъектНоменклатура.ОбщийОстаток(); Сообщить(ОбъектНоменклатура.ОбщийОстаток); //300 КонецПроцедуры
Здесь мы сначала создаем новый программный объект справочника Номенклатура вызвав встроенный метод Справочники.Номенклатура.СоздатьЭлемент(). Потом через ссылку на этот объект обращаемся к экспортным переменной и функции объекта.
Сохраним конфигурацию базы данных и откроем нашу обработку в пользовательском режиме. Событие формы ПриСозданииНаСервере выполняется при открытии формы в итоге в сообщениях мы увидим число 300. То есть через ссылку на программный объект мы можем обращаться к экспортным переменным и функция модуля объекта. Но значения переменных не сохраняются в базе данных. Как только объект будет удален из памяти все значения экспортных переменных будут потеряны.
Теперь поменяем код в модуле формы обработки на следующий:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //пытаемся заполнить переменную модуля объекта вызвав функцию модуля объекта ОбъектНоменклатура.ПолноеНаименование = ОбъектНоменклатура.ПолноеНаименованиеНоменклатуры(); Сообщить(ОбъектНоменклатура.ПолноеНаименование); //ошибка КонецПроцедуры
Здесь мы делаем все то же самое, но обращаемся к не экспортным переменной и функции.
При открытии формы возникнет ошибка «Поле объекта не обнаружено ПолноеНаименование»:
Так как переменная ПолноеНаименование не является экспортной, то к ней нет доступа из других модулей.
Теперь попробуем обратиться к не экспортной функции модуля объекта. Вставим в модуль формы следующий код и откроем обработку:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //просто вызовем функцию модуля объекта Сообщить(ОбъектНоменклатура.ПолноеНаименованиеНоменклатуры()); //опять ошибка КонецПроцедуры
Выйдет ошибка «Метод объекта не обнаружен ПолноеНаименованиеНоменклатуры»:
Теперь вставим в форму обработки такой код и откроем обработку:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //программно создаем новый элемент справочника ОбъектНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); //вызовем экспортную процедуру модуля объекта ОбъектНоменклатура.ЗаполнитьРеквизиты(); //запишем объект в базу данных ОбъектНоменклатура.Записать(); КонецПроцедуры
Здесь мы вызываем экспорную процедуру модуля объекта, а потом встроенным методом Записать записываем объект в базу данных.
В результате в базе данных будет создан новый элемент, у которого заполнен артикул и добавлены 2 строки в табличную часть:
В методе ЗаполнитьРеквизиты() мы обращались напрямую к реквизитам объекта, после чего записали его методом Записать(). Значения реквизитов сохранились в базе данных.
Обработчики событий
В модуле объекта есть множество различных обработчиков событий, которые вызываются в определенные моменты времени. Чтобы увидеть все события нужно нажать на кнопку «Процедуру и функции» в панели инструментов:
В результате откроется список возможных событий:
Если выделить какое-то событие и нажать кнопку «Перейти» или просто щелкнуть по нему два раза левой кнопкой мыши, то в модуле объекта будет создана процедура для обработки данного события.
Рассмотрим основные события модуля объекта:
* ОбработкаЗаполнения — выполняется при интерактивном создании нового объекта, при вводе на основании, при вызове метода Заполнить().
* ОбработкаПроверкиЗаполнения — выполняется перед записью объекта в базу данных, но до начала транзакции записи. Можно отказаться от записи, установив Отказ = Истина;
* ПередЗаписью — выполняется до записи объекта в базу данных, но после начала транзакции записи. Можно отказаться от записи, установив Отказ = Истина;
* ПриЗаписи — выполняется после записи объекта в базу данных, транзакция записи еще не зафиксирована. Все еще можно отказаться от записи.
* ПередУдалением — выполняется перед непосредственным удалением объекта из базы данных.
* ПриКопировании — выполняется при создании нового объекта копированием.
Для примера создадим в модуле объекта 3 обработчика события и вставим в них следующий код:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Артикул = "Артикул"; КонецПроцедуры Процедура ПередЗаписью(Отказ) НовСтр = Остатки.Добавить(); НовСтр.Склад = "Основной"; НовСтр.Остаток = 50; КонецПроцедуры Процедура ПриЗаписи(Отказ) НовСтр = Остатки.Добавить(); НовСтр.Склад = "Ордерный"; НовСтр.Остаток = 90; КонецПроцедуры
Создадим интерактивно новый элемент справочника. Поле артикул уже будет заполнено:
Произвольно заполним наименование и нажмем на кнопку «Записать». В табличной части появятся 2 строки с остатками:
Одна строка была добавлена в событии ПередЗаписью, вторая ПриЗаписи.
Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки
-
Уважаемые форумчане
Начал изучать 1с8.2, раньше работал на семерке, возникла необходимость создать новый документ в восьмерке по аналогу документа с седьмой версии, в модуле объекта документа простой формы в обработке проведения мне нужно использовать данные которые находятся в табличной части модуля формы
СТЧ = ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные;
мне нужно в модуле объекта документа использовать СТЧ.Сумма , как правильно к ней обратиться?
в семерке в модуле документа просто используешь реквизит табличной части Сумма и он его прекрасно обрабатывает, в восьмерке как я понимаю нужно сначала получить элементы формы , как правильно сделать?
С Уважением Дамир -
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.880
- Симпатии:
- 1.028
- Баллы:
- 204
Нет, в 1с 8 другая логика. Про элементы формы вообще забудьте, если программируете модуль объекта.
Советую прочитать книги по основным принципам программирования 1с 8.
-
да понял я про логику и книги читаю, а если мне надо условие связанное с данными таб частью формы нужно прописать в модуле объекта документа и на основании полученных данных сделать Движения по регистрам бухгалтерии тогда как?
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.880
- Симпатии:
- 1.028
- Баллы:
- 204
Работайте с ТЧ объекта напрямую, без использования ЭлементыФормы.
В книжках 100% есть примеры кода, связанные с ТЧ объекта.В общем случае оно выглядит так:
Для Каждого Стр Из <ИмяТЧОбъекта> Цикл Если Стр.<КолонкаТЧ> = <Значение> Тогда КонецЕсли; КонецЦикла;
-
Спасибо вроде понял как делать
Табличные части существуют у многих объектов в 1С:
- Справочники
- Документы
- Отчеты и обработки
- Планы счетов
- Планы видов характеристик
- Планы видов расчета
- Бизнес-процессы и задачи
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить(Строка.РеквизитТабличнойЧасти);
КонецЦикла;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для того чтобы обойти выделенные строки используется цикл Для каждого:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для каждого Строка из ВыделенныеСтроки Цикл
//содержимое цикла
КонецЦикла;
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныйСтроки.Очистить();
Чтобы программно выделить все строки табличного поля:
Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
Как очистить табличную часть
ТабличнаяЧасть.Очистить();
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
ЭлементыФормы.ИмяТабличногоПоля.ТекущиеДанные;
Для управляемых форм:
Элементы.ИмяТабличногоПоля.ТекущиеДанные;
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
НоваяСтрока=ТабличнаяЧасть.Добавить();
НоваяСтрока.Реквизит1=«Значение»;
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока=ТабличнаяЧасть.Вставить(Индекс)
//Индекс — номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока.Реквизит1=«Значение»;
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.
Создаваемая обработчиком процедура имеет три параметра:
- Элемент — содержит элемент управления ТабличноеПоле.
- НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
- Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат;
КонецЕсли;
//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент.ТекущиеДанные; //Получили текущую строку табличной части
ТекСтрока.СчетУчета = ПланыСчетов.Хозрасчетый.НужныйСчетУчета;
КонецПроцедуры