Простая бухгалтерия. Глава 6

2.30 Документы. Общая часть.

План счетов создан, операции и проводки готовы, теперь можно и заняться документами. Давайте определим общие реквизиты документов и нумераторы.
Каждый документ относится к какой-либо фирме – это первый общий реквизит. Мы хотим к каждому документу приписать пояснение – это будет вторым общим реквизитом. Все документы у нас будут связаны с деньгами, а деньги обычно относятся к какой-нибудь валюте – третий общий реквизит – валюта. Валюта имеет по отношению к базовой валюте на каждую дату свой курс – еще два общих реквизита: дата курса и курс. Еще нас будет интересовать кто создал этот документ – и еще один общий реквизит автор.
Идентификатор Тип значения Дополнительно
ФирмаДокумента С.Фирмы О
Пояснение Строка 100  
Валюта С.Валюты  
ДатаКурса Дата  
Курс Число 6.2  
АвторДокумента Строка 50 О
"О" - отбор
Нумераторов у нас не будет. Каждый документ будет иметь свою независимую нумерацию.

2.31 Документ УчетНДС.

Первый и самый простой документ будет Учет НДС. Проводка по нему самая простая (Д 68.1 – К 19.3). Этим документом мы будем переводить сумму НДС за приобретенные комплектующие в зачет налогов. Документ будет относиться к специальному журналу "УчетНДС". Журнал обычный. В журнале заведем графу "Сумма", значение для нее будем брать Документ.УчетНДС.Сумма.
Идентификатор: УчетНДС
Журнал: УчетНДС
Нумератор: Нет       Периодичность: Год
Длина: 5         Тип: число
Уникальность: да       Автонумерация: да
Может являться основанием для документа любого вида?: нет
Проводить: да
Автоматическое удаление движений: да
Автоматическая нумерация строк: да
Бухгалтерский учет: да
Расчет: нет
Оперативный учет: нет
Создавать операцию: Всегда       Редактировать операцию: нет

Является основанием для

Вводится на основании

Шапка

Реквизит Описание ТипЗначения

Доп.

Сумма   Число 10.2

3, +

Таблица

Реквизит Описание ТипЗначения

Доп.

Создаем форму документа. Поля АвторДокумента и Курс сделаем недоступными. В полях валюта и ДатаКурса в формуле укажем процедуру Валюта().
Разместим реквизиты формы документа в более-менее приемлемом виде.

В модуле формы напишем:
Перем СтВалюта;
Перем СтДатаКурса;
Перем СтКурс;
//Переменные для пересчета суммы при изменении валюты документа
//==========================================================
Процедура ВводНового()
  АвторДокумента=СокрЛП(ИмяПользователя());
  ФирмаДокумента=Константа.ОснФирма;
  Валюта=Константа.ОснВалюта;
  ДатаКурса=ДатаДок;
  Курс=1;
// Заполняем значения по умолчанию
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
КонецПроцедуры
//==========================================================
Процедура ПриОткрытии()
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
  ПриЗаписиПерепроводить(1);
// При записи изменений перепроводить обязательно
КонецПроцедуры
//==========================================================
Процедура Валюта()
  КурсС=СтКурс;
  КратС=СтВалюта.Кратность;
  КурсН=Валюта.Курс.Получить(ДатаКурса);
  КратН=Валюта.Кратность;
  Коэфф=Окр((КурсС*КратН)/(КурсН*КратС),6,1);
// Переводим в валюту документа
  Курс=КурсН;
  Сумма=Окр(Сумма*Коэфф,2,1);
// Пересчитываем сумму
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
КонецПроцедуры

Перейдем к модулю документа. Учет мы будем вести в базовой валюте. Здесь мы напишем самый наипростейший вариант модуля проведения. В данном случае нам надо только перевести сумму с одного счета на другой одной проводкой. Напишем процедуру проведения:
Процедура ОбработкаПроведения()
  КурсД=Курс;
  КратД=Валюта.Кратность;
  КурсУ=Константа.ОснВалюта.Курс.Получить(ДатаДок);
  КратУ=Константа.ОснВалюта.Кратность;
  Коэфф=Окр((КурсД*КратУ)/(КурсУ*КратД),6,1); // переводим в валюту документа
  СуммаО=Окр(Сумма*Коэфф,2,1);
