Опубликован: 06.12.2011 | Уровень: для всех | Доступ: платный
Лекция 7:

Документы, регистры накопления, СКД

< Лекция 6 || Лекция 7: 123456 || Лекция 8 >

Если, например, мы имеем дело с документом наподобие "Отгрузка материалов", окажется, что такой документ вполне логично будет вводить на основании документа "Счет" - после оплаты этого счета и фактической отгрузки материалов. Документ отгрузки, в отличие от счета, фиксирует уже свершившийся факт хозяйственной жизни, который должен оказать воздействие на состояние информационной базы. Такой документ должен проводиться – то есть – делать записи в соответствующие регистры.

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

Прежде чем продолжать работу с документом ПоступлениеМатериалов, приведите данные справочника Номенклатура в вашей информационной базе к виду, показанному в таблице 6.1.

Таблица 6.1. Данные справочника Номенклатура
Наименование Единица измерения Услуга Группа
Парикмахерские услуги Да Да
Завивка Час Да
Стрижка Час Да
Парфюмерия Нет Да
Духи Штука Нет
Одеколон Штука Нет
Прочие материалы Нет Да
УФ-гель Упаковка Нет
Спецодежда Нет Да
Одежда для парикмахера Штука Нет
Уход за волосами Нет Да
Бальзам для волос Штука Нет
Лак для волос Упаковка Нет

На рис. 6.5. вы можете видеть форму документа после ввода в нее некоторых данных.

Заполнение документа Поступление товаров

Рис. 6.5. Заполнение документа Поступление товаров

Подобный документ, очевидно, заполняется в информационной базе по данным некоего бумажного документа (приходной накладной, например), поступившей от поставщика вместе с поступившими товарами. Цена и количество каждой товарной позиции вводится из документа вручную, с этим здесь ничего поделать нельзя. Но вот ввод суммы по каждой из строк табличной части вполне поддается автоматизированному расчету на основе данных о цене и количестве. Еще один важный момент, на который можно обратить внимание – в нашем документе не отображается итоговый показатель по табличной части. Как правило, в подобных случаях пользователю важно увидеть общую сумму документа. Общая сумма позволит быстро сверить данные, введенные в электронный документ, с его бумажным аналогом. Если общая сумма совпадает – то, почти наверняка, все строки табличной части введены верно.

Реализуем эту функциональность.

Для того, чтобы автоматически заполнить поле сумма по каждой из строк табличной части, редактируемой пользователем, очевидно, что рассчитывать сумму имеет смысл либо после заполнения поля Цена, либо – после заполнения поля Количество, перехватив какие-либо события, имеющие отношение к редактируемой табличной части.

В нашем случае это должны быть события, генерируемые при изменении полей Цена или Количество при вводе данных в определенной строке. Для того, чтобы назначить обработчики подобных событий для определенных элементов табличной части, можно поступить так же, как мы поступали, назначая обработчики событий для любых других элементов формы ( рис. 6.6.). Для начала, конечно же, нам нужно будет создать собственную форму документа, делается это на закладке Формы окна редактирования объекта. С параметрами, предложенными конструктором форм по умолчанию, можно согласиться.

Назначение обработчика полю табличной части

увеличить изображение
Рис. 6.6. Назначение обработчика полю табличной части

Назначим обработчики событий ПриИзменении для полей МатериалыЦена и МатериалыКоличество.

Теперь нам нужно реализовать следующее: при работе в определенной строке таблицы, при вводе в нее данных, получить эту строку, и, при изменении цены или количества номенклатуры рассчитать сумму.

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

Просмотр свойства ТекущиеДанные в окне Выражение при отладке кода

Рис. 6.7. Просмотр свойства ТекущиеДанные в окне Выражение при отладке кода
< Лекция 6 || Лекция 7: 123456 || Лекция 8 >
Лариса Дятчина
Лариса Дятчина

Код 

&НаКлиенте

Процедура ОсновноеКонтактноеЛицоПриИзменении(Элемент)

Если НЕ ПроверитьЗаполнениеРеквизита() Тогда

 Сообщить("Выбранное контактное лицо, "+Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента.");

КонецЕсли;

КонецПроцедуры

 

&НаСервере

Функция ПроверитьЗаполнениеРеквизита()

 Возврат (Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);  

КонецФункции

&НаСервере

Процедура УстановитьНомерПредставителя()

 

 Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения;

КонецПроцедуры

При проверке выдает ошибку:

{Справочник.Контрагенты.Форма.ФормаСписка.Форма(12,11)}: Переменная не определена (Объект)
 Возврат (<<?>>Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);   (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,2)}: Переменная не определена (Объект)
 <<?>>Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,32)}: Переменная не определена (Объект)
 Объект.ТелефонКонтактногоЛица=<<?>>Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(6,41)}: Переменная не определена (Объект)
 Сообщить("Выбранное контактное лицо, "+<<?>>Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента."); (Проверка: Тонкий клиент)

 

работаю на версии 1С:Предприятие 8.3 (8.3.10.2650)

максим матасов
максим матасов
Алексей Ломакин
Алексей Ломакин
Россия, Владимир