Работа с бухгалтерскими счетами очень похожа на работу с иерархическим справочником. Существует список счетов, имеющих стандартные атрибуты (Код, Наименование и др), и дополнительные реквизиты, задаваемые разработчиком. Реквизиты могут быть периодическими, т.е. хранить значение на определенную дату. Счета могут объединяться в группы, тогда счета, входящие в группу, называются субсчетами. Каждый счет обязательно принадлежит определенному плану счетов. В конфигурации может быть произвольное количество планов счетов, один из которых является основным.




Перебор счетов

1-й вариант:
Код 1c:
Счета                = СоздатьОбъект("Счет.ОснПлан");
              Счета.ВыбратьСчета();
              Пока Счета.ПолучитьСчет()=1 Цикл
              ....ТекСчет = Счета.ТекущийСчет();
              ....<действия с тек. счетом> 
              КонецЦикла;


2-й вариант:

Код 1c:
Счета = СоздатьОбъект("Счет"); //не указан план счетов
              Счета.ИспользоватьПланСчетов(ПланыСчетов.ОснПлан); //а вот                теперь указан
              Счета.ВыбратьСчета();
              Пока Счета.ПолучитьСчет()=1 Цикл
              ....ТекСчет = Счета.ТекущийСчет();
              ....<действия с тек. счетом> 
              КонецЦикла;




Атрибуты счета

Счет имеет следующие атрибуты:

Код
Полный код счета. Например, "10.1" или "62.5.1"


Наименование
Название счета. Например, "Материалы" или "Расч. с бюдж. по НДС"


Валютный

Признак ведения валютного учета. 1 - валютный учет ведется, 0 - не ведется

Количественный
Признак ведения количественного учета. 1 - количественный учет ведется, 0 - не ведется

Забалансовый

Признак забалансового счета. 1 - счет забалансовый, 0 - балансовый
Активный Тип остатка по счету. 1 - счет активный, 2 - счет пассивный, 3 - счет активно-пассивный

<реквизит>

Кроме стандартных вышеперечисленных реквизитов, разработчик может задать произвольное количество дополнительных реквизитов. Реквизиты могут быть периодическими, т.е. хранить значение на определенную дату. Например, может быть создан периодический реквизит "Ответственный" типа "Справочник.Сотрудники". Он будет показывать сотрудника, ответственного за ведение данного счета.



Работа с периодическими реквизитам счета не отличается от работы с периодическими реквизитами справочника.

Пример, прочитать и установить ответственного за ведение счета:
Код 1c:
Счета = СоздатьОбъект("Счет.ОснПлан");
              Счета.НайтиПоКоду("10.1");
              БылОтветственный = Счета.Ответственный.Получить(НекаяДата);
              Счета.Ответственный.Установить(НекаяДата, ВыбрСотрудник);
              Счета.Записать();


Можно установить дату выборки периодических реквизитов, тогда ниже уже нельзя применять методы Установить и Получить

Код 1c:
Счета = СоздатьОбъект("Счет.ОснПлан");
              Счета. ИспользоватьДату(НекаяДата);
              Счета.НайтиПоКоду("10.1");
              БылОтветственный = Счета.Ответственный; 
              Счета.Ответственный = ВыбрСотрудник; 
              Счета.Записать();



Счета и субсчета

Счета могут объединяться в группы. Счет, который является группой, называется "синтетический счет". Счет, который входит в группу, называется "субсчет". Для работы с такими счетами применяются следующие методы:

ЭтоГруппа()
Определяет, является ли данный счет группой (может иметь субсчета) или нет.
Возвращает: 1 - счет является группой; 0 - счет не является группой.

Пример, вывести все синтетические счета:

Код 1c:
Счета = СоздатьОбъект("Счет.ОснПлан");
                    Счета.ВыбратьСчета();
                    Пока Счета.ПолучитьСчет()=1 Цикл
                    ....Если Счета.ЭтоГруппа()=1 Тогда
                    ..........Сообщить(Счета.Код + " " + Счета.Наименование);
                    ....КонецЕсли; 
                    КонецЦикла;


ИспользоватьРодителя(<Счет>)

Устанавливает / выдает значение родителя (счета вышестоящего уровня), используемого для выборки счетов. Возвращает: значение типа ''Счет'' - текущее значение используемого родителя на момент до исполнения метода.
Пример, вывести все субсчета счета "10 Материалы":

Код 1c:
Счета = СоздатьОбъект("Счет.ОснПлан");
                    Сч10 = СчетПоКоду(10);
                    Счета.ИспользоватьРодителя(Сч10);
                    Счета.ВыбратьСчета();
                    Пока Счета.ПолучитьСчет()=1 Цикл
                    .....Сообщить(Счета.Код + " " + Счета.Наименование);
                    КонецЦикла;


Уровень()
Возвращает уровень вложенности текущего счета. (возвращает 1 - для счета верхнего уровня)

Пример, вывести все счета в виде дерева:
Код 1c:
Счета                      = СоздатьОбъект("Счет.ОснПлан");
                    Счета.ВыбратьСчета();
                    Пока Счета.ПолучитьСчет()=1 Цикл
отступ                        = "";
                      Для ном = 1 По Счета.Уровень() Цикл
                      ....отступ = отступ + " ";
                      КонецЦикла; 
 
                      Сообщить(отступ + Счета.Код + " " + Счета.Наименование);
КонецЦикла;


ПринадлежитГруппе(<Счет>)
Определяет, является ли текущий счет субсчетом для счета, указанного в качестве параметра метода. Проверка выполняется по всем вышестоящим уровням счета. Возвращает: 1 - текущий счет является субсчетом для счета, указанного в качестве параметра; 0 - не является.

Пример,
Код 1c:
Сч10                      = СчетПоКоду("10");
                    СубСч10 = СчетПоКоду("10.5.1");
                    Сообщить(СубСч10.ПринадлежитГруппе(Сч10));                      //метод вернет 1


Родитель(<НомерУровня>)
Возвращает счет вышестоящего уровня для данного счета. <НомерУровня> - число, которое определяет, какого уровня вышестоящий счет должен быть выдан. Если параметр не указан - выдается непосредственный родитель.
Например, для счета "10.5" этот метод вернет счет с кодом "10".


КодСубсчета()
Выдает код счета без кодов счетов вышестоящих уровней.
Возвращает: строковое значение - код счета без кодов счетов вышестоящих уровней.

Например, для счета "10.5" этот метод вернет строковое значение "5".


ВыборГруппы(<флаг>)
Этот метод утанавливает режим выборки групп. Данный метод может применяться как для позиционируемых объектов, созданных функцией ''СоздатьОбъект'', так и для элементов диалога типа ''Счет''. По умолчанию выбор группы разрешен, за исключением счетов дебета и кредита в проводках операции.

Код 1c:
ВыбрСчет.ВыборГруппы(1);                      //разрешить выбор группы
                    ВыбрСчет.ВыборГруппы(0); //запретить выбор группы





Виды субконто

Для ведения аналитического учета в 1С используется термин "субконто". Субконто в системе 1С:Предприятие называется объект аналитического учета. Термином «субконто» могут быть обозначены любые объекты аналитического учета: основные средства, нематериальные активы, материалы, организации, подотчетные лица, договоры, бюджеты. Видом субконто, в свою очередь, называется множество однотипных объектов аналитического учета. Например, вид субконто "Контрагенты" типа Справочник.Контрагенты, субконто - "Магазин Красная Заря".
В 1С у счета может быть до 5 прикрепленных видов субконто. Максимальное количество видов субконто задается в Конфигураторе, но не может превышать 5.

Пример, вывести все виды субконто, прикрепленные к заданному счету:
Код 1c:
Счета = СоздатьОбъект("Счет.Основной");
              Счета.НайтиПоКоду("10.1");
              Для Ном = 1 По Счета.КоличествоСубконто() Цикл
              .... Сообщить("Вид субконто " + Счета.ВидСубконто(Ном));
              КонецЦикла;




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

Код 1c:
Счета = СоздатьОбъект("Счет.Основной");
             Счета.Новый(1);                //у счета будут субсчета
              Счета.Код = "10";
              Счета.Наименование = "Материалы";
              Счета.Активный = 1; //активный
              Счета.Записать();
             Счета.Новый();
              Счета.Код = "10.1";
              Счета.Наименование = "Основные материалы";
              Счета.ВидСубконто(1,ВидыСубконто.Материалы);
              Счета.ВидСубконто(2,ВидыСубконто.Склады); 
              Счета.Записать();
Пример, изменить наименование счета:
Код 1c:
             Счета = СоздатьОбъект("Счет.Основной");
              Счета.НайтиПоКоду("10");
              Счета.Наименование = "Все материалы";
              Счета.Записать();

Пример, пометить на удаление все счета, введенные пользователем в режиме "Предприятие". Оставить только счета, заданные разработчиком в Конфигураторе.
Код 1c:
Счета = СоздатьОбъект("Счет.Основной");
              Счета.ВыбратьСчета();
              Пока Счета.ПолучитьСчет()=1 Цикл
              .....Если                Счета.ЗаданВКонфигурации()=0 Тогда 
              .........Счета.Удалить(0); //пометить на удаление
              .....КонецЕсли;
              КонецЦикла;
Пример, отменить все пометки на удаление:
Код 1c:
             Счета = СоздатьОбъект("Счет.Основной");
              Счета.ВыбратьСчета();
              Пока Счета.ПолучитьСчет()=1 Цикл
              .....Если                Счета.ПометкаУдаления()=1 Тогда 
              .........Счета.СнятьПометкуУдаления();
              .....КонецЕсли;
              КонецЦикла;




Другие полезные методы

Некоторые методы уже применялись в примерах, а теперь сведем их в таблицу:

НайтиПоКоду(код)
Этот метод выполняет поиск счета в плане счетов по коду счета, который передается методу в качестве параметра. Если счет найден, метод возвращает 1 и позиционирует объект на выбранном счете.


НайтиСчет(<счет>)

Этот метод выполняет поиск счета по значению, заданному параметром <Счет>, и позиционирует объект на выбранном счете.
Выбран() Этот метод возвращает число со значением 1 — если счет выбран (спозиционирован) или значение не пустое, 0 — если не выбран или значение пустое.

Выбрать()

Этот метод вызывает на экран диалог, содержащий план счетов. Пользователь должен интерактивно выбрать требуемый счет. Если счет выбран, метод возвращает 1 и позиционирует объект на выбранном счете.
Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.

СчетПоКоду(код[,плансчетов])

Глобальная системная функция. Возвращает счет по коду. Если план счетов не указан, тогда поиск осуществляется в основном плане счетов, заданном в Конфигураторе.


ОсновнойПланСчетов()

Глобальная системная функция. Возвращает план счетов, заданный в Конфигураторе в качестве основного.