584 документа
← К списку

В 1C:EDT

страница

В 1C:EDT

Первое, что вам нужно сделать, – удалить реквизит табличной части Стоимость документа ОказаниеУслуги, который вам больше не понадобится.

Для этого в панели Навигатор нажмите Удалить в контекстном меню реквизита Стоимость (рис. 15.6).

Рис. 15.6. Удаление реквизита табличной части

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

Для этого в форме документа ОказаниеУслуги нажмите Удалить в контекстном меню соответствующего элемента формы (рис. 15.7).

Рис. 15.7. Удаление поля табличной части

Теперь настало время заняться запросом.

На занятии № 12 в разделе «Регистрация расхода только той номенклатуры, которая является материалом» вы изменили процедуру проведения документа ОказаниеУслуги так, чтобы движения в регистрах накопления формировались с помощью запроса к данным документа. И затем вы добавили в процедуру обработки проведения документа формирование движений по регистру СтоимостьМатериалов и регистру Продажи.

Откройте модуль объекта документа ОказаниеУслуги. Процедура ОбработкаПроведения(), находящаяся в этом модуле, сейчас выглядит следующим образом (листинг 15.1).

Листинг 1****5.1. Процедура «ОбработкаПроведения()»

Процедура ОбработкаПроведения(Отказ,Режим)

 

Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

 

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

|    СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

|    МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры.Стоимость) КАК Стоимость,

|    СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

|ИЗ

|    Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

|    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|СГРУППИРОВАТЬ ПО

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

 

Запрос.УстановитьПараметр("Ссылка", Ссылка);

 

РезультатЗапроса = Запрос.Выполнить();

 

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

 

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

 

// регистр ОстаткиМатериалов – Расход

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.Период = Дата;

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

 

// Регистр СтоимостьМатериалов – Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * ВыборкаДетальныеЗаписи.Стоимость;

 

КонецЕсли;

 

// Регистр Продажи

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * ВыборкаДетальныеЗаписи.Стоимость;

 

КонецЦикла;

 

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

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

Для этого перед созданием запроса создайте менеджер временных таблиц и укажите, что этот запрос будет использовать созданный менеджер временных таблиц (листинг 15.2).

**Листинг 15.**2. Использование менеджера временных таблиц

Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

 

// Создать менеджер временных таблиц.

МенеджерВТ = Новый МенеджерВременныхТаблиц;

 

Запрос = Новый Запрос;

 

// Указать, какой менеджер временных таблиц использует этот запрос.

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

 

Запрос.Текст =

"ВЫБРАТЬ

|   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

Теперь измените запрос таким образом, чтобы он создавал временную таблицу, которая будет храниться в вашем менеджере временных таблиц МенеджерВТ.

Чтобы конструктор запроса смог открыть ваш запрос, удалите из него строку (поля Стоимость у вас больше нет) – листинг 15.3.

**Листинг 15.**3. Изменение запроса

|    МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры.Стоимость) КАК Стоимость,

Откройте конструктор запроса для существующего текста запроса (рис. 15.8).

Рис. 15.8. Конструктор запроса

Чтобы результат запроса поместить во временную таблицу, перейдите на закладку Дополнительно и отметьте пункт Создание временной таблицы. Задайте имя временной таблицы – НоменклатураДокумента (рис. 15.9).

Рис. 15.9. Создание временной таблицы

Нажмите ОК. Конструктор запроса сформирует следующий текст запроса (листинг 15.4).

**Листинг 15.**4. Текст запроса

"ВЫБРАТЬ

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

|    СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

|    СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

|ПОМЕСТИТЬ НоменклатураДокумента

|ИЗ

|    Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

|    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|СГРУППИРОВАТЬ ПО

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

Новым здесь является только строка, выделенная в листинге 15.4 жирным шрифтом.

Она означает, что результат запроса будет сохранен во временной таблице НоменклатураДокумента.

Теперь если вы для другого запроса укажете этот же самый менеджер временных таблиц МенеджерВТ, то в этом другом запросе вы сможете обратиться к данным этой временной таблицы.

Таким образом, вы выполнили первую часть вашего плана – создали запрос, помещающий данные табличной части документа во временную таблицу (рис. 15.10).

Рис. 15.10. Создание первого запроса

Теперь вам нужно сконструировать второй запрос.

Установите курсор на следующую строку после оператора РезультатЗапроса = Запрос.Выполнить(); (именно здесь выполняется создание временной таблицы) и напишите заготовку будущего запроса (листинг 15.5).

**Листинг 15.**5. Создание второго запроса

Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "";

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

Теперь установите курсор внутрь кавычек и нажмите Конструктор запроса в контекстном меню. Согласитесь на создание нового запроса.

Поскольку вы собираетесь выбирать данные из вашей временной таблицы, создайте в запросе описание этой временной таблицы. Для этого над списком Таблицы нажмите (Создать описание временной таблицы, рис. 15.11).

В открывшемся окне введите имя вашей временной таблицы НоменклатураДокумента и добавьте описание полей:

  • Номенклатура,тип СправочникСсылка.Номенклатура;
  • ВидНоменклатуры,``тип ПеречислениеСсылка.ВидыНоменклатуры;
  • КоличествоВДокументе, тип Число,15, 3;
  • СуммаВДокументе,``тип Число,15, 2.

В результате у вас получится следующее описание временной таблицы (рис. 15.11).

Рис. 15.11. Создание описания временной таблицы

Нажмите ОК. Выберите из этой таблицы все поля (рис. 15.12).

Рис. 15.12. Выбранные поля временной таблицы

Нажмите Запрос в левом нижнем углу окна конструктора запроса. Текст запроса будет иметь следующий вид (листинг 15.6).

**Листинг 15.**6. Текст второго запроса

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

Итак, вы создали первую часть второго запроса – выбрали информацию из временной таблицы (рис. 15.13).

Рис. 15.13. Создание второго запроса

Теперь вы будете соединять эту конструкцию левыми соединениями с таблицами остатков.

Начните со стоимости материалов.

Добавьте в список таблиц запроса виртуальную таблицу РегистрНакопления.СтоимостьМатериалов.Остатки. Из нее выберите поле СтоимостьОстаток.

Теперь перейдите на закладку Связи и задайте связь между таблицами. Вам нужно сделать так, чтобы временная таблица была связана левым соединением с таблицей остатков. При этом из временной таблицы будут получены в любом случае все записи, а из таблицы остатков только записи, удовлетворяющие условию связи таблиц, при котором поле Номенклатура временной таблицы должно быть равно полю Материал таблицы остатков (листинг 15.7).

**Листинг 15.**7. Условие связи таблиц

НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

Выделите правую (вторую) таблицу соединения – виртуальную таблицу СтоимостьМатериаловОстатки и перетащите ее мышью на левую (первую) временную таблицу НоменклатураДокумента. При этом автоматически будет создана связь таблиц с типом соединения Левое. Ниже задайте условие связи (рис. 15.14).

Рис. 15.14. Связи между таблицами

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

Поэтому на закладке Таблицы и поля вызовите диалог параметров виртуальной таблицы СтоимостьМатериаловОстатки и задайте параметр Условие следующим образом (листинг 15.8).

**Листинг 15.**8. Условие виртуальной таблицы

Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)

Кроме того, вам нужно сделать так, чтобы при перепроведении прошлых документов (в неоперативном режиме) стоимость материалов рассчитывалась такой, какой она была на дату документа.

Для этого нужно передать в параметр Период виртуальной таблицы момент времени, на который будет посчитана стоимость материалов. Этот момент будет задан в параметре запроса &Период (рис. 15.15).

Рис. 15.15. Параметры виртуальной таблицы

Узнай больше!

Следует внимательно подходить к использованию виртуальных таблиц запросов. В частности, необходимо уделять особое внимание максимально возможному использованию параметров этих таблиц.

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

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

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

Кроме того что подобный вариант снижает производительность конфигурации, могут возникать ситуации, когда результаты, полученные одним и другим способом, будут различны. Такое, например, вполне возможно при использовании виртуальной таблицы регистра сведений СрезПоследних. Подробнее можно прочитать об этом на портале ИТС (информационно-технологического сопровождения) в статье «Использование отборов в запросах с виртуальными таблицами» – https://its.1c.ru/db/metod8dev/content/2594/hdoc.

Нажмите Запрос и посмотрите, какой текст запроса сформировал конструктор (листинг 15.9).

**Листинг 15.**9. Текст запроса

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе,

СтоимостьМатериаловОстатки.СтоимостьОстаток

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&Период, Материал В

(ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

Тем самым вы добавили к выбранным ранее полям стоимость номенклатуры (рис. 15.16).

Рис. 15.16. Создание второго запроса

Теперь добавьте виртуальную таблицу остатков регистра ОстаткиМатериалов.Остатки, из которой выберите поле КоличествоОстаток.

Задайте связь между таблицами так, чтобы временная таблица НоменклатураДокумента была связана левым соединением с таблицей остатков ОстаткиМатериаловОстатки.

Задайте условие связи, при котором поле Номенклатура временной таблицы должно быть равно полю Материал таблицы остатков (листинг 15.10).

В результате закладка Связи в конструкторе запроса должна иметь следующий вид (рис. 15.17).

Рис. 15.17. Связи между таблицами

**Листинг 15.**10. Условие связи таблиц

НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал

Затем вызовите диалог параметров виртуальной таблицы ОстаткиМатериаловОстатки и укажите, что период для расчета остатков будет передан в параметре запроса &Период, а также задайте параметр Условие следующим образом (рис. 15.15, листинг 15.11).

**Листинг 15.**11. Условие виртуальной таблицы

Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)

В результате текст запроса примет следующий вид (листинг 15.12).

**Листинг 15.**12. Текст запроса

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе,

СтоимостьМатериаловОстатки.СтоимостьОстаток,

ОстаткиМатериаловОстатки.КоличествоОстаток

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&Период, Материал В (

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&Период, Материал В (

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал

Тем самым вы добавили к выбранным ранее полям остатки номенклатуры на всех складах (рис. 15.18).

Рис. 15.18. Создание второго запроса

В заключение на закладке Объединения/Псевдонимы задайте следующие псевдонимы полей (рис. 15.19):

  • СтоимостьОстаток – Стоимость;
  • КоличествоОстаток – Количество.

Рис. 15.19. Псевдонимы полей

В результате текст запроса примет следующий вид (листинг 15.13).

**Листинг 15.**13. Текст запроса

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе,

СтоимостьМатериаловОстатки.СтоимостьОстаток КАК Стоимость,

ОстаткиМатериаловОстатки.КоличествоОстаток КАК Количество

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&Период, Материал В (

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&Период, Материал В (

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал

В качестве последнего штриха вашей работы с запросом нужно предусмотреть тот случай, когда номенклатура в справочнике есть, но у нее нет ни остатков, ни стоимости. Это может быть, например, в том случае, когда номенклатуру создали в справочнике, но она еще не поступала в вашу фирму.

В такой ситуации левые соединения с виртуальными таблицами не вернут ничего. На языке запросов это значит, что в полях Стоимость и Количество будут значения NULL.

Чтобы в дальнейшем вам было удобно работать с результатом вашего запроса, сразу же в самом запросе избавьтесь от этих значений.

Для этого примените функцию ЕСТЬNULL() к полям Стоимость и Количество. Если значение этого поля будет NULL, функция вернет 0. В остальных случаях функция вернет само значение этого поля.

Перейдите на закладку Таблицы и поля и нажмите Изменить в контекстном меню поля СтоимостьМатериаловОстатки.СтоимостьОстаток. Отредактируйте значение поля следующим образом (листинг 15.14, рис. 15.20).

Рис. 15.20. Изменение значения поля в запросе

**Листинг 15.**14. Выражение для расчета поля в запросе

ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0)

Аналогично поступите и с другим полем – ОстаткиМатериаловОстатки.КоличествоОстаток.

Нажмите ОК – текст запроса будет вставлен в модуль (листинг 15.15).

**Листинг 15.**15. Текст запроса

Запрос2.Текст = "ВЫБРАТЬ

|    НоменклатураДокумента.Номенклатура,

|    НоменклатураДокумента.ВидНоменклатуры,

|    НоменклатураДокумента.КоличествоВДокументе,

|    НоменклатураДокумента.СуммаВДокументе,

|    ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,

|    ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество

|ИЗ

|    НоменклатураДокумента КАК НоменклатураДокумента

|         ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&Период, Материал В (

|              ВЫБРАТЬ

|                    НоменклатураДокумента.Номенклатура

|              ИЗ

|                    НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

|         ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

|         ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&Период, Материал В (

|              ВЫБРАТЬ

|                    НоменклатураДокумента.Номенклатура

|              ИЗ

|                    НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки

|         ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал";

Вам остается всего лишь дописать после него оператор установки параметра и оператор выполнения запроса (листинг 15.16).

**Листинг 15.**16. Фрагмент процедуры «ОбработкаПроведения()»

…

Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "ВЫБРАТЬ

|    НоменклатураДокумента.Номенклатура,

…

|         ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал";

 

Запрос2.УстановитьПараметр("Период", МоментВремени());

**РезультатЗапроса = Запрос2.**Выполнить();   

 

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

…

В первой добавленной строке вы устанавливаете параметр запроса &Период как момент времени документа. Это значит, что остатки из виртуальных таблиц, использующиеся при расчете стоимости материалов, будут получены на момент времени документа, без учета движений самого документа. Как вам и нужно.

Теперь вам нужно немного изменить запись движений.

Все операторы, которые были написаны вами ранее, будут работать без изменений.

Единственное, что потребуется изменить, – это способ получения стоимости. Раньше вы просто брали ее из документа, теперь же вам нужно ее рассчитать на основании тех данных, которые вы получили запросом.

Стоимость материала равна частному от деления всей стоимости, полученной запросом (Стоимость), на общее количество материала на всех складах (Количество).

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

**Листинг 15.**17. Фрагмент процедуры «ОбработкаПроведения()»

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда

СтоимостьМатериала = 0;

 

Иначе

СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

 

КонецЕсли;

 

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

…

Теперь замените расчет стоимости в движениях регистров СтоимостьМатериалов и Продажи (листинг 15.18).

**Листинг 15.**18. Фрагмент процедуры «ОбработкаПроведения()»

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда

СтоимостьМатериала = 0;

 

Иначе

СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

 

КонецЕсли;

 

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

 

// Регистр ОстаткиМатериалов – Расход

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

 

// Регистр СтоимостьМатериалов – Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала;

 

КонецЕсли;

 

// Регистр Продажи

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала;

 

КонецЦикла;