Доброго времени суток дорогие форумчане, профессионалы своего дела !!

помогите справиться с этим заданием если это возможно, буду благодарен)

Есть Документ "Договоры аренды помещений" (надо иметь ввиду что фирме необходимо заключать сразу с несколькими Арендодателями одновременно, одновременно могут быть сразу несколько актуальных договоров)

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

Есть документ "Оплатить аренду" который будет закрывать долги расходуя из кассы наличными

Как в программно создавать документы начисления на основа действующих договоров (нужно заполнять ТЧ в документе "Начисление арендных плат") ?
---
Затем

```1c
    Если ТаблицаРезультат<>Неопределено
    Тогда
    Объект.НазваниеТабличнойЧасти.Загрузить(ТаблицаРезультат);
    КонецЕсли;
```
---
получилось, сработавший код:

```1c
    //Проверяем проведены ли актуальные договора аренды, начислены ли арендные платы за текущий месяц и создадим документ начисления если он не найден
    Процедура ПроведениеДокументыНачисленияАрнеднойПлаты() Экспорт

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

    Если НЕ ДействующиеДоговоры = Неопределено Тогда

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

    Если НЕ ДокументНачисленияЗаТекущийМесяц = Неопределено Тогда
    //значит арендная плата уже начислена

    Иначе
    //3.Создадим документ начисления
    Сообщить("Арендные оплаты не начислены.");

    НовыйДокументНачисления = Документы.НачислениеАренднойПлаты.СоздатьДокумент();
    НовыйДокументНачисления.Дата = НачалоМесяца(ТекущаяДата());
    НовыйДокументНачисления.ПериодРегистрации = НовыйДокументНачисления.Дата;
    НовыйДокументНачисления.Комментарий = "#Создан автоматически";
    НовыйДокументНачисления.Пользователь = ПараметрыСеанса.ТекущийПользователь;

    ТЧДокументНачисления = НовыйДокументНачисления.ТЧНачисления;

    Для Каждого Строка из ДействующиеДоговоры Цикл
    НоваяСтрока = ТЧДокументНачисления.Добавить();
    НоваяСтрока.Арендодатель = Строка.Арендодатель;
    НоваяСтрока.СуммаНачисления = Строка.СуммаАренднойПлаты;
    НоваяСтрока.НаОснованииДоговора = Строка.Ссылка;
    КонецЦикла;

    НовыйДокументНачисления.СуммаДокумента = НовыйДокументНачисления.ТЧНачисления.Итог("СуммаНачисления");

    НовыйДокументНачисления.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;

    Иначе
    Сообщить("Не найден актуальный договор аренды.
    |Создайте актуальный договор аренды чтобы заранее учитывать арендные расходы.");
    КонецЕсли;

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

вот это часть кода немного меня мучал получается ):

```1c
    НовыйДокументНачисления = Документы.НачислениеАренднойПлаты.СоздатьДокумент();
    НовыйДокументНачисления.Дата = НачалоМесяца(ТекущаяДата());
    НовыйДокументНачисления.ПериодРегистрации = НовыйДокументНачисления.Дата;
    НовыйДокументНачисления.Комментарий = "#Создан автоматически";
    НовыйДокументНачисления.Пользователь = ПараметрыСеанса.ТекущийПользователь;

    ТЧДокументНачисления = НовыйДокументНачисления.ТЧНачисления;

    Для Каждого Строка из ДействующиеДоговоры Цикл
    НоваяСтрока = ТЧДокументНачисления.Добавить();
    НоваяСтрока.Арендодатель = Строка.Арендодатель;
    НоваяСтрока.СуммаНачисления = Строка.СуммаАренднойПлаты;
    НоваяСтрока.НаОснованииДоговора = Строка.Ссылка;
    КонецЦикла;

    НовыйДокументНачисления.СуммаДокумента = НовыйДокументНачисления.ТЧНачисления.Итог("СуммаНачисления");

    НовыйДокументНачисления.Записать(РежимЗаписиДокумента.Проведение);
```

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

как мне быть ? опять в тупике )

Спасибо за советы, наводки !
---
нужно при каждом запуске 1С проверялось
что проверялось?
---
задача не ясна
---
Извиняюсь не успел редактировать сообщение, чуть чуть задержался сорри
---
Вам еще надо подумать над тем как 1с будет узнавать что фирма арендует где-то помещение , а может не арендует вовсе, а Вы собираетесь программно создавать документ начисления арендной платы. Полностью программно не получится сделать, что-то придется вводить ручками.
---
ну да конечно, Документ договор аренды вводится руками, и дальше система сама должна понять есть ли действующие договоры по аренде и если они (или он) есть то создавать документы начисления на основании этих договоров каждый месяц автоматически. А пользователю остается только гасить долга расходуя из кассы.
---
нужно помощь по написанию кода, по моему без цикла тут не обойтись, потому что действующих договоров в каждом месяце может быть несколько

чтоб было понятно скидываю скрин, в нем форма документа начисления
---
В документе Начисление арендной платы создайте команду "Заполнить договора аренды". Она будет заполнять табличную часть актуальными договорами арендами.
Затем при проведении документа Начисление арендной платы создайте приходные движения по регистру накопления "Взаиморасчеты с арендаторами" (или как он у вас там называется).
Ну и все.
---
у меня тоже самое - "Взаиморасчеты с арендаторами" . А можете помочь с кодом этой кнопки, у меня мало знаний про циклов , тут по моему по любому надо будет обращаться к циклам и таблице значений
---
Чтобы примерно набросать код нужно больше сведений. По каким условиям вы отбираете актуальные договора аренды (галочка Актуальность или реквизит Срок действия). Какие называются реквизиты в договоре аренды? Как называются реквизиты в "Начисление Арендной платы"?
---
Тут условия таковы :

```1c
    |ГДЕ
    | ДоговорАрендыПомещения.ДатаОкончания > &ТекущаяДата
    | И ДоговорАрендыПомещения.ПометкаУдаления <> ИСТИНА
    | И ДоговорАрендыПомещения.Проведен = ИСТИНА";
    Запрос.УстановитьПараметр("ТекущаяДата", КонецДня(ТекущаяДата()));
```

2. Реквизиты документы НачисланиеАренденднойПлаты:

-СуммаДокумента
-пользователь
-комментарии
ТЧ -Арендодатель
      -СуммаНаисления
      -ДоговорАренды
---
Есть Документ "Договоры аренды помещений" (надо иметь ввиду что фирме необходимо заключать сразу с несколькими Арендодателями одновременно, одновременно могут быть сразу несколько актуальных договоров)
Получается, здесь у вас в табличной части несколько договоров по разным арендодателям?
Можно же запросом выбрать все действующие договора .
---
таким образом выделяю действующие договоры и выгружаю в таблицу значений :

но дальше моих знаний не хватает (. думаю тут поможет цикл который будет добавлять в ТЧ из Таблицы значений действующие договоры
---
Затем

```1c
    Если ТаблицаРезультат<>Неопределено
    Тогда
    Объект.НазваниеТабличнойЧасти.Загрузить(ТаблицаРезультат);
    КонецЕсли;
```
---
Попробовал, дает ошибку "Не соответствие типов (параметр номер "1")". Тут все коды написал в одной процедуре чтоб было понятнее какого результата хотелось бы получить. Вся процедура выполняется в общем модуле и вызывается в модуле приложения>ПриНачалеРаботыСистемы.

```1c
    //Проверяем проведены ли актуальные договора аренды, начислены ли арендные платы за текущий месяц и создадим документ начисления если он не найден
    Процедура ПроведениеДокументыНачисленияАрнеднойПлаты() Экспорт

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

    Если НЕ ДействующиеДоговоры = Неопределено Тогда

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

    Если НЕ ДокументНачисленияЗаТекущийМесяц = Неопределено Тогда
    //значит арендная плата уже начислена

    Иначе
    //3.Создадим документ начисления
    Сообщить("Арендные оплаты не начислены.");

    НовыйДокументНачисления = Документы.НачислениеАренднойПлаты.СоздатьДокумент();
    НовыйДокументНачисления.Дата = НачалоМесяца(ТекущаяДата());
    НовыйДокументНачисления.ПериодРегистрации = НовыйДокументНачисления.Дата;
    НовыйДокументНачисления.Комментарий = "#Создан автоматически";
    НовыйДокументНачисления.ЭтотОбъект.ТЧНачисления.Загрузить(ДокументНачисленияЗаТекущийМесяц);

    НовыйДокументНачисления.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;

    Иначе
    Сообщить("Не найден актуальный договор аренды.
    |Создайте актуальный договор аренды чтобы заранее учитывать арендные расходы.");
    КонецЕсли;

    КонецПроцедуры
```
---
в других похожих темах прочитал что названия колонок должны быть одинаковы, это так ? Если это так то как быть если они не совпадают ?
---
тут вроде бы рабочий код, но не проверял. скорее всего он будет работать только тогда, когда поля ТЗ и ТЧ совпадают.
---
Действующие договоры выбирать и выгрузить в таблицу значений с помощью запроса не составляет труда но вот дальше как загрузить и передать в ТЧ создаваемого документа "НачислениеАренднойПлаты" не получается.

на заметку: все этот процесс выполняется в фоновом режиме, только кое какие сообщения выдаются пользователю
---
Кто будет диплом получать, кто решит задачу или автор вопроса?
Если 1, то зачем ему этот диплом?
Если 2, то заработал ли он этот диплом?
---
если у вас есть диплом и вы просто хотите тут определиться по неважным вопросам, мой ответ вам точно не понравится.
---
я изучаю рынок труда. Какие дипломированные специалисты появятся на нем в ближайшее время и что они сделают с моей профессией. Это весьма важные вопросы.
По поводу задачи - ну сходите на какие-нибудь курсы, это же самые начальные вопросы, научат везде. Это честнее, ну и с первой работы потом не выгонят в шею с чужим дипломом.
---
для важных интересующих вас вопросов думаю есть соответствующие темы, могли бы там написать.

на счет моего образования, именно эти форумы и участники этих форумов меня научили многому по вопросам программирования 1С, и я каждому из этих людей благодарен за ихние безразличие !! Спасибо вам !
---
т.е. благодарен за их помощь) сорри, опечатался
---
получилось, сработавший код:

```1c
    //Проверяем проведены ли актуальные договора аренды, начислены ли арендные платы за текущий месяц и создадим документ начисления если он не найден
    Процедура ПроведениеДокументыНачисленияАрнеднойПлаты() Экспорт

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

    Если НЕ ДействующиеДоговоры = Неопределено Тогда

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

    Если НЕ ДокументНачисленияЗаТекущийМесяц = Неопределено Тогда
    //значит арендная плата уже начислена

    Иначе
    //3.Создадим документ начисления
    Сообщить("Арендные оплаты не начислены.");

    НовыйДокументНачисления = Документы.НачислениеАренднойПлаты.СоздатьДокумент();
    НовыйДокументНачисления.Дата = НачалоМесяца(ТекущаяДата());
    НовыйДокументНачисления.ПериодРегистрации = НовыйДокументНачисления.Дата;
    НовыйДокументНачисления.Комментарий = "#Создан автоматически";
    НовыйДокументНачисления.Пользователь = ПараметрыСеанса.ТекущийПользователь;

    ТЧДокументНачисления = НовыйДокументНачисления.ТЧНачисления;

    Для Каждого Строка из ДействующиеДоговоры Цикл
    НоваяСтрока = ТЧДокументНачисления.Добавить();
    НоваяСтрока.Арендодатель = Строка.Арендодатель;
    НоваяСтрока.СуммаНачисления = Строка.СуммаАренднойПлаты;
    НоваяСтрока.НаОснованииДоговора = Строка.Ссылка;
    КонецЦикла;

    НовыйДокументНачисления.СуммаДокумента = НовыйДокументНачисления.ТЧНачисления.Итог("СуммаНачисления");

    НовыйДокументНачисления.Записать(РежимЗаписиДокумента.Проведение);
    КонецЕсли;

    Иначе
    Сообщить("Не найден актуальный договор аренды.
    |Создайте актуальный договор аренды чтобы заранее учитывать арендные расходы.");
    КонецЕсли;

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

вот это часть кода немного меня мучал получается ):

```1c
    НовыйДокументНачисления = Документы.НачислениеАренднойПлаты.СоздатьДокумент();
    НовыйДокументНачисления.Дата = НачалоМесяца(ТекущаяДата());
    НовыйДокументНачисления.ПериодРегистрации = НовыйДокументНачисления.Дата;
    НовыйДокументНачисления.Комментарий = "#Создан автоматически";
    НовыйДокументНачисления.Пользователь = ПараметрыСеанса.ТекущийПользователь;

    ТЧДокументНачисления = НовыйДокументНачисления.ТЧНачисления;

    Для Каждого Строка из ДействующиеДоговоры Цикл
    НоваяСтрока = ТЧДокументНачисления.Добавить();
    НоваяСтрока.Арендодатель = Строка.Арендодатель;
    НоваяСтрока.СуммаНачисления = Строка.СуммаАренднойПлаты;
    НоваяСтрока.НаОснованииДоговора = Строка.Ссылка;
    КонецЦикла;

    НовыйДокументНачисления.СуммаДокумента = НовыйДокументНачисления.ТЧНачисления.Итог("СуммаНачисления");

    НовыйДокументНачисления.Записать(РежимЗаписиДокумента.Проведение);
```

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

как мне быть ? опять в тупике )

Спасибо за советы, наводки !