Здравствуйте. Есть вопрос, касающийся ссылок на определенные документы. Задача выглядит такč
Когда проводим документ «Расходная накладная», должны совершаться движения «приход» в регистр «РасчетыСПокупателями». Контрагент берется из шапки, а документ расчетов — это ссылка на расходную накладную.
В документе «ОплатаОтПокупателя» при проведении должны совершаться движения «расход» в регистр «РасчетыСПокупателями». Контрагент берется из шапки, а документ расчетов должен вычисляться по методу ФИФО, аналогично тому, как это делается при списании партий товаров.
Также необходимо предусмотреть, что в документе «ОплатаОтПокупателя» может быть указана сумма больше, чем общий долг покупателя.
В этом случае должны быть погашены все долги контрагента по всем документам расчета, а сумма переплаты должна пройти ещё одной записью в регистр «РасчетыСПокупателями» и в измерение документ расчетов должна подставиться ссылка на текущий документ «ОплатаОтПокупателя».
Далее — когда будет проводиться следующая расходная накладная, уже она, в свою очередь, должна проверить — а не было ли ранее переплаты от контрагента. Если переплата была, то сначала надо погасить её, а остаток суммы привязать к долгу клиента по текущей накладной.
В итоге у меня есть две конфигурации - в одной реализовано списание по ФИФО, но именно материалов, а не задолженностей, вторая выполняет функции по увеличению и списанию задолженностей, подобные описанным выше, за одним исключением - там реализация идет по проектам, то есть у каждого проекта есть дата оплаты, которая указывается вручную в справочнике. Допустим на первый проект - 5 апреля, на второй - восьмое. И если проводить документ, уменьшающий долг контрагента, т.е. ПриходДенег, то сначала выбирается погашение по тому проекту, который датируется ранним числом в справочнике. Сейчас необходимо списывать с документов в порядке их проведения, первая появившаяся задолженность должна погашаться первой. И для этого в регистре используется измерение - ДокументРасчетов. Мне непонятно, какой тип должен быть у этого измерения, так как только учусь и приходилось работать только со справочниками, а также не понимаю, как именно дать ссылку на проводимый документ. Также, в конфигурации с движением денежных средств, аванс попадает в отдельную запись, но с пустым значением 'Проект', при списании аванса проходит движение в противоположном для аванса направлении, и он корректно списывается. В этой конфигурации, где необходимо выполнить задачу, должна подставляться ссылка на документ.
Выгрузки прилагаются. В первой выгрузке - конфигурация с движением денежных средств, она работает нормально. Второй файл - то, что имеется сейчас. Там много ошибок из-за измерения ДокументРасчетов, если расходная накладная работает нормально, если закомментировать все, касающееся этого измерения, то документ ОплатаОтПокупателя является буквально копией документа ПриходДенег из первой выгрузки, который я не могу переработать. Суть в том, что надо сохранить свойства первой конфигурации, при этом выполнить требования, предъявляемые ко второй, а именно ссылка на документ вместо проекта, при авансе подставить ссылку на текущий документ ОплатаОтПокупателя и первой погашается задолженность, появившаяся в регистре первой.
Когда проводим документ «Расходная накладная», должны совершаться движения «приход» в регистр «РасчетыСПокупателями». Контрагент берется из шапки, а документ расчетов — это ссылка на расходную накладную.
В документе «ОплатаОтПокупателя» при проведении должны совершаться движения «расход» в регистр «РасчетыСПокупателями». Контрагент берется из шапки, а документ расчетов должен вычисляться по методу ФИФО, аналогично тому, как это делается при списании партий товаров.
Также необходимо предусмотреть, что в документе «ОплатаОтПокупателя» может быть указана сумма больше, чем общий долг покупателя.
В этом случае должны быть погашены все долги контрагента по всем документам расчета, а сумма переплаты должна пройти ещё одной записью в регистр «РасчетыСПокупателями» и в измерение документ расчетов должна подставиться ссылка на текущий документ «ОплатаОтПокупателя».
Далее — когда будет проводиться следующая расходная накладная, уже она, в свою очередь, должна проверить — а не было ли ранее переплаты от контрагента. Если переплата была, то сначала надо погасить её, а остаток суммы привязать к долгу клиента по текущей накладной.
В итоге у меня есть две конфигурации - в одной реализовано списание по ФИФО, но именно материалов, а не задолженностей, вторая выполняет функции по увеличению и списанию задолженностей, подобные описанным выше, за одним исключением - там реализация идет по проектам, то есть у каждого проекта есть дата оплаты, которая указывается вручную в справочнике. Допустим на первый проект - 5 апреля, на второй - восьмое. И если проводить документ, уменьшающий долг контрагента, т.е. ПриходДенег, то сначала выбирается погашение по тому проекту, который датируется ранним числом в справочнике. Сейчас необходимо списывать с документов в порядке их проведения, первая появившаяся задолженность должна погашаться первой. И для этого в регистре используется измерение - ДокументРасчетов. Мне непонятно, какой тип должен быть у этого измерения, так как только учусь и приходилось работать только со справочниками, а также не понимаю, как именно дать ссылку на проводимый документ. Также, в конфигурации с движением денежных средств, аванс попадает в отдельную запись, но с пустым значением 'Проект', при списании аванса проходит движение в противоположном для аванса направлении, и он корректно списывается. В этой конфигурации, где необходимо выполнить задачу, должна подставляться ссылка на документ.
Выгрузки прилагаются. В первой выгрузке - конфигурация с движением денежных средств, она работает нормально. Второй файл - то, что имеется сейчас. Там много ошибок из-за измерения ДокументРасчетов, если расходная накладная работает нормально, если закомментировать все, касающееся этого измерения, то документ ОплатаОтПокупателя является буквально копией документа ПриходДенег из первой выгрузки, который я не могу переработать. Суть в том, что надо сохранить свойства первой конфигурации, при этом выполнить требования, предъявляемые ко второй, а именно ссылка на документ вместо проекта, при авансе подставить ссылку на текущий документ ОплатаОтПокупателя и первой погашается задолженность, появившаяся в регистре первой.
Прикрепленные файлы:
Задание 3.0.dt
Задание4.dt
По теме из базы знаний
- Когда много сканов: Автоматическое прикрепление сканированных документов
- Как проводятся документы в типовых конфигурациях от 1С: дополнение
- Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения
- Доки: новый сервис электронного документооборота: цены от 1 500 руб.
- Управляем ботами Telegram из 1С - рассылка отчетов, пошаговое общение с чатами и произвольные скрипты
Найденные решения
Добавьте во все записи движения, где используете.
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
или
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход();
ссылку на документ:
Движение.ДокументРасчетов = Ссылка;
И все появится.
В вашем примере проводка делается отсюда
Если СуммаКРаспределению > 0 Тогда
// Отнесение на аванс остатка денег после распределения по проектам
// увеличивает долг предприятия перед контрагентом
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
// А СЮДА ДОБАВИТЬ?
Движение.ДокументРасчетов = Ссылка;
//Движение.Проект = Справочники.Проекты.ПустаяСсылка(); // Аванс
Движение.Сумма = СуммаКРаспределению;
КонецЕсли;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
или
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход();
ссылку на документ:
Движение.ДокументРасчетов = Ссылка;
И все появится.
В вашем примере проводка делается отсюда
Если СуммаКРаспределению > 0 Тогда
// Отнесение на аванс остатка денег после распределения по проектам
// увеличивает долг предприятия перед контрагентом
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
// А СЮДА ДОБАВИТЬ?
Движение.ДокументРасчетов = Ссылка;
//Движение.Проект = Справочники.Проекты.ПустаяСсылка(); // Аванс
Движение.Сумма = СуммаКРаспределению;
КонецЕсли;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Добрый день! Конечно, чтобы все сделать, нужно понимать задачу целиком. Сейчас, если я правильно поняла, Ваш вопрос в том, чтобы сделать ссылку в проводке на текущий документ, так?
ДокументРасчетов = ЭтотОбъект;
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //добавим задолженность
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход(); //закроем задолженность авансом
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
И тогда по регистру в измерении ДокументРасчетов запишется данный документ
ДокументРасчетов = ЭтотОбъект;
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //добавим задолженность
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход(); //закроем задолженность авансом
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
И тогда по регистру в измерении ДокументРасчетов запишется данный документ
Прикрепленные файлы:

