• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Форма И Документы

  • Автор темы ovak
  • Дата начала
O

ovak

Учусь по книге 1С: Предприятие 8.2 Радченко и Хрусталева. Создавая документ "Приходная Накладная" (стр. 127) столкнулся с проблемой. Создал элементы формы материлы, количество, цена, сумма. Затем прописал модуль для формы:
Листинг 4.2
Код:
&НаКлиенте
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт 
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
.
Затем прописал обработчик формы:
Листинг 4.3.
Код:
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент) 
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные; 
РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Проблема в том, что код листинга 4.3 из МатериалыКоличество продублировался в МатериалыМатериалы, МатериалыЦена и МатериалыСумма. Когда в МатериалыЦена
Код:
Процедура МатериалыКоличествоПриИзменении(Элемент)
заменяю на
Код:
Процедура МатериалыЦенаПриИзменении(Элемент)
, этот новый код вновь самопроизвольно копируется в другие элементы формы. Как можно исправить подобную ситуацию?
 
A

Allexei

Ничего не понял если честно. Обработчики событий назначаем через палитру свойств элемента, получаем 3 обработчика событий МатериалыЦенаПриИзменении, МатериалыКоличествоПриИзменении и МатериалыМатериалыПриИзменении. В качестве тела процедур вставляем то что в листинге 4.3. Все работает.
 
O

ovak

Всё работало по началу. Но я допустил грамматическую ошибку в кодах и наименованиях. После исправления, начались проблемы. Раза 3 с 0 все создавал и переписывал, и продолжает клонироватся. Меняю в цене количество на цену, в количестве появляется код из цены, причем и в сумме, и в материалах. Погоня за собственным хвостом. :) Можно удалить и создать новый документ, не проблема. Но интересно разобратся, да и в будущем опыт пригодился бы. Для саморазвития, так сказать. Хотя может быть прогу выбил или ....
 
O

ovak

Разобрался.
Код:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти)Экспорт
СтрокаТабличнойЧасти.Сумма=СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧ
асти.Цена;
КонецПроцедуры
• МатериалыКоличество – ПриИзменении
Код:
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
• МатериалыЦена – ПриИзменении
Код:
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
 
Д

Дайнеко

Ть-фу ты! Опять запутал! Так в чем ошибка был? (Я один ничего не поня?)

А так писать слабо?
Код:
	РаботаСДокументами.РассчитатьСумму(Элементы.Материалы.ТекущиеДанные);
 
O

ovak

Компиляция проходит по считыванию кода из количества, и пропускает считанный код в цене. Продолжает компиляцию на основе полученных ранее данных. Я при переходе в МатериалыЦенаПриИзменении() удалил предшедствующий код. Ладно, не заморачивайтесь. Решение проблемы найдено.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!