// Пересчитали сумму документа в сумму операции в базовую валюту
  ПривязыватьСтроку(0);
// Следующая за этой командой новая проводка к строке документа не
// привязывается
  Операция.НоваяПроводка();
// Создаем проводку (простую) по операции
  Операция.Дебет.Счет = СчетПоКоду("68.1",ПланыСчетов.Наш);
  Операция.Кредит.Счет = СчетПоКоду("19.3",ПланыСчетов.Наш);
// Указали корреспонденцию проводки
  Операция.Сумма = СуммаО;
// Сумма проводки
  Операция.Фирма = ФирмаДокумента;
  Операция.Комментарий = "Учет НДС за приобретенные комплектующие";
  Операция.НомерЖурнала = " ";
// Дополнительные сведения по проводке
  Операция.Содержание = "Учет НДС";
  Операция.СуммаОперации = СуммаО;
  Операция.Автор = СокрЛП(ИмяПользователя());
// Дополнительные сведения по операции
  Операция.Записать();
КонецПроцедуры

2.32 Работа с документом УчетНДС.

Документ создан. Давайте его проверим. Входим в 1С:Предприятие и создаем новый документ "Учет НДС" на сумму 1000 тугриков (для примера), затем меняем валюту на рубли и получаем 22.77 рубля (при курсе 22.77 руб. за 1000 тугриков) все сходится, вернем тугрики. Сохраним и проведем документ. Смотрим журнал операций (Меню Действия команда "Перейти в журнал операций"). Сумма операции 22.77 (при сумме документа 1000) – верно. Проверяем проводку – тоже все верно. Документ написан правильно. Удалим этот документ, чтобы не мешал.

2.33 Документ ПриходнаяНакладная.

По приходной накладной мы будем получать комплектующие от поставщиков. Проводка по этому документу сложнее (Д 10.2 – К 60, Д 19.3 – К 60). В данном документе нас интересует следующее: кто поставил нам комплектующие, на какой склад мы их приняли, что конкретно пришло, в каком количестве, по какой цене без НДС, на какую сумму. Сведем все в таблицу:
Идентификатор: ПриходнаяНакладная
Журнал: ПриходныеНакладные
Нумератор: Нет       Периодичность: Год
Длина: 5         Тип: число
Уникальность: да       Автонумерация: да
Может являться основанием для документа любого вида?: нет
Проводить: да
Автоматическое удаление движений: да
Автоматическая нумерация строк: да
Бухгалтерский учет: да
Расчет: нет
Оперативный учет: нет
Создавать операцию: Всегда       Редактировать операцию: нет

Является основанием для

Вводится на основании

Шапка

Реквизит Описание ТипЗначения

Доп.

Поставщик   С.Контрагенты  
Склад   С.Склады  

Таблица

Реквизит Описание ТипЗначения

Доп.

Товар   С.Комплектующие  
Кол   Число 5.0 +, И
ЦенаБНДС Цена без НДС Число 7.2 +
ЦенаСНДС Цена с НДС Число 7.2 +
СуммаБНДС Сумма без НДС Число 13.2 +, И
СуммаНДС Сумма НДС Число 13.2 +, И
СуммаСНДС Сумма с НДС Число 13.2 +, И
Отредактируем журнал ПриходныеНакладные. Добавим в него две графы – Кол из реквизита таблицы Кол, и Сумма из реквизита СуммаСНДС. Настроим форму журнала.
Перейдем к форме документа. Создаем ее. Поля АвторДокумента и Курс делаем недоступными. В полях ввода Валюта и ДатаКурса пишем формулу Валюта(). Поля табличной части СуммаБНДС, СуммаНДС, СуммаСНДС делаем недоступными. В поле Товар пишем формулу Товар(), в поле Кол – Кол(), в поле ЦенаБНДС – ЦенаБНДС(), в поле ЦенаСНДС – ЦенаСНДС(). Под таблицей добавим текст с формулой для вычисления суммы по колонке Итог("Кол"), Итог("СуммаБНДС"), Итог("СуммаБНДС"). В модуле формы документа пишем:
Перем СтВалюта;
Перем СтДатаКурса;
Перем СтКурс;
//==========================================================
Процедура ВводНового()
  АвторДокумента=СокрЛП(ИмяПользователя());
  ФирмаДокумента=Константа.ОснФирма;
  Валюта=Константа.ОснВалюта;
  ДатаКурса=ДатаДок;
  Курс=1;
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
  Поставщик = Константа.ОснПоставщик;
КонецПроцедуры
//==========================================================
Процедура ПриОткрытии()
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
  ПриЗаписиПерепроводить(1);
КонецПроцедуры
//==========================================================
Процедура Валюта()
// При смене валюты, либо даты курса
  КурсС=СтКурс;
  КратС=СтВалюта.Кратность;
  КурсН=Валюта.Курс.Получить(ДатаКурса);
  КратН=Валюта.Кратность;
  Коэфф=Окр((КурсС*КратН)/(КурсН*КратС),6,1); // переводим в валюту документа
  Курс=КурсН;
  ВыбратьСтроки();
  Пока ПолучитьСтроку()=1 Цикл
// Обходим строки
    ЦенаБНДС=Окр(ЦенаБНДС*Коэфф,2,1);
    ЦенаСНДС=Окр(ЦенаСНДС*Коэфф,2,1);
    СуммаБНДС=Окр(ЦенаБНДС*Кол,2,1);
    СуммаСНДС=Окр(ЦенаСНДС*Кол,2,1);
    СуммаНДС=СуммаСНДС-СуммаБНДС;
  КонецЦикла;
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
КонецПроцедуры
//==========================================================
Процедура Товар()
// Изменили товар, пересчитаем цену с НДС
  ЦенаСНДС=Окр(ЦенаБНДС*(1+(Товар.НДС.Значение/100)),2,1);
  СуммаСНДС=Окр(ЦенаСНДС*Кол,2,1);
  СуммаНДС=СуммаСНДС-СуммаБНДС;
КонецПроцедуры
//==========================================================
Процедура Кол()
  СуммаБНДС=Окр(ЦенаБНДС*Кол,2,1);
  СуммаСНДС=Окр(ЦенаСНДС*Кол,2,1);
  СуммаНДС=СуммаСНДС-СуммаБНДС;
КонецПроцедуры
//==========================================================
Процедура ЦенаБНДС()
  ЦенаСНДС=Окр(ЦенаБНДС*(1+(Товар.НДС.Значение/100)),2,1);
// Определим цену с НДС по цене без НДС
  СуммаБНДС=Окр(ЦенаБНДС*Кол,2,1);
  СуммаСНДС=Окр(ЦенаСНДС*Кол,2,1);
  СуммаНДС=СуммаСНДС-СуммаБНДС;
КонецПроцедуры
//==========================================================
Процедура ЦенаСНДС()
  ЦенаБНДС=Окр(ЦенаСНДС*(1-(Товар.НДС.ОбрЗначение/100)),2,1);
// Определим цену без НДС по цене с НДС
  СуммаБНДС=Окр(ЦенаБНДС*Кол,2,1);
  СуммаСНДС=Окр(ЦенаСНДС*Кол,2,1);
  СуммаНДС=СуммаСНДС-СуммаБНДС;
КонецПроцедуры

Теперь переходим к модулю документа. В этом документе наша операция будет уже посложней, в одной операции будет объединено несколько проводок, причем одна проводка будет относиться ко всему документу целиком, а остальные будут формироваться по строкам документа. Пишем следующую процедуру
Процедура ОбработкаПроведения()
  Если Склад.Выбран()=0 Тогда
// Если склад не указан
    Сообщить("Документ Приходная накладная №"+НомерДок+" от "+ДатаДок+"
    |не проведен.
    |Не выбран склад получатель");
// Делаем сообщение
    НеПроводитьДокумент();
// Указываем, что документ проводить не надо
    Возврат;
// Выходим из процедуры
  КонецЕсли;
  Если Поставщик.Выбран()=0 Тогда
    Сообщить("Документ Приходная накладная №"+НомерДок+" от "+ДатаДок+"
    |не проведен.
    |Не выбран поставщик");
    НеПроводитьДокумент();
    Возврат;
  КонецЕсли;
  КурсД=Курс;
  КратД=Валюта.Кратность;
  КурсУ=Константа.ОснВалюта.Курс.Получить(ДатаДок);
  КратУ=Константа.ОснВалюта.Кратность;
  Коэфф=Окр((КурсД*КратУ)/(КурсУ*КратД),6,1);
// Переводим в валюту документа
  ВыбратьСтроки();
  Пока ПолучитьСтроку() = 1 Цикл
// Обходим строки
    ПривязыватьСтроку(НомерСтроки);
// Здесь мы хотим указать какая строка документа вызвала эту проводку
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("10.2",ПланыСчетов.Наш);
    Операция.Дебет.МестоХранения = Склад;
    Операция.Дебет.Комплектующее = Товар;
    Операция.Дебет.ПриходнаяНакладная = ТекущийДокумент();
    Операция.Кредит.Счет = СчетПоКоду("60",ПланыСчетов.Наш);
    Операция.Кредит.Контрагент = Поставщик;
    Операция.Кредит.ПриходнаяНакладная = ТекущийДокумент();
    Операция.Количество = Кол;
    Операция.Сумма = Окр(СуммаБНДС*Коэфф,2,1);
    Операция.Фирма = ФирмаДокумента;
    Операция.Комментарий = "Поступление комплектующих";
    Операция.НомерЖурнала = "6";
  КонецЦикла;
  ПривязыватьСтроку(0);
// Эта проводка по всему документу вцелом
  Операция.НоваяПроводка();
  Операция.Дебет.Счет = СчетПоКоду("19.3",ПланыСчетов.Наш);
  Операция.Кредит.Счет = СчетПоКоду("60",ПланыСчетов.Наш);
  Операция.Кредит.Контрагент = Поставщик;
  Операция.Кредит.ПриходнаяНакладная = ТекущийДокумент();
  Операция.Сумма = Окр(Итог("СуммаНДС")*Коэфф,2,1);
  Операция.Фирма = ФирмаДокумента;
  Операция.Комментарий = "Учет НДС по поступ. комплектующим";
  Операция.НомерЖурнала = "6";
  Операция.Содержание = "Поступление комплектующих";
  Операция.СуммаОперации = Окр(Итог("СуммаСНДС")*Коэфф,2,1);
  Операция.Автор = АвторДокумента;
  Операция.Записать();
КонецПроцедуры

Теперь, когда создан документ "Приходная накладная", нам надо внести соответствующую поправку в Субконто ПриходнаяНакладная. Укажем в этом Субконто тип как Д.ПриходнаяНакладная.

2.34 Работа с документом ПриходнаяНакладная.

Документ "Приходная накладная" создан, в интерфейс внесен сам документ и его журнал. Давайте попробуем поработать с этим документом. Войдем в 1С:Предприятие и создадим Приходную накладную №1 от 02.01.2001.

Цены попытаемся вводить как с НДС, так и без НДС. Попробуем менять валюту. И наконец, проведем этот документ и посмотрим на получившуюся операцию и проводки. Создана одна операция на сумму 270 рублей и четыре проводки, три по дебету 10-ого счета на сумму 75, 100 и 50 рублей, и одна по дебету 19-ого счета на сумму 45 рублей. Документ попробуем проводить с разной валютой.
Используем теперь документ "Учет НДС" для списания с налогов суммы уплаченного поставщику НДС за купленные нами комплектующие. Вводим УчетНДС №1 от 03.01.2001. Сумма – 45 рублей. Проводим. Смотрим на операцию и проводку. Посмотрим как действует журнал проводок (меню Действия, команда "Перейти в журнал проводок"). Попробуем разделить по журналам нашим флажком. Все работает.

2.35 Документ РасходныйОрдер.

Документ "Расходный ордер" на первый взгляд совершенно простой, всего одна проводка (Д 60 – К 50.1). Но мы должны этим документом погасить задолженность конкретному контрагенту по конкретной накладной (если она указана), а если что останется – другие накладные, начиная с более ранних. В ином случае мы будем погашать наиболее раннюю непогашенную приходную накладную. А если накладная указана, но она уже погашена, будем действовать по второму варианту.
В документе нам надо знать кому погашать долг, по какому документу-основанию, на какую сумму.
Этот документ мы будем держать в специальном журнале – "Кассовые", кроме него туда, со временем, попадет и "Приходный ордер".
Идентификатор: РасходныйОрдер
Журнал: Кассовые
Нумератор: Нет       Периодичность: Год
Длина: 5         Тип: число
Уникальность: да       Автонумерация: да
Может являться основанием для документа любого вида?: нет
Проводить: да
Автоматическое удаление движений: да
Автоматическая нумерация строк: да
Бухгалтерский учет: да
Расчет: нет
Оперативный учет: нет
Создавать операцию: Всегда     Редактировать операцию: нет

Является основанием для

Вводится на основании

Шапка

Реквизит Описание ТипЗначения

Доп.

Получатель кому С.Контрагенты  
Основание за что платим Д.ПриходнаяНакладная  
Сумма сколько Число 12.2 3, +

Таблица

Реквизит Описание ТипЗначения

Доп.

В журнале "Кассовые" заведем графу таблицы – Сумма из реквизита документа "РасходныйОрдер" Сумма. Создадим форму журнала.

Создаем форму документа. Поля АвторДокумента, Курс, Основание делаем недоступными. В поля реквизитов Валюта и ДатаКурса вставляем формулу Валюта(), в поле Получатель формула Получатель(), добавляем две кнопки, первая [...] с формулой Основание(), вторая [Х] с формулой Основание="".
В модуле формы пишем:
Перем СтВалюта;
Перем СтДатаКурса;
Перем СтКурс;
Перем СтПолучатель;
//==========================================================
Процедура ВводНового()
  АвторДокумента=СокрЛП(ИмяПользователя());
  ФирмаДокумента=Константа.ОснФирма;
  Валюта=Константа.ОснВалюта;
  ДатаКурса=ДатаДок;
  Курс=1;
  Получатель=Константа.ОснПоставщик;
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
  СтПолучатель=Получатель;
КонецПроцедуры
// Здесь ничего интересного
//==========================================================
Процедура ПриОткрытии()
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
  СтПолучатель=Получатель;
  ПриЗаписиПерепроводить(1);
КонецПроцедуры
// И здесь ничего интересного
//==========================================================
Процедура Валюта()
  КурсС=СтКурс;
  КратС=СтВалюта.Кратность;
  КурсН=Валюта.Курс.Получить(ДатаКурса);
  КратН=Валюта.Кратность;
  Коэфф=Окр((КурсС*КратН)/(КурсН*КратС),6,1); // переводим в валюту документа
  Курс=КурсН;
  Сумма=Окр(Сумма*Коэфф,2,1);
  СтВалюта=Валюта;
  СтДатаКурса=ДатаКурса;
  СтКурс=Курс;
КонецПроцедуры
// Это уже было
//==========================================================
Процедура Получатель()
  Если СтПолучатель<>Получатель Тогда
// Если мы изменили Получателя
    Основание="";
// поле с Основанием очищаем, документ-то к другому пока относится
    СтПолучатель=Получатель;
  КонецЕсли;
КонецПроцедуры
//==========================================================
Процедура Основание()
  ТабЗн=СоздатьОбъект("ТаблицаЗначений");
// Создаем динамическую 2-х мерную таблицу
  ТабЗн.НоваяКолонка("Док","Документ.ПриходнаяНакладная",,,"ПрихНакл",18);
  ТабЗн.НоваяКолонка("Нум","Число",6,0,"Номер",6);
  ТабЗн.НоваяКолонка("Дат","Дата",10,0,"Дата",10);
  ТабЗн.НоваяКолонка("Сум","Число",14,2,"Сумма",14);
// Определяем набор колонок
  ТабЗн.ВидимостьКолонки("1",0);
// Колонка №1 невидима
  БухИтоги=СоздатьОбъект("БухгалтерскиеИтоги");
// Создаем динамическую выборку по содержимому счетов
  БухИтоги.ИспользоватьПланСчетов(ПланыСчетов.Наш);
// Указываем конкретный план счетов
  БухИтоги.ИспользоватьРазделительУчета(Константа.ОснФирма);
// Указываем конкретную фирму
  БухИтоги.ИспользоватьСубконто(ВидыСубконто.Контрагент,Получатель,2);
// Нам нужны итоги по конкретному контрагенту
  БухИтоги.ИспользоватьСубконто(ВидыСубконто.ПриходнаяНакладная,,1);
// По всем его Приходным накладным
  БухИтоги.ВыполнитьЗапрос(,ДатаДок,"60");
// Сальдо нужно на конкретную дату по 60-му счету
  БухИтоги.ВыбратьСубконто(1);
// Выбираем контрагентов
  Пока БухИтоги.ПолучитьСубконто(1)=1 Цикл
// Получаем очередного контрагента, в нашем случае единственного
    БухИтоги.ВыбратьСубконто(2);
// Выбираем документы (недооплаченные)
// Субконто в перечне ИспользоватьСубконто() стоит вторым
// значит ВыбратьСубконто(2)
    Пока БухИтоги.ПолучитьСубконто(2)=1 Цикл
// Получаем очередной документ
      ТДок=БухИтоги.Субконто(2);
// Нас интересует второе по упоминанию в перечне Субконто
// указанных командой ИспользоватьСубконто() - документ
      КреС=БухИтоги.СКК(1);
// Нам нужно сальдо кредитовое (счет пассивный)
// на конец периода запроса по сумме (1)
      ТабЗн.НоваяСтрока();
// Создаем в динамической таблице пустую строку
      ТабЗн.Док=ТДок;
      ТабЗн.Нум=ТДок.НомерДок;
      ТабЗн.Дат=ТДок.ДатаДок;
      ТабЗн.Сум=КреС;
// Заполняем ее
    КонецЦикла;
  КонецЦикла;
  ТабЗн.Сортировать("1+");
// Сортируем строки в динамической таблице по дате документа
  Стр=0;
// Инициализируем переменную
  Рез=ТабЗн.ВыбратьСтроку(Стр,"Выберите приходную накладную");
// Предлагаем выбрать документ из списка
  Если Рез=1 Тогда
// Если документ выбран
    Основание=ТабЗн.ПолучитьЗначение(Стр,"Док");
// Определяем, что выбрано и ставим его как Основание
  КонецЕсли;
КонецПроцедуры
// Все

Здесь, в последней процедуре мы воспользовались новым для нас объектом – Бухгалтерскими итогами. Это тот самый механизм, на котором по счетам хранятся результаты всех проводок по всем фирмам и всем счетам. Он аналогичен, во многом, регистрам Оперативного учета. Или они ему аналогичны...
Займемся теперь процедурой проведения. Алгоритм действия, был описан нами в начале главы. Здесь мы впервые в этой конфигурации в процедуре проведения задействуем механизм партионного учета. Наша задача несколько упрощается тем, что в документе нет многострочной части. Попробуем реализовать алгоритм списания:
Процедура ОбработкаПроведения()
  Если Получатель.Выбран()=0 Тогда
    Сообщить("Документ Расходный ордер №"+НомерДок+" от "+ДатаДок+"
    |не проведен.
    |Не выбран получатель");
    НеПроводитьДокумент();
    Возврат;
  КонецЕсли;
  КурсД=Курс;
  КратД=Валюта.Кратность;
  КурсУ=Константа.ОснВалюта.Курс.Получить(ДатаДок);
  КратУ=Константа.ОснВалюта.Кратность;
  Коэфф=Окр((КурсД*КратУ)/(КурсУ*КратД),6,1);
// переводим в валюту документа
  СуммаОст=Окр(Сумма*Коэфф,2,1);
  БухИтоги=СоздатьОбъект("БухгалтерскиеИтоги");
  БухИтоги.ИспользоватьПланСчетов(ПланыСчетов.Наш);
  БухИтоги.ИспользоватьРазделительУчета(ФирмаДокумента);
  Если Основание.Выбран()=1 Тогда
// Указано за какую поставку платить
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Контрагент,Получатель,2);
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.ПриходнаяНакладная,
    Основание,2);
// Нас интересует конкретная накладная
    БухИтоги.ВыполнитьЗапрос(,ДатаДок,"60");
    БухИтоги.ВыбратьСубконто(1);
    Пока БухИтоги.ПолучитьСубконто(1)=1 Цикл
      БухИтоги.ВыбратьСубконто(2);
      Пока БухИтоги.ПолучитьСубконто(2)=1 Цикл
        КреС=БухИтоги.СКК(1);
// Смотрим, сколько недоплачено по этому документу
        Если КреС>0 Тогда
// Недоплачено
          ПривязыватьСтроку(0);
          Операция.НоваяПроводка();
// Создаем проводку
          Операция.Дебет.Счет = СчетПоКоду("60",ПланыСчетов.Наш);
          Операция.Кредит.Счет = СчетПоКоду("50.1",ПланыСчетов.Наш);
          Операция.Дебет.Контрагент = Получатель;
          Операция.Дебет.ПриходнаяНакладная = Основание;
          Операция.Фирма = ФирмаДокумента;
          Операция.Комментарий = "Погашение долга перед поставщиком";
          Операция.НомерЖурнала = "1";
          Если СуммаОст>=КреС Тогда
// Если оплачено больше чем недоплачено
            Операция.Сумма = КреС;
          Иначе
// недоплачено больше чем оплачено этим документом
            Операция.Сумма = СуммаОст;
          КонецЕсли;
          СуммаОст=СуммаОст-КреС;
// Сколько осталось нераспределенной оплаты
        КонецЕсли;
      КонецЦикла;
    КонецЦикла;
  КонецЕсли;
  Если СуммаОст>0 Тогда
// Есть что распределять
    ТабЗн=СоздатьОбъект("ТаблицаЗначений");
    ТабЗн.НоваяКолонка("Док","Документ.ПриходнаяНакладная");
    ТабЗн.НоваяКолонка("Сум","Число",14,2);
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Контрагент,Получатель,2);
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.ПриходнаяНакладная,,1);
// Нас интересуют все накладные
    БухИтоги.ВыполнитьЗапрос(,ДатаДок,"60");
    БухИтоги.ВыбратьСубконто(1);
    Пока БухИтоги.ПолучитьСубконто(1)=1 Цикл
      БухИтоги.ВыбратьСубконто(2);
      Пока БухИтоги.ПолучитьСубконто(2)=1 Цикл
        ТДок=БухИтоги.Субконто(2);
        Если ТДок<>Основание Тогда
// Документ Основание мы уже оплатили один раз
          КреС=БухИтоги.СКК(1);
          ТабЗн.НоваяСтрока();
          ТабЗн.Док=ТДок;
          ТабЗн.Сум=КреС;
        КонецЕсли;
      КонецЦикла;
    КонецЦикла;
    ТабЗн.Сортировать("1+");
    ТабЗн.ВыбратьСтроки();
    Пока ТабЗн.ПолучитьСтроку()=1 Цикл
      СумД=ТабЗн.Сум;
      ТДок=ТабЗн.Док;
      Если СуммаОст>СумД Тогда
// Нераспределенная оплата пока больше недоплаченной суммы
// текущего документа
        ПривязыватьСтроку(0);
        Операция.НоваяПроводка();
        Операция.Дебет.Счет = СчетПоКоду("60",ПланыСчетов.Наш);
        Операция.Кредит.Счет = СчетПоКоду("50.1",ПланыСчетов.Наш);
        Операция.Дебет.Контрагент = Получатель;
        Операция.Дебет.ПриходнаяНакладная = ТДок;
        Операция.Фирма = ФирмаДокумента;
        Операция.Комментарий = "Погашение долга перед поставщиком";
        Операция.НомерЖурнала = "1";
        Операция.Сумма = СумД;
        СуммаОст=СуммаОст-СумД;
// Уменьшаем остаток на сумму документа
      Иначе
// Недоплаченная сумма текущего документа меньше нераспределенной оплаты
        ПривязыватьСтроку(0);
        Операция.НоваяПроводка();
        Операция.Дебет.Счет = СчетПоКоду("60",ПланыСчетов.Наш);
        Операция.Кредит.Счет = СчетПоКоду("50.1",ПланыСчетов.Наш);
        Операция.Дебет.Контрагент = Получатель;
        Операция.Дебет.ПриходнаяНакладная = ТДок;
        Операция.Фирма = ФирмаДокумента;
        Операция.Комментарий = "Погашение долга перед поставщиком";
        Операция.НомерЖурнала = "1";
        Операция.Сумма = СуммаОст;
        Прервать;
// Больше денег нет!
      КонецЕсли;
    КонецЦикла;
  КонецЕсли;
  Операция.Содержание = "Оплата комплектующих";
  Операция.СуммаОперации = Окр(Сумма*Коэфф,2,1);
  Операция.Автор = АвторДокумента;
  Операция.Записать();
КонецПроцедуры

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

2.36 Отчет "Счет60".

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

  1. Создаем новый отчет "Счет60";
  2. Добавляем поле ввода ВыбНачПериода типа Дата;
  3. Добавляем поле ввода ВыбКонПериода типа Дата;
  4. Добавляем кнопку [...] с Формулой: ВвестиПериод(ВыбНачПериода,ВыбКонПериода);
  5. Добавляем текст с формулой: ПериодСтр(ВыбНачПериода,ВыбКонПериода);
  6. В модуле формы пишем:
Процедура ПриОткрытии()
// Установим начальные значения диапазона дат
  ВыбНачПериода = НачалоПериодаБИ();
  ВыбКонПериода = КонецПериодаБИ();
КонецПроцедуры
//==========================================================
Процедура Сформировать()
  Таб = СоздатьОбъект("Таблица");
  Таб.ИсходнаяТаблица("Таблица");
  Ит = СоздатьОбъект("БухгалтерскиеИтоги");
  Ит.ИспользоватьПланСчетов(ПланыСчетов.Наш);
  Ит.ИспользоватьРазделительУчета(Константа.ОснФирма);
  Ит.ИспользоватьСубконто(ВидыСубконто.Контрагент,,1);
  Ит.ИспользоватьСубконто(ВидыСубконто.ПриходнаяНакладная,,1);
  Ит.ВыполнитьЗапрос(ВыбНачПериода,ВыбКонПериода,"60",,, 1,"Операция","С");
  Таб.ВывестиСекцию("Шапка");
  ИтНачКред=0;
  ИтКонКред=0;
  ИтОбоКред=0;
  Ит.ВыбратьСубконто(1);
  Пока Ит.ПолучитьСубконто(1)=1 Цикл
    Контра=Ит.Субконто(1);
    НачКред=Ит.СНК(1);
    КонКред=Ит.СКК(1);
    ОбоКред=КонКред-НачКред;
    Таб.ВывестиСекцию("Контра");
    ИтНачКред=ИтНачКред+НачКред;
    ИтКонКред=ИтКонКред+КонКред;
    ИтОбоКред=ИтОбоКред+ОбоКред;
    Ит.ВыбратьСубконто(2);
    Пока Ит.ПолучитьСубконто(2)=1 Цикл
      Дока=Ит.Субконто(2);
      НачКред=Ит.СНК(1);
      КонКред=Ит.СКК(1);
      ОбоКред=КонКред-НачКред;
      Таб.ВывестиСекцию("Дока");
    КонецЦикла;
  КонецЦикла;
// Здесь ничего нового
  Таб.ВывестиСекцию("Подвал");
  Таб.ТолькоПросмотр(1);
  Таб.ПараметрыСтраницы(2);
// Ориентация Ландшафт
  Таб.Показать("Сформировать","");
КонецПроцедуры
  1. Соорудим шаблон таблицы
Попробуем в 1С:Предприятии наш новый отчет.

<< Предыдущая глава Содержание Следующая глава>>


НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution