Создать документ по закрытию счета

Версия для печатиPDF-версия

Платформа:

  1. Помогите решить задачку!!!
Создайте документ Закрытие 26го счета.
- Документ должен закрывать помесячно (Обороты за месяц по 26 му) на 20.01 (Дт 20.01 Кт 26)
- Подразделения и статьи затрат остаются такими же как и на счете 26
- Номенклатурные группы берутся с 20.01 счета и происходит распределение согласно суммам на 20.01 по номенклатурным группам

* Документ при проведении должен делать расчеты, поэтому больше никаких реквизитов и табличных частей не нужно. все расчеты можно сделать в модуле объекта в процедуре ОбработкаПроведения.

* Для правильных расчетов нам нужно сделать два запроса. Один запрос должен выбирать данные по счету 26 (по организации за месяц) в разрезе подразделения и статьи затрат. Вторым запросом вам нужно выбрать обороты по счету 20.01, причем в разрезе номенклатурных групп. Подразделения и статьи затрат нам тут не важны. Выбранные данные будут базой распределения. Выбрав эти данные  нужно сумму каждой строки первой выборки распределить пропорционально суммам второй выборки, для чего предварительно получаем общую сумму базы распределения.

В модуле объекта пока сделал так, да может и не правильно, что скорее всего

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

 

Дальше не знаю что и писать, еще и второй запрос делать. Засада у меня в этими видео курсами дистанционно. Не поговорить, не посоветоваться...

 

С параметрами в запросе намудрили:

1. ДатаНачала = ДатаОкончания? По идее ДатаНачала = начало месяца, ДатаОкончания = конец месяца.

2. Субконто1, Организация, Подразделение - эти параметры вообще не нужны. Вам же надо по всему счёту выборку сделать.

Группировка в запросе тоже не нужна. Всё и так будет сгруппировано.

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
              | ХозрасчетныйОбороты.Счет КАК Счет,
              | ХозрасчетныйОбороты.Организация КАК Организация,
              | ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот
              |ИЗ
              | РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Период, Счет = &Счет, , Организация = &Организация, , ) КАК ХозрасчетныйОбороты
              |
              |УПОРЯДОЧИТЬ ПО
              | Организация,
              | Счет,
              | СуммаОборот
              |АВТОУПОРЯДОЧИВАНИЕ";
 
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(Дата));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы);
Запрос.УстановитьПараметр("Организация", Справочники.Организации);
 
Мне же надо запрос по 26 счету в разрезе подразделений и статей затрат по организации, я так думал, что и параметры по ним надо установить, или это все в реквизитах документа?
Тогда Организацию я уберу. Это по 26-му запрос. 

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

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
              | ХозрасчетныйОбороты.Счет КАК Счет,
              | ХозрасчетныйОбороты.Организация КАК Организация,
              | ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот
              |ИЗ
              | РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Период, Счет = &Счет, , Организация = &Организация, , ) КАК ХозрасчетныйОбороты
              |
              |УПОРЯДОЧИТЬ ПО
              | Организация,
              | Счет,
              | СуммаОборот
              |АВТОУПОРЯДОЧИВАНИЕ";
 
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(Дата));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы);
 
По итогу запрос таким образом должен выглядеть?

Запрос примерно такой:

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

Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(Дата));
Субконто = Новый Массив;
Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиЗатрат);
Запрос.УстановитьПараметр("Субконто", Субконто);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы);

Второй запрос практически идентичен:

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

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Субконто = Новый Массив;
Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы);
Запрос.УстановитьПараметр("Субконто", Субконто);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ОсновноеПроизводство);

Дальше можно выбрать данные с ОбходРезультатаЗапроса.ПоГруппировкам либо выгрузить в дерево/таблицу значений. Потом обходите первую выборку по верхнему уровню (по Организации), находите эту же организацию во второй выборке, вычисляете коэффициент пересчёта по итоговым суммам и заполняете набор записей.

В общих чертах как-то так. 

Спасибо огромное!!! Только вопрос, обязательно ли прописывать

Субконто = Новый Массив;

Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы);

А если просто установкой параметра?

 

Обязательно. Так задаётся последовательность субконто для счёта. Субконто1 - это первый элемент массива, Субконто2 - второй элемент и т.д. Иначе может путаница при выполнении запроса.

Отправил на проверку, пришел ответ

Отбор по субконто не нужен - убирайте из обоих запросов.

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

 Допустим первая

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

вторая тогда

Выборка1 = Запрос1.Выполнить().Выбрать();

И циклы будут не отдельно , один внутри другого

внутри второго цикла - начинайте делать движения

 

Я уже вообще запутался. Субконто с запросов я убрал, в параметрах оставил. 

Движения как делать?

Создаёте набор записей регистра бухгалтерии Хозрасчетный, устанавливаете отбор по документу закрытия счета и в цикле добавляете записи в набор (разумеется с заполнением). По окончании цикла набор записей записываете.

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

 

   Движения.Хозрасчетный.Записывать = Истина; 

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

Куда-то не туда пошли...

Последний пост свой исправил. Да, не туда погнал. На этом остановился. дальше начинаю писать, ну чувствую, что опять не туда лезу. Пока не очень понятно

Добрый вечер! Решили задачку? Аналогичная проблема.... задача та же... посоветоваться не с кем(((

Да, добил ее...

А можете помочь с  решением? вообще запуталась 

Смотрите, я изменил процедуру, которая чуть выше, 2-й запрос такой же как и первый, только Счет в параметрах будет Основное производство. Ну а так вроде у меня прокатило

Здравствуйте!

Поясните, пожалуйста, что означает у Вас переменная ТЗ в коде:

 ТЗ = Запрос1.Выполнить().Выгрузить();
    ОбщаяСумма = ТЗ.Итог("СуммаОборот"); 

ТЗ - это что у Вас и для чего нужна именно выгрузка?

Спасибо!

Это таблица значений, полученная в результате выгрузки из результата запроса. Судя по всему, она используется только для получения общей суммы. Хотя эту сумму вполне можно и в выборке получить, если запрос немного изменить.

Спасибо! Каким образом можно получить её в выборке? Что нужно изменить в запросе?

Добавить итоги по ОБЩИЕ.

То есть, к этому запросу:

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

и можно обойтись без этих строк

ТаблицаЗначений = Запрос20.Выполнить().Выгрузить();
    СуммаИтог = ТаблицаЗначений.Итог("СуммаОборот");
 
Я верно понимаю?

В данном случае нужно добавить строки:

|ИТОГИ
| СУММА(СуммаОборот)
|ПО
| ОБЩИЕ

И выборку делать с обходом по группировкам.