0
ДобрыйПутник
naïve
28.03.25
✎
12:19
|
Здравствуйте, подскажите, сделал процедуру в общем модуле по заполнению ТЧ товаров, вызываю ее с сервера и передаю в нее Объект.Товары, там заполняю, но выдает ошибку -
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Нельзя изменять поле, содержащее объект данных формы
[ОшибкаИспользованияВстроенногоЯзыка]
&НаКлиенте
Процедура ITS_РДЗаполнитьОстаткамиСкладаПосле(Команда)
Если ЗначениеЗаполнено(Объект.СкладОтправитель) Тогда
Если Объект.Товары.Количество() > 0 Тогда
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса",
ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Очистить табличную часть товары?", РежимДиалогаВопрос.ДаНет, 0, КодВозвратаДиалога.Да, "Вы уверены?");
Иначе
ЗаполнитьТабЧастьТоварыОстаткамиПоСкладу(Объект.СкладОтправитель, Объект.Товары);
КонецЕсли;
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю("Поле ""Склад-отправитель"" не заполненно",,"Объект.СкладОтправитель",,Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Товары.Очистить();
ЗаполнитьТабЧастьТоварыОстаткамиПоСкладу(Объект.СкладОтправитель, Объект.Товары);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТабЧастьТоварыОстаткамиПоСкладу(Склад, ТЧ)
СкладыСервер.ЗаполнитьТЧОстаткамиТоваровСклада(Склад, ТЧ);
КонецПроцедуры
ОбщийМодуль -
Процедура ЗаполнитьТЧОстаткамиТоваровСклада(Склад, ТЧ) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.Серия КАК Серия,
| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
| ТоварыНаСкладахОстатки.КОтгрузкеОстаток КАК КОтгрузкеОстаток,
| ТоварыНаСкладахОстатки.ВНаличииОстаток - ТоварыНаСкладахОстатки.КОтгрузкеОстаток КАК ФактОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если НЕ Выборка.Количество() = 0 Тогда
Пока Выборка.Следующий() Цикл
Если Выборка.ФактОстаток > 0 Тогда
Строка = ТЧ.Добавить();
Строка.Номенклатура = Выборка.Номенклатура;
Строка.КоличествоУпаковок = Выборка.ФактОстаток;
Строка.Количество = Выборка.ФактОстаток;
Строка.ТипНоменклатуры = Выборка.ТипНоменклатуры;
Если НЕ Выборка.Серия = Справочники.СерииНоменклатуры.ПустаяСсылка() Тогда
Строка.СтатусУказанияСерий = 10;
Строка.Серия = Выборка.Серия;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("На складе " + Склад + " нету остатков",,,,Истина);
КонецЕсли;
КонецПроцедуры
|
|
8
Мультук
гуру
28.03.25
✎
13:46
|
(7)
Вот зачем ты (я) наступил на мозоль в пятницу :-)
Я теперь начал думать, а как же тогда в типовом коде вот эта хрень работает. А она работает:
-- передаётся табличная часть
-- она таки меняется (цены заполянются)
-- правда новые строки не добавляются
&НаСервере
Функция ЗаполнитьЦеныПоВидуЦенСервер()
КолонкиПоЗначению = Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка());
ДругиеИменаКолонок = Новый Структура("НоменклатураОприходование, ХарактеристикаОприходование", "Номенклатура", "Характеристика");
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("ВидЦены", Объект.ВидЦены);
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", КолонкиПоЗначению);
ПараметрыЗаполнения.Вставить("ДругиеИменаКолонок", ДругиеИменаКолонок);
Возврат ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Объект.Товары, // Табличная часть
, // Выделенные строки (заполнять во всех строках)
ПараметрыЗаполнения);
КонецФункции
|
|