(4)С типом я угадал. Документ РасходнаяНакладная проводится без комментирования. Я добавил установку параметра Дата после одного из запросов, а также исправил значение ДокументРасчетов так, как это было сделано у Вас, т.е. ЭтотОбъект. И документ нормально проводится, только значение все равно не попадает в поле
(4)
Модуль документа РасходнаяНакладная выглядит у меня так
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Запрос = Новый Запрос("ВЫБРАТЬ
| ВЫБОР
| КОГДА МетодСписанияТоваров.МетодСписания = ЗНАЧЕНИЕ(Перечисление.ВидУчета.ФИФО)
| ТОГДА ""ВОЗР""
| КОНЕЦ КАК МетодСписания
|ИЗ
| РегистрСведений.МетодСписанияТоваров.СрезПоследних(&Период, ) КАК МетодСписанияТоваров");
Запрос.УстановитьПараметр("Период", Дата);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Отказ = Истина;
Сообщить("Не указан метод списания в учетной политике!!!");
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
МетодСписания = Выборка.МетодСписания;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
ЗапросВТ = Новый Запрос;
ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВТ;
ЗапросВТ.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяМатериалы.Материал КАК Материал,
| СУММА(РасходнаяНакладнаяМатериалы.Количество) КАК Количество,
| РасходнаяНакладнаяМатериалы.Ссылка.Дата КАК Период
|ПОМЕСТИТЬ Товары
|ИЗ
| Документ.РасходнаяНакладная.Материалы КАК РасходнаяНакладнаяМатериалы
|ГДЕ
| РасходнаяНакладнаяМатериалы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяМатериалы.Материал,
| РасходнаяНакладнаяМатериалы.Ссылка.Дата";
ЗапросВТ.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = ЗапросВТ.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| Товары.Материал КАК Материал,
| Товары.Количество КАК Количество,
| Товары.Период КАК Период,
| ОстаткиМатериаловОстатки.Партия КАК Партия,
| ОстаткиМатериаловОстатки.КоличествоОстаток КАК Остаток,
| ОстаткиМатериаловОстатки.СтоимостьОстаток КАК Стоимость,
| ОстаткиМатериаловОстатки.Партия.Дата КАК ДатаПартии,
| РасходнаяНакладная.Дата КАК Дата
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| ВТ.Материал
| ИЗ
| Товары КАК ВТ)) КАК ОстаткиМатериаловОстатки
| ПО Товары.Материал = ОстаткиМатериаловОстатки.Материал,
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Дата = &Дата
|ИТОГИ
| МАКСИМУМ(Количество),
| СУММА(Остаток)
|ПО
| Материал";
Запрос2.УстановитьПараметр("Дата", Дата);
Движения.ОстаткиМатериалов.Записывать = Истина;
Выборка = Запрос2.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.Количество > Выборка.Остаток Тогда
Отказ = Истина;
Сообщить("Остатка для товара """ + Выборка.Материал + """ не хватает." +
" Требуется: " + Выборка.Количество +
" Остаток: " + Выборка.Остаток);
Продолжить;
КонецЕсли;
КРаспределениюПоПартиям = Выборка.Количество;
Обход = Выборка.Выбрать();
Пока Обход.Следующий() И НЕ КРаспределениюПоПартиям = 0 Цикл
Запись = Движения.ОстаткиМатериалов.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Обход);
Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
Если КРаспределениюПоПартиям >= Обход.Остаток Тогда
Запись.Количество = Обход.Остаток;
Запись.Стоимость = Обход.Стоимость;
КРаспределениюПоПартиям = КРаспределениюПоПартиям - Обход.Остаток;
Иначе
Запись.Количество = КРаспределениюПоПартиям;
Запись.Стоимость = Обход.Стоимость / Обход.Остаток * КРаспределениюПоПартиям;
КРаспределениюПоПартиям = 0;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Движения.РасчетыСПокупателями.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасчетыСПокупателямиОстатки.Контрагент КАК Контрагент,
| -РасчетыСПокупателямиОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСПокупателями.Остатки(&МоментВремениОстатков, Контрагент = &Контрагент) КАК РасчетыСПокупателямиОстатки
|ГДЕ
| РасчетыСПокупателямиОстатки.СуммаОстаток < 0";
Запрос.УстановитьПараметр("Контрагент" , Контрагент);
Запрос.УстановитьПараметр("МоментВремениОстатков",
Новый Граница(МоментВремени(), ВидГраницы.Включая));
РезультатЗапроса = Запрос.Выполнить().Выбрать();
ДокументРасчетов = ЭтотОбъект;
Если РезультатЗапроса.Следующий() Тогда
Если РезультатЗапроса.СуммаОстаток >= СуммаПоДокументу Тогда
//сумму расхода закрывает аванс
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //добавим задолженность
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход(); //закроем задолженность авансом
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //уменьшим аванс на сумму документа
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
иначеЕсли РезультатЗапроса.СуммаОстаток < СуммаПоДокументу Тогда
//сумма расхода больше аванса и частично пойдет на расход
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //добавим задолженность
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход(); //закроем задолженность частично авансом
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = РезультатЗапроса.СуммаОстаток;
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //спишем аванс полностью
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов= ДокументРасчетов;//ссылка на ОплатаОтПокупателя
Движение.Сумма = РезультатЗапроса.СуммаОстаток;
КонецЕсли;
Иначе //аванс отсутствует
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
КонецЕсли;
Движения.РасчетыСПокупателями.Записать();
КонецПроцедуры
Модуль документа РасходнаяНакладная выглядит у меня так
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Запрос = Новый Запрос("ВЫБРАТЬ
| ВЫБОР
| КОГДА МетодСписанияТоваров.МетодСписания = ЗНАЧЕНИЕ(Перечисление.ВидУчета.ФИФО)
| ТОГДА ""ВОЗР""
| КОНЕЦ КАК МетодСписания
|ИЗ
| РегистрСведений.МетодСписанияТоваров.СрезПоследних(&Период, ) КАК МетодСписанияТоваров");
Запрос.УстановитьПараметр("Период", Дата);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Отказ = Истина;
Сообщить("Не указан метод списания в учетной политике!!!");
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
МетодСписания = Выборка.МетодСписания;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
ЗапросВТ = Новый Запрос;
ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВТ;
ЗапросВТ.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяМатериалы.Материал КАК Материал,
| СУММА(РасходнаяНакладнаяМатериалы.Количество) КАК Количество,
| РасходнаяНакладнаяМатериалы.Ссылка.Дата КАК Период
|ПОМЕСТИТЬ Товары
|ИЗ
| Документ.РасходнаяНакладная.Материалы КАК РасходнаяНакладнаяМатериалы
|ГДЕ
| РасходнаяНакладнаяМатериалы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяМатериалы.Материал,
| РасходнаяНакладнаяМатериалы.Ссылка.Дата";
ЗапросВТ.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = ЗапросВТ.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| Товары.Материал КАК Материал,
| Товары.Количество КАК Количество,
| Товары.Период КАК Период,
| ОстаткиМатериаловОстатки.Партия КАК Партия,
| ОстаткиМатериаловОстатки.КоличествоОстаток КАК Остаток,
| ОстаткиМатериаловОстатки.СтоимостьОстаток КАК Стоимость,
| ОстаткиМатериаловОстатки.Партия.Дата КАК ДатаПартии,
| РасходнаяНакладная.Дата КАК Дата
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| ВТ.Материал
| ИЗ
| Товары КАК ВТ)) КАК ОстаткиМатериаловОстатки
| ПО Товары.Материал = ОстаткиМатериаловОстатки.Материал,
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Дата = &Дата
|ИТОГИ
| МАКСИМУМ(Количество),
| СУММА(Остаток)
|ПО
| Материал";
Запрос2.УстановитьПараметр("Дата", Дата);
Движения.ОстаткиМатериалов.Записывать = Истина;
Выборка = Запрос2.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.Количество > Выборка.Остаток Тогда
Отказ = Истина;
Сообщить("Остатка для товара """ + Выборка.Материал + """ не хватает." +
" Требуется: " + Выборка.Количество +
" Остаток: " + Выборка.Остаток);
Продолжить;
КонецЕсли;
КРаспределениюПоПартиям = Выборка.Количество;
Обход = Выборка.Выбрать();
Пока Обход.Следующий() И НЕ КРаспределениюПоПартиям = 0 Цикл
Запись = Движения.ОстаткиМатериалов.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Обход);
Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
Если КРаспределениюПоПартиям >= Обход.Остаток Тогда
Запись.Количество = Обход.Остаток;
Запись.Стоимость = Обход.Стоимость;
КРаспределениюПоПартиям = КРаспределениюПоПартиям - Обход.Остаток;
Иначе
Запись.Количество = КРаспределениюПоПартиям;
Запись.Стоимость = Обход.Стоимость / Обход.Остаток * КРаспределениюПоПартиям;
КРаспределениюПоПартиям = 0;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Движения.РасчетыСПокупателями.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасчетыСПокупателямиОстатки.Контрагент КАК Контрагент,
| -РасчетыСПокупателямиОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РасчетыСПокупателями.Остатки(&МоментВремениОстатков, Контрагент = &Контрагент) КАК РасчетыСПокупателямиОстатки
|ГДЕ
| РасчетыСПокупателямиОстатки.СуммаОстаток < 0";
Запрос.УстановитьПараметр("Контрагент" , Контрагент);
Запрос.УстановитьПараметр("МоментВремениОстатков",
Новый Граница(МоментВремени(), ВидГраницы.Включая));
РезультатЗапроса = Запрос.Выполнить().Выбрать();
ДокументРасчетов = ЭтотОбъект;
Если РезультатЗапроса.Следующий() Тогда
Если РезультатЗапроса.СуммаОстаток >= СуммаПоДокументу Тогда
//сумму расхода закрывает аванс
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //добавим задолженность
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход(); //закроем задолженность авансом
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //уменьшим аванс на сумму документа
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
иначеЕсли РезультатЗапроса.СуммаОстаток < СуммаПоДокументу Тогда
//сумма расхода больше аванса и частично пойдет на расход
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //добавим задолженность
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход(); //закроем задолженность частично авансом
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = РезультатЗапроса.СуммаОстаток;
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //спишем аванс полностью
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов= ДокументРасчетов;//ссылка на ОплатаОтПокупателя
Движение.Сумма = РезультатЗапроса.СуммаОстаток;
КонецЕсли;
Иначе //аванс отсутствует
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = ДокументРасчетов;
Движение.Сумма = СуммаПоДокументу;
КонецЕсли;
Движения.РасчетыСПокупателями.Записать();
КонецПроцедуры
Добавьте во все записи движения, где используете.
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
или
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход();
ссылку на документ:
Движение.ДокументРасчетов = Ссылка;
И все появится.
В вашем примере проводка делается отсюда
Если СуммаКРаспределению > 0 Тогда
// Отнесение на аванс остатка денег после распределения по проектам
// увеличивает долг предприятия перед контрагентом
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
// А СЮДА ДОБАВИТЬ?
Движение.ДокументРасчетов = Ссылка;
//Движение.Проект = Справочники.Проекты.ПустаяСсылка(); // Аванс
Движение.Сумма = СуммаКРаспределению;
КонецЕсли;
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
или
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход();
ссылку на документ:
Движение.ДокументРасчетов = Ссылка;
И все появится.
В вашем примере проводка делается отсюда
Если СуммаКРаспределению > 0 Тогда
// Отнесение на аванс остатка денег после распределения по проектам
// увеличивает долг предприятия перед контрагентом
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
// А СЮДА ДОБАВИТЬ?
Движение.ДокументРасчетов = Ссылка;
//Движение.Проект = Справочники.Проекты.ПустаяСсылка(); // Аванс
Движение.Сумма = СуммаКРаспределению;
КонецЕсли;
Для уменьшения аванса в другой конфигурации, использующей пустую ссылку для записей аванса, я делал так
Движение = Движения.Взаиморасчеты.ДобавитьПриход(); //уменьшим аванс на сумму документа
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Проект = Справочники.Проекты.ПустаяСсылка();
Движение.Сумма = СуммаПоДокументу;
Сейчас мне нужна вместо пустой ссылки ссылка, ведущая к документу ОплатаОтПокупателя, так как аванс теперь находится там
Движение = Движения.Взаиморасчеты.ДобавитьПриход(); //уменьшим аванс на сумму документа
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Проект = Справочники.Проекты.ПустаяСсылка();
Движение.Сумма = СуммаПоДокументу;
Сейчас мне нужна вместо пустой ссылки ссылка, ведущая к документу ОплатаОтПокупателя, так как аванс теперь находится там
(18)Вторая
Там похожий пункт, который сейчас выглядит вот так:
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //уменьшим аванс на сумму документа
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = Ссылка;
Движение.Сумма = СуммаПоДокументу;
В ссылку должен попадать документ ОплатаОтПОкупателя, так как из него происходит списание аванса
Там похожий пункт, который сейчас выглядит вот так:
Движение = Движения.РасчетыСПокупателями.ДобавитьПриход(); //уменьшим аванс на сумму документа
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = Ссылка;
Движение.Сумма = СуммаПоДокументу;
В ссылку должен попадать документ ОплатаОтПОкупателя, так как из него происходит списание аванса
Это та же конфа?
Так аналогично, у Вас есть запрос остатков
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасчетыСПокупателямиОстатки.СуммаОстаток КАК СуммаОстаток,
| РасчетыСПокупателямиОстатки.ДокументРасчетов КАК ДокументРасчетов
|ИЗ
| РегистрНакопления.РасчетыСПокупателями.Остатки(
| &МоментВремениОстатков,
| Контрагент = &Контрагент
| ) КАК РасчетыСПокупателямиОстатки
|УПОРЯДОЧИТЬ ПО
| РасчетыСПокупателямиОстатки.ДокументРасчетов.Дата";
В нем есть ДокументРасчетов который мы заполнили.
Значит, просто указываем в цикле
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() И СуммаКРаспределению > 0 Цикл
СуммаКСписанию = Мин(СуммаКРаспределению, Выборка.СуммаОстаток);
// Уменьшение долга контрагента по проекту из остатков
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = Выборка.ДокументРасчетов;
Движение.Сумма = СуммаКСписанию;
СуммаКРаспределению = СуммаКРаспределению - СуммаКСписанию;
КонецЦикла;
КонецЕсли;
Проведение не проверяла, вы проверьте еще логику.
Так аналогично, у Вас есть запрос остатков
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасчетыСПокупателямиОстатки.СуммаОстаток КАК СуммаОстаток,
| РасчетыСПокупателямиОстатки.ДокументРасчетов КАК ДокументРасчетов
|ИЗ
| РегистрНакопления.РасчетыСПокупателями.Остатки(
| &МоментВремениОстатков,
| Контрагент = &Контрагент
| ) КАК РасчетыСПокупателямиОстатки
|УПОРЯДОЧИТЬ ПО
| РасчетыСПокупателямиОстатки.ДокументРасчетов.Дата";
В нем есть ДокументРасчетов который мы заполнили.
Значит, просто указываем в цикле
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() И СуммаКРаспределению > 0 Цикл
СуммаКСписанию = Мин(СуммаКРаспределению, Выборка.СуммаОстаток);
// Уменьшение долга контрагента по проекту из остатков
Движение = Движения.РасчетыСПокупателями.ДобавитьРасход();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.ДокументРасчетов = Выборка.ДокументРасчетов;
Движение.Сумма = СуммаКСписанию;
СуммаКРаспределению = СуммаКРаспределению - СуммаКСписанию;
КонецЦикла;
КонецЕсли;
Проведение не проверяла, вы проверьте еще логику.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот