Получить табличную часть на сервере 1с

Обновлено: 06.07.2024

Добрый день.
Нужна помощь начинающему в области 1с предприятие.
Есть документ А, есть документ Б.
Нужно создать внутреннюю обработку, в которой будет табличная часть где можно добавлять ссылки на эти документы, рядом с каждым будет соответствующий чекбокс. Создать кнопку "записать" при нажатии на которую нужно будет создавать пары документов и затем заносить их в регистр сведений.

-проблема-
когда создаю запрос, который обращается к данным табличной части, он не может найти мою табличную часть то есть "не удалось найти таблицу и указывает на кусок кода с "ИЗ Обработка.Связь.Таблица". Как только путь к таблице не указывал уже.

-вопрос-
В чём собственно заключается ошибка в пути или просто неправильном подходе реализации кнопки?

когда создаю запрос, который обращается к данным табличной части, он не может найти мою табличную часть то есть "не удалось найти таблицу и указывает на кусок кода с "ИЗ Обработка.Связь.Таблица". Как только путь к таблице не указывал уже.

Дело в том, что запрос обращается к базе данных. Обработки не имеют таблиц в БД и ничего там не хранят., во-вторых вы эту таблицу заполняете интерактивно, даже, если бы у вас была табличная часть документа, или справочника, то все изменения, которые вы внесли в открытой форме были бы еще не записаны в БД.

Собственно, что можно сделать: запросом получать данные из таблицы значений, которая передается параметром.
Код будет вида


А вообще, если вам нужна только пара документов, то запрос не нужен - ссылки уже находятся в таблице и достаточно ее обойти в цикле.

Пытаюсь обойти при помощи цикла, как Вы и советовали.
Не подскажите, как решить проблему с недоступностью данных на сервере ( видимо, неправильно работаю с ТекущимиДанными)?

&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры

&НаСервере
Процедура Команда1НаСервере()
Для Каждого СтрокаТаблицы из Элементы.Таблица.ТекущиеДанные ЦИКЛ
Если (СтрокаТаблицы.ЧекбоксА=ИСТИНА)ТОГДА
Для Каждого СтрокаТаблицы2 из Элементы.Таблица.ТекущиеДанные ЦИКЛ
Если (СтрокаТаблицы2.ЧекБоксБ=ИСТИНА) ТОГДА
НаборД=РегистрыСведений.ВзаимосвязиДокументов.СоздатьНаборЗаписей();
СтрокаДанных=НаборД.Добавить();
СтрокаДанных.СсылкаА=СтрокаТаблицы.СсылкаА;
СтрокаДанных.СсылкаБ=СтрокаТаблицы2.СсылкаБ;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Amarg0: Элементы - это объекты, отвечающие за отрисовку данные, а вам нужны сами данные. Это будет либо Для Каждого Строка Из Объект.МояТабличнаяЧасть , если табличная часть - реквизит обработки. Либо просто «МояТабличнаяЧасть», если табличная часть - реквизит формы.

На ютубе есть серия видео «разработка управляемого приложения» - очень советую, поможет навести порядок в понимании управляемых форм.

Ваша ошибка заключается в недопонимании различий между метаданными. Обработки в отличии от справочников, документов и так далее не описывают хранимую в базе данных информацию - это набор алгоритмов по обработке данных и описание графического/программного интерфейса взаимодействия с пользователем.

В реквизитах обработки, а так же на форме обработки в реквизитах самой формы могут размещаться некоторые данные, но данные из значения таких реквизитов существуют только на протяжении времени жизни обработки. Ни до создания экземпляра обработки, ни после её закрытия эти данные не существуют.

В вашем примере существует обработка под названием "Связь", в которой есть табличная часть "Таблица". Запросы языка 1С указанным вами способом (путь по метаданным) могут получать выборки лишь из данных, которые сохранены в СУБД базы. Т.е. у вас ничего не выйдет. Но язык запросов позволяет делать запросы еще и к структурам в памяти, если их передавать в качестве параметров. Вы можете поступить следующим образом:

Многие спрашиваю, как передать тз с сервера на клиент - ниже несколько вариантов как это можно реализовать:


Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр

Через реквизит Формы

Через Временное хранилище

Через обычный возврат

Пробуйте и пишите в комментариях как делаете это Вы

Разместил: E_Migachev  Версии: | 8.2 УП | 8.3 |  Дата: 09.10.2014   Прочитано: 122166

Распечатать

Похожие FAQ

10060 (0x0000274C): Попытка установить соединение была безуспешной  18
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и 17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1С Предприятие что это?  11
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С  6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Cклонения по падежам  6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих

Еще в этой же категории

Как проверить ЭтоНовый() в управляемой форме?  9
Понятие ЭтоНовый() отсутствует в 8.2. Поэтому при необходимости определить, что создается новый элемент можно использовать следующую особенность управляемой формы. Как правило, любая управляемая форма содержит в себе реквизит " Объект" , поэтому Заполнение реквизитов формы и объекта  6
Для реквизитов в документеобработкеотчете: Объект.Реквизит = " значение" ; Для реквизитов на форме: ЭтаФорма.Реквизит = " значение" ; Как получить Макет?  6
НаСервере Функция ПолучитьМакетНаСервере(ИмяМакета) ЭтотОбъект=РеквизитФормыВЗначение(" Объект" ); Макет = ЭтотОбъект.ПолучитьМакет(ИмяМакета); Возврат Макет; КонецФункции НаСервере Процедура ВывестиМакет(ТД) Макет = Обработки.ОбработкаВ Как заполнить табличную часть формы программно?  6
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П Как открыть внешнюю обработку или отчет программно 1С УП?  6
В версии 8.2 и старше: приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере. Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий: Посмотреть все в категории Управляемое приложение, Тонкий клиент

Ключевые слова и Изображения

Слова упорядочены по частоте использования в тексте

Изображения

Как передать таблицу значений с сервера на клиент?

Для платформы 8.3 будет работать вариант с ЗначениеВРеквизитФормы() и ТЗ на форме

Правильно ли я понимаю, что вернуть выборку на тонкий клиент вообще шансов нет никаких?

Допустим, есть управляемая форма, вызываемая из обработки. Надо заполнить табличную часть на этой форме. Соответственно на сервере запускаем запрос, результат запроса нужно каким-то образом вернуть на форму. Я пытаюсь вернуть таблицу значений.

В итоге получается, что:

1. Обычный возврат не работает, выкидывает ошибку XDTO.

2. ЗначениеИзСтрокиВнутр - на тонком клиенте недоступно.

3. Табличная часть формы на сервере недоступна.

Платформа 8.3 (8.3.5.1383) в режиме 8.2.

В предыдущих статьях, все табличные документы выводились в виде отдельного окна, что, согласитесь, бывает иногда не удобно. В этой статье я покажу, как выводить табличный документ на управляемой форме.

Я рассмотрю два примера. В первом, мы будем на управляемой форме выводить произвольный отчет, который будет сделан при помощи макета табличного документа. А во втором примере, я создам форму для вывода различных печатных форм документов, как это делается в большинстве современных конфигураций.

Пример с отчетом

Реализуем самый простой вариант отчета, который будет без какой-то смысловой нагрузки, призванный просто показать, как работает табличный документ на управляемой форме. В основном все современные отчеты делают на СКД, но этот мы сделаем по «старинке», используя табличный документ. Для этого создадим объект Отчет и подчиненный ему макет табличного документа всего с одной областью.

Отчет с макетом табличного документа

Подробнее о том, как создается и оформляется макет табличного документа, читайте в этой статье:

Следующим шагом создадим пустую форму подчиненную этом отчёту, и добавим у неё реквизит управляемой формы с типом ТабличныйДокумент.

