Создадим Регистры накопления :
Продажи – вид Остатки
Измерения:
Контрагент – СправочникСсылка.Контрагенты
Номенклатура – СправочникСсылка.Номенклатура
Менеджер – СправочникСсылка.Пользователи
Ресурс – Количество
Ресурс – Сумма
Взаиморасчеты – вид Остатки
Измерения:
Контрагент – СправочникСсылка. Контрагент
Ресурсы – Сумма
ЗакупкиПоставщиков – вид Обороты
Измерения:
Номенклатура – СправочникСсылка.Номенклатура
Контрагент – СправочникСсылка.Контрагенты
Ресурс – Количество
Ресурс – Стоимость
Создадим документ Выписка
Табличные части РасшифровкаПлатежа
Реквизиты: Контрагент, СуммаПриход ,СуммаРасход
В модуле объекта документа Выписка в процедуре ОбработкаПроведения опишем алгоритм проведения по регистрам:
<
Для Каждого ТекСтрокаРасшифровкаПлатежа Из РасшифровкаПлатежа Цикл
Движение = Движения.Взаиморасчеты.Добавить();
Движение.Период = Дата;
Движение.Контрагент = ТекСтрокаРасшифровкаПлатежа.Контрагент;
Если ЗначениеЗаполнено(ТекСтрокаРасшифровкаПлатежа.СуммаПриход) Тогда
// Долг контрагента перед нашей компанией уменьшается.
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Сумма = ТекСтрокаРасшифровкаПлатежа.СуммаПриход;
ИначеЕсли ЗначениеЗаполнено(ТекСтрокаРасшифровкаПлатежа.СуммаРасход) Тогда
// Долг контрагента перед нашей компанией увеличивается.
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Сумма = ТекСтрокаРасшифровкаПлатежа.СуммаПриход;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
<
Для описания и хранения Наборов реализуем следующую схему:
Создадим Справочник НаборНоменклатуры
Реквизиты Номенклатура
Табличная часть Комплектация ,
реквизиты табличной части – Номенклатура ,Количество
В качастве Владельца у справочника укажем справочник Номенклатура
В справочник Номенклатура добавим реквизит – НаборНоменклатуры –тип СправочникСсылка.НаборНоменклатуры.
В модуле объекта документа ПоступлениеТоваров в опишем алгоритм отвечающий за проведения по регистрам:
<
// Движения делаются для всех видов номенклатуры, кроме услуг(услуги не хранятся на складе).
Если НЕ ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Услуга Тогда
// регистр ОстаткиТоваров Приход
// обрабатываем движения для набора
Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры) Тогда
Набор = ТекСтрокаТовары.Номенклатура.НаборНоменклатуры;
Комплектация = Набор.Комплектация;
Для каждого СтрокаНабора Из Комплектация Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаНабора.Номенклатура;
Движение.Качество = Справочники.СтепениБракаТоваров.Новый;
Движение.Количество = ТекСтрокаТовары.Количество;
КонецЦикла;
ИначеЕсли ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И НЕ ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры)
И РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "В Для товара: "+ТекСтрокаТовары.Номенклатура+" строка №: "+
ТекСтрокаТовары.НомерСтроки+ " не заполнен набор!=";
Сообщение.Сообщить();
РежимЗаписи = РежимЗаписиДокумента.Проведение;
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Взаиморасчеты.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
// Движения делаются для всех видов номенклатуры, кроме услуг(услуги не хранятся на складе).
Если НЕ ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Услуга Тогда
// регистр ОстаткиТоваров Расход
// обрабатываем движения для набора
Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры) Тогда
Набор = ТекСтрокаТовары.Номенклатура.НаборНоменклатуры;
Комплектация = Набор.Комплектация;
Для каждого СтрокаНабора Из Комплектация Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаНабора.Номенклатура;
Движение.Качество = Справочники.СтепениБракаТоваров.Новый;
Движение.Количество = СтрокаНабора.Количество;
КонецЦикла;
ИначеЕсли ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И НЕ ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры)
И РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Для товара: "+ТекСтрокаТовары.Номенклатура+" строка №: "+
ТекСтрокаТовары.НомерСтроки+ " не заполнен набор!";
Сообщение.Сообщить();
Иначе
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Качество = ТекСтрокаТовары.Качество;
Если ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.КлассификаторЕдиницИзмерения") Тогда
Движение.Количество = ТекСтрокаТовары.Количество;
ИначеЕсли ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.ЕдиницыИзмеренияНоменклатуры") Тогда
Движение.Количество = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.КоффициентПересчета;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Для Каждого ТекСтрока Из Товары Цикл
Номенклатура = ТекСтрока.Номенклатура;
Качество = ТекСтрока.Качество;
ОтрицательныйОстаток = КонтрольОстатковПоРегиструОстаткиТоваров(Номенклатура,Качество,Количество);
Если ОтрицательныйОстаток И СписаниеРазрешено И КонтрольПроведения Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно для списания товара: "+ТекСтрока.Номенклатура+
" строка №: "+ТекСтрока.НомерСтроки+ " в количестве "+-Количество+" шт.";
Сообщение.Сообщить();
ИначеЕсли ОтрицательныйОстаток И КонтрольПроведения Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно для списания товара: "+ТекСтрока.Номенклатура+
" строка №: "+ТекСтрока.НомерСтроки+ " в количестве "+-Количество+" шт.";
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры //ОбработкаПроведения
Функция КонтрольОстатковПоРегиструОстаткиТоваров(Номенклатура,Качество,Количество)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(, ) КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.Номенклатура = &Номенклатура
| И ОстаткиТоваровОстатки.Качество = &Качество
| И ОстаткиТоваровОстатки.КоличествоОстаток < 0";
РезультатЗапроса = Запрос.Выполнить().Пустой();
// нет отрицательных остатков.
Если РезультатЗапроса Тогда
Возврат Ложь;
//есть отрицательный остаток.
Иначе
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка.Следующий();
Количество = Выборка.Количество;
Возврат Истина;
КонецЕсли;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПрайсЛистТовары.Номенклатура,
СРЕДНЕЕ(ПрайсЛистТовары.Цена) КАК Цена,
ПрайсЛистТовары.ВидЦены
ПОМЕСТИТЬ Закупки
ИЗ
Документ.ПрайсЛист.Товары КАК ПрайсЛистТовары
ГДЕ
ПрайсЛистТовары.ВидЦены = &ЦенаЗакупки
СГРУППИРОВАТЬ ПО
ПрайсЛистТовары.Номенклатура,
ПрайсЛистТовары.ВидЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПрайсЛистТовары.Номенклатура,
СРЕДНЕЕ(ПрайсЛистТовары.Цена) КАК Цена,
ПрайсЛистТовары.ВидЦены
ПОМЕСТИТЬ Продажи
ИЗ
Документ.ПрайсЛист.Товары КАК ПрайсЛистТовары
ГДЕ
ПрайсЛистТовары.ВидЦены = &ЦенаПродажи
СГРУППИРОВАТЬ ПО
ПрайсЛистТовары.Номенклатура,
ПрайсЛистТовары.ВидЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Остатки.Номенклатура,
(Продажи.Цена - Закупки.Цена) * Остатки.КоличествоОстаток КАК ФинансовыйРезультат,
Остатки.КоличествоОстаток,
Закупки.Цена КАК ЦенаЗакупки,
Продажи.Цена КАК ЦенаПродажи
ПОМЕСТИТЬ ФинРезультат
ИЗ
Остатки КАК Остатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Закупки КАК Закупки
ПО Остатки.Номенклатура = Закупки.Номенклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО Остатки.Номенклатура = Продажи.Номенклатура
;
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Домашнее задание № 9 Блок 2.
Создадим Регистры накопления :
Продажи – вид Остатки
Измерения:
Контрагент – СправочникСсылка.Контрагенты
Номенклатура – СправочникСсылка.Номенклатура
Менеджер – СправочникСсылка.Пользователи
Ресурс – Количество
Ресурс – Сумма
Взаиморасчеты – вид Остатки
Измерения:
Контрагент – СправочникСсылка. Контрагент
Ресурсы – Сумма
ЗакупкиПоставщиков – вид Обороты
Измерения:
Номенклатура – СправочникСсылка.Номенклатура
Контрагент – СправочникСсылка.Контрагенты
Ресурс – Количество
Ресурс – Стоимость
Создадим документ Выписка
Табличные части РасшифровкаПлатежа
Реквизиты: Контрагент, СуммаПриход ,СуммаРасход
В модуле объекта документа Выписка в процедуре ОбработкаПроведения опишем алгоритм проведения по регистрам:
<
// регистр Взаиморасчеты Приход
Движения.Взаиморасчеты.Записывать = Истина;
Для Каждого ТекСтрокаРасшифровкаПлатежа Из РасшифровкаПлатежа Цикл
Движение = Движения.Взаиморасчеты.Добавить();
Движение.Период = Дата;
Движение.Контрагент = ТекСтрокаРасшифровкаПлатежа.Контрагент;
Если ЗначениеЗаполнено(ТекСтрокаРасшифровкаПлатежа.СуммаПриход) Тогда
// Долг контрагента перед нашей компанией уменьшается.
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Сумма = ТекСтрокаРасшифровкаПлатежа.СуммаПриход;
ИначеЕсли ЗначениеЗаполнено(ТекСтрокаРасшифровкаПлатежа.СуммаРасход) Тогда
// Долг контрагента перед нашей компанией увеличивается.
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Сумма = ТекСтрокаРасшифровкаПлатежа.СуммаПриход;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
<
Для описания и хранения Наборов реализуем следующую схему:
Создадим Справочник НаборНоменклатуры
Реквизиты Номенклатура
Табличная часть Комплектация ,
реквизиты табличной части – Номенклатура ,Количество
В качастве Владельца у справочника укажем справочник Номенклатура
В справочник Номенклатура добавим реквизит – НаборНоменклатуры –тип СправочникСсылка.НаборНоменклатуры.
В модуле объекта документа ПоступлениеТоваров в опишем алгоритм отвечающий за проведения по регистрам:
<
Процедура ОбработкаПроведения(Отказ, Режим)
РежимЗаписи = РежимЗаписиДокумента.Проведение;
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Взаиморасчеты.Записывать = Истина;
Движения.ЗакупкиПоставщиков.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
// Движения делаются для всех видов номенклатуры, кроме услуг(услуги не хранятся на складе).
Если НЕ ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Услуга Тогда
// регистр ОстаткиТоваров Приход
// обрабатываем движения для набора
Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры) Тогда
Набор = ТекСтрокаТовары.Номенклатура.НаборНоменклатуры;
Комплектация = Набор.Комплектация;
Для каждого СтрокаНабора Из Комплектация Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаНабора.Номенклатура;
Движение.Качество = Справочники.СтепениБракаТоваров.Новый;
Движение.Количество = ТекСтрокаТовары.Количество;
КонецЦикла;
ИначеЕсли ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И НЕ ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры)
И РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "В Для товара: "+ТекСтрокаТовары.Номенклатура+" строка №: "+
ТекСтрокаТовары.НомерСтроки+ " не заполнен набор!=";
Сообщение.Сообщить();
Иначе
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Качество = ТекСтрокаТовары.Качество;
Если ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.КлассификаторЕдиницИзмерения") Тогда
Движение.Количество = ТекСтрокаТовары.Количество;
ИначеЕсли ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.ЕдиницыИзмеренияНоменклатуры") Тогда
Движение.Количество = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.КоффициентПересчета;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// регистр Взаиморасчеты Расход
Движение = Движения.Взаиморасчеты.Добавить();
// Долг контрагента перед нашей компанией уменьшается.
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Сумма = ТекСтрокаТовары.Сумма;
// регистр ЗакупкиПоставщиков
Движение = Движения.ЗакупкиПоставщиков.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Контрагент = Контрагент;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Стоимость = ТекСтрокаТовары.Сумма;
КонецЦикла;
КонецПроцедуры
<
В модуле объекта документа Реализация в опишем алгоритм отвечающий за проведения по регистрам:
<
Перем Номенклатура;
Перем Количество;
Перем КонтрольПроведения;
Процедура ОбработкаПроведения(Отказ, Режим)
РежимЗаписи = РежимЗаписиДокумента.Проведение;
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Взаиморасчеты.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
// Движения делаются для всех видов номенклатуры, кроме услуг(услуги не хранятся на складе).
Если НЕ ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Услуга Тогда
// регистр ОстаткиТоваров Расход
// обрабатываем движения для набора
Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры) Тогда
Набор = ТекСтрокаТовары.Номенклатура.НаборНоменклатуры;
Комплектация = Набор.Комплектация;
Для каждого СтрокаНабора Из Комплектация Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаНабора.Номенклатура;
Движение.Качество = Справочники.СтепениБракаТоваров.Новый;
Движение.Количество = СтрокаНабора.Количество;
КонецЦикла;
ИначеЕсли ТекСтрокаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Набор
И НЕ ЗначениеЗаполнено(ТекСтрокаТовары.Номенклатура.НаборНоменклатуры)
И РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Для товара: "+ТекСтрокаТовары.Номенклатура+" строка №: "+
ТекСтрокаТовары.НомерСтроки+ " не заполнен набор!";
Сообщение.Сообщить();
Иначе
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Качество = ТекСтрокаТовары.Качество;
Если ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.КлассификаторЕдиницИзмерения") Тогда
Движение.Количество = ТекСтрокаТовары.Количество;
ИначеЕсли ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.ЕдиницыИзмеренияНоменклатуры") Тогда
Движение.Количество = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.КоффициентПересчета;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Движение = Движения.Продажи.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Менеджер = Ответственный;
Движение.Сумма = ТекСтрокаТовары.Сумма;
Если ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.КлассификаторЕдиницИзмерения") Тогда
Движение.Количество = ТекСтрокаТовары.Количество;
ИначеЕсли ТипЗнч(ТекСтрокаТовары.ЕдиницаИзмерения) = Тип("СправочникСсылка.ЕдиницыИзмеренияНоменклатуры") Тогда
Движение.Количество = ТекСтрокаТовары.Количество*ТекСтрокаТовары.ЕдиницаИзмерения.КоффициентПересчета;
КонецЕсли;
// регистр Взаиморасчеты Приход
Движение = Движения.Взаиморасчеты.Добавить();
// Долг контрагента перед нашей компанией увеличивается.
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Сумма = ТекСтрокаТовары.Сумма;
//}
//КонецЕсли;
КонецЦикла;
Движения.Записать();
СписаниеРазрешено = Справочники.Пользователи.НайтиПоРеквизиту("УникальныйИдентификатор",
Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор)).НеКонтролироватьОстатки;
Для Каждого ТекСтрока Из Товары Цикл
Номенклатура = ТекСтрока.Номенклатура;
Качество = ТекСтрока.Качество;
ОтрицательныйОстаток = КонтрольОстатковПоРегиструОстаткиТоваров(Номенклатура,Качество,Количество);
Если ОтрицательныйОстаток И СписаниеРазрешено И КонтрольПроведения Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно для списания товара: "+ТекСтрока.Номенклатура+
" строка №: "+ТекСтрока.НомерСтроки+ " в количестве "+-Количество+" шт.";
Сообщение.Сообщить();
ИначеЕсли ОтрицательныйОстаток И КонтрольПроведения Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно для списания товара: "+ТекСтрока.Номенклатура+
" строка №: "+ТекСтрока.НомерСтроки+ " в количестве "+-Количество+" шт.";
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры //ОбработкаПроведения
Функция КонтрольОстатковПоРегиструОстаткиТоваров(Номенклатура,Качество,Количество)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(, ) КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.Номенклатура = &Номенклатура
| И ОстаткиТоваровОстатки.Качество = &Качество
| И ОстаткиТоваровОстатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Качество", Качество);
//Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
РезультатЗапроса = Запрос.Выполнить().Пустой();
// нет отрицательных остатков.
Если РезультатЗапроса Тогда
Возврат Ложь;
//есть отрицательный остаток.
Иначе
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка.Следующий();
Количество = Выборка.Количество;
Возврат Истина;
КонецЕсли;
КонецФункции // КонтрольОстатковПоРегиструОстаткиТоваров()
Процедура ПровестиБезКонтроляПроведения() Экспорт
КонтрольПроведения = Ложь;
ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
<
Создадим отчеты :
ДолгиМенеджеров ,
Схема отчета:
<
<dataSource>
<name>ИсточникДанных1</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>НаборДанных1</name>
<field xsi:type="DataSetFieldField">
<dataPath>Менеджер</dataPath>
<field>Менеджер</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Менеджер</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>СуммаОстаток</dataPath>
<field>СуммаОстаток</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Контрагент</dataPath>
<field>Контрагент</field>
<role>
<dcscom:dimension>true</dcscom:dimension>
</role>
</field>
<dataSource>ИсточникДанных1</dataSource>
<query>ВЫБРАТЬ
Пользователи.Ссылка КАК Менеджер,
ВзаиморасчетыОстатки.Контрагент,
ВзаиморасчетыОстатки.СуммаОстаток
ИЗ
РегистрНакопления.Взаиморасчеты.Остатки КАК ВзаиморасчетыОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО ВзаиморасчетыОстатки.Контрагент = Пользователи.Владелец</query>
</dataSet>
<totalField>
<dataPath>СуммаОстаток</dataPath>
<expression>Сумма(СуммаОстаток)</expression>
</totalField>
<parameter>
<name>Период</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Период</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>Менеджер</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>Контрагент</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>СуммаОстаток</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:use>false</dcscor:use>
<dcscor:parameter>Период</dcscor:parameter>
<dcscor:value xsi:type="xs:dateTime">0001-01-01T00:00:00</dcscor:value>
<dcsset:userSettingID>3b4dc894-b569-4a18-85b6-8a2f8c2db147</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemField">
<dcsset:field>Менеджер.Наименование</dcsset:field>
<dcsset:orderType>Asc</dcsset:orderType>
</dcsset:item>
<dcsset:item xsi:type="dcsset:OrderItemField">
<dcsset:field>Контрагент.Наименование</dcsset:field>
<dcsset:orderType>Asc</dcsset:orderType>
</dcsset:item>
</dcsset:order>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>Менеджер</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:groupItems>
<dcsset:item xsi:type="dcsset:GroupItemField">
<dcsset:field>Контрагент</dcsset:field>
<dcsset:groupType>Items</dcsset:groupType>
<dcsset:periodAdditionType>None</dcsset:periodAdditionType>
<dcsset:periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionBegin>
<dcsset:periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</dcsset:periodAdditionEnd>
</dcsset:item>
</dcsset:groupItems>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:item>
</dcsset:item>
</dcsset:item>
</dcsset:settings>
</settingsVariant>
</dataCompositionSchema>
<
ФинансовыйРезультат ,
Схема отчета:
<
<dataSource>
<name>ИсточникДанных1</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>НаборДанных1</name>
<field xsi:type="DataSetFieldField">
<dataPath>Номенклатура</dataPath>
<field>Номенклатура</field>
<role>
<dcscom:dimension>true</dcscom:dimension>
</role>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>КоличествоОстаток</dataPath>
<field>КоличествоОстаток</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Качество</dataPath>
<field>Качество</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ЦенаПродажи</dataPath>
<field>ЦенаПродажи</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Цена продажи</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ЦенаЗакупки</dataPath>
<field>ЦенаЗакупки</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Цена закупки</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>ФинРезультат</dataPath>
<field>ФинРезультат</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Фин результат</v8:content>
</v8:item>
</title>
</field>
<dataSource>ИсточникДанных1</dataSource>
<query>ВЫБРАТЬ
ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
ОстаткиТоваровОстатки.КоличествоОстаток
ПОМЕСТИТЬ Остатки
ИЗ
РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПрайсЛистТовары.Номенклатура,
СРЕДНЕЕ(ПрайсЛистТовары.Цена) КАК Цена,
ПрайсЛистТовары.ВидЦены
ПОМЕСТИТЬ Закупки
ИЗ
Документ.ПрайсЛист.Товары КАК ПрайсЛистТовары
ГДЕ
ПрайсЛистТовары.ВидЦены = &ЦенаЗакупки
СГРУППИРОВАТЬ ПО
ПрайсЛистТовары.Номенклатура,
ПрайсЛистТовары.ВидЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПрайсЛистТовары.Номенклатура,
СРЕДНЕЕ(ПрайсЛистТовары.Цена) КАК Цена,
ПрайсЛистТовары.ВидЦены
ПОМЕСТИТЬ Продажи
ИЗ
Документ.ПрайсЛист.Товары КАК ПрайсЛистТовары
ГДЕ
ПрайсЛистТовары.ВидЦены = &ЦенаПродажи
СГРУППИРОВАТЬ ПО
ПрайсЛистТовары.Номенклатура,
ПрайсЛистТовары.ВидЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Остатки.Номенклатура,
(Продажи.Цена - Закупки.Цена) * Остатки.КоличествоОстаток КАК ФинансовыйРезультат,
Остатки.КоличествоОстаток,
Закупки.Цена КАК ЦенаЗакупки,
Продажи.Цена КАК ЦенаПродажи
ПОМЕСТИТЬ ФинРезультат
ИЗ
Остатки КАК Остатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Закупки КАК Закупки
ПО Остатки.Номенклатура = Закупки.Номенклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО Остатки.Номенклатура = Продажи.Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ФинРезультат.Номенклатура,
ФинРезультат.ФинансовыйРезультат КАК ФинРезультат,
ФинРезультат.КоличествоОстаток,
ФинРезультат.ЦенаЗакупки,
ФинРезультат.ЦенаПродажи
ИЗ
ФинРезультат КАК ФинРезультат</query>
</dataSet>
<totalField>
<dataPath>КоличествоОстаток</dataPath>
<expression>Сумма(КоличествоОстаток)</expression>
</totalField>
<totalField>
<dataPath>ЦенаЗакупки</dataPath>
<expression>Сумма(ЦенаЗакупки)</expression>
</totalField>
<totalField>
<dataPath>ЦенаПродажи</dataPath>
<expression>Сумма(ЦенаПродажи)</expression>
</totalField>
<totalField>
<dataPath>ФинРезультат</dataPath>
<expression>Сумма(ФинРезультат)</expression>
</totalField>
<parameter>
<name>Период</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Период</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ЦенаЗакупки</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Цена закупки</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type xmlns:d4p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d4p1:CatalogRef.ЦеныНоменклатуры</v8:Type>
</valueType>
<value xmlns:d3p1="http://v8.1c.ru/8.1/data/enterprise/current-config" xsi:type="d3p1:CatalogRef.ЦеныНоменклатуры">7b8b06bd-cdd4-11e5-82ae-c0389641969e</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ЦенаПродажи</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Цена продажи</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type xmlns:d4p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d4p1:CatalogRef.ЦеныНоменклатуры</v8:Type>
</valueType>
<value xmlns:d3p1="http://v8.1c.ru/8.1/data/enterprise/current-config" xsi:type="d3p1:CatalogRef.ЦеныНоменклатуры">7b8b06bc-cdd4-11e5-82ae-c0389641969e</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>Номенклатура</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ФинРезультат</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>КоличествоОстаток</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЦенаЗакупки</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>ЦенаПродажи</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:dataParameters>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:use>false</dcscor:use>
<dcscor:parameter>ЦенаЗакупки</dcscor:parameter>
<dcscor:value xmlns:d6p1="http://v8.1c.ru/8.1/data/enterprise/current-config" xsi:type="d6p1:CatalogRef.ЦеныНоменклатуры">00000000-0000-0000-0000-000000000000</dcscor:value>
<dcsset:userSettingID>44d70911-fea6-4128-bedd-5689935b3389</dcsset:userSettingID>
</dcscor:item>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:use>false</dcscor:use>
<dcscor:parameter>ЦенаПродажи</dcscor:parameter>
<dcscor:value xsi:type="xs:decimal">0</dcscor:value>
<dcsset:userSettingID>52730f40-8992-485f-9273-5f6e247b700a</dcsset:userSettingID>
</dcscor:item>
</dcsset:dataParameters>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemField">
<dcsset:field>Номенклатура.Наименование</dcsset:field>
<dcsset:orderType>Asc</dcsset:orderType>
</dcsset:item>
</dcsset:order>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:item>
</dcsset:settings>
</settingsVariant>
</dataCompositionSchema>
<
РейтингМенеджеров
Схема отчета:
<
<dataSource>
<name>ИсточникДанных1</name>
<dataSourceType>Local</dataSourceType>
</dataSource>
<dataSet xsi:type="DataSetQuery">
<name>НаборДанных1</name>
<field xsi:type="DataSetFieldField">
<dataPath>Номенклатура</dataPath>
<field>Номенклатура</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Продажи</dataPath>
<field>Продажи</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Продажи</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Менеджер</dataPath>
<field>Менеджер</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Контрагент</dataPath>
<field>Контрагент</field>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>Дебиторка</dataPath>
<field>Дебиторка</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дебиторка</v8:content>
</v8:item>
</title>
</field>
<field xsi:type="DataSetFieldField">
<dataPath>КоэфЭффективности</dataPath>
<field>КоэфЭффективности</field>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Коэф эффективности</v8:content>
</v8:item>
</title>
</field>
<dataSource>ИсточникДанных1</dataSource>
<query>ВЫБРАТЬ
Пользователи.Ссылка КАК Менеджер,
ВзаиморасчетыОбороты.СуммаОборот КАК Дебиторка,
ПродажиОбороты.СуммаОборот КАК Продажи,
ЕСТЬNULL(ПродажиОбороты.СуммаОборот, 0) - ЕСТЬNULL(-ВзаиморасчетыОбороты.СуммаОборот, 0) КАК КоэфЭффективности
ИЗ
РегистрНакопления.Взаиморасчеты.Обороты КАК ВзаиморасчетыОбороты
ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ПО (ПродажиОбороты.Менеджер = Пользователи.Ссылка)
ПО ВзаиморасчетыОбороты.Контрагент = Пользователи.Владелец</query>
</dataSet>
<totalField>
<dataPath>Дебиторка</dataPath>
<expression>Сумма(Дебиторка)</expression>
</totalField>
<totalField>
<dataPath>Продажи</dataPath>
<expression>Сумма(Продажи)</expression>
</totalField>
<parameter>
<name>НачалоПериода</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Начало периода</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>КонецПериода</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Конец периода</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>Менеджер</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>Дебиторка</dcsset:field>
</dcsset:item>
<dcsset:item xsi:type="dcsset:SelectedItemField">
<dcsset:field>Продажи</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemField">
<dcsset:field>КоэфЭффективности</dcsset:field>
<dcsset:orderType>Desc</dcsset:orderType>
</dcsset:item>
</dcsset:order>
<dcsset:item xsi:type="dcsset:StructureItemGroup">
<dcsset:order>
<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
</dcsset:order>
<dcsset:selection>
<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
</dcsset:selection>
</dcsset:item>
</dcsset:settings>
</settingsVariant>
</dataCompositionSchema>
<