Документ «Счёт на оплату покупателю»
Документ выставляет покупателю счёт на оплату товаров, услуг или основных средств: фиксирует ассортимент, цены, НДС и акциз, печатает бланк счёта и отслеживает статусы оплаты/отгрузки. Бухгалтерских проводок не делает — это «коммерческий» документ-основание для будущей оплаты и отгрузки.
🎯 Что это и зачем
Прежде чем продать товар или оказать услугу, поставщик обычно выставляет покупателю счёт на оплату — формализованное предложение: что продаём, по какой цене, на какой банковский счёт перечислить деньги. Документ «Счёт на оплату покупателю» решает именно эту задачу.
Что он даёт: - печать бланка счёта с реквизитами организации, покупателя, банковским счётом и кодом назначения платежа (КНП); - расчёт сумм строк, НДС и акциза (как и в реализации, но без движений по учёту); - отслеживание статусов — оплачен / не оплачен, отгружен / к отгрузке (через регистр сведений, а не реквизиты документа); - основание для дальнейших документов — поступления оплаты (на расчётный счёт / в кассу) и отгрузки (реализация).
Кто работает: менеджеры по продажам, бухгалтеры, логисты. Выписывается часто — по мере поступления заявок от покупателей.
🧭 Где найти в программе
Раздел «Продажа» → пункт «Счета покупателям». Откроется журнал счётов; новый создаём кнопкой «Создать».
Документ.СчетНаОплатуПокупателю.👤 Часть 1. Для пользователя
Проходим по шагам: от пустого документа до записанного счёта, его печати и отслеживания оплаты.
Урок 1. Счёт на товары
Когда: покупатель запросил поставку товаров, нужно выставить счёт на оплату.
Шаг 1. Создаём документ
«Создать» — откроется новая форма счёта. Шапка частично заполнится сама: подставится основная организация, валюта регламентированного учёта (тенге) и текущая дата.
Шаг 2. Заполняем шапку
- Организация — юрлицо-поставщик (обязательно). От неё зависят доступные банковские счета и реквизиты для печати.
- Контрагент — покупатель (обязательно). После выбора автоматически подтянется договор (если у контрагента есть единственный подходящий договор) и очистится адрес доставки.
- Структурная единица — банковский счёт или касса, куда покупатель перечислит оплату (обязательно). Подставится основной счёт организации.
- Договор — договор с покупателем (вид «С покупателем» или «Полученный аванс»). Определяет тип цен и валюту.
- Склад и Адрес доставки — при необходимости.
- КНП (код назначения платежа) — для казахстанских платёжных документов; попадёт в печатную форму.
Шаг 3. Добавляем товары
Переходим на закладку «Товары». Способы заполнения: - «Подбор» — массовый выбор из справочника номенклатуры; - «Добавить» — построчно вручную; - «Загрузить из файла» — импорт из Excel/CSV (см. Урок 4); - по штрихкоду — добавление сканером (см. Урок 5).
При выборе номенклатуры сами заполнятся единица измерения, коэффициент, цена (по типу цен документа), ставка НДС и ставка акциза. Указываем количество — суммы и налоги пересчитаются автоматически.
Шаг 4. Проверяем итог
Поле Сумма документа в шапке — только для чтения, оно пересчитывается само при любом изменении строк. Сверяем итог.
Шаг 5. Записываем
«Записать» (Ctrl+S) или «Записать и закрыть». После записи документ можно печатать и создавать на его основании оплату/отгрузку.
Урок 2. Счёт на услуги и основные средства
Документ умеет выставлять счёт сразу по трём видам предмета продажи — для каждого своя закладка:
- Товары — материальная номенклатура (количество, коэффициент упаковки, единица измерения).
- Услуги — работы и услуги; есть поле Содержание для развёрнутого описания, нет складских реквизитов.
- ОС — основные средства: выбираем карточку Основного средства и указываем цену продажи.
Заполнять можно любую из частей или несколько сразу. Сумма документа складывается из всех трёх частей.
Урок 3. Цены и валюта
Если изменился курс, тип цен или договор — пересчитываем строки одним диалогом.
- В шапке кликаем ссылку «Цены и валюта».
- В диалоге переоценки меняем валюту документа, тип цен или договор.
- Выбираем способ: - Перезаполнить цены — подтянуть цены из регистра заново (например, при смене типа цен); - Пересчитать суммы по курсу — пересчитать в новой валюте, сохранив цены.
- Подтверждаем — строки, суммы и НДС обновятся; курс и кратность взаиморасчётов встанут на дату документа.
Урок 4. Загрузка товаров из файла
Заявку покупателя в виде таблицы Excel можно загрузить, не вводя строки вручную.
- На закладке «Товары» — команда «Загрузить из файла».
- Выбираем файл с колонками «Наименование» / «Артикул», «Количество», «Цена».
- Система сопоставит строки с номенклатурой по артикулу или наименованию.
- При неоднозначности (несколько одинаковых наименований) откроется диалог выбора.
- Подтверждаем — строки добавятся, цены и количества заполнятся из файла. Проверяем и записываем.
Урок 5. Статусы оплаты и отгрузки
Счёт отслеживает два статуса — оплаты и отгрузки. Они хранятся не в реквизитах документа, а в отдельном регистре, поэтому видны в списке счётов отдельными колонками.
Групповое изменение статусов: 1. В форме списка счётов выделяем нужные (галочками или Shift+Click). 2. Команда «Изменить статус». 3. В диалоге выбираем статус оплаты (например, «Оплачен», «Частично оплачен») и статус отгрузки («Отгружен», «К отгрузке»). 4. «ОК» — статусы обновятся для всех выбранных счётов, открытые карточки перечитают данные.
🛠 Часть 2. Для программиста
Источник: реальный код релиза 3.0.72.1 (Documents/СчетНаОплатуПокупателю/Ext/ObjectModule.bsl), плюс разбор objects/ и business-logic/.
Главное про объект
Документ.СчетНаОплатуПокупателю — документ без движений по регистрам. В метаданных нет register_records, а в ObjectModule.bsl отсутствует обработчик ОбработкаПроведения. Бухгалтерских и налоговых проводок документ не делает. Его роль — собрать коммерческие данные (номенклатура, цены, НДС/акциз), посчитать сумму, напечатать счёт и выступить основанием для оплаты/отгрузки. Отслеживание оплаты и отгрузки вынесено во внешние регистры.
Структура объекта
Ключевые реквизиты шапки. Обязательные (FillCheck = ShowError): Организация, Контрагент, СтруктурнаяЕдиница (составной тип — СправочникСсылка.БанковскиеСчета либо СправочникСсылка.Кассы). Прочие: ДоговорКонтрагента, ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов, ТипЦен, Склад, СтруктурноеПодразделение, СуммаДокумента (только для чтения, считается перед записью), АдресДоставки, КодНазначенияПлатежа, Ответственный, Автор, Комментарий. Управляющие флаги: УчитыватьНДС, СуммаВключаетНДС, УчитыватьАкциз, СуммаВключаетАкциз.
Табличные части (предмет продажи — три варианта):
| Часть | Что хранит | Особенности |
|---|---|---|
Товары |
материальная номенклатура | Количество, Коэффициент, ЕдиницаИзмерения, Цена, Сумма, СтавкаНДС/СуммаНДС, СтавкаАкциза/СуммаАкциза |
Услуги |
работы и услуги | Содержание (текст), без складских и акцизных реквизитов |
ОС |
основные средства | ссылка ОсновноеСредство, Сумма, СтавкаНДС/СуммаНДС |
Формы: ФормаДокумента (основная), ФормаСписка (колонки статусов, групповые операции), ФормаВыбора (подстановка ссылки), ИзменитьСтатус (диалог группового изменения статусов).
Жизненный цикл (обработчики ObjectModule)
Модуль маленький (~60 строк). Весь его состав:
| Обработчик | Что делает (по реальному коду) |
|---|---|
ОбработкаЗаполнения |
При создании/вводе на основании: удаляет Автор из структуры заполнения, переносит свойства в объект, вызывает ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(...) с валютой регл. учёта и видом учёта «Продажа» |
ПередЗаписью |
Считает сумму документа УчетНДСИАкциза.ПолучитьСуммуДокументаСНДС(ЭтотОбъект) и заполняет договор РаботаСДоговорамиКонтрагентов.ЗаполнитьДоговорПередЗаписью(ЭтотОбъект); при загрузке из обмена — выходит сразу |
ОбработкаПроверкиЗаполнения |
Если есть строки хотя бы в одной из частей Товары/Услуги/ОС — снимает эти части из списка проверяемых реквизитов (условная обязательность «непустоты») |
ПриКопировании |
Сбрасывает Дата на начало текущего дня пользователя |
ОбработкаПроведения в модуле нет. Это не упущение разбора — документ действительно не проводит движения. Поэтому таблиц «Дт/Кт» по нему не будет.Реальный код ключевых процедур (3.0.72.1)
Модуль целиком умещается в одном экране — ниже три значимых обработчика дословно.
ПередЗаписью — здесь вся «вычислительная» работа документа:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Посчитать суммы документа и записать ее в соответствующий реквизит шапки для показа в журналах
СуммаДокумента = УчетНДСИАкциза.ПолучитьСуммуДокументаСНДС(ЭтотОбъект);
РаботаСДоговорамиКонтрагентов.ЗаполнитьДоговорПередЗаписью(ЭтотОбъект);
КонецПроцедуры // ПередЗаписью
Разбор:
- СуммаДокумента пересчитывается на каждой записи из табличных частей — отсюда и режим «только для чтения» в форме. Перезаписывать его вручную бессмысленно.
- ЗаполнитьДоговорПередЗаписью гарантирует непустой договор перед сохранением (подстановка основного договора контрагента, если поле осталось пустым).
- При загрузке через обмен данными (ОбменДанными.Загрузка) оба действия пропускаются — иначе синхронизация конфликтовала бы с уже рассчитанными значениями.
ОбработкаПроверкиЗаполнения — условная обязательность табличных частей:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ЭтотОбъект.Товары.Количество() > 0
ИЛИ ЭтотОбъект.Услуги.Количество() > 0
ИЛИ ЭтотОбъект.ОС.Количество() > 0 Тогда
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Товары"));
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Услуги"));
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ОС"));
КонецЕсли;
КонецПроцедуры
Разбор: логика «нужна хотя бы одна строка». Все три части помечены в метаданных как заполняемые; если хотя бы одна непуста — три части снимаются с проверки разом. Если все три пусты — платформа сообщит о незаполненных табличных частях, и документ не запишется. Тонкость: проверка проходит, даже если заполнены, скажем, только «Услуги» — пустые «Товары» и «ОС» это не блокируют.
ОбработкаЗаполнения — инициализация при создании / вводе на основании:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("Автор") Тогда
ДанныеЗаполнения.Удалить("Автор");
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект, Константы.ВалютаРегламентированногоУчета.Получить(), "Продажа");
КонецПроцедуры
Разбор: при заполнении структурой Автор намеренно вычищается (чтобы не унаследовать автора из документа-источника), остальные свойства переносятся в объект, затем шапка достраивается стандартной процедурой подсистемы заполнения с валютой регл. учёта и контекстом «Продажа».
Движения по регистрам
Прямых движений документ не делает. Связанные регистры используются «вокруг» документа:
| Регистр | Тип | Кто пишет | Роль для счёта |
|---|---|---|---|
СтатусыДокументов |
сведения | форма ИзменитьСтатус / процедуры статусов |
хранит статус оплаты (Статус) и статус отгрузки (ДополнительныйСтатус); счёт читает для колонок и формы |
ОплатаСчетов |
накопление | документы оплаты (поступление на р/с, ПКО) | счёт читает через ОплаченнаяСуммаСчета (ManagerModule), но сам не пишет |
То есть «движения» счёта — это записи других документов, на которые он ссылается, плюс служебный регистр статусов, обновляемый из интерфейса.
Что делает вместо проводок
Раз бухгалтерского проведения нет, полезная нагрузка документа такая:
1. Расчёт сумм — СуммаДокумента и построчные Сумма/СуммаНДС/СуммаАкциза (в ПередЗаписью и обработчиках формы).
2. Печать — ManagerModule.ПечатьСчетаЗаказа (~376 строк) формирует табличный документ: реквизиты организации и контрагента, банковские реквизиты из СтруктурнаяЕдиница, КНП, строки товаров/услуг/ОС, доп. колонки и язык. Команда печати регистрируется через ДобавитьКомандыПечати.
3. Статусы — оплата/отгрузка через регистр сведений СтатусыДокументов.
4. Основание — на базе счёта вводят документы оплаты и отгрузки (см. «Связи»).
Валидации (ОбработкаПроверкиЗаполнения + метаданные + формы)
- Обязательные реквизиты шапки:
Организация,Контрагент,СтруктурнаяЕдиница(ShowError). - Непустота: хотя бы одна строка в
Товары/Услуги/ОС(код выше). ДоговорКонтрагента— только вид «С покупателем» или «Полученный аванс» (контролируется при выборе договора в форме и вРаботаСДоговорамиКонтрагентов).- Курсы валют — должны быть заданы на дату документа (проверка при смене даты/валюты в форме).
- В диалоге
ИзменитьСтатус— оба статуса обязательны (ПроверитьЗаполнение).
Зависимости (общие модули)
УчетНДСИАкциза— расчёт суммы документа с НДС (ПолучитьСуммуДокументаСНДС), построчные НДС/акциз.РаботаСДоговорамиКонтрагентов— подстановка/контроль договора (ЗаполнитьДоговорПередЗаписью), виды договоров.ЗаполнениеДокументов— инициализация шапки при создании/вводе на основании.ОбработкаТабличныхЧастейКлиентСервер(десятки вызовов в форме) — расчёт строк, налогов, итогов.УправлениеЦенообразованием— цены из регистра, пересчёт при смене типа цен/валюты.СтатусыДокументов— чтение/запись статусов;ОбщегоНазначения— текущая дата.
- «Счёт не проводится» — это нормально. Если клиент ждёт проводок от счёта — объясните, что счёт коммерческий: учёт делают оплата и реализация. Дебиторку и факт оплаты он отслеживает статусами и регистром
ОплатаСчетов, а не движениями.- Печать. Кастомизация бланка — это
ManagerModule.ПечатьСчетаЗаказаи макеты. Доп. колонку печатной формы регулирует константаДополнительнаяКолонкаПечатныхФормДокументов. Банковские реквизиты в счёт попадают изСтруктурнаяЕдиница— если в счёте «не те реквизиты», проверяйте банковский счёт организации, а не документ.- Статусы. Хотите автоматически проставлять «Оплачен» при поступлении денег — это логика вокруг регистров
ОплатаСчетов/СтатусыДокументов, в самом документе её нет. Точка расширения — обработка проведения документов оплаты или регламентное задание.- Договор.
ЗаполнитьДоговорПередЗаписьюподставит основной договор сам. Если у клиента «не тот договор» — смотрите основной договор контрагента и виды договоров («С покупателем» / «Полученный аванс»).- Цены. Подстановка цен завязана на тип цен договора/документа и
УправлениеЦенообразованием— настраивается через типы цен и регистр цен номенклатуры.
- Обработчика
ОбработкаПроведениянет — не ищите движения и не пытайтесь «починить проводки». Расширяйте черезПередЗаписью/ПриЗаписиили связанные документы.СуммаДокументавсегда пересчитывается вПередЗаписью— любые внешние присвоения этого реквизита будут затёрты при записи.- Условная обязательность частей построена на снятии реквизитов из
ПроверяемыеРеквизиты; если добавляете новую табличную часть-предмет продажи — не забудьте включить её в это условие.- Статусы оплаты/отгрузки — это не реквизиты документа, а регистр
СтатусыДокументов(Статус/ДополнительныйСтатус). Программно меняйте через процедуры статусов, а не через объект.- При загрузке через обмен
ПередЗаписьюраннийВозврат— пересчёт суммы и подстановка договора не сработают; учитывайте при отладке интеграций.
🔗 Связанные разделы
- realizaciya-tmz-i-uslug — отгрузка по счёту (реализация формирует проводки)
- schet-faktura-vydannyy — ЭСФ по продаже
- postuplenie-na-raschetnyy-schet — оплата от покупателя по счёту (безнал)
- prihodnyy-kassovyy-order — оплата от покупателя по счёту (касса)
🆕 Что нового
| Версия | Изменение | Тип |
|---|---|---|
| 3.0.72.1 | Первичное описание (на релизе 3.0.72.1) | 🆕 |