Результат = Запрос.Выполнить();
ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов = Результат.Выгрузить();
Если ТаблицаДокументов.Количество() <= 1 Тогда
КонтрагентОбъект = Контрагент.ПолучитьОбъект();
КонтрагентОбъект.Менеджер = Менеджер;
КонтрагентОбъект.Записать();
Сообщить("Для контрагента " + Контрагент + " установлен Менеджер " + Менеджер);
КонецЕсли;
КонецПроцедуры
Задача: “Обеспечьте хранение цен на товары…”
Решение:
Создан Справочник ТипыЦен.
Создан Периодический (период=в пределах дня) регистр сведений “ЦеныНоменклатуры”. Измерения регистра – Номенклатура (справочник Номенклатура и ТипЦены (справочник Цена), ресурс Цена (Число 15,2).
Создан остаточный регистр накопления “Остатки”. Измерения – Товар (справочник Номенклатура) и ВидБрака (справочник ВидыБрака). Ресурс – Количество (Число 15, 3)
Создан оборотный регистр накопления “Закупки”. Измерения – Поставщик (справочник Контрагенты) и Товар, ресурсы – Количество и Стоимость
Задача: “Необходимо поработать над удобством работы с документами системы.. ”
В реквизиты документов ПоступлениеТоваров и РасходнаяНакладная добавлен Реквизит ТипЦены (справочник ТипыЦен)
Общий модуль: Пересчет
&НаСервере
Функция ПолучитьВидПересчетаНаСервере() Экспорт
Вид = Константы.ВидПересчетаСуммы.Получить();
Результат = "";
Если Вид = Перечисления.ВидыПересчетовСуммы.СуммаКоличество Тогда
Результат = "СуммаКоличество";
ИначеЕсли Вид = Перечисления.ВидыПересчетовСуммы.СуммаЦена Тогда
Результат = "СуммаЦена";
КонецЕсли;
Возврат Результат;
КонецФункции // ПолучитьВидПересчетаНаСервере()
&НаСервере
Функция ПолучитьЦену(Ссылка, ТипЦены, Дата) Экспорт
Отбор = Новый Структура("Номенклатура, ТипЦены",Ссылка, ТипЦены );
Таблица = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(Дата,Отбор);
Цена = Таблица.Итог("Цена");
Создан журнал документов “ДокументыЗакупки”, в нем – графы: “Поставщик” (документ ПоступлениеТоваров.Поставщик), ПодотчетноеЛицо (документ ПоступлениеТоваров.ПодотчетноеЛицо) и Сумма (документ ПоступлениеТоваров.СуммаДокумента)
“РЕГИСТРЫ”
1.Создан периодический независимый РегистрСведений МенеджерыКонтрагентов с измерением Контрагент – тип СправочникСсылка.Контрагенты
и ресурсом Менеджер – тип СправочникСсылка.Пользователи.
2.Создан периодический независимый РегистрСведений ЦеныТоваров с измерениями Товар- тип СправочникСсылка.Товары,ТипЦен – СправочникСсылка.ТипыЦен и ресурсом Цена – тип Число.
3.Создан РегистрНакоплений ОстаткиТоваров (вид – “остатки”) с измерениями Товар – тип СправочникСсылка.Номенклатура;
Качество – тип СправочникСсылка.Качества и ресурсом Количество – тип Число
4.Создан РегистрНакоплений ЗакупкиТоваров (вид – “обороты”) с измерениями Товар – тип СправочникСсылка.Номенклатура,Контрагент – составной тип СправочникСсылка.Контрагенты,Сотрудники,
ТипЦен – СправочникСсылка.ТипыЦен и ресурсами Количество,Сумма – тип Число
ДОКУМЕНТ “КОНТАКТСКЛИЕНТОМ”
1. В Документе КонтактСКлиентом реквизит Менеджер при вводе нового документа заполнять текущим пользователем.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Объект.Менеджер = ОбщиеФункцииСервер.СинхронизацияПользователей();
КонецЕсли;
КонецПроцедуры
2.При проведении документа необходимо выполнять анализ, если происходит первый контакт с
контрагентом, то необходимо в качестве менеджера для контрагента нужно установить значение,указанное в документе.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МенеджерыКонтрагентовСрезПоследних.Менеджер
|ИЗ
| РегистрСведений.МенеджерыКонтрагентов.СрезПоследних(&МоментВремени, Контрагент = &Контрагент) КАК МенеджерыКонтрагентовСрезПоследних";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если Не ВыборкаДетальныеЗаписи.Следующий() Тогда
набор = РегистрыСведений.МенеджерыКонтрагентов.СоздатьНаборЗаписей();
набор.Отбор.Период.Установить(Дата);
набор.Отбор.Контрагент.Установить(Контрагент);
Запись = набор.Добавить();
Запись.Контрагент = Контрагент;
Запись.Период = Дата;
Запись.Менеджер = Менеджер;
Набор.Записать();
КонецЕсли;
КонецПроцедуры
3.Реквизиты “Менеджер” и “Контрагент” сделаны обязательными для заполнения в этом документе.
4.Выбор контактных лиц в подчинении указанному в документе контрагента.
ДОКУМЕНТЫ “ЗАКУПКИ И ОТГРУЗКИ”
1.В документах закупки и отгрузки создан реквизит шапки ТипЦен – Тип Справочник.ТипыЦен, в котором пользователь будет выбирать прайс, для
заполнения цен текущего документа
&НаСервере
Процедура ПроставитьЦеныНаСервере()
Если ЗначениеЗаполнено(Объект.ТипЦен) Тогда
Для каждого Строка Из Объект.Товары Цикл
Строка.Цена =ПолучитьЦенуТовара(Объект.Дата,Строка.Номенклатура,Объект.ТипЦен);
ОбщиеФункцииСерверКлиент.РассчитатьСуммуДокумента(Строка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
2.Автоматическую подстановку цен при выборе номенклатуры, согласно указанного прайса
Создан новый Общий модуль ОбщиеФункцииСерверКлиент (флаги “Клиент”,”Сервер”,”ВызовСервера”)
Процедура РассчитатьКвоИлиЦенуДокумента(ТекСтрока,Режим) Экспорт
Если Режим Тогда
ТекСтрока.Количество = ?(ТекСтрока.Цена=0,ТекСтрока.Количество,ТекСтрока.Сумма/ТекСтрока.Цена);
Иначе
ТекСтрока.Цена = ?(ТекСтрока.Количество=0,ТекСтрока.Цена,ТекСтрока.Сумма/ТекСтрока.Количество);
КонецЕсли;
КонецПроцедуры
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Ссылка;
Иначе
Возврат Справочники.ЕдиницыИзмеренияНоменклатуры.ПустаяСсылка();
КонецЕсли;
КонецФункции // ПолучитьЕдиницуИзмерения()
&НаСервереБезКонтекста
Функция ПолучитьЦенуТовара(Дата,Товар,ТипЦен)
Если Не ЗначениеЗаполнено(ТипЦен)Тогда
возврат 0;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныТоваровСрезПоследних.Цена,
| ЦеныТоваровСрезПоследних.Товар
|ИЗ
| РегистрСведений.ЦеныТоваров.СрезПоследних(
| &Дата,
| Товар = &Товар
| И ТипЦен = &ТипЦен) КАК ЦеныТоваровСрезПоследних";
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // ПолучитьЕдиницуИзмерения()
4.Пересчет цены или количества при изменении суммы (сам вариант пересчета –
количества или цены определена константой РеквизитТЧДляПерерасчетаПриИзмененииСуммы – Тип ПеречислениеСсылка.КоличествоЦена)
В общем модуле ОбщиеФункцииСервер добавлена функция глПолучитьРежимПересчетаСумм() – для установки-получения режима расчета цены или количества
Функция глПолучитьРежимПересчетаСумм()Экспорт
МенеджерК = Константы.РеквизитТЧДляПерерасчетаПриИзмененииСуммы;
Если Не ЗначениеЗаполнено(МенеджерК.Получить()) Тогда
МенеджерК.Установить(Перечисления.КоличествоЦена.Цена);
КонецЕсли;
Возврат МенеджерК.Получить();
КонецФункции
5.Отображение итоговой суммы документа – реализовано в подвале формы (свойства реквизита ТЧ – Сумма).
6. Номенклатура и количество сделаны обязательными для заполнения.
“ДОКУМЕНТ РЕАЛИЗАЦИИ”
Реализован выбор контактных лиц в подчинении указанному в документе контрагента (на уровне свойства реквизитов объекта).
“СПРАВОЧНИК НОМЕНКЛАТУРА”
Реализована проверка, запрещающая изменять базовую единицу
измерения для номенклатуры, если по ней уже есть движения в регистрах.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДоступностьБазЕд = Истина;
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.НомерСтроки как НомерСтроки
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Товар = &Товар";
ДоступностьБазЕд = Не ВыборкаДетальныеЗаписи.Следующий();
КонецЕсли;
Элементы.БазоваяЕдиница.Доступность = ДоступностьБазЕд;
КонецПроцедуры
Журнал “ДОКУМЕНТЫЗАКУПКИ”
Создан журнал документов «Документы закупки» (Состав – “АвансовыйОтчет”,”Приходная”), в котором должна
отображается информация о виде документа, контрагенте/подотчетном лице (графа Контрагент – Состав “Сотрудник” документа “АвансовыйОтчет” и “Контрагент” документа “Приходная”),
сумме документа (Графа “Сумма” – реквизиты шапки “СуммаИтого” этих документов, которые заполняются
в событии перед записью документа).
Вход
Важно!
Для новых покупателей Базового курса - с чего начать
...........................................................
Все контакты Саппорта Spec8.ru
...........................................................
Как задавать вопросы по материалам курса и ДЗ
...........................................................
Что такое Мастер-группа
...........................................................
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
1. В справочнике Контрагенты добавлен реквизит Менеджер (Тип Справочники.Пользователи) (либо можно сделать регистр сведений)
Задача: “В документе «КонтактСКлиентом» … необходимо создать реквизит “Менеджер” ..”
Решение:
Документ Контакт: Модуль объекта
Менеджер = ПараметрыСеанса.ТекущийПользователь;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контакт.Ссылка
|ИЗ
| Документ.Контакт КАК Контакт
|ГДЕ
| Контакт.Контрагент = &Контрагент
| И Контакт.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Результат = Запрос.Выполнить();
ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов = Результат.Выгрузить();
Если ТаблицаДокументов.Количество() <= 1 Тогда
КонтрагентОбъект = Контрагент.ПолучитьОбъект();
КонтрагентОбъект.Менеджер = Менеджер;
КонтрагентОбъект.Записать();
Сообщить("Для контрагента " + Контрагент + " установлен Менеджер " + Менеджер);
КонецЕсли;
КонецПроцедуры
Задача: “Обеспечьте хранение цен на товары…”
Решение:
Создан Справочник ТипыЦен.
Создан Периодический (период=в пределах дня) регистр сведений “ЦеныНоменклатуры”. Измерения регистра – Номенклатура (справочник Номенклатура и ТипЦены (справочник Цена), ресурс Цена (Число 15,2).
Создан остаточный регистр накопления “Остатки”. Измерения – Товар (справочник Номенклатура) и ВидБрака (справочник ВидыБрака). Ресурс – Количество (Число 15, 3)
Создан оборотный регистр накопления “Закупки”. Измерения – Поставщик (справочник Контрагенты) и Товар, ресурсы – Количество и Стоимость
Задача: “Необходимо поработать над удобством работы с документами системы.. ”
В реквизиты документов ПоступлениеТоваров и РасходнаяНакладная добавлен Реквизит ТипЦены (справочник ТипыЦен)
Общий модуль: Пересчет
Функция ПолучитьВидПересчетаНаСервере() Экспорт
Вид = Константы.ВидПересчетаСуммы.Получить();
Результат = "";
Если Вид = Перечисления.ВидыПересчетовСуммы.СуммаКоличество Тогда
Результат = "СуммаКоличество";
ИначеЕсли Вид = Перечисления.ВидыПересчетовСуммы.СуммаЦена Тогда
Результат = "СуммаЦена";
КонецЕсли;
Возврат Результат;
КонецФункции // ПолучитьВидПересчетаНаСервере()
&НаСервере
Функция ПолучитьЦену(Ссылка, ТипЦены, Дата) Экспорт
Отбор = Новый Структура("Номенклатура, ТипЦены",Ссылка, ТипЦены );
Таблица = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(Дата,Отбор);
Цена = Таблица.Итог("Цена");
Возврат Цена;
КонецФункции // ПолучитьЦену()
Документ ПоступлениеТоваров: Модуль Формы
Процедура ТоварыТоварПриИзменении(Элемент)
ТаблицаДанных = Элементы.Товары.ТекущиеДанные;
ТаблицаДанных.Цена = Пересчет.ПолучитьЦену(ТаблицаДанных.Товар, Объект.ТипЦены, Объект.Дата);
ТаблицаДанных.Количество = 1;
ПересчитатьСумму();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ПересчитатьСумму();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
ПересчитатьСумму();
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьСумму()
ТД = Элементы.Товары.ТекущиеДанные;
ТД.Сумма = ТД.Цена*ТД.Количество;
КонецПроцедуры // ПересчитатьСумму()
&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
ВидПересчета = Пересчет.ПолучитьВидПересчетаНаСервере();
Если ВидПересчета = "СуммаЦена" Тогда
ТД.Цена = ТД.Сумма/ТД.Количество;
ИначеЕсли ВидПересчета = "СуммаКоличество" Тогда
ТД.Количество = ТД.Сумма/ТД.Цена;
КонецЕсли;
КонецПроцедуры
Документ ПоступлениеТоваров: Модуль объекта
Движения.Остатки.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.Остатки.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаТовары.Товар;
Движение.ВидБрака = ТекСтрокаТовары.ВидБрака;
Движение.Количество = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.Коэффициент;
КонецЦикла;
Движения.Закупки.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.Закупки.Добавить();
Движение.Период = Дата;
Движение.Поставщик = Поставщик;
Движение.Товар = ТекСтрокаТовары.Товар;
Движение.Количество = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.Коэффициент;
Движение.Стоимость = ТекСтрокаТовары.Сумма;
КонецЦикла;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаДокумента = Товары.Итог("Сумма");
КонецПроцедуры
Создан журнал документов “ДокументыЗакупки”, в нем – графы: “Поставщик” (документ ПоступлениеТоваров.Поставщик), ПодотчетноеЛицо (документ ПоступлениеТоваров.ПодотчетноеЛицо) и Сумма (документ ПоступлениеТоваров.СуммаДокумента)
“РЕГИСТРЫ”
1.Создан периодический независимый РегистрСведений МенеджерыКонтрагентов с измерением Контрагент – тип СправочникСсылка.Контрагенты
и ресурсом Менеджер – тип СправочникСсылка.Пользователи.
2.Создан периодический независимый РегистрСведений ЦеныТоваров с измерениями Товар- тип СправочникСсылка.Товары,ТипЦен – СправочникСсылка.ТипыЦен и ресурсом Цена – тип Число.
3.Создан РегистрНакоплений ОстаткиТоваров (вид – “остатки”) с измерениями Товар – тип СправочникСсылка.Номенклатура;
Качество – тип СправочникСсылка.Качества и ресурсом Количество – тип Число
4.Создан РегистрНакоплений ЗакупкиТоваров (вид – “обороты”) с измерениями Товар – тип СправочникСсылка.Номенклатура,Контрагент – составной тип СправочникСсылка.Контрагенты,Сотрудники,
ТипЦен – СправочникСсылка.ТипыЦен и ресурсами Количество,Сумма – тип Число
ДОКУМЕНТ “КОНТАКТСКЛИЕНТОМ”
1. В Документе КонтактСКлиентом реквизит Менеджер при вводе нового документа заполнять текущим пользователем.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Объект.Менеджер = ОбщиеФункцииСервер.СинхронизацияПользователей();
КонецЕсли;
КонецПроцедуры
2.При проведении документа необходимо выполнять анализ, если происходит первый контакт с
контрагентом, то необходимо в качестве менеджера для контрагента нужно установить значение,указанное в документе.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МенеджерыКонтрагентовСрезПоследних.Менеджер
|ИЗ
| РегистрСведений.МенеджерыКонтрагентов.СрезПоследних(&МоментВремени, Контрагент = &Контрагент) КАК МенеджерыКонтрагентовСрезПоследних";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если Не ВыборкаДетальныеЗаписи.Следующий() Тогда
набор = РегистрыСведений.МенеджерыКонтрагентов.СоздатьНаборЗаписей();
набор.Отбор.Период.Установить(Дата);
набор.Отбор.Контрагент.Установить(Контрагент);
Запись = набор.Добавить();
Запись.Контрагент = Контрагент;
Запись.Период = Дата;
Запись.Менеджер = Менеджер;
Набор.Записать();
КонецЕсли;
КонецПроцедуры
3.Реквизиты “Менеджер” и “Контрагент” сделаны обязательными для заполнения в этом документе.
4.Выбор контактных лиц в подчинении указанному в документе контрагента.
ДОКУМЕНТЫ “ЗАКУПКИ И ОТГРУЗКИ”
1.В документах закупки и отгрузки создан реквизит шапки ТипЦен – Тип Справочник.ТипыЦен, в котором пользователь будет выбирать прайс, для
заполнения цен текущего документа
Процедура ТипЦенПриИзменении(Элемент)
ПроставитьЦеныНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПроставитьЦеныНаСервере()
Если ЗначениеЗаполнено(Объект.ТипЦен) Тогда
Для каждого Строка Из Объект.Товары Цикл
Строка.Цена =ПолучитьЦенуТовара(Объект.Дата,Строка.Номенклатура,Объект.ТипЦен);
ОбщиеФункцииСерверКлиент.РассчитатьСуммуДокумента(Строка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
2.Автоматическую подстановку цен при выборе номенклатуры, согласно указанного прайса
Создан новый Общий модуль ОбщиеФункцииСерверКлиент (флаги “Клиент”,”Сервер”,”ВызовСервера”)
ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецПроцедуры
Процедура РассчитатьКвоИлиЦенуДокумента(ТекСтрока,Режим) Экспорт
Если Режим Тогда
ТекСтрока.Количество = ?(ТекСтрока.Цена=0,ТекСтрока.Количество,ТекСтрока.Сумма/ТекСтрока.Цена);
Иначе
ТекСтрока.Цена = ?(ТекСтрока.Количество=0,ТекСтрока.Цена,ТекСтрока.Сумма/ТекСтрока.Количество);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
СтруктураПараметры = Новый Структура("Товар,Дата,ТипЦен,ЕдиницаИзмерения,Цена",ТД.Номенклатура,Объект.Дата,Объект.ТипЦен,ТД.ЕдиницаИзмерения,ТД.Цена);
ПолучитьЦенуИЕдиницуИзмерения(СтруктураПараметры);
ТД.Цена = СтруктураПараметры.Цена;
ТД.ЕдиницаИзмерения = СтруктураПараметры.ЕдиницаИзмерения;
ОбщиеФункцииСерверКлиент.РассчитатьСуммуДокумента(ТД);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПолучитьЦенуИЕдиницуИзмерения(СтруктураПараметры)
СтруктураПараметры.ЕдиницаИзмерения = ПолучитьЕдиницуИзмерения(СтруктураПараметры.Товар);
СтруктураПараметры.Цена = ПолучитьЦенуТовара(СтруктураПараметры.Дата,СтруктураПараметры.Товар,СтруктураПараметры.ТипЦен);
КонецПроцедуры // ПолучитьЕдиницуИзмерения()
&НаСервереБезКонтекста
Функция ПолучитьЕдиницуИзмерения(Товар)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕдиницыИзмеренияНоменклатуры.Ссылка
|ИЗ
| Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры
|ГДЕ
| ЕдиницыИзмеренияНоменклатуры.Владелец = &Товар
| И ЕдиницыИзмеренияНоменклатуры.ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору
| И (НЕ ЕдиницыИзмеренияНоменклатуры.ПометкаУдаления)";
Запрос.УстановитьПараметр("ЕдиницаПоКлассификатору", Товар.БазоваяЕдиница);
Запрос.УстановитьПараметр("Товар", Товар);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Ссылка;
Иначе
Возврат Справочники.ЕдиницыИзмеренияНоменклатуры.ПустаяСсылка();
КонецЕсли;
КонецФункции // ПолучитьЕдиницуИзмерения()
&НаСервереБезКонтекста
Функция ПолучитьЦенуТовара(Дата,Товар,ТипЦен)
Если Не ЗначениеЗаполнено(ТипЦен)Тогда
возврат 0;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныТоваровСрезПоследних.Цена,
| ЦеныТоваровСрезПоследних.Товар
|ИЗ
| РегистрСведений.ЦеныТоваров.СрезПоследних(
| &Дата,
| Товар = &Товар
| И ТипЦен = &ТипЦен) КАК ЦеныТоваровСрезПоследних";
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
Запрос.УстановитьПараметр("Товар", Товар);
Запрос.УстановитьПараметр("Дата", Дата);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // ПолучитьЕдиницуИзмерения()
3.Пересчет суммы по цене и количеству
Процедура ТоварыКоличествоПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
ОбщиеФункцииСерверКлиент.РассчитатьСуммуДокумента(ТД);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
ТоварыКоличествоПриИзменении(Элемент);
КонецПроцедуры
4.Пересчет цены или количества при изменении суммы (сам вариант пересчета –
количества или цены определена константой РеквизитТЧДляПерерасчетаПриИзмененииСуммы – Тип ПеречислениеСсылка.КоличествоЦена)
В общем модуле ОбщиеФункцииСервер добавлена функция глПолучитьРежимПересчетаСумм() – для установки-получения режима расчета цены или количества
МенеджерК = Константы.РеквизитТЧДляПерерасчетаПриИзмененииСуммы;
Если Не ЗначениеЗаполнено(МенеджерК.Получить()) Тогда
МенеджерК.Установить(Перечисления.КоличествоЦена.Цена);
КонецЕсли;
Возврат МенеджерК.Получить();
КонецФункции
Модуль формы:
Процедура ТоварыСуммаПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
ОбщиеФункцииСерверКлиент.РассчитатьКвоИлиЦенуДокумента(ТД,ПоКоличеству());
КонецПроцедуры
&НаСервере
Функция ПоКоличеству()
РежимИзмененияСумм = ОбщиеФункцииСервер.глПолучитьРежимПересчетаСумм();
возврат (РежимИзмененияСумм = Перечисления.КоличествоЦена.Количество);
КонецФункции
5.Отображение итоговой суммы документа – реализовано в подвале формы (свойства реквизита ТЧ – Сумма).
6. Номенклатура и количество сделаны обязательными для заполнения.
“ДОКУМЕНТ РЕАЛИЗАЦИИ”
Реализован выбор контактных лиц в подчинении указанному в документе контрагента (на уровне свойства реквизитов объекта).
“СПРАВОЧНИК НОМЕНКЛАТУРА”
Реализована проверка, запрещающая изменять базовую единицу
измерения для номенклатуры, если по ней уже есть движения в регистрах.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДоступностьБазЕд = Истина;
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.НомерСтроки как НомерСтроки
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Товар = &Товар";
Запрос.УстановитьПараметр("Товар", Объект.Ссылка);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ДоступностьБазЕд = Не ВыборкаДетальныеЗаписи.Следующий();
КонецЕсли;
Элементы.БазоваяЕдиница.Доступность = ДоступностьБазЕд;
КонецПроцедуры
Журнал “ДОКУМЕНТЫЗАКУПКИ”
Создан журнал документов «Документы закупки» (Состав – “АвансовыйОтчет”,”Приходная”), в котором должна
отображается информация о виде документа, контрагенте/подотчетном лице (графа Контрагент – Состав “Сотрудник” документа “АвансовыйОтчет” и “Контрагент” документа “Приходная”),
сумме документа (Графа “Сумма” – реквизиты шапки “СуммаИтого” этих документов, которые заполняются
в событии перед записью документа).