helpf.pro
Регистрация

v8: Обращение к элементам табличной части на сервере

bless18
24.08.2012 10:04Прочитано: 17829
Доброе утро!
Имеется документ Списание с табличной частью, у которой колонки:
Наименование
Количество
При вводе количества нужен контроль остатков, чтобы не было отрицательных. Создаю на Сервере выборку количества из регистра накопления. И мне нужен параметр Наименование, по которому отслеживать мое количество. Но никак не могу придумать способ обратиться к элементам табличной части на сервере.
Подскажите, пожалуйста, как это сделать?
Код 1C v 8.2 УП
 	ТЗ = Объект.Списание.Выгрузить().Колонки;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Книга", ТЗ.Наименование);
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиКнигОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиКниг.Остатки КАК ОстаткиКнигОстатки
|ГДЕ
| ОстаткиКнигОстатки.Книга = &Книга";
Результат = Запрос.Выполнить().Выгрузить();

Пока такие варианты, но запрос выдает ошибку
Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ОстаткиКнигОстатки.Книга <<?>>= &Книга
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
24.08.2012 11:59Ответ № 1
Попробовала реализовать по-другому:
на Сервере создаю функцию КонтрольОстатков с параметром Книга и вызываю ее на клиенте:
Код 1C v 8.2 УП
 
&НаСервереБезКонтекста
Функция КонтрольОстатков(Книга) Экспорт
ТаблицаОстатков = РегистрыНакопления.ОстаткиКниг.Остатки(,Новый Структура ("Книга", Книга));
Возврат ТаблицаОстатков;
КонецФункции

&НаКлиенте
Процедура СписаниеКнигКоличествоПриИзменении(Элемент)
СтрокаТЧ = Элементы.СписаниеКниг.ТекущиеДанные;
КонтрольОстатков(СтрокаТЧ.Наименование);
КонецПроцедуры


Выходит ошибка:
{Документ.СписаниеКниг.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (КонтрольОстатков)
КонтрольОстатков(СтрокаТЧ.Наименование);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.
bless18
24.08.2012 12:00Ответ № 2
А если с директивой &НаСервере создать функцию, то ошибка

{Документ.СписаниеКниг.Форма.ФормаДокумента.Форма(47)}: Ошибка при вызове метода контекста (КонтрольОстатков)
КонтрольОстатков(СтрокаТЧ.Наименование);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable *08
Adara
24.08.2012 12:45Ответ № 3
Попробуй так:
1. Выгрузи колонку "Наименование" из ТЧ "Списание" в массив МассивКнигИЗТЧ.
2. В запросе:
Код 1C v 8.2 УП
 
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивКниг", МассивКнигИЗТЧ);
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиКнигОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиКниг.Остатки КАК ОстаткиКнигОстатки
|ГДЕ
| ОстаткиКнигОстатки.Книга В (&МассивКниг)";
Результат = Запрос.Выполнить().Выгрузить();


Получишь в "Результат" Таблицу с остатками по твоим "Наименование"...

Должно получится.
Изменено 24.08.12 12:46:45
Adara
24.08.2012 12:53Ответ № 4
Выгрузить в массив:

Код 1C v 8.2 УП
 МассивКнигИЗТЧ = Объект.Списание.Выгрузить().ВыгрузитьКолонку("Наименование");   
bless18
24.08.2012 15:26Ответ № 5
Спасибо! Получилось!
Adara
24.08.2012 16:17Ответ № 6

Изменено 24.08.12 17:23:12
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.