Реквизит управляемой формы с типом ТабличныйДокумент

Поместим этот реквизит на форму. Если его перетащить мышкой, то он станет элементом поля табличного документа. Чтобы не было заголовка, нужно в свойстве ПоложениеЗаголовка добавленного элемента формы установить значение Нет.

Элемент формы поле табличного документа

Создадим команду управляемой формы, и поместим её на форму в виде кнопки.

Команда управляемой формы

Подробнее о заполнении табличных документов читайте в этой статье:

И всё, если мы сейчас попробуем выполнить нашу команду, то отчет заполнится нужными данными.

Вывод табличного документа в 1с предприятии

Пример с печатной формой документа

А сейчас, мы доработаем вывод печатной формы документа, который мы делали в статье ранее:

Раньше у нас печатная форма документа выходила каждый раз в отдельном окне, так её выводила платформа 1С, мы же сделаем так, чтобы печатная форма выводилась в нужной нам управляемой форме.

Для этого мы создадим общую форму, которую назовем ФормаВыводаПечатнойФормы.

Общая форма

У этой формы создадим реквизит с типом ТабличныйДокумент, разместим его на форме, а также поменяем заголовок формы.

Реквизит с типом табличный документ управляемой формы

Следующим шагом, создадим параметр ТабДок с типом ТабличныйДокумент.

Параметр управляемой формы с типом табличный документ

Нам осталось при создании формы реквизиту управляемой формы присвоить значение параметра.

На этом мы закончим работать с общей формой. В нашем случае, при открытии, форма будет заполняться тем табличным документом, который будет передан в параметре.

Перейдем в модуль команды документа, которую мы создали в предыдущей статье.

Открытие модуля команды

И подправим эту команду: будем открывать общую форму, в которую в качестве параметра передадим сформированный ранее табличный документ.

Чтобы каждый раз открывалась новая форма, я передают в качестве третьего параметра новый уникальный идентификатор.

Всё! На этом доработка команды закончена. Можно проверить, как работает открытие нашей формы.

Открытие общей управляемой формы для печати

Причем, форму мы можем открыть, как с общего списка документов, так и из нужного нам документа.

Открытие общей управляемой формы для печати


Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Управляемые формы.
Есть внешняя обработка. У неё как у Объекта имеется Табличная часть с большим количеством полей.
Строк у таблицы тоже получается прилично - 5-7 тысяч.

При нажатии на кнопку из данных каждой строки Табличной части создаётся один документ.
При условии, что у этой строки поле Пометка (тип Булево) установлена в значении Истина.

Таким образом, при обработке На сервере приходится обращаться к Объект.Табличная часть 5000 раз.
Даже если там только одна помеченная строчка.

Есть ли возможность как-то оптимизировать этот момент?

Имеет ли смысл передавать табличную часть на сервер?
На мой юзерский взгляд, процесс передачи информации из таблицы на сервер займет не меньше времени.
Все равно ведь придется 5000 строк проверить на предмет наличия Пометки со значением Истина.

Знаю, нужно изучать оптимизацию клиент-серверного взаимодействия, но времени катастрофически не хватает. Буду признательна, если поможете сузить область поиска грамотной ссылкой?

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Передача текущей строки табличной части из клиента на сервер.
Необходимо перекинуть текущую строку табличной части из Клиента на Сервер. Подскажите, как это.

Запрос. Условие: строка из первой табличной части равна любой строке из другой табличной части
Есть документ "РаспределениеМатериаловНаВыпуск". У этого документа имеется "Форма документа". На.


Экспорт в эксель табличной части подчиненной формы с учетом полей-комбобоксов в табличной части
Добрый день. Пришло пожелание от коллег выгружать информацию из табличной подформы в.


Передача табличной части обработки в запрос
Здравствуйте. Делаю внешнюю обработку для Документооборота. Сделал запрос для вывода просроченных.

Читайте также: