Тонкий клиент не открывает форму заказа клиента, а толстый открывает. Почему
Здравствуйте. Подскажите пожалуйста, внес в конфигурации изменения, а именно добавил колонки в форму документа (Вес,Объем), вывел итоговые значения по всему документа в нижнюю чать формы, (сделал расчет итогов в модуле формы документа) но после применения изменений, при открытии документа заказ клиента на тонком клиенте пишет ошибку не обнаружено поле объекта вес числитель, в толстом клиенте все открывается. Базу удалял из списка, создавал новую, но результата нет. Что может быть? как исправит? пока пользователи работают на толстом клиенте!
Найденные решения
В модуле формы создайте функцию:
А далее в вашем коде:
&НаСервере
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат СведенияНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
А далее в вашем коде:
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
СведенияНоменклатуры = ПолучитьСведенияНоменклатуры(Строка.Номенклатура);
Объем1 = Объем1 + Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ВесТовара = СтрокаТД.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СведенияНоменклатуры.ОбъемЧислитель;
КонецЦикла;
ИтогоВес = Вес1;
ИтогоОбъем = Объем1;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) а как поправить?
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
Объем1 = Объем1 + Строка.Количество * Строка.Номенклатура.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * Строка.Номенклатура.ВесЧислитель;
КонецЦикла;
ИтогоВес = Вес1;
ИтогоОбъем = Объем1;
Для каждого СтрокаТД из Объект.Товары Цикл
СтрокаТД.ВесТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ВесЧислитель;
СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ОбъемЧислитель;
КонецЦикла;
Показать
Вот он код:
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
СведенияНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
Объем1 = Объем1 + Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ВесТовара = СтрокаТД.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СведенияНоменклатуры.ОбъемЧислитель;
КонецЦикла;
ИтогоВес = Вес1;
ИтогоОбъем = Объем1;
Показать
(6)
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(502,26)}: Переменная не определена (ОбщегоНазначения)
СведенияНоменклатуры = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель"); (Проверка: Тонкий клиент)
СведенияНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(502,26)}: Переменная не определена (ОбщегоНазначения)
СведенияНоменклатуры = <<?>>ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель"); (Проверка: Тонкий клиент)
(6)
А это функция куда я проваливаюсь
Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт
// Если передано имя предопределенного.
Если ТипЗнч(Ссылка) = Тип("Строка") Тогда
ПолноеИмяПредопределенногоЭлемента = Ссылка;
// Вычисление ссылки по имени предопределенного.
// - дополнительно выполняет проверку метаданных предопределенного, выполняется предварительно.
Попытка
Ссылка = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(ПолноеИмяПредопределенногоЭлемента);
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный первый параметр Ссылка:
|%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстОшибки;
КонецПопытки;
// Разбор полного имени предопределенного.
ЧастиПолногоИмени = СтрРазделить(ПолноеИмяПредопределенногоЭлемента, ".");
ПолноеИмяОбъектаМетаданных = ЧастиПолногоИмени[0] + "." + ЧастиПолногоИмени[1];
// Если предопределенный не создан в ИБ, то требуется выполнить проверку доступа к объекту.
// В других сценариях проверка доступа выполняется в момент исполнения запроса.
Если Ссылка = Неопределено Тогда
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных);
Если Не ПравоДоступа("Чтение", МетаданныеОбъекта) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для работы с таблицей ""%1""'"), ПолноеИмяОбъектаМетаданных);
КонецЕсли;
КонецЕсли;
Иначе // Если передана ссылка.
Попытка
ПолноеИмяОбъектаМетаданных = Ссылка.Метаданные().ПолноеИмя();
Исключение
ВызватьИсключение НСтр("ru = 'Неверный первый параметр Ссылка:
|- Значение должно быть ссылкой или именем предопределенного элемента'");
КонецПопытки;
КонецЕсли;
// Разбор реквизитов, если второй параметр Строка.
Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
Если ПустаяСтрока(Реквизиты) Тогда
Возврат Новый Структура;
КонецЕсли;
// Удаление пробелов.
Реквизиты = СтрЗаменить(Реквизиты, " ", "");
// Преобразование параметра в массив полей.
Реквизиты = СтрРазделить(Реквизиты, ",");
КонецЕсли;
// Приведение реквизитов к единому формату.
СтруктураПолей = Новый Структура;
Если ТипЗнч(Реквизиты) = Тип("Структура")
Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
СтруктураПолей = Реквизиты;
ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив")
Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
Для Каждого Реквизит Из Реквизиты Цикл
Попытка
ПсевдонимПоля = СтрЗаменить(Реквизит, ".", "");
СтруктураПолей.Вставить(ПсевдонимПоля, Реквизит);
Исключение
// Если псевдоним не является ключом.
// Поиск ошибки доступности полей.
Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты);
Если Результат.Ошибка Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки);
КонецЕсли;
// Не удалось распознать ошибку, проброс первичной ошибки.
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты)));
КонецЕсли;
// Подготовка результата (после выполнения запроса переопределится).
Результат = Новый Структура;
// Формирование текста запроса к выбираемым полям.
ТекстЗапросаПолей = "";
Для каждого КлючИЗначение Из СтруктураПолей Цикл
ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
КлючИЗначение.Значение,
КлючИЗначение.Ключ);
ПсевдонимПоля = КлючИЗначение.Ключ;
ТекстЗапросаПолей =
ТекстЗапросаПолей + ?(ПустаяСтрока(ТекстЗапросаПолей), "", ",") + "
| " + ИмяПоля + " КАК " + ПсевдонимПоля;
// Предварительное добавление поля по псевдониму в возвращаемый результат.
Результат.Вставить(ПсевдонимПоля);
КонецЦикла;
// Если предопределенного нет в ИБ.
// - приведение результата к отсутствию объекта в ИБ или передаче пустой ссылки.
Если Ссылка = Неопределено Тогда
Возврат Результат;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ " + ?(ВыбратьРазрешенные, "РАЗРЕШЕННЫЕ", "") + "
|" + ТекстЗапросаПолей + "
|ИЗ
| " + ПолноеИмяОбъектаМетаданных + " КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Ссылка
|";
// Выполнение запроса.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = ТекстЗапроса;
Попытка
Выборка = Запрос.Выполнить().Выбрать();
Исключение
// Если реквизиты были переданы строкой, то они уже конвертированы в массив.
// Если реквизиты - массив, оставляем без изменений.
// Если реквизиты - структура - конвертируем в массив.
// В остальных случаях уже было бы выброшено исключение.
Если Тип("Структура") = ТипЗнч(Реквизиты) Тогда
Реквизиты = Новый Массив;
Для каждого КлючИЗначение Из СтруктураПолей Цикл
ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
КлючИЗначение.Значение,
КлючИЗначение.Ключ);
Реквизиты.Добавить(ИмяПоля);
КонецЦикла;
КонецЕсли;
// Поиск ошибки доступности полей.
Результат = НайтиОшибкуДоступностиРеквизитовОбъекта(ПолноеИмяОбъектаМетаданных, Реквизиты);
Если Результат.Ошибка Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный второй параметр Реквизиты: %1'"), Результат.ОписаниеОшибки);
КонецЕсли;
// Не удалось распознать ошибку, проброс первичной ошибки.
ВызватьИсключение;
КонецПопытки;
// Заполнение реквизитов.
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(Результат, Выборка);
КонецЕсли;
Возврат Результат;
КонецФункции
ПоказатьА это функция куда я проваливаюсь
В модуле формы создайте функцию:
А далее в вашем коде:
&НаСервере
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат СведенияНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
А далее в вашем коде:
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
СведенияНоменклатуры = ПолучитьСведенияНоменклатуры(Строка.Номенклатура);
Объем1 = Объем1 + Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ВесТовара = СтрокаТД.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СведенияНоменклатуры.ОбъемЧислитель;
КонецЦикла;
ИтогоВес = Вес1;
ИтогоОбъем = Объем1;
Показать
(12)
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
&НаСервере
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.Свойства
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
// Конец СтандартныеПодсистемы.Свойства
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
// ИнтернетПоддержкаПользователей.СПАРКРиски, ПриОткрытии.
СПАРКРискиКлиент.ПриОткрытии(ЭтотОбъект, Неопределено);
// Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ПриОткрытии.
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
//VID(
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
СведенияНоменклатуры = ПолучитьСведенияНоменклатуры(Строка.Номенклатура);
Объем1 = Объем1 + Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
КонецЦикла;
ИтогоВес = Вес1;
ИтогоОбъем = Объем1;
Для каждого СтрокаТД из Объект.Товары Цикл
СтрокаТД.ВесТовара = СтрокаТД.Количество * СведенияНоменклатуры.ВесЧислитель;
СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ОбъемЧислитель;
КонецЦикла;
//Объем1 = 0;
// Вес1 = 0;
// Для Каждого Строка Из Объект.Товары Цикл
// СведенияНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
// Объем1 = Объем1 + Строка.Количество * Строка.Номенклатура.ОбъемЧислитель;
// Вес1 = Вес1 + Строка.Количество * Строка.Номенклатура.ВесЧислитель;
//КонецЦикла;
// ИтогоВес = Вес1;
// ИтогоОбъем = Объем1;
//
// Для каждого СтрокаТД из Объект.Товары Цикл
// СтрокаТД.ВесТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ВесЧислитель;
// СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ОбъемЧислитель;
//КонецЦикла;
//VID)
КонецПроцедуры
Показать
(20)
&НаСервереБезКонтекста
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.Свойства
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
// Конец СтандартныеПодсистемы.Свойства
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
// ИнтернетПоддержкаПользователей.СПАРКРиски, ПриОткрытии.
СПАРКРискиКлиент.ПриОткрытии(ЭтотОбъект, Неопределено);
// Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ПриОткрытии.
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
//VID(
Объем1 = 0;
Вес1 = 0;
Для Каждого Строка Из Объект.Товары Цикл
СведенияНоменклатуры = ПолучитьСведенияНоменклатуры(Строка.Номенклатура);
Объем1 = Объем1 + Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
Вес1 = Вес1 + Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
Строка.ВесТовара = Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
Строка.ОбъемТовара = Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
КонецЦикла;
ИтогоВес = Вес1;
ИтогоОбъем = Объем1;
//Объем1 = 0;
// Вес1 = 0;
// Для Каждого Строка Из Объект.Товары Цикл
// СведенияНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Строка.Номенклатура, "ОбъемЧислитель, ВесЧислитель");
// Объем1 = Объем1 + Строка.Количество * Строка.Номенклатура.ОбъемЧислитель;
// Вес1 = Вес1 + Строка.Количество * Строка.Номенклатура.ВесЧислитель;
//КонецЦикла;
// ИтогоВес = Вес1;
// ИтогоОбъем = Объем1;
//
// Для каждого СтрокаТД из Объект.Товары Цикл
// СтрокаТД.ВесТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ВесЧислитель;
// СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ОбъемЧислитель;
//КонецЦикла;
//VID)
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот