Автор Тема: Обработка "РасчетСебестоимости"  (Прочитано 1233 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Валерий67

  • Новичок
  • *
  • Сообщений: 3
Обработка "РасчетСебестоимости"
« : Апрель 29, 2018, 01:45:48 pm »
Всем привет!
Нужна помощь в реализации Обработки(БУ), которая должна рассчитывать себестоимость списанных товаров уже после проведения. Как реализовать сам механизм?
Я так понимаю, что берется Расходная за определенный период, Выборка идет по признаку Проведен=ИСТИНА, Далее выборка РегитраБУх.Остатки и там надо искать остатки на момент каждого документа, но... не выходит, это уже просто накиданный код. Нужен хотя бы сам механизм как наложить отбор в регистре по каждому документу. Нужен перебор или Выгрузка?

Процедура Себестоимость(НачалоПериода, КонецПериода) Экспорт

//Сообщить(НачалоПериода);//Передаю из формы Обработки
//Сообщить(КонецПериода);

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Количество КАК КоличествоДок,
| РасходнаяНакладнаяСписокНоменклатуры.СрокГодности КАК СрокГодности,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.МоментВремени
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Проведен = ИСТИНА
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| СрокГодности
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДокТЧ.Номенклатура КАК Номенклатура,
| ДокТЧ.СрокГодности,
| ДокТЧ.КоличествоДок,
| ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК СуммаОстаток
|ИЗ
| ДокТЧ КАК ДокТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(&МоментВремени, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары), , ) КАК УправленческийОстатки
| ПО ДокТЧ.Номенклатура = УправленческийОстатки.Субконто1
|
|УПОРЯДОЧИТЬ ПО
| ДокТЧ.МоментВремени
|ИТОГИ ПО
| Номенклатура";



ПериодВремени = Новый Массив;
ПериодВремени.Добавить(НачалоПериода);
ПериодВремени.Добавить(КонецПериода);

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

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

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл
// Вставить обработку выборки ВыборкаНоменклатура

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

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

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


//Дт.ПрибылиУбытки Кт.Товары
// Движение = Движения.Управленческий.Добавить();
// Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
// Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
// Движение.Период = Дата;
// Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДок;
// Движение.Сумма = ВыборкаДетальныеЗаписи.КоличествоСписанногоТовара / ВыборкаДетальныеЗаписи.КоличествоСписанногоТовара;
// Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Номенклатура;
// Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = ВыборкаДетальныеЗаписи.СрокГодности;
КонецПроцедуры
« Последнее редактирование: Апрель 29, 2018, 01:53:57 pm от Валерий67 »

Lzrnk

  • Пользователь
  • **
  • Сообщений: 13
Re: Обработка "РасчетСебестоимости"
« Ответ #1 : Апрель 29, 2018, 01:55:08 pm »
Всем привет!
Нужна помощь в реализации Обработки(БУ), которая должна рассчитывать себестоимость списанных товаров уже после проведения. Как реализовать сам механизм?
Я так понимаю, что берется Расходная за определенный период, Выборка идет по признаку Проведен=ИСТИНА, Далее выборка РегитраБУх.Остатки и там надо искать остатки на момент каждого механизма, но... не выходит

Процедура Себестоимость(НачалоПериода, КонецПериода) Экспорт

//Сообщить(НачалоПериода);//Передаю из формы Обработки
//Сообщить(КонецПериода);

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Количество КАК КоличествоДок,
| РасходнаяНакладнаяСписокНоменклатуры.СрокГодности КАК СрокГодности,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.МоментВремени
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Проведен = ИСТИНА
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| СрокГодности
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДокТЧ.Номенклатура КАК Номенклатура,
| ДокТЧ.СрокГодности,
| ДокТЧ.КоличествоДок,
| ЕСТЬNULL(УправленческийОстатки.КоличествоОстатокДт, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК СуммаОстаток
|ИЗ
| ДокТЧ КАК ДокТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(&МоментВремени, Счет = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Товары), , ) КАК УправленческийОстатки
| ПО ДокТЧ.Номенклатура = УправленческийОстатки.Субконто1
|
|УПОРЯДОЧИТЬ ПО
| ДокТЧ.МоментВремени
|ИТОГИ ПО
| Номенклатура";



ПериодВремени = Новый Массив;
ПериодВремени.Добавить(НачалоПериода);
ПериодВремени.Добавить(КонецПериода);

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

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

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл
// Вставить обработку выборки ВыборкаНоменклатура

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

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

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


//Дт.ПрибылиУбытки Кт.Товары
// Движение = Движения.Управленческий.Добавить();
// Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
// Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
// Движение.Период = Дата;
// Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДок;
// Движение.Сумма = ВыборкаДетальныеЗаписи.КоличествоСписанногоТовара / ВыборкаДетальныеЗаписи.КоличествоСписанногоТовара;
// Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Номенклатура;
// Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = ВыборкаДетальныеЗаписи.СрокГодности;
КонецПроцедуры

Себестоимость, вроде, нужно до проведения рассчитывать. После проведения зачем её рассчитывать - выбираешь движения да и всё.


Валерий67

  • Новичок
  • *
  • Сообщений: 3
Re: Обработка "РасчетСебестоимости"
« Ответ #2 : Апрель 29, 2018, 04:05:45 pm »
Задача так поставлена, расчет себестоимости должен быть после проведения накладной. Вот и не могу решить, как перебрать документы по регистру. Можно еще перебрать ОборотыИОстатки = Остатки, но там вообще ругается на набор связей по одинаковым субконто.

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Обработка "РасчетСебестоимости"
« Ответ #3 : Апрель 29, 2018, 04:11:47 pm »
Всем привет!
Не понятно, что вы пытаетесь передать в МоментВремени для получения остатков (массив из двух дат). В одном запросе и не получится выбирать остатки для разных накладных, тем более, что для очередной накладной надо рассчитать с/с по предыдущим.
Так что либо рассчитывать документы последовательно.
Либо (и думаю, более логично для последующего расчета с/с, вне обработки проведения), рассчитывать с/с в среднем для всех доков сразу (или просто по средней, или как ФИФО в современных торговых конфах).

Lzrnk

  • Пользователь
  • **
  • Сообщений: 13
Re: Обработка "РасчетСебестоимости"
« Ответ #4 : Апрель 29, 2018, 07:12:12 pm »
Задача так поставлена, расчет себестоимости должен быть после проведения накладной. Вот и не могу решить, как перебрать документы по регистру. Можно еще перебрать ОборотыИОстатки = Остатки, но там вообще ругается на набор связей по одинаковым субконто.
Считать по документам, по-любому неправильно. Обычно есть регистр "Себестоимость" - выбрать из него нужные движения.
А так, не видя полностью условия, можно только гадать.

Валерий67

  • Новичок
  • *
  • Сообщений: 3
Re: Обработка "РасчетСебестоимости"
« Ответ #5 : Апрель 29, 2018, 08:37:41 pm »
Задача так поставлена, расчет себестоимости должен быть после проведения накладной. Вот и не могу решить, как перебрать документы по регистру. Можно еще перебрать ОборотыИОстатки = Остатки, но там вообще ругается на набор связей по одинаковым субконто.
Считать по документам, по-любому неправильно. Обычно есть регистр "Себестоимость" - выбрать из него нужные движения.
А так, не видя полностью условия, можно только гадать.

Задача Бухгалтерского Учета(БУ), Регистра "Себестоимость" там нет. Задача состоит в том, чтобы провести Расходные накладные без записи себестоимости, а потом Специальной обработкой рассчитать себестоимость. Тут два варианта получения списка накладных: 1) Из Документа - Проведен и МоментВремени 2)Из регистра.