Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 05:52

Не заполняется табличная часть

Автор Инокентий, 14 июл 2023, 16:04

0 Пользователей и 1 гость просматривают эту тему.

Инокентий

Добрый день! Подскажите пожалуйста, в чем может быть причина ошибкиОшибка при вызове метода контекста (ЗаполнитьТабличнуюЧастьНаСервере)
{Документ.ВводВЭксплуатацию.Форма.ФормаДокумента.Форма(112)}:таб = ЗаполнитьТабличнуюЧастьНаСервере();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
пытаюсь заполнить табличную часть из таблицы значений. Все имена полей совпадают
&НаСервере
Функция ЗаполнитьТабличнуюЧастьНаСервере()

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВводВЭксплуатациюТаблицаВводаВЭкплуатацию.Оборудование КАК Оборудование,
| СУММА(ВводВЭксплуатациюТаблицаВводаВЭкплуатацию.Количество) КАК Количество,
| ВводВЭксплуатациюТаблицаВводаВЭкплуатацию.Оборудование.СрокЭксплуатацииВДнях КАК ОборудованиеСрокЭксплуатацииВДнях
|ПОМЕСТИТЬ врТаб
|ИЗ
| Документ.ВводВЭксплуатацию.ТаблицаВводаВЭкплуатацию КАК ВводВЭксплуатациюТаблицаВводаВЭкплуатацию
|
|СГРУППИРОВАТЬ ПО
| ВводВЭксплуатациюТаблицаВводаВЭкплуатацию.Оборудование,
| ВводВЭксплуатациюТаблицаВводаВЭкплуатацию.Оборудование.СрокЭксплуатацииВДнях
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| врТаб.Оборудование КАК Оборудование,
| врТаб.Количество КАК Количество,
| врТаб.ОборудованиеСрокЭксплуатацииВДнях КАК СрокЭксплуатацииВДнях,
| ЕСТЬNULL(ОборудованиеНаСкладеОстатки.ДатаОкончанияСрокаГодности, 0) КАК ДатаОкончанияСрокаГодности,
| ЕСТЬNULL(ОборудованиеНаСкладеОстатки.ДатаОкончанияСрокаЭксплуатации, 0) КАК ДатаОкончанияСрокаЭксплуатации,
| ОборудованиеНаСкладеОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОборудованиеНаСкладеОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| врТаб КАК врТаб
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборудованиеНаСкладе.Остатки КАК ОборудованиеНаСкладеОстатки
| ПО врТаб.Оборудование = ОборудованиеНаСкладеОстатки.Оборудование
|
|УПОРЯДОЧИТЬ ПО
| ДатаОкончанияСрокаГодности,
| ДатаОкончанияСрокаЭксплуатации
|ИТОГИ
| МАКСИМУМ(Количество),
| МАКСИМУМ(ОборудованиеСрокЭксплуатацииВДнях),
| СУММА(КоличествоОстаток)
|ПО
| Оборудование";


РезультатЗапроса = Запрос.Выполнить();

ВыборкаОборудование = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);           

ТаблицаДляДвижения = Новый ТаблицаЗначений;   


ТаблицаДляДвижения.Колонки.Добавить("Оборудование");
//ТаблицаДляДвижения.Колонки.Добавить("ДатаОкончанияСрокаГодности");
ТаблицаДляДвижения.Колонки.Добавить("Количество");
ТаблицаДляДвижения.Колонки.Добавить("ДатаОкончанияСрокаЭксплуатации"); 
//ТаблицаДляДвижения.Колонки.Добавить("Сумма"); 


Пока ВыборкаОборудование.Следующий() Цикл
Если ВыборкаОборудование.Количество > ВыборкаОборудование.КоличествоОстаток Тогда
//Отказ = Истина;

Сообщение = новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Недостаточно Оборудования %1 В количестве %2",
ВыборкаОборудование.Номенклатура, ВыборкаОборудование.Количество-ВыборкаОборудование.КоличествоОстаток);
Сообщение.Сообщить();

КонецЕсли; ВыборкаДетальныеЗаписи = ВыборкаОборудование.Выбрать();

//Если отказ тогда
// сообщить("отказ");
// Продолжить;
//КонецЕсли;

ВыборкаДетальныеЗаписи = ВыборкаОборудование.Выбрать();
ОсталосьСписать = ВыборкаОборудование.Количество;

Пока ВыборкаДетальныеЗаписи.Следующий() И ОсталосьСписать <> 0 Цикл

КСписанию = Мин(ОсталосьСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);
//СуммаСписания = ?(ВыборкаДетальныеЗаписи.КоличествоОстаток = КСписанию,
//ВыборкаДетальныеЗаписи.СуммаОстаток,
//ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*КСписанию);

Стр = ТаблицаДляДвижения.Добавить();
Стр.Оборудование = ВыборкаДетальныеЗаписи.Оборудование;
//Стр.ДатаОкончанияСрокаГодности = ВыборкаДетальныеЗаписи.ДатаОкончанияСрокаГодности;

ПеременнаяДатаОкончанияСрокаЭксплуатации = Объект.Дата + 3600*24 * ВыборкаДетальныеЗаписи.СрокЭксплуатацииВДнях;
Если переменнаяДатаОкончанияСрокаЭксплуатации <= ВыборкаДетальныеЗаписи.ДатаОкончанияСрокаГодности тогда
Стр.ДатаОкончанияСрокаЭксплуатации = переменнаяДатаОкончанияСрокаЭксплуатации;
Иначе
Стр.ДатаОкончанияСрокаЭксплуатации = ВыборкаДетальныеЗаписи.ДатаОкончанияСрокаГодности;
КонецЕсли;

Стр.Количество = КСписанию;
//Стр.Сумма = СуммаСписания;
ОсталосьСписать = ОсталосьСписать - КСписанию;
КонецЦикла;   

КонецЦикла;

Возврат ТаблицаДляДвижения;
КонецФункции

&НаКлиенте
Процедура ЗаполнитьТабличнуюЧасть(Команда)
таб = ЗаполнитьТабличнуюЧастьНаСервере();
элементы.ТаблицаВводВЭксплуатацию.Очистить(); 
объект.ТаблицаВводВЭксплуатацию.загрузить(таб);
КонецПроцедуры

LexaK

Инокентий, ошибка здесь
 Возврат    ТаблицаДляДвижения;

НЕЛЬЗЯ на Клиент возвращать Таблицу значений !  :befhbt:

в этой же функции заполните нужную таблицу формы/объекта
(примерно так)

ВашаТЧ.Заполнить(ТаблицаДляДвижения);
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск