Учебник 1С...

ОСНОВЫ 1С

Конфигуратор

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

Объекты, атрибуты и методы

Самое главное понятие 1С -- это "объект". Объект -- это элемент реального мира. Объектом может быть все что угодно: компьютер, облако, кошка... Но нас интересуют только те объекты, которые имеются в офисной деятельности предприятия: документы, отчеты, справочники... Программа для 1С представляется как совокупность объектов, взаимосвязанных между собой, т.е. конфигурация объектов. Например, документ "Приказ о приеме на работу", справочник "Сотрудники", отчет "Сотрудники, принятые за период".

У объектов имеются некоторые атрибуты (свойства, реквизиты). Например, сотрудник имеет фамилию, имя, отчество, оклад, табельный номер. Приказ о приеме имеет номер и дату. Набор свойств объекта задается разработчиком.

Также объекты имеют определенные методы (процедуры и функции). Например, вы можете выбрать всех сотрудников с помощью метода справочника ВыбратьЭлементы(), или можно сохранить документ методом Записать().

Встроенный язык

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

Модули, процедуры и функции

Вся конфигурация, как вы уже наверное заметили, состоит из модулей. Это могут быть модули документов или модули отчетов или другие модули. Модули состоят из процедур и функций. Процедура -- это небольшая программа для выполнения определенной задачи. Функция отличается от процедуры, только тем, что имеет результат. Говорят, "функция возвращает результат". Например, модуль "Приказа о приеме на работу" может иметь следующие процедуры ПроверитьПравильность( ) и НапечататьПриказ( ).

Глобальный модуль

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

1C:TOP-100 Рейтинг ресурсов 1С


Бухгалтерские итоги

Механизм бухгалтерских итогов, поддерживаемый компонентой «Бухгалтерский учет» системы 1С:Предприятие релизует хранение накопленных итогов для обеспечения быстрого обращения к ним при составлении отчетов и выполнения различных вычислений.

Хранение итогов поддерживается системой с детализацией до месяца. Кроме того, хранятся не все возможные итоги, а те, обращение к которым выполняется наиболее часто — это остатки и обороты по счетам с детализацией по объектам аналитики (субконто), а также обороты между счетам (без учета аналитики). Такие итоги называются основными. Обращение к этим итогам выполняется системой непосредственно. Для получения других итогов (с детализацией меньше месяца, с получением оборотов между различными объектами аналитики, а также сложных выборок) требуется выполнение предварительных действий — временного расчета или запроса.

Объект «БухгалтерскиеИтоги» может работать в 3-х различных режимах:

  • работа с основными итогами;
  • работа с временными итогами;
  • работа в режиме запроса;

При создании объекта он работает в режиме работы с основными итогами. Переключение его в остальные режимы выполняется методами Рассчитать и ВыполнитьЗапрос. В зависимости от режима изменяется состав и использование атрибутов и методов объекта.

Общие свойства

Работа объекта «БухгалтерскиеИтоги» во всех режимах имеет некоторые общие особенности. Значение типа «Счет» в параметры методов объекта может передаваться в виде строки, содержащей код счета. При ведении учета по нескольким планам счетов или с использованием разделителя учета на получение итогов в различных режимах запроса влияют установки методов ИспользоватьПланСчетов и ИспользоватьРазделительУчета.

ИспользоватьПланСчетов(<ПланСчетов>)

Метод ИспользоватьПланСчетов задает план счетов для метода получения итогов и ВыполнитьЗапрос для тех случаев, когда конкретный счет не указан или задается строкой символов.

Если план счетов не установлен функцией ИспользоватьПланСчетов, будет использоваться основной план счетов, заданный в метаданных.

Пример.
БухИтоги.ИспользоватьПланСчетов(ПланыСчетов.Рабочий);

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

Метод ИспользоватьРазделительУчета задает значения разделителя учета для методов получения итогов и ВыполнитьЗапрос. Применение данного метода имеет смысл только если используется разделителель учета.

Пример.
БухИтоги.ИспользоватьРазделительУчета (Константа.ОснФирма);

Основные бухгалтерские итоги

Основными итогами называются остатки и обороты по счетам и объектам аналитического учета, а также обороты между счетами за любой рассчитанный период с детализацией до месяца.

В пункте меню «Управление бухгалтерскими итогами» устанавливается последний рассчитанный период. В режиме работы с основными итогами обращение может выполняться только к итогам по рассчитанный период включительно. В этом режиме работают два вида методов — получение остатков и оборотов, а также установка периода за который выдаются итоги. По умолчанию используется период, выбранный пользователем интерактивно через меню Сервис => Параметры => Бухгалтерские итоги.

Остатки и обороты по счетам

Метод | Описание
СНД | дебетовое сальдо по счету на начало периода
СНК | кредитовое сальдо по счету на начало периода
СКД | дебетовое сальдо по счету на конец периода
СКК | кредитовое сальдо по счету на конец периода
ДО | дебетовый оборот по счету за период
КО | кредитовый оборот по счету за период

Синтаксис (у всех одинаковый): СНД (<Счет>, <ТипСуммы>, <Валюта>, <Субконто1>...)

Параметр
Описание
<Счет> | Значение типа «Счет» — счет расчета итогов. Может использоваться строка — код счета.
<ТипСуммы>

Необязательный параметр. Число или строка — тип возвращаемой суммы. Может принимать одно из следующих значений:

  • 1 ("С") — сумма;
  • 2 ("В") — валютная сумма;
  • 3 ("К") — количество.

Если параметр не указан, метод возвращает сумму.

<Валюта> | Необязательный параметр. Значение типа «Справочник.Валюты». Если параметр не указан итоги выдаются без учета валюты. Если указана валюта, то данные выдаются по конкретной валюте. Валютная сумма может выдаваться только по конкретной валюте.
<Субконто1>
<Субконто2>
...… 		Необязательный параметр. Значения субконто. Их количество зависит от настройки субконто для данного счета. Если параметры не указаны, итоги выдаются без учета аналитики.

Пример

БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги);

ОстатокНаСчетеНаНачалоПериода = БухИтоги.СНД("51");
ОстатокНаСчетеНаКонецПериода = БухИтоги.СКД("51");

ПриходГвоздейНаСкладЗаПериод = БухИтоги.ДО("10.1",3,,МатериалГвозди,ЦентрСклад);

Обороты между счетами

ОБ(<СчетДеб>, <СчетКред>, <ТипСуммы>, <Валюта>)

Метод возвращает оборот с дебета счета <СчетДеб> в кредит счета <СчетКред>.

Пример

КассаБанк = БухИтоги.ОБ("50", "51");

Развернутое сальдо по субсчетам

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

Метод | Описание
СНДР | дебетовое развернутое сальдо по субсчетам на начало периода
СНКР | кредитовое развернутое сальдо по субсчетам на начало периода
СКДР | дебетовое развернутое сальдо по субсчетам на конец периода
СККР | кредитовое развернутое сальдо по субсчетам на конец периода

Пример

* Для помещения в бухгалтерский баланс вычисляется развернутое сальдо по 68 счету, учет на котором ведется на субсчетах. Дебетовая составляющая должна попасть в актив баланса, кредитовая составляющая — в пассив.

БухИтоги = СоздатьОбъект(
        "БухгалтерскиеИтоги);
ДебСальдоНаНач = БухИтоги.СНДР("68");
ДебСальдоНаКон = БухИтоги.СКДР("68");
КрСальдоНаНач = БухИтоги.СНКР("68");
КрСальдоНаКон = БухИтоги.СККР("68");

Развернутое сальдо по субконто

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

Если аналитический учет по счету ведется по двум и более субконто, то для развернутого сальдо параметр <ТипФильтра> устанавливает участие данног вида субконто в получении развернутого сальдо. В зависимости от значения этого параметра данное субконто может участвовать в «развороте» остатка, или накладывать дополнительное ограничение (отбирать) на анализируемые остатки, или никак не влиять на результат функции.

Метод | Описание
СНДРС | дебетовое развернутое сальдо по субконто на начало периода
СНКРС | кредитовое развернутое сальдо по субконто на начало периода
СКДРС | дебетовое развернутое сальдо по субконто на конец периода
СККРС | кредитовое развернутое сальдо по субконто на конец периода

Синтаксис (у всех одинаковый):

СНДРС(<Счет>, <ТипСуммы>, <Валюта>, <Субконто1>, <ТипФильтра1>, <Субконто2>, <ТипФильтра2>...)

<ТипФильтра>. Необязательный параметр. Тип использования субконто. (Строка или число).

  • "*" (1) — Разворачивать по данному субконто.
  • "!" (2) — Отбирать по данному субконто.
  • " " (3) — Не учитывать данное субконто.

Значения по умолчанию: "*" (1) — для первого субконто, " " (3) — для остальных субконто.

Пример

//Получим развернутое сальдо дебетовое на начало периода по счету 60,
// учет ведется по субконто Организации.

СР60 = БухИтоги.СНДРС("60");

//Получим развернутое сальдо дебетовое на начало периода по счету 10
//конкретному складу в разрезе материалов, учет ведется по субконто «Материалы» и «Склады».

СР10 = БухИтоги.СНДРС("10", 1, , , "*", ВыбСклад, "!");

Установка периода итогов

Метод | Описание
ПериодД | Устанавливает произвольный период в качестве периода расчета итогов. Синтаксис: ПериодД(<ДатаНачалаПериода>, <ДатаКонцаПериода>)
ПериодКВ | Устанавливает квартал в качестве периода расчета итогов. Синтаксис: ПериодКВ(<Дата>|<НомерКвартала>, <Год>)
ПериодКВН | Устанавливает в качестве периода расчета итогов период с начала года до конца указанного квартала. Синтаксис: ПериодКВН(<Дата>|<НомерКвартала>, <Год>)
ПериодМ | Устанавливает в качестве периода расчета итогов месяц. ПериодМ(<Дата>|<НомерМесяца>, <Год>)
ПериодМНК | Устанавливает в качестве периода расчета итогов период с начала квартала до конца указанного месяца. ПериодМНК(<Дата>|<НомерМесяца>, <Год>)
ПериодМНГ | Устанавливает в качестве периода расчета итогов период с начала года до конца указанного месяца. ПериодМНГ(<Дата>|<НомерМесяца>, <Год>)
НачПериода | Возвращает начальную дату установленного в данный момент периода основных итогов.
КонПериода | Выдает конечную дату установленного в данный момент периода основных итогов.

Другие методы

Метод ОсновныеИтоги переводит объект в режим работы с основными итогами. Вызов этого метода имеет смысл тогда, когда был выполнен расчет временных итогов или запрос, и нужно вернуть объект к работе с основными итогами. При этом результаты запроса или расчета временных итогов теряются.

Временный расчет

Для переключения в режим работы с временными итогами следует выполнить метод Рассчитать. После этого объект позволяет получать остатки и обороты по счетам за произвольный период, заданный при вызове метода Рассчитать.

Для получения временных итогов используются те же методы, что и для получения основных итогов (СНД, СНК , СКД , СКК, ДО, КО, ОБ и другие). Параметры метода Рассчитать определяют итоги, которые будут доступны для получения этими методами.

Метод Рассчитать

Синтаксис
Рассчитать(<НачалоПериода>, <КонецПериода> , <ФильтрПоСчетам>, <ТолькоСинтетика> , <ПланСчетов>, <РазделительУчета>)

Параметр
Описание
<НачалоПериода>

Необязательный параметр. Выражение типа дата, документ или позиция документа начала периода расчета временных итогов. Если этот параметр не указан, будут вычисляться конечные сальдо на момент, указанный в параметре <КонецПериода>.
<КонецПериода>

Необязательный параметр. Выражение типа дата, документ или позиция документа конца периода расчета временных итогов. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <НачалоПериода>.

Если из двух параметров периода задан только параметр начала периода, метод Рассчитать вычислит начальные остатки — без оборотов. Наоборот, если задан параметр конца периода, будут вычисленные конечные остатки.
<ФильтрП, рСчетам> Необязательный параметр. Счета, для которых будет выполняться временный расчет итогов. Задается значением типа «Счет» или объектом типа «СписокЗначений», содержащим значения типа «Счет», либо строкой содержащей список кодов счетов, разделенных символом ", " или ";".

<ТолькоСинтетика> Необязательный параметр:

1 — рассчитывать сальдо только по счетам;
0 — или не указан — рассчитывать сальдо по счетам и по субконто.

Установка параметра <ТолькоСинтетика> в 1 задает выполнение расчета итогов только по счетам, без субконто. В этом случае функции для получения развернутого сальдо по субконто СНДРС, СКДРС, СНКРС, СККРС для счетов, по которым ведется аналитический учет по субконто будут возвращать 0, даже если реально в информационной базе есть остатки по этим счетам.

Если параметр <ТолькоСинтетика> не указан или равен 0, временный расчет итогов будет выполнен и по счетам, и по субконто.
<ПланСчетов> Необязательный параметр. Ограничение расчета одним планом счетов.
<РазделительУчета> Необязательный параметр. Значение разделителя учета. Ограничение расчета одним значением разделителя учета.

Метод Актуальность

Устанавливает или сбрасывает признак актуальности временных итогов.

Данный метод позволяет организовать поддержку временного расчета итогов в актуальном состоянии. При установке объекту «БухгалтерскиеИтоги» признака поддержки в актуальном состоянии, в нем будут отражаться все изменения в итогах, выполняемые операциями. При этом данный актуальный объект «БухгалтерскиеИтоги» смогут автоматически использовать временные расчеты и запросы других объектов «БухгалтерскиеИтоги» с аналогичными фильтрами, что позволяет оптимизировать время расчета.

Данную возможность следует использовать только в специальных случаях, например, для оптимизации больших регламентных расчетов. Данная возможность может применяться только при работе программы в монопольном режиме или, если не в монопольном режиме, то только при проведении документа.

Синтаксис: Актуальность(<Флаг>)

<Флаг>: 1 — поддерживать временный расчет в актуальном состоянии; 0 — не поддерживать;

Про работу объекта БухгалтерскиеИтоги в режиме запроса вы можете прочитать здесь.


Операции и проводки

Создание операции и проводок
 Простой перебор
 Перебор с фильтром
 Перебор с корр. счетом
Фильтр по субконто
 Графа отбора
Поиск операции
 Удаление операции и проводок
Другие полезности

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

Работа с операциями похожа на работу с документами. Проводки можно представить, как табличную часть операции, по аналогии с табличной частью документа. С точки зрения пользователя все операции и проводки хранятся в журнале операций и связанном с ним журнале проводок.

Создание операции и проводок

При проведении документа, имеющего отношение к бухгалтерскому учету, процедура проведения должна заполнить атрибуты операции данного документа и сформировать проводки.

Процедура ОбработкаПроведения()

 //заполнение атрибутов
          операции
Операция.СуммаОперации = Итог("Сумма");
Операция.Содержание = "Поступление материалов";
Операция.Журнал = "МТ"; //доп. реквизит операции

//для каждой строки документа сделаем проводку
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

ПривязыватьСтроку(1);
            //проводки будут содержать номер строки документа

//создание проводки и заполнение атрибутов проводки
Операция.НоваяПроводка();

Операция.Дебет.Счет = СчетПоКоду("10.1");
Операция.Дебет.Склады = Склад; //1-й вариант обращения к субконто
Операция.Дебет.Субконто(ВидыСубконто.Материалы,Материал); //2-й вариант
Операция.Количество = Количество;

Операция.Кредит.Счет = СчетПоКоду("51");
Операция.Кредит.Субконто(1,РасчетныйСчет); //3-й вариант

Операция.Сумма = Сумма;

//у нас счет 10.1 валютный, поэтому
Операция.ВалСумма = Сумма*Курс;
Операция.Валюта = Валюта;

Операция.Филиал = Филиал; //разделитель учета (доп. реквизит проводки)

КонецЦикла;
Операция.Записать();

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

Итак, у операции есть следующие атрибуты:

Атрибут операции
Описание
ДатаОперации | Атрибут ДатаОперации содержит дату бухгалтерской операции. Так как каждая бухгалтерская операция принадлежит документу (причем только одному, а операция введенная вручную также принадлежит специальному документу «Операция»), значение атрибута совпадает со значением атрибута ДатаДок документа, которому принедлежит операция.
Содержание | Атрибут Содержание служит для обращения к содержанию операции. Содержание операции представляет собой произвольную символьную строку. Например, "Поступление материалов".
СуммаОперации | Атрибут СуммаОперации служит для обращения к сумме операции. Сумма операции является положительным или отрицательным числом. Сумма операции предназначена лишь для иллюстрирования денежного выражения операции и не влияет на бухгалтерские итоги.
Документ Атрибут Документ является атрибутом «только для чтения», то есть ему нельзя присваивать никакого значения. Он служит для обращения к документу, котрому принадлежит операция. Так, как любая операция принадлежит документу (операция введенная «вручную» принадлежит документу специального вида «Операция») доступ к некоторым свойствам операции, например, номеру возможен только посредством обращения к атрибуту Документ.

Атрибут Документ предназначен только для доступа к атрибутам и реквизитам документа, которому принадлежит операция. Для получения значения типа «Документ» используется метод ТекущийДокумент.
Сумма Атрибут Сумма служит для обращения к сумме выбранной проводки (корреспонденции) операции.

Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм «Операции» и «Журнал проводок» текущая проводка определяется положением курсора.
Валюта | Атрибут Валюта служит для обращения к валюте выбранной проводки или корреспонденции операции. Применяется только для счетов, на которых ведется валютный учет.
ВалСумма | Атрибут ВалСумма служит для обращения к сумме в валюте выбранной проводки или корреспонденции операции. Применяется только для счетов, на которых ведется валютный учет.
Количество | Атрибут Количество служит для обращению к количеству выбранной проводки или корреспонденции операции. Применяется только для счетов, на которых ведется количественный учет.
Дебет
Дебет.Счет
Дебет.Субконто

Атрибут Дебет служит для обращения к дебетовой части текущей проводки (корреспонденции) операции. Данный атрибут возвращает агрегатный объект специального типа «Дебет», который используется только для доступа к данным дебетовой части конкретной проводки (корреспонденции) операции и не используется отдельно.

Атрибут Дебет.Счет служит для доступа к счету дебета/кредита проводки или корреспонденции операции.

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

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

Простой перебор операций и проводок

Пример, выбрать все операции за период:

Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперации(НачДата, КонДата); //заданный период

Пока Опер.ПолучитьОперацию()=1 Цикл

Сообщить(Опер.СуммаОперации);
Сообщить(Опер.Содержание);

//организуем перебор проводок текущей операции
//1-й вариант
Опер.ВыбратьПроводки();
Пока Опер.ПолучитьПроводку()=1 Цикл

Сообщить(Опер.Дебет.Счет);
Сообщить(Опер.Кредит.Счет);
Сообщить(Опер.Сумма);

КонецЦикла;

//2-й вариант перебора проводок текущей операции
Для Ном = 1 По Опер.КоличествоПроводок() Цикл

Опер.ПолучитьПроводкуПоНомеру(Ном);
            //проводка стала текущей

Сообщить(Опер.Дебет.Счет);
Сообщить(Опер.Кредит.Счет);
Сообщить(Опер.Сумма);

КонецЦикла;

КонецЦикла;

Перебор операций и проводок с фильтром

Синтаксис: ВыбратьОперацииСПроводками (<НачалоПериода>, <КонецПериода>, <Фильтр>, <Валюта>, <ПланСчетов>, <РазделительУчета>)

Пример, выбрать проводки по счету "10.1" по филиалу "Северный".

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

Примеры фильтра:

Строка фильтра | Описание
50 | все проводки со счетом 50
50, * | все проводки в дебет 50 счета
* , 51 | все проводки с кредита 51 счета
50, 51 | все проводки в дебет 50 счета с кредита 51
51; 52 | все проводки со счетом 51 или счетом 52
46, 68.2 | все проводки в дебет 46 счета с кредита 68.2
"бумага" | все проводки, содержащие в содержании операции или в субконто или в реквизитах слово «бумага»
"бумага"; "картон" | все проводки, содержащие в содержании операции или в субконто или в реквизитах слово «бумага» или слово «картон»
*, 46; "бумага" | все проводки по кредиту 46 счета, содержащие в содержании операции или в субконто или в реквизитах слово «бумага»

После вызова метода ВыбратьОперацииСПроводками метод ПолучитьПроводку выбирает очередную проводку из выборки удовлетворяющую заданным условиям, а метод ПолучитьОперацию выбирает первую проводку слудующей операции удовлетворяющую заданным условиям.

Перебор операций и проводок с указанием счета и корр. счета

Синтаксис: ВыбратьОперацииСПроводками (<НачалоПериода>, <КонецПериода>, <Счет>, <КорСчет>, <Флаг>, <Валюта>, <ПланСчетов>, <РазделительУчета>)

<Счет>. Необязательный параметр. Счет — счет, по которому будут отбираться проводки.

<КорСчет>. Необязательный параметр. Счет — корреспондирующий счет, по которому будут отбираться проводки. Параметр имеет смысл, если указан параметр <Счет>.

<Флаг>. Необязательный параметр. Число — признак вида оборота. Параметр может принимать значения: 1 — отбирать проводки только по дебету счета; 2 — отбирать проводки только по кредиту счета; 3 — отбирать проводки и по дебету, и по кредиту. По умолчанию 3.

Пример, выбрать проводки Д10.1 К51 или Д51 К10.1

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

Фильтрация по субконто

Пример, выбрать все проводки по счету 60 для заданной организации

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

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

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

Метод ИспользоватьКорСубконто аналогичен методу ИспользоватьСубконто, но задает фильтр по корреспондирующим субконто.

В качестве значения субконто в этим методы можно передавать «Список значений».

Фильтрация по графе отбора
синтаксис: ВыбратьПоЗначению (<НачалоПериода>, <КонецПериода> , <ВидОтбора>, <3начениеОтбора>)

Параметр <ВидОтбора> для отбора операций может принимать следующие значения:

"СуммаОперации" | Отбор по сумме операции. Доступно если в метаданных включен отбор по сумме операции.
"Содержание" | Отбор по содержанию операции. Доступно если в метаданных включен отбор по содержанию операции.
<РеквизитОперации> | Отбор по дополнительному реквизиту операции. Идентификатор реквизита должен быть указан так, как это задано в метаданных. Доступно если в метаданных включен отбор по реквизиту операции.

Параметр <ВидОтбора> для отбора проводок может принимать следующие значения:

"Счет" | Отбор по счету дебета или счету кредита проводки. Доступно если в метаданных включен отбор по счетам проводок.
"СчетДт" | Отбор по счету дебета проводки. Доступно если в метаданных включен отбор по дебету/кредиту счетов проводок.
"СчетКт" | Отбор по счету кредита проводки. Доступно если в метаданных включен отбор по дебету/кредиту счетов проводок.
"Валюта" | Отбор по валюте проводки. Доступно если в метаданных включен отбор по валюте проводок.
ВидСубконто> | Отбор по виду субконто. Идентификатор вида субконто должен быть указан так, как он задан в метаданных. Доступно если в метаданных включен отбор по этому виду субконто.
<РеквизитПроводки> | Отбор по дополнительному реквизиту проводки. Идентификатор реквизита должен быть указан так, как он задан в метаданных. Доступно если в метаданных включен отбор по этому реквизиту проводки

После выполнения данного метода обход операций (проводок) осуществляется методами ПолучитьОперацию и ПолучитьПроводку.

Поиск операции
Синтаксис: НайтиОперацию([<Документ>])

В системе 1С:Предприятие каждая операция принадлежит документу. Причем операция принадлежит только одному документу, а у документа может существовать только одна операция. Операции введенные вручную принадлежат документам специального вида «Операция». Поэтому не существует возможности передачи такого значения как «Операция». Для «идентификации» операции фактически используется значение документа, которому она принадлежит. Поэтому для позиционировании объекта «Операция» непосредственно на конкретную операцию используется значение типа «Документ».

Пример,

Опер = СоздатьОбъект("Операция");
Если Опер.НайтиОперацию(ВыбрДокумент)=1 Тогда
...<операция стала текущей>
КонецЕсли;

Удаление операций и проводок

При отмене проведения документа автоматически удаляются операции и проводки, которые он сформировал (если у него стоит параметр Создавать операцию "только при проведении").

Опер = СоздатьОбъект("Операция");
Если Опер.НайтиОперацию(ВыбрДокумент)=1 Тогда
....Опер.Удалить(1); //непосредственное удаление (по умолч.)
....Опер.Удалить(0); //пометка операции (документа) на удаление
КонецЕсли;

Методы ПометкаУдаления и СнятьПометкуУдаления работают так же, как для документов.

Метод УдалитьПроводку удаляет текущую проводку из операции.

Иногда проводки лучше не удалять, а просто выключить. Тогда они исключаются из бухгалтерских итогов. Потом проводки можно обратно включить.
Опер.ВключитьПроводки(0); //выключить проводки
Опер.ВключитьПроводки(1); //включить проводки

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

Метод
Описание
ПолучитьВремя()
УстановитьВремя()
         Возвращает / устанавливает время текущей операции.
ПроверитьПроводку | Проверить проводку на соответствие корректным проводкам. Список корректных проводок задает пользователь.
Выбрана()
ПроводкаВыбрана() 		Проверяет выбранность операции и проводки.
ПланСчетов() | Возвращает план счетов текущей проводки.
ПолучитьДокумент() | Возвращает документ, которому принадлежит операция.
ПредставлениеПроводки()
ПредставлениеСубконто() 		Возвращает строковое представление проводки и субконто, например для вывода в отчет.
ЗаписатьПроводки() Метод ЗаписатьПроводки выполняет запись в информационную базу уже добавленных и заполненных проводок операции. Метод может использоваться только для атрибута «Операция» документа в момент проведения (в процедуре ОбработкаПроведения). При этом происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам уже измененным проводками, записанными этим документом. После выполнения метода ЗаписатьПроводки и до окончания процедуры ОбработкаПроведение уже невозможно изменять или удалять проводки, добавленные до вызова этого метода.

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

Процедура ОбработкаПроведения()

 Сч20 = СчетПоКоду("20");
Cч40 = CчeтПoKoдy("40");
СписаниеСчетаНаСч20(СчетПоКоду("25"));
СписаниеСчетаНаСч20(СчетПоКоду("26"));
Операция.ЗаписатьПроводки();
СписаниеСчета20На40();
Операция.Содержание = "Закрытие фин. результатов за "
                + Формат(ДатаДок, "Д ММММГГГГ");
Операция.Записать();

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


Бухгалтерские счета

Перебор счетов
 Атрибуты счета
 Счета и субсчета
 Виды субконто
 Список счетов
Другие полезности

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

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

1-й вариант:

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

2-й вариант:

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

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

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

Атрибут | Описание
Код | Полный код счета. Например, "10.1" или "62.5.1"
Наименование | Название счета. Например, "Материалы" или "Расч. с бюдж. по НДС"
Валютный | Признак ведения валютного учета. 1 - валютный учет ведется, 0 - не ведется
Количественный | Признак ведения количественного учета. 1 - количественный учет ведется, 0 - не ведется
Забалансовый | Признак забалансового счета. 1 - счет забалансовый, 0 - балансовый
Активный | Тип остатка по счету. 1 - счет активный, 2 - счет пассивный, 3 - счет активно-пассивный
<реквизит> | Кроме стандартных вышеперечисленных реквизитов, разработчик может задать произвольное количество дополнительных реквизитов. Реквизиты могут быть периодическими, т.е. хранить значение на определенную дату. Например, может быть создан периодический реквизит "Ответственный" типа "Справочник.Сотрудники". Он будет показывать сотрудника, ответственного за ведение данного счета.

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

Пример, прочитать и установить ответственного за ведение счета:

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

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

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

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

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

Метод
Описание
ЭтоГруппа()

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

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

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

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

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

Пример, вывести
              все субсчета счета "10 Материалы":

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

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

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

Счета = СоздатьОбъект("Счет.ОснПлан");
Счета.ВыбратьСчета();
Пока Счета.ПолучитьСчет()=1 Цикл

отступ = "";
Для ном = 1 По Счета.Уровень() Цикл
....отступ = отступ + " ";
КонецЦикла;

Сообщить(отступ + Счета.Код + " " + Счета.Наименование);

КонецЦикла;
ПринадлежитГруппе(<Счет>)

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

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

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

Например, для счета "10.5" этот метод вернет счет с кодом "10".
КодСубсчета()

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

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

ВыборГруппы(<флаг>)

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

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

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

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

В 1С у счета может быть до 5 прикрепленных видов субконто. Максимальное количество видов субконто задается в Конфигураторе, но не может превышать 5.

Пример, вывести все виды субконто, прикрепленные к заданному счету:

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

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

Счета = СоздатьОбъект("Счет.Основной");

Счета.Новый(1);
        //у счета будут субсчета
Счета.Код = "10";
Счета.Наименование = "Материалы";
Счета.Активный = 1; //активный
Счета.Записать();

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

Пример, изменить наименование счета:

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

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

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

Пример, отменить все пометки на удаление:

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

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

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

Метод | Описание
НайтиПоКоду(код) | Этот метод выполняет поиск счета в плане счетов по коду счета, который передается методу в качестве параметра. Если счет найден, метод возвращает 1 и позиционирует объект на выбранном счете.
НайтиСчет(<счет>) | Этот метод выполняет поиск счета по значению, заданному параметром <Счет>, и позиционирует объект на выбранном счете.
Выбран() | Этот метод возвращает число со значением 1 — если счет выбран (спозиционирован) или значение не пустое, 0 — если не выбран или значение пустое.
Выбрать() | Этот метод вызывает на экран диалог, содержащий план счетов. Пользователь должен интерактивно выбрать требуемый счет. Если счет выбран, метод возвращает 1 и позиционирует объект на выбранном счете. Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.
СчетПоКоду(код[,плансчетов]) | Глобальная системная функция. Возвращает счет по коду. Если план счетов не указан, тогда поиск осуществляется в основном плане счетов, заданном в Конфигураторе.
ОсновнойПланСчетов() | Глобальная системная функция. Возвращает план счетов, заданный в Конфигураторе в качестве основного.


Бухгалтерский запрос

Для получения большого количества итогов в различных разрезах объект «Бухгалтерские Итоги» переключается в режим работы с запросом. Для переключения в этот режим вызывается метод ВыполнитьЗапрос в параметрах которого, а также дополнительными методами устанавливается состав итогов, которые будут получены запросом. Выполнение данного метода осуществляет выборку данных и их предварительную обработку.

После выполнения запроса с помощью специального набора методов объекта «Бухгалтерские Итоги» осуществляется получение итогов, полученных данным запросом. К этим методам относятся методы обхода итогов в различных разрезах (сформированных запросом) и методы для получения собственно итогов. Кроме того специальный набор атрибутов объекта «Бухгалтерские Итоги» позволяет обращаться процессе обхода результатов запроса к значениям полученных группировок.

Метод ВыполнитьЗапрос

Синтаксис: ВыполнитьЗапрос(<НачалоПериода>, <КонецПериода>, <ФильтрПоСчетам>, <ФильтрПоКоррСчет>, <Валюта>, <ТипИтогов>, <Периодичность>, <ТипСуммы>)

Параметр
Описание
<НачалоПериода>
         Необязательный параметр. Выражение типа дата, документ или позиция документа начала периода запроса. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <КонецПериода>
<КонецПериода>
         Необязательный параметр. Выражение типа дата, документ или позиция документа конца периода запроса. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <НачалоПериода>.
<ФильтрПоСчетам>
         Необязательный параметр. Счета, для которых будут отбираться итоги в запросе. Задается значением типа «Счет» или объектом типа «Список-Значений», содержащим значения типа «Счет», либо строкой содержащей список кодов счетов, разделенных символом ", " или ";". Если параметр не указан, отбор будет выполняться по всем счетам.
<ФильтрПоКоррСчет>
         Необязательный параметр. Значение типа «Счет» — корреспондирующий счет, в корреспонденции с которым будут отбираться итоги счета, указанного в параметре <ФильтрПоСчетам>. Задается значением типа «Счет» или объектом типа «СписокЗначений», содержащим значения типа «Счет», либо строкой содержащей список кодов счетов, разделенных символом "," или ";". Если параметр не указан, будут отбираться итоги в корреспонденции со всеми счетами.
<Валюта>
         Необязательный параметр. Значение типа «Справочник.Валюты». Если параметр не указан итоги выдаются без учета валюты.
<ТипИтогов>
         Необязательный параметр. Число — тип отбираемых итогов. Может принимать следующие значения:
  • 1 — остатки и обороты по счету в целом (по умолчанию);
  • 2 — обороты между счетами;
  • 3 — Первое и второе вместе.
<Периодичность>

Необязательный параметр. Позволяет получить дополнительный разрез итогов по периодам. Число или символьная строка. По умолчанию периодичность не задана. Параметр <Периодичность> может принимать следующие значения:

Число | Синоним | Примечание
1 | «Период» | Промежуточные итоги не рассчитываются;
2 | «Операция» | Промежуточные итоги рассчитываются по операциям;
3 | «Проводка» | По проводкам
4 | «День» | По дням
5 | «Неделя» | По неделям
6 | «Декада» | По декадам
7 | «Месяц» | По месяцам
8 | «Квартал» | По кварталам
9 | «Год» | По годам
<ТипСуммы>
         Необязательный параметр. Число или строка — тип рассчитываемых итогов. Может принимать следующие значения (в скобках указаны строковые синонимы):
  • 1 («С») рассчитывать суммы;
  • 2 («В») рассчитывать валютные суммы;
  • 4 («К») рассчитывать количество.

Если требуется одновременно рассчитывать разные суммы, значение параметра получается путем сложения допустимых значений, например: 5 (1+4) — рассчитывать суммы и количество. При указании параметра строкой в ней указываются все символы, которые обозначают типы сумм, которые нужно рассчитывать. По умолчанию рассчитываются все типы сумм.

В зависимости от переданных параметров итоги могут быть подготовлены методом ВыполнитьЗапрос в различных разрезах. Кроме того, на результат запроса влияют дополнительные установки, которые выполняются вызовами специальных методов объекта «Бухгалтерские Итоги».

Метод ВключатьСубсчета позволяет получить итоги в разрезе субсчетов.

Применение метода ИспользоватьСубконто (перед вызовом ВыполнитьЗапрос) позволяет сформировать запрос в разрезе субконто.

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

Пример
//рассчитать остатки и обороты по счету 60 за заданный период
БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон, "60", , 3);

Метод ВключатьСубсчета

Метод ВключатьСубсчета должен вызываться до выполнения метода ВыполнитьЗапрос. Он устанавливает режим, при котором итоги отбираемые запросом будут разворачиваться по субсчетам соответвенно основных и корреспондирующих счетов.

Синтаксис: ВключатьСубсчета(<ФлагСчета>, <ФлагКоррСчета>}

Параметр
Описание
<ФлагСчета>

Необязательный параметр. Признак развертывания сальдо по субсчетам основного счета. Число:

  • 0 — не разворачить по субсчетам (по умолчанию);
  • 1 — разворачивать по субсчетам;
  • -1 (минус единица) — не выдавать итоги по счетам-группам.
<ФлагКоррСчета>
         Необязательный параметр. Признак развертывания сальдо по субсчетам корреспондирующего счета. Число:
  • 0 — не разворачить по субсчетам (по умолчанию);
  • 1 — разворачивать по субсчетам;
  • -1 (минус единица) — не выдавать итоги по корреспондирующим счетам-группам.

Метод ИспользоватьСубконто

Метод ИспользоватьСубконто устанавливает режим отбора итогов по субконто методом ВыполнитьЗапрос. Метод ИспользоватьСубконто слудет вызывать до вызова метода ВыполнитьЗапрос. После выполнения метода ВыполнитьЗапрос установки метода ИспользоватьСубконто сбрасываются и перед слудеющим запросом их нужно устанавливать заново.

Метод ИспользоватьСубконто может вызываться последовательно несколько раз. В этом случае установки, выполняемые этим методом суммируются.

Синтаксис: ИспользоватьСубконто(<ВидСубконто>, <Субконто>, <ТипФильтра>, <ПоГруппам>)

Параметр
Описание
<ВидСубконто>

         Значение типа «Вид Субконто» — расчет временных итогов будет выполнен только для субконто указанного вида. Задается значением типа «Вид Субконто» или строкой содержащей имя идентификатора вида субконто, как он назван в конфигураторе.
<Субконто>
         Необязательный параметр. Здесь может быть задано или одно конкретное значение субконто, по которому будут отобраны итоги по аналитике или объект типа «Список значений», где можно задать несколько значений субконто. Если параметр не задан — то считается пустым значением субконто.
<ТипФильтра> Необязательный параметр. Число — тип фильтра по субконто. Может принимать следующие значения:
  • 1 — разворачивать по данному субконто (по умолчанию),
  • 2 — отбирать по данному субконто,
  • 3 — не учитывать это субконто вообще.
<ПоГруппам> Необязательный параметр. Число — группировка др итогов по субконто. Параметр <ПоГруппам> имеет смысл, если параметр <ТипФильтра> равен 1, а вид субконто, заданный параметром <ВидСубконто>, имеет тип значения «Справочник». Параметр может принимать значения:
  • 0 — не показывать итоги по группам справочника (по умолчанию);
  • 1 — показывать итоги по группам справочника.

Пример:

* Данный запрос формирует итоги по счету 10 в разрезе материалов по одному складу.

БухИтоги.ИспользоватьСубконто(ВидыСубконто.Материалы,
        , 1);
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Склады, ВыбСклад, 2);
БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон, "10");

Метод ИспользоватьКорСубконто

Метод ИспользоватьКорСубконто устанавливает режим отбора итогов по субконто методом ВыполнитьЗапрос. Метод ИспользоватьКорСубконто слудет вызывать до вызова метода ВыполнитьЗапрос. После выполнения метода ВыполнитьЗапрос установки метода ИспользоватьКорСубконто сбрасываются и перед слудеющим запросом их нужно устанавливать заново.

Метод ИспользоватьКорСубконто может вызываться последовательно несколько раз. В этом случае установки, выполняемые этим методом суммируются.

Синтаксис: ИспользоватьКорСубконто(<ВидСубконто>, <Субконто>, <ТипФильтра>, <ПоГруппам>)

Параметры аналогичны параметрам метода ИспользоватьСубконто.

Метод Опции

Синтаксис: Опции(<ВключатьЗабалансовыеСуммы>, <ВключатьОборотныеСубконтоСуммы>)

Метод Опции должен вызываться до выполнения метода ВыполнитьЗапрос. Он устанавливает режимы включения в итоги сумм по забалансовым счетам и оборотным субконто. Если метод не вызвался, суммы по забалансовым счетам и оборотным субконто не включаются в запрос.

Если параметр равен 1, то эти суммы включаются в запрос, если 0, то не включаются.

Обработка результатов запроса (обход группировок)

Методы обхода группировок результата запроса приведены ниже:

Методы
Описание

ВыбратьСчета
ПолучитьСчет

Синтаксис: ВыбратьСчета(<ФлагВсе>, <ФлагДК>, <Номер>, <РазвСальдо>)

Параметр
Описание
<ФлагВсе> Необязательный параметр.
  • 0 — отбирать те счета, которые имели итоги на этом уровне обхода итогов запроса (по умолчанию);
  • 1 — включить в выборку все счета, которые имели итоги в данном запросе;
  • -1, -2 ... — включить в выборку счета, которые имели итоги в группировке n-го вышестоящего уровня.
<ФлагДК> Необязательный параметр.
  • 1 — включать в выборку счета только с дебетовыми оборотами;
  • 2 — включать в выборку счета только с кредитовыми оборотами.
  • 0 — включать в выборку счета вне зависимости от дебетовых/кредитовых оборотов (по умолчанию).
<Номер>
         Необязательный параметр. Положительное целое число — номер выборки. Если параметр не указан, выборке присваивается номер 0.

Выборке, открываемой методом ВыбратьСчета, может быть присвоен номер — положительное целое число. Номер — это «метка» выборки. Номер может использоваться для обращения к результатам выборки при помощи метода ПолучитьСчет. Использование этой метки необходимо, если требуется получить две группировки по счету.
<РазвСальдо> Необязательный параметр. Признак необходимости рассчитывать развернутое сальдо по субконто. Используется только если в запросе участвуют субконто.
  • 1 — рассчитывать развернутое сальдо.
  • 0 — не рассчитывать развернутое сальдо (по умолчанию);

Синтаксис: ПолучитьСчет(<Номер>, <Счет>)

Параметр | Описание
<Номер> | Необязательный параметр. Положительное целое число — номер выборки. Если раньше было открыто несколько выборок по счету.
<Счет> | Необязательный параметр. Конкретное значение счета, которое нужно получить из выборки.

Пример.

БухИтоги.Запрос(Дата1, Дата2);
БухИтоги.ВыбратьСчета();
Пока БухИтоги.ПолучитьСчет() = 1 Цикл

Деб = БухИтоги.ДО();
Кред = БухИтоги.КО();

КонецЦикла;
ВыбратьКорСчета
ПолучитьКорСчет

Синтаксис
ВыбратьКорСчета(<ФлагВсе>, <ФлагДК>, <Номер>)
ПолучитьКорСчет(<Номер>, <Счет>)

Пример:

БухИтоги.Запрос(Дата1, Дата2);
БухИтоги.ВыбратьСчета();
Пока БухИтоги.ПолучитьСчет() = 1 Цикл

БухИтоги.ВыбратьКорСчета();
Пока БухИтоги.ПолучитьКорСчет() = 1 Цикл

Деб = БухИтоги.ДО();
Кред = БухИтоги.КО();

КонецЦикла;

КонецЦикла;
ВыбратьВалюты
ПолучитьВалюту

Синтаксис:
ВыбратьВалюты(<ФлагВсе>, <ФлагДК>, <Номер> , <РазвСальдо>, <Сортировка>)
ПолучитьВалюту(<Номер>, <Валюта>)

Пример:

БухИтоги.Запрос(Дата1, Дата2);
БухИтоги.ВыбратьСчета();
Пока БухИтоги.ПолучитьСчет() = 1 цикл

БухИтоги.ВыбратьВалюты();
Пока БухИтоги.ПолучитьВалюту() = 1 цикл

ДебВ = БухИтоги.ДО(2);
КредВ = БухИтоги.КО(2);

КонецЦикла;

КонецЦикла;
ВыбратьПериоды
ПолучитьПериод

Синтаксис:
ВыбратьПериоды(<ФлагВсе>, <ФлагДК>, <Номер>, <РазвСальдо>)
ПолучитьПериод(<Номер>, <ДатаНачалаПериода>)

Пример:

БухИтоги.ВыполнитьЗапрос(Дата1, Дата2, , , , , "Месяц");
БухИтоги.ВыбратьСчета();
Пока БухИтоги.ПолучитьСчет() = 1 цикл

БухИтоги.ВыбратьПериоды();
Пока БухИтоги.ПолучитьПериод() = 1 цикл

Деб = БухИтоги.ДО();
Кред = БухИтоги.КО();

КонецЦикла;

КонецЦикла;
ВыбратьСубконто
ПолучитьСубконто

Синтаксис:
ВыбратьСубконто(<Индекс>, <ФлагВсе>, <ФлагДК>, <Номер>, <РазвСальдо>, <Сортировка>, <ПорядокОбхода>)
ПолучитьСубконто(<Индекс>, <Номер>, <Субконто>)

Пример:

БухИтоги.ИспользоватьСубконто(ВидыСубконто.Материалы,
              , 1);
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Склады, , 1);
БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон, "10");
БухИтоги.ВыбратьСубконто(1);
Пока БухИтоги.ПолучитьСубконто(1) = 1 цикл

БухИтоги.ВыбратьСубконто(2);
Пока БухИтоги.ПолучитьСубконто(2) = 1 цикл

Деб = БухИтоги.ДО();
Кред = БухИтоги.КО();

КонецЦикла;

КонецЦикла;
ВыбратьКорСубконто
ПолучитьКорСубконто

Синтаксис:
ВыбратьКорСубконто(<Индекс>, <ФлагВсе>, <ФлагДК>, <Номер>, <РазвСальдо>, <Сортировка>, <ПорядокОбхода>)
ПолучитьКорСубконто(<Индекс>, <Номер>, <Субконто>)

БухИтоги.ИспользоватьСубконто(ВидыСубконто.Товары,
              , 1);
БухИтоги.ИспользоватьКорСубконто(ВидыСубконто.Клиенты, , 1);
БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон);
БухИтоги.ВыбратьСубконто();
Пока БухИтоги.ПолучитьСубконто() = 1 цикл

БухИтоги.ВыбратьКорСубконто();
Пока БухИтоги.ПолучитьКорСубконто() =1 цикл

Деб = БухИтоги.КорДО();
Кред = БухИтоги.КорКО();

КонецЦикла;

КонецЦикла;

Атрибуты и методы результата запроса

При обходе группировок результата запроса возможно обращение к следующим атрибутам и методам:

Атрибут | Описание
Счет | Текущий счет, выбранный функцией ПолучитьСчет
КорСчет | Текущий корр. счет, выбранный функцией ПолучитьКорСчет
Валюта | Текущая валюта, выбранная функцией ПолучитьВалюту
НачДата КонДата | Начальная и конечная дата текущего периода, выбранного функцией ПолучитьПериод
Операция | Атрибут позволяет обращаться к текущей операции, если запрос получен с детализацией итогов по периоду «Операция» и «Проводка».

Метод
Описание
Субконто
КорСубконто

ПредставлениеСубконто
ПредставлениеКорСубконто

Синтаксис
Субконто(<Номер> | <ВидСубконто>)
КорСубконто(<Номер> | <ВидСубконто>)

Пример

БухИтоги.ИспользоватьСубконто(ВидыСубконто.Товары,
              , 1);
БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон);
БухИтоги.ВыбратьСубконто();
Пока БухИтоги.ПолучитьСубконто() = 1 цикл
......... Сообщить(БухИтоги.Субконто());
КонецЦикла;
ЭтоГруппа Для тех субконто, которые выбираются из иерархических справочников метод возвращает 1, если текущее значение является группой справочника.
СНД
СНК
СКД
СКК
ДО
КО

СНД — дебетовое
              сальдо на начало периода;
СКД — дебетовое сальдо на конец периода;
СНК — кредитовое сальдо на начало периода;
СКК — кредитовое сальдо на конец периода;
ДО — дебетовый оборот за период;
КО — кредитовый оборот за период.

Синтаксис (у всех одинаковый): СНД(<ТипСуммы>)

Параметр <ТипСуммы> может принимать следующие значения:

  • 1 ("С") - сумма (по умолчанию)
  • 2 ("В") - валютная сумма
  • 3 ("К") - количество

СНДРС
СКДРС
СНКРС
СККРС

 СНДРС — дебетовое развернутое сальдо на начало периода;
СКДРС — дебетовое развернутое сальдо на конец периода;
СНКРС — кредитовое развернутое сальдо на начало периода;
СККРС — кредитовое развернутое сальдо на конец периода;
КорДО
КорКО 		Возвращает дебетовый или кредитовый оборот между корреспондирующими счетами или субконто.
ВыбранаПоДт
ВыбранаПоКт 		Эти функции возвращают 1, если выбран итог по дебету / кредиту.


БУХГАЛТЕРИЯ
Утро. Воскресенье. В дупель пьяный бухгалтер с трудом отрывает голову от стола, видит запись вчерашней игры в преферанс, и ошеломленно шепчет "... Тридцать лет работаю бухгалтером... но чтобы ЧЕТЫРЕХсторонний баланс..."

Для изучения этого раздела вы должны знать теорию бухгалтерского учета.

Счет и план счетов

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

Субсчет

У счета могут быть субсчета. Например, счет 10 "Материалы" может иметь субсчет 10.3 "Топливо". В системе 1С:Предприятие возможно ведение субсчетов с более сложной структурой: у субсчета может, в свою очередь, быть свой "субсубсчет" и так далее.

Тип счета: а ктивный / пассивный / активно-пассивный

Для активного счета сумма по дебету увеличивает сальдо по счету (дебетовое сальдо). Для пассивного счета сумма по дебету уменьшает сальдо по счету (кредитовое сальдо). Для активно-пассивного счета сальдо может быть свернутым или развернутым. Развернутое сальдо означает наличие остатка по дебету и кредиту счета одновременно.

Аналитический учет (субконто и вид субконто).

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

Субконто. Для обозначения объектов аналитического учета в 1С:Предприятии используется термин субконто. Наличие субконто позволяет более детально раскрыть информацию о средствах предприятия, накапливаемых на счетах бухгалтерского учета. В этом субконто похожи на субсчета - они позволяют получать более мелкую градацию итогов внутри одного счета по определенному признаку. Кроме того, субконто позволяет отследить движение средств по одному объекту аналитического учета по всем счетам, на которых ведется аналитический учет в данном разрезе. Например, движение конкретного основного средства.

Вид субконто. Под видом субконто понимается совокупность однотипных объектов аналитического учета. Для одного счета может быть задано ведение аналитического учета по нескольким видам субконто. Так, например, для счета 10 может быть определено ведение аналитического учета по двум видам субконто: "Материалы" и "Склады". Это является примером многомерного учета в 1С:Предприятие. Итоги можно получать как по материалам в разрезе складов, так и по складам в разрезе материалов, а также, разумеется, в целом по всем материалам и по всем складам.

Количественный учет

Для количественного счета в 1С:Предприятие накапливается итоговая информация в количественном (натуральном) выражении. Возможность ведения количественного учета обычно используется в совокупности с аналитическим учетом. В этом случае можно получать более полную отчетную информацию по объектам аналитического учета, например, наличие товаров на складе.

Валютный учет

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

Забалансовые счета

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

Разделитель учета

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

Операции и проводки

Операции, проводки, корреспонденции

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

Свойства операции и проводки

Операция имеет следующие свойства: содержание операции, ее общая сумма, дата, номер, а также другие реквизиты, определяемые конфигурацией.

Проводка имеет следующие свойства: счет дебета, субконто счета дебета, счет кредита, субконто счета кредита, сумма проводки, валюта, количество, валютная сумма, а также другие реквизиты, определяемые конфигурацией.

Журнал операций и журнал проводок

Журнал операций служит для просмотра списка введенных бухгалтерских операций. Каждая операция отображается в нем одной строчкой, содержащей наиболее важную информацию об операции: дату, вид документа, содержание, сумму операции и т. д. В журнале операций существует возможность просмотра проводок текущей операции. В журнале операций можно просматривать как все операции, так и выборочно, руководствуясь при этом различными условиями. Так, например, можно сделать "видимыми" только те операции, которые попали в заданный временной интервал.

Журнал проводок является средством просмотра введенных проводок. Каждая операция содержит в себе одну или несколько проводок. Проводка всегда принадлежит одной и только одной операции. В журнале проводок отражаются проводки, относящиеся к разным операциям.

Режимы ввода операций

При ручном вводе операции все данные заносятся непосредственно пользователем.

Использование типовых операцийавтоматизирует ввод стандартных или часто используемых операций. Типовая операция представляет собой шаблон хозяйственной операции, т.е. некоторые данные уже введены, например, счет дебета и счет кредита. В типовой операции есть некоторые возможности по автоматическому расчету сумм проводок и других данных. В отличие от документов, которые полностью настраиваются в конфигурации, типовые операции вводятся пользователем.

Использование документов еще больше облегчает ввод хозяйственной операции. При таком вводе операции пользователю не надо заполнять все данные об операции: как правило, в документ вводится необходимая информация о хозяйственной операции, а проводки формируются автоматически при проведении документа.

Бухгалтерские итоги

Работа с основными итогами

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

Для получения других итогов (с детализацией меньше месяца, с получением оборотов между различными объектами аналитики, а также сложных выборок) требуется выполнение предварительных действий — временного расчета или запроса.

Работа с временными итогами (метод Рассчитать)

Для переключения в режим работы с временными итогами следует выполнить метод Рассчитать. После этого объект позволяет получать остатки и обороты по счетам за произвольный период, заданный при вызове метода Рассчитать.

Работа в режиме запроса (метод ВыполнитьЗапрос)

Для получения большого количества итогов в различных разрезах объект «Бухгалтерские Итоги» переключается в режим работы с запросом. Для переключения в этот режим вызывается метод ВыполнитьЗапрос в параметрах которого, а также дополнительными методами устанавливается состав итогов, которые будут получены запросом. Выполнение данного метода осуществляет выборку данных и их предварительную обработку


КОНФИГУРАТОР

Назначение конфигуратора
Окно Конфигуратора
Дерево конфигурации
Редактор форм
Программные модули
Шаблоны
Редактор печатных форм
Администрирование базы
Загрузка измененной конфигурации

Сидит папа-программист в глубокой отладке, к нему подходит сынишка и спрашивает:
- Папа, а почему солнце всходит на востоке?
Папа отвечает:
- Ты проверял?
- Да!
-Каждый день проверял?
- Да!
- И все время на востоке?
-Да, все время!
- Только ради бога, сынок! Ничего не трогай! Ничего не меняй!

Назначение конфигуратора

Конфигуратор системы 1С:Предприятие является специальным режимом запуска 1С и предназначен для разработчиков, программистов. В этом режиме разработчик создает или корректирует структуру базы данных, программные модули, производит административные работы. В режиме Конфигуратора нельзя вводить информацию в базу данных, за исключением загрузки базы данных из архивов. Обычные пользователи работают в другом режиме "Предприятие". В этом режиме возможен ввод данных, заполнение справочников и ввод документов, формирование отчетов и запуск обработок. В режиме Предприятие нельзя редактировать структуру конфигурации.

Итак, основное правило:
В режиме Конфигуратор - мы определяем структуру базы данных и пишем программы.
В режиме Предприятие мы используем программы и вводим данные.

Основное окно конфигуратора

Слева вы видите дерево конфигурации, в котором редактируется структура базы данных.

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

Дерево конфигурации (метаданные)

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

Каждый объект имеет свойства и контекстное меню (вызывается правой кнопкой мыши).

Также к конфигурации относятся Интерфейсы и Права. Для их вызова нужно щелкнуть вкладки, расположенные внизу дерева конфигурации.

Кроме того, когда окно дерева конфигурации активно в меню Действия становятся доступными пункты "Глобальный модуль", "Общие таблицы" и "Библиотека картинок".
Редактор форм

У многих объектов конфигурации есть экранные формы. В частности экранные формы в версии 7.7 имеют справочники, документы, журналы документов, отчеты, обработки, журналы расчетов, журнал операций, журнал проводок, план счетов и счет. У некоторых объектов может быть несколько экранных форм, например, у справочников есть формы списков, форма элемента и форма группы.

Поясним значение кнопок панели редактора форм:

Эти кнопки становятся доступными, когда выделено несколько элементов управления на форме. Они позволяют выравнивать их по левому, по правому, по верхнему и по нижнему краю.
Эти кнопки центрируют выделенные элементы управления относительно всей формы по вертикали или горизонтали .
Эти кнопки равномерно распределяют выделенные элементы управления по вертикали или горизонтали.
Эти кнопки делают выделенные элементы управления одной ширины, одной высоты или одного размера. Определяющим является элемент управления, выделенный последним. Два элемента управления можно выделить, удерживая кнопку Shift и щелкая поочередно на каждом из них.
Включить/выключить решетку.
Запустить тестовое окно (проверить форму в режиме конфигуратора).
Вызвать окно редактирования слоев формы (попробуйте обязательно - это очень важно!).

Разберем кнопки на панели элементов управления:

Эта кнопка вызывает что-то типа мастера элементов диалога. Можно быстро разместить любой элемент управления, назначить ему тип, присвоить вызов процедуры и т.д.
Эта кнопка размещает на форме обычную кнопку. В свойствах кнопки в поле Формула пишется имя процедуры, которая будет запущена при нажатии на кнопку.
Эта кнопка размещает на форме флажок. В свойствах флажка в поле формула пишется имя процедуры, которая будет запущена при установке или снятии флажка.
Эта кнопка размещает на поле переключатель. Переключатели имеют смысл, когда их несколько, в этом случае пользователь производит выбор между несколькими вариантами. Чтобы переключатели заработали, нужно сделать следующее: для первого переключателя установить в свойствах флажок "Первый в группе". Далее проверить, чтобы порядок обхода элементов был точно в том порядке, в котором следуют переключатели (Действия => Настройка порядка обхода). Типичный камешек для новичков.
Эта кнопка размещает на форме список значений. При этом по имени списка можно обращаться к нему из модуля (объект СписокЗначений). Можно добавлять значения в список, удалять значения и делать все другие операции, возможные для объекта СписокЗначений.
Эта кнопка размещает на форме поле со списком значений. При этом также создается объект СписокЗначений. Обратите внимание что лучше задать БОЛЬШУЮ ВЫСОТУ этого элемента управления, чтобы список раскрывался. Типичный камешек для новичков.
Обычная рамка. Можно визуально объединить несколько элементов управления. Служит для удобства пользователя.
Текстовое поле. Если в поле Формула вписать имя функции, то при каждом обновлении формы 1С будет вызывать вашу функцию и ее результат будет отображаться в этом поле. Кстати, если щелкнуть на эту кнопку и затем щелкнуть на табличной части справочника, документа или журнала, тогда мы создадим текстовую колонку. Она не будет сохраняться в базе данных, но у нее есть поле Формула, куда можно написать любое выражение. Очень полезная вещь для всяких информационных колонок. Типичная непонятность для новичков.
Поле для ввода данных. Для поля можно назначить любой тип данных, допустимый в 1С:Предприятие. В поле Формула можно написать имя процедуры, которая будет вызываться при изменении значения данного поля. ВНИМАНИЕ: для размещения на форме реквизитов справочников и документов пользуйтесь кнопкой: . Типичный камешек для новичков.
Эта кнопка размещает на форме таблицу значений. По имени таблицы значений к ней можно обращаться из модуля. Колонки и строки таблицы создаются программным способом (см. объект ТаблицаЗначений).
Для иерархических справочников на форме списка можно разместить дерево групп.
Эта кнопка размещает на форме картинку. Управление картинкой осуществляется программным способом (см. объект Картинка).
Эта кнопка размещает на форме поля для ввода данных, связанные с реквизитами справочников и документов. Только в этом случае, введенные данные будут сохраняться в базе данных.

Для удобства пользователей обязательно настройте последовательный порядок обхода элементов диалога! При интенсивном вводе информации желательно максимальное использование клавиатуры. Порядок обхода настраивается следующим образом. В меню Диалог снимаете флажок "Автоматический порядок обхода". Затем опять в меню Диалог щелкаете "Порядок обхода" и последовательно щелкаете на номерах элементах диалога в том порядке, в котором они должны быть. Порядок обхода можно также редактировать в меню Диалог => "Настройка порядка обхода".

Редактор программных модулей

У каждой экранной формы есть программный модуль. Кроме того, есть программные модули документов и глобальный модуль. В этих модулях располагается программа на встроенном языке 1С, который похож на Бейсик, но имеет свои особенности.

В программном модуле имеется синтаксическая подсветка. Разными цветами отображаются ключевые слова, переменные, комментарии и значения. Цветовая палитра настраивается в параметрах.

Поясним значения кнопок панели редактора программных модулей:

По тексту программы можно расставить закладки или пометки (marks), и перемещаться по ним. Полезная вещь для больших модулей в сотни и тысячи строк.
Кнопки сдвига блока текста вправо и влево. Становятся активными, когда выделено одна или несколько строчек.
Закомментировать / раскомментировать блок текста.
Кнопка автоформатирования текста программы. Нажимайте ее чаще и ваши программы будут красивыми! К сожалению, это не избавит их от всех ошибок, но их определенно станет меньше!

Открыть модуль в отладчике.
Проверить модуль на синтаксические ошибки.
Перейти к определенной строке модуля.
Открыть окно со списком процедур и функций модуля. (полезная вещь!)

При редактировании модуля также обратите свое внимание на верхние кнопочки. Там вы найдете кнопки поиска, вызова синтакс помощника и другие интересности, например, конструктуры. Чаще пользуйтесь синтакс-помощником - очень полезная вещь! Помните, что там можно искать слова! Более того, при редактировании модуля можно щелкнуть правой кнопкой на любом слове и выбрать там пункт "Найти в Синтакс-помощнике".

Шаблоны

Шаблоны предназначены для облегчения нелегкого труда программиста. Чтобы не писать длинные конструкции, а заменять их короткими словами. При этом при вводе такого сокращения оно автоматически заменяется на полную конструкцию.

Например, вам надоело постоянно писать "КонецЕсли;". Предлагаю придумать сокращение "ке". При вводе такого сокращения оно автоматически заменится на "КонецЕсли;" (даже с точкой запятой в конце!).

Можно сделать и более сложные вещи. Вы вводите слово "Пока". Понятно, что это начало цикла. При этом 1С запросит условие в диалоговом окне и далее сформирует всю конструкцию и даже поставит курсор, куда нужно, чтобы можно было продолжать писать программу.

Пока <ваше условие> Цикл

КонецЦикла;

Окно для редактирования шаблонов вызывается из Синтакс-помощника правой кнопкой или через Сервис => Настройка шаблонов.

Редактор печатных форм (макетов)

У отчетов есть печатные формы, это понятно. У документов также есть печатные формы, это тоже понятно. Но печатные формы могут быть и у других объектов: справочников, журналов документов, плана счетов и т.д. Фактически у любого объекта, у которого есть экранная форма, может быть одна или несколько печатных форм.

Печатные формы состоят из ячеек, в которых содержатся текст или формулы, что очень напоминает Microsoft Excel. Печатные формы формируются на встроенном языке 1С при помощи вывода секций. В печатной форме может не быть секций вообще, тогда можно вывести или все, или ничего. Но в большинстве случаев нужно выводить какую-то повторяющуюся часть много раз, например список сотрудников, список товаров и т.д. Секции могут горизонтальными и вертикальными.

Поясним значения кнопок панели редактора печатных форм:

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

Остальные кнопки попробуйте сами:

Список секций таблицы.
Включение / выключение сетки.
Включение / выключение заголовков столбцов и строк.
Включение / выключение границ секций.
Включение / выключение режима "Только просмотр".
Фиксация строк или столбцов. При прокрутке таблицы эти строки / столбцы будут оставаться на экране.

У каждой ячейки есть свойства, которые вызываются правой кнопкой мыши:

Предлагаю вам изучить его методом научного тыка, по справке или по книжке "Администрирование и конфигурирование". Обратите внимание на поле Расшифровка, поскольку это очень важно и часто используется при программировании на 1С.

Администрирование базы данных

В меню Администрирование вы найдете следующие пункты:

Ведение списка пользователей | Редактирование списка пользователей, установка паролей, задание интерфейса и набора прав для каждого пользователя. Список пользователей, работающих с базой данных в данный момент времени можно посмотреть в Мониторе пользователей.
Сохранить данные | Сохранение конфигурации и данных в архив (создание резервных копий). В этом режиме определенные файлы упаковываются в zip-архив. Если вы работаете с SQL-версией, то для сохранения данных применяйте пункт "Выгрузить данные". Нажимайте эту кнопку почаще и ваши данные никогда не пропадут полностью.
Восстановить данные | Восстановить конфигурацию и данные с резервной копии, созданной в предыдущем режиме.
Выгрузить данные | Сохранение конфигурации и данных в архив. В этом режиме вся база данных сохраняется в особый файл "dat", который затем упаковывается в zip-архив.
Загрузить данные | Восстановить конфигурацию и данные с резервной копии, созданной в предыдущем режиме.
Настройка журнала регистрации | Каждое действие пользователя регистрируется в журнал регистрации. Здесь можно настроить фильтр для этого журнала. Сам журнал регистрации можно посмотреть в Мониторе пользователей.
Тестирование и исправление ИБ | Тестирование и исправление информационной базы. Нажимайте эту кнопку почаще для профилактики и для исправления ошибок.
Кодовая страница таблиц ИБ | Установка кодовой страницы файлов DBF.
Распределенная ИБ | Доступно, если у вас установлена компонента "Управление распределенными базами данных (УРБД)".
Загрузка измененной конфигурации

Обычно пользователи спокойно работают с базой данных, пока вы вносите какие-то изменения в свою локальную копию. Потом вы загружаете измененную конфигурацию в рабочую базу и пользователи начинают испытывать блаженство от ваших изменений.

Объединение конфигураций

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


КОНСТРУКТОРЫ
Назначение конструкторов
 Виды конструкторов 		1С версия 3000 года:
Юзер: Хочу базу данных!
Конструктор: Готово!
Юзер: Хочу, чтобы работала! (отладка)
Конструктор: ОК!

Назначение конструкторов

Конфигуратор системы 1С:Предприятие включает набор Конструкторов — вспомогательных инструментов, облегчающих и ускоряющих создание типовых элементов конфигурации. Конструктор «ведет пользователя за руку» по этапам создания объекта метаданных, снабжая подсказками и позволяя, если необходимо, возвращаться к предыдущим этапам и переопределять ранее заданные параметры.

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

Пользуйтесь конструкторами, но не забывайте, что то же самое можно сделать "ручками". Иногда это труднее, но позволяет сделать ВСЕ, на что способна 1С. Это примерно так же, как знать HTML и знать Dreamweaver. С помощью Dreamweaver создавался этот сайт, но иногда приходилось подправлять "ручками" HTML-код. Такая совместная работа конструктора и человека неимоверно эффективна! Для простых задач можно пользоваться конструкторами. Для сложных задач или для реализации некоторых "изюминок" приходится стучать по клавиатуре. Такова селяви, как любят говорить русские.

Виды конструктуров

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

Конфигуратор включает конструкторы:

· справочника;
· документа;
· журнала документов;
· отчета;
· вида субконто;
· журнала расчетов.

Конструктор печати предназначен для облегчения процесса создания печатной формы справочника (элемента и списка), документа и журнала документов.

Назначение Конструктора макета отчета — автоматическое создание шаблона печатной формы объекта метаданных.

Назначение Конструктора бухгалтерских запросов — автоматическое создание отчета или алгоритма обработки для получения бухгалтерских итогов в одном из нескольких возможных разрезов.

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

Конструктор ввода на основании предназначен для создания процедуры ввода на основании в модуле формы документа.

Конструктор движений регистров помогает создать в модуле документа оперативного учета алгоритм формирования изменений в регистрах, которые необходимо выполнить при проведении данного документа;

Конструктор формирования операции упрощает оформление в модуле документа бухгалтерского учета бухгалтерской операции генерируемой этим документом.


<< Назад
Содержание

Введение
Основы 1С
Простейший кадровый учет
Конфигуратор
Синтаксис языка 1С

Справочники
Документы
 Отчеты
Регистры
Запросы
Таблица значений
 Список значений
Текст
XBASE (файл DBF)
Файловая система
 Диаграммы

Формы
Системные процедуры и функции
 Предопределенные процедуры
 Конструкторы

Примеры

Мини-склад
 Работёнка
Почтальон Печкин
Игра "Реверси"
Игра "Охота на лис"
Денежки
Мини-библиотека
Доставочка

Простой склад

Кадровый учет в строительстве
Конкурент-магазин 3.18

Бухгалтерия

Компонента "Бухгалтерский учет"

Бухгалтерские счета
Операции и проводки
Бухгалтерские итоги
Бухгалтерский запрос

Простая бухгалтерия

Зарплата

Компонента "Расчет"

Журналы расчетов
Виды и группы расчетов
Календари

Мини-зарплата (пример)

Прочее


Работа с файлами DBF

Чтение файла DBF
Запись в файл DBF
Работа со структурой файла DBF
Работа с удаленными записями
Работа с индексами

Чтение файла DBF

В данном случае, мне кажется, что проще написать программу и прокомментировать ее, чем делать что-то еще. Вы уже такие продвинутые, раз добрались до этой главы! Я горжусь вами!

Файл = создатьОбъект("XBASE"); //создаем ссылку на файл DBF
Файл.ОткрытьФайл("catalog.dbf"); //открываем файл на диске
Файл.КодоваяСтраница(1); //задаем кодировку: 0 - windows, 1 - DOS

Если Файл.Открыта()=0 Тогда //проверяем, удалось ли открыть файл
........Сообщить("Не удалось открыть файл!");
КонецЕсли;

Файл.Первая(); //позиционируемся на первой записи
Пока Файл.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
.......НомерЗаписи = Файл.НомерЗаписи(); //получаем номер текущей записи
.......НазвТовара = Файл.NAME; //получаем значение поля
.......Цена = Файл.ПолучитьЗначениеПоля("PRICE"); //так тоже можно, но чуть медленнее
.......Файл.Следующая(); //переходим на следующую запись
КонецЦикла;

Файл.Последняя(); //позиционируемся на первой записи
Пока Файл.ВНачале()=0 Цикл //пока не дошли до начала, крутим цикл
.......НазвТовара = Файл.NAME;
.......Цена = Файл.PRICE;
.......Файл. Предыдущая(); //переходим на предыдущую запись
КонецЦикла;

Для н = 1 По Файл.КоличествоЗаписей() Цикл //здесь все понятно, по-моему
......Файл.Перейти(н); //позиционируемся на определенной записи
.......НазвТовара = Файл.NAME;
.......Цена = Файл.PRICE;
КонецЦикла;

Файл.ЗакрытьФайл(); //не забывайте пожалуйста

Запись в файл DBF

Файл = создатьОбъект("XBASE"); //создаем ссылку на файл DBF

//определяем структуру файла
//Синтаксис: ДобавитьПоле(<Название>,<Тип>,<Длина>,<Точность>)

Файл.ДобавитьПоле("NAME","S",50,0);
Файл.ДобавитьПоле("PRICE","N",10,2);

Файл.СоздатьФайл("catalog.dbf"); //создаем файл физически

СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлемент()=1 Цикл
.......Файл.Добавить();
.......Файл.NAME = СпрТовары.Наименование;
.......Файл.УстановитьЗначениеПоля("PRICE",СпрТовары.Цена) //так
        тоже можно;
.......Файл.Записать();
КонецЦикла;

Файл.ЗакрытьФайл(); //не забывайте пожалуйста

Работа со структурой файла DBF

Например, создадим файл, идентичный по структуре исходному.
//При этом применяется метод ОписаниеПоля, который возвращает характеристики поля с указанным номером
//синтаксис: ОписаниеПоля(<НомерПоля>,<НазваниеПоля>,<Тип>,<Длина>,<Точность>)

Файл1
        = СоздатьОбъект("XBASE");
Файл2 = СоздатьОбъект("XBASE");

Файл1 = ОткрытьФайл("file1.dbf");

Для н = 1 По Файл1.КоличествоПолей() Цикл
........НазвПоля = "";
........Тип = "";
........Длина = 0;
........Точность = 0;
........Файл1.ОписаниеПоля(н,назвПоля,Тип,Длина,Точность);
........Файл2.ДобавитьПоле(назвПоля,Тип,Длина,Точность);
КонецЦикла;

Для работы с файлом DBF неизвестной структуры часто применяются следующие методы:
ПолучитьЗначениеПоля(<ИмяПоля>);
УстановитьЗначениеПоля(<ИмяПоля>,<значение>);

Работа с удаленными записями
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.

Файл.ПоказыватьУдаленные(1);
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.ЗаписьУдалена()=1 Тогда
............Файл.Восстановить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;

Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.PRICE < 1000 Тогда
............Файл.Удалить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;

Файл.Сжать(); //удалить записи физически

Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Файл.ОчиститьВсе();

Стоит еще отметить про метод Очистить(), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа "строковый" приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».

Работа с индексами

Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.

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

Основное правило: индекс нужен, чтобы быстро искать нужную запись.

DBF-ФАЙЛ
Индекс по фамилии

Физ. номер записи | Фамилия
1 | Иванов
2 | Абдулов
3 | Барабанов
4 | Мирнов
5 | Раскольников
6 | Комаров

Фамилия | Физ. номер записи
Абдулов | 2
Барабанов | 3
Иванов | 1
Мирнов | 4
Комаров | 6
Раскольников | 5

Нужно быстро найти Комаров. В неупорядоченном исходном файле искать его можно только последовательным перебором всех записей, что будет очень долго при большом числе записей. В индексе найти Комарова можно очень быстро, поскольку индекс отсортирован по полю Фамилия. При этом мы узнаем физический номер записи в файле DBF и производим прямое позиционирование на нужную запись.

После
        создания структуры базы данных можно добавить индексы следующим образом:
//Синтаксис: ДобавитьИндекс(<Название>, <Выражение>, <Уникальность>,
        <Убывание>, <Фильтр>)

Файл = СоздатьОбъект("XBase");
Файл.ДобавитьПоле("NAME", 1, 19, 3);
Файл.ДобавитьПоле("PRICE", 2, 25, 0);
Файл.ДобавитьИндекс("IDXCODE", "CODE", 1, 0,
        "");
Файл.ДобавитьИндекс("IDXNAME", "NAME", 0, 0,
        "");
Файл.ДобавитьИндекс("IDXNAMECODE", "NAME+CODE",
        0, 0, "");
Файл.СоздатьФайл("mydb.dbf", "mydb.cdx");

//1-й вариант
Файл.ТекущийИндекс("IDXNAME");
Файл.Найти("Иванов",0); //передается значение и режим
        поиска

//2-й вариант
Файл.ТекущийИндекс("IDXNAMECODE");
Файл.Ключ.NAME = "Иванов";
Файл.Ключ.CODE = 123;
Файл.НайтиПоКлючу(0);

//после сбоя рекомендуется заново переформировать все индексы
Файл.Переиндексировать();

В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.


Объект "Диаграмма"
Автор главы
Вадим Русаков

Диаграммы в 1С

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

Создание диаграммы

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

Задание типа диаграммы

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

Настройка внешнего вида диаграммы

Для того чтобы включить режим форматирования областей диаграммы, необходимо выбрать пункт Изменить подменю Объект: 1С. V7. Диаграмма меню Действия (тое же пункт есть в контекстном меню диаграммы). Каждая из составных частей диаграммы в режиме редактирования имеет пункт контекстного меню Формат области … Настройка внешнего вида состоит из выбора заливки, рамки, цвета и шрифта текста и т.п. Там же можно определить, например, сетку для области построения. После завершения форматирования достаточно щелкнуть по любой ячейке таблицы, чтобы выключить режим форматирования.

Наполнение данными диаграммы

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

ОбработкаДиаграммы(Таб.ТекущийОбъект)
где: ОбработкаДиаграммы - имя процедуры, Таб - имя выходной таблицы (должна быть предварительно создана методом СоздатьОбъект()).

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

Процедура СформироватьДиаграмму(Диаграмма1)
где Диаграмма1 - идентификатор, в который передается контекст объекта Диаграмма. Все методы объекта записываются через точку после идентификатора.

Основы программирования

Изменение заголовка таблицы

Диаграмма1.Заголовок = "Поступления от покупателей";

Работа с сериями диаграммы

//установим количество серий. Каждая при этом получит свой номер.
Диаграмма1.КоличествоСерий(3); // так у нас будет три серии
//однако если в другом методе будет передана серия с большим номером,
//количество серий будет автоматически увеличено.

КолСерий = Диаграмма1.КоличествоСерий();
// а так переменной КолСерий будет передано текущее количество серий

// так мы зададим имя "Рубли" серии № 1
Диаграмма1.УстановитьИмяСерии(1, "Рубли");

// установим цвет
        серии № 2
// этот метод не обязательный, как впрочем и некоторые другие
Диаграмма1.ЦветСерии(2, 35, 67, 90);
// установили: 35 единиц красной компоненты, 67 - зеленой, 90 - синей

//можно установить имена серий автоматически: Серия1, Серия2, и т.д.
Диаграмма1.АвтоУстановкаИменСерий(1);
//если поставить вместо флага 1 флаг 0, автоустановка имен будет запрещена.

Работа с точками диаграммы

//установим количество
        точек, скажем, 8 штук
Диаграмма1.КоличествоТочек(8);
//однако если в другом методе будет передана тока с большим номером,
//количество точек будет автоматически увеличено.

// метод может возвратить текущее количество точек
КолТочек = Диаграмма1.КоличествоТочек();

// можно установить имя любой точки
Диаграмма1.УстановитьИмяТочки(7, "7 точка");

//можно установить имена точек автоматически: 1, 2, 3, и т.д.
Диаграмма1. АвтоУстановкаИменТочек(1);
//если поставить вместо флага 1 флаг 0, автоустановка имен будет запрещена.

Передача значений точкам серий

Это самый важный метод диаграммы. Он устанавливает значение серии <НомерСерии> в точке <НомерТочки> равным <Значение> с возможностью последующей расшифровки. Все параметры, кроме параметра <Расшифровка> должны быть числовыми выражениями.
Синтаксис:

УстановитьЗначение(<НомерТочки>,<НомерСерии>,<Значение>,<Расшифровка>)

<Расшифровка> - параметр не обязательный, может иметь любой тип. Это значение, которое будет передано предопределенной процедуре ОбработкаЯчейкиТаблицы при двойном щелчке мышью на точке диаграммы. Так можно получать расшифровки точек диаграммы. Удобная штука!

Два вспомогательных метода диаграммы

Запрет перерисовки может ускорить работу системы во время наполнения таблицы данными.

Диаграмма1.Обновление(0);
//то же выражение, но с флагом 1 разрешит перерисовку

Очистка всех установленных значений имен и количеств точек, серий, диаграммы делается так:

Диаграмма1.Очистить();

Пример использования диаграммы в 1С: Бухгалтерия

Процедура СформироватьДиаграмму(Диаграмма1)

// Блокируем обновление,
          пока обрабатываются данные
Диаграмма1.Обновление(0);
Диаграмма1.Заголовок = "Поступления от покупателей";
Диаграмма1.УстановитьИмяСерии(1, "Рубли");
Диаграмма1.АвтоУстановкаИменТочек(1);

// Заполним диаграмму значениями
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");

Бухит.ВыполнитьЗапрос(НачКвартала(РабочаяДата()),
КонКвартала(РабочаяДата()),"60.1",,,1,"Неделя","С");

БухИт.ВыбратьПериоды();
А = 1;
// дебетовые обороты по счету 60.1 покажут поступления
// денег от покупателей
Пока БухИт.ПолучитьПериод() = 1 Цикл

Диаграмма1.УстановитьЗначение(А, 1, БухИт.ДО());
А = А +1;

КонецЦикла;

// после наполнения данными перерисовываем
Диаграмма1.Обновление(1);

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

Результат работы процедуры на рис.2:


ДОКУМЕНТЫ
Ссылка на документ
Создание документа
Поиск документа
Удаление документа
Перебор документов
Табличная часть 		Сегодня Ельцин весь день проработал с документами:
он еще раз просмотрел свой паспорт и свидетельство о рождении.

Зачем нужны документы?

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

Таким образом, документы предназначены для хранения основной информации обо всех событиях, происходящих на предприятии, и, разумеется, имеющих смысл с точки зрения экономики. При помощи документов отражаются и платежи с расчетного счета, и операции но кассе, и кадровые перемещения, и движения по складу, и прочие подобные события.

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

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

Данные, вводимые в документ (реквизиты документа), обычно содержат информацию о происшедшем событии: например, в накладной — информацию о том, с какого склада, каких товаров и сколько отгружено; в приказе о приеме на работу — информацию о сотруднике, оклад, другие сведения. Кроме собственно записи, для документа весьма важным свойством является его проведение. При проведении документ может отразить зафиксированное им событие в механизмах, реализуемых компонентами. Например, если установлена компонента «Бухгалтерский учет», документ может записать бухгалтерскую операцию, отразив в виде проводок в бухгалтерском учете информацию, содержащуюся в документе.

Следует заранее уточнить, что в Конфигураторе создается, строго говоря, не сам документ, а средство ввода документа в компьютер — шаблон документа. Каждый создаваемый в конфигураторе документ является описанием множества документов одного вида. Например, созданный в Конфигураторе документ «Накладная» при работе с системой 1С:Предприятие позволит формировать накладные, которые будут иметь разное содержание, по одинаковый набор реквизитов, одинаковую логику поведения и так далее.

Состав документа

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

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

У документа может быть несколько шаблонов печатных форм. Средствами встроенного языка (метод ИсходнаяТаблица) задается тот шаблон печатной формы, который будет использоваться.

Шаблоны печатных форм (таблицы) могут быть общие. Это дает возможность использовать один шаблон для печати нескольких видов документов. Т.е. общая таблица является глобальной для конфигурации и может быть использована в любом модуле. Примером из типовой конфигурации может являться шаблон печатной формы "Отчет о движении документа", который используется разными модулями конфигурации

Проведение документа

Некоторые документы могут проводиться. С точки зрения пользователя, "провести" документ означает "пустить его в дело". С точки зрения программиста, при проведении документа сработает модуль проведения документа (процедура ОбработкаПроведения). Именно там определяются все действия, выполняемые при проведении документа. Например, при проведении документа "Приказ о приеме на работу" сработает модуль этого документа, который в справочник Сотрудники добавит нового сотрудника.

Атрибуты документов (реквизиты)

При создании структуры документа в Конфигураторе допускается определенный уровень абстракции. Так, в большинстве документов можно выделить две основные части: шапка и табличная часть. Как правило, в шапке содержатся реквизиты, которые являются общими для всего документа. Например, в счете на оплату в заголовочную часть помещаются установочные данные документа — номер и дата, а также сведения о плательщике и получателе платежа.

Каждый вид документа может иметь неограниченное количество реквизитов в шапке и в многострочной части. Для документа создается форма ввода — экранный диалог. При настройке для документа задаются также общие характеристики: длина номера документа, условия поддержки уникальности номеров и другие. Все документы характеризуются номером, датой и временем.

Термин "шапка" — достаточно условный и может относиться не только к реквизитам документа, которые физически находятся в верхней части бумажного бланка документа. Поэтому, в наиболее общем случае, реквизитом заголовочной части будет считаться любой реквизит, который встречается в документе только один раз. Табличная часть документа представляет собой список однотипных строк с информацией. Например, в уже упоминавшемся счете на оплату табличная часть — это перечень товаров или услуг, подлежащих оплате. Помимо наименований, табличная часть документа может содержать также разнообразную дополнительную информацию — стоимость товаров или услуг, количество, объем, вес и многое другое. В большинстве случаев табличная часть используется для формирования общей суммы документа. Структура документа в системе 1С:Предприятие 7.7 может содержать только одну табличную часть.

При разработке документов в Конфигураторе может быть создано необходимое количество общих реквизитов документов. Такие реквизиты, будучи созданными один раз, становятся доступными для всех документов: общие реквизиты можно размещать в формах документов, к значениям общих реквизитов можно обращаться из встроенного языка системы 1С:Предприятие. Работая с системой 1С:Предприятие, пользователь может выполнять отбор документов в журналах по значениям общих реквизитов документов.

Журналы документов

Все документы хранятся в журналах. Журнал документов -- это электронный аналог обычной бумажной папки. На экране журнал выглядит как таблица, строки которой являются документами. Например, вы можете создать журнал Приказы кадровые, который будет включать документы "Приказ о приеме на работу", "Приказ об увольнении", "Кадровое перемещение". С этим журналом будет работать пользователь-кадровик. Или можно создать отдельный журнал для банковских документов, куда войдут документы "Платежное поручение" и др.

Журналы документов предназначены для просмотра документов. Каждый вид документа может быть отнесен к определенному журналу. Сам журнал документов не добавляет новых данных в систему, а служит только как средство просмотра списка документов одного или нескольких видов. Для документов разных видов можно указывать один журнал, что позволяет произвольным образом группировать документы в журналах. Назначенный документам журнал можно менять. Например, может быть создан журнал «Складские документы», который будет содержать все приходные накладные и накладные на внутреннее перемещение. Назначенный документам журнал можно менять.

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

Для работы с документами могут использоваться специально созданные общие журналы. От «обычных» журналов документов их отличает возможность отбора документов по значению, указанному пользователем.

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

У журнала документов есть экранная форма, где можно настраивать отображаемые колонки. Можно создавать дополнительные колонки, которые будут отображать информацию из документов. Например, в журнале ПриказыКадровые удобно сразу видеть, к какому сотруднику относится каждый документ, для этого создается Графа журнала Сотрудник.

Основы программирования

Ссылка на документ
Для работы с документом из какого-нибудь модуля требуется сначала создать ссылку на этот документ.

ДокПрием = СоздатьОбъект("Документ.ПриемНаРаботу");
ДокУвольн = СоздатьОбъект("Документ.ПриказОбУвольнении");

Создание, сохранение и проведение документа

ДокПрием.Новый();
ДокПрием.ФИО = "Иванов Иван Иванович";
ДокПрием.Оклад = 5000;
ДокПрием.Записать();

//программное проведение документа
ДокПрием.Провести();

Поиск документа

ДокПрием.НайтиДокумент(Док);
ДокПрием.НайтиПоНомеру(123)

Удаление документа

ДокПрием.Удалить(0); //пометка на удаление
ДокПрием.Удалить(1); //непосредственное удаление

//можно проверить, помечен ли документ на удаление
//функция возвращает 1 - если помечен, 0 - если нет
Пометка = ДокПрием.ПометкаУдаления();

Перебор документов

ДокПрием.ВыбратьДокументы(дата1, дата2); //можно задать период выборки
Пока ДокПрием.ПолучитьДокумент()=1 Цикл
......<действия с текущим документом>
КонецЦикла;

Табличная часть документа
Перебор строк, добавление и удаление строк табличной части документа..

//перебор строк табличной части
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку()=1 Цикл
            ...
КонецЦикла;

//добавление строки
Док.НоваяСтрока();
Док.РеквизитТаблЧасти = Значение;

//удаление строки
Док.УдалитьСтроку();


Доставочка (пример)

Постановка задачи
Объекты конфигурации
Справочники
Документ "Приход товара"
Документ "Заказ"
Документ "Снятие заказа"
Документ "Путевой лист"
Документ "Отчет курьера"
Отчет "Товары"
 Отчеты о доходах
Что можно скачать

- Драку на 50 человек заказывали?
- Нет, что вы!
- Оплачено!

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

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Справочники
  • Клиенты
  • Товары
  • Курьеры
  • Районы
Документы
  • ПриходТовара
  • Заказ
  • СнятиеЗаказа
  • ПутевойЛист
  • ОтчетКурьера
Регистры
Регистр | Измерения | Ресурсы
Остатки (регистр остатков) | Товар | Количество
Заказы (регистр остатков) | Товар Клиент Заказ Цена ДатаДоставки | Количество Сумма
Доставка (регистр остатков) (хранит доставляемые в данный момент товары) | Товар Клиент Заказ Цена ДатаДоставки | Количество Сумма
Доходы (оборотный регистр) | Товар Клиент | Доход
Отчеты
  • Товары
  • Сводная таблица

Справочники

Обслуживаемая магазиномом территория делится на районы. При регистрации клиента указывается его название / ФИО, адрес, телефон и район, в котором он находится. В справочнике Курьеры перечислены фамилии курьеров или названия мобильных отрядов, осуществляющих доставку товаров покупателю. Справочник товары является иерархическим и содержит 3 уровня, т.е. товары могут быть объединены в группы. Для товара указывается цена, по которой он продается клиентам.

Приход товара

Экранная форма документа выглядит следующим образом:

При проведении документа производятся движения в регистре Остатки:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Регистр.Остатки.Товар
            = Товар;
Регистр.Остатки.Количество = Количество;
Регистр.Остатки.ДвижениеПриходВыполнить();

КонецЦикла;

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

Заказ

Экранная форма документа выглядит следующим образом:

При проведении документа производятся движения в регистре Заказы:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Регистр.Заказы.Товар
            = Товар;
Регистр.Заказы.Клиент = Клиент;
Регистр.Заказы.ДатаДоставки = ДатаДоставки;
Регистр.Заказы.Заказ = ТекущийДокумент();
Регистр.Заказы.Цена = Цена;
Регистр.Заказы.Количество = Количество;
Регистр.Заказы.Сумма = Сумма;
Регистр.Заказы.ДвижениеПриходВыполнить();

КонецЦикла;

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

Снятие заказа

Документ предназначен для отмены ранее сделанных заказов. Можно уменьшить количество заказанного ранее товара. Экранная форма документа выглядит следующим образом:

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

При проведении документа производятся движения в регистре Заказы:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Если Количество > 0 Тогда

Регистр.Заказы.Товар
              = Товар;
Регистр.Заказы.Клиент = Клиент;
Регистр.Заказы.ДатаДоставки = ДатаДоставки;
Регистр.Заказы.Заказ = Заказ;
Регистр.Заказы.Цена = Цена;
Регистр.Заказы.Количество = Количество;
Регистр.Заказы.Сумма = Сумма;
Регистр.Заказы.ДвижениеРасходВыполнить();

КонецЕсли;

КонецЦикла;

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

Путевой лист

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

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

После этого путевой лист распечатывается и проводится. Печатная форма путевого листа выглядит следующим образом:

При проведении документа совершаются движения в регистрах Остатки и Доставка:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

//доставляемые
            товары
Регистр.Доставка.Товар = Товар;
Регистр.Доставка.Клиент = Клиент;
Регистр.Доставка.Заказ = Заказ;
Регистр.Доставка.Цена = Цена;
Регистр.Доставка.ДатаДоставки = ДатаДоставки;
Регистр.Доставка.Количество = Количество;
Регистр.Доставка.Сумма = Сумма;
Регистр.Доставка.ДвижениеПриходВыполнить();

//уменьшаются остатки по данному товару
Регистр.Остатки.Товар = Товар;
Регистр.Остатки.Количество = Количество;
Регистр.Остатки.ДвижениеРасходВыполнить();

КонецЦикла;

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

Отчет курьера

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

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

При проведении документа совершаются движения в регистрах:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Если Доставлено > 0 Тогда

Регистр.Доставка.Товар
              = Товар;
Регистр.Доставка.Клиент = Клиент;
Регистр.Доставка.Цена = Цена;
Регистр.Доставка.Заказ = Заказ;
Регистр.Доставка.ДатаДоставки = ДатаДоставки;
Регистр.Доставка.Количество = Доставлено;
Регистр.Доставка.Сумма = Сумма;
Регистр.Доставка.ДвижениеРасходВыполнить();

Регистр.Заказы.Товар
              = Товар;
Регистр.Заказы.Клиент = Клиент;
Регистр.Заказы.ДатаДоставки = ДатаДоставки;
Регистр.Заказы.Цена = Цена;
Регистр.Заказы.Заказ = Заказ;
Регистр.Заказы.Количество = Доставлено;
Регистр.Заказы.Сумма = Сумма;
Регистр.Заказы.ДвижениеРасходВыполнить();

Регистр.Доходы.Товар = Товар;
Регистр.Доходы.Клиент = Клиент;
Регистр.Доходы.Доход = Сумма;
Регистр.Доходы.ДвижениеВыполнить();

КонецЕсли;

Если Фл_ВозвратОстатков=1 Тогда

Если Доставлено < Заказано Тогда

Регистр.Доставка.Товар
                = Товар;
Регистр.Доставка.Клиент = Клиент;
Регистр.Доставка.Цена = Цена;
Регистр.Доставка.Заказ = Заказ;
Регистр.Доставка.ДатаДоставки = ДатаДоставки;
Регистр.Доставка.Количество = Доставлено;
Регистр.Доставка.Сумма = Сумма;
Регистр.Доставка.ДвижениеРасходВыполнить();

Регистр.Остатки.Товар = Товар;
Регистр.Остатки.Количество = Заказано - Доставлено;
Регистр.Остатки.ДвижениеПриходВыполнить();

КонецЕсли;

КонецЕсли;

КонецЦикла;

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

Отчет "Товары"

Данный отчет показывает текущую картину по товарам и оценивает дефицит товаров на указанный будущий период. Экранная форма диалога отчета выглядит следующим образом:

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

Пример работы отчета представлен ниже:

Дефицит определяется по формуле:

Дефицит = (Заказано - Доставляется) - Остаток;

Доходы

Определять доходы магазина можно по регистру Доходы с помощью отчетов СводнаяТаблица и ОтчетПоРегистру, разработанных фирмой КИНТ.

Что можно скачать

Скачать конфигурацию "Доставочка" (45К)


Игра "Охота на лис" (пример)
Постановка задачи
Объекты конфигурации
Технические подробности
Домашнее задание
 Что можно скачать 		Взрослые отличаются от детей только ценой своих игрушек.

Постановка задачи

Требуется создать средствами 1С игру "Охота на лис". Правила игры следующие.

Цель игры состоит в том, чтобы как можно быстрее найти всех лис на игровом поле.
Игровое поле состоит из информационого и игрового полей.
Игрок имеет возможность открыть любую клетку, щелкнув ее левой кнопкой мыши. Если в клетке находится лиса, то она показывается.
Если лисы нет, в клетке появится цифра, которая указывает, сколько лис находится на горизонтали, вертикали и диагоналях клетки. Игра заканчивается после поимки всех лис.

Объекты конфигурации
Игра реализована в виде внешнего отчета (ert-файл). Поэтому игру можно подключить к любой конфигурации и доставить радость вашим пользователям!

Технические подробности

Игровое поле реализовано в виде множества кнопок на трех слоях формы. Текущая игровая ситуация хранится в массиве Поле[100]. Число 0 означает куст, 1 - скрытую лису, 2- пойманную лису, 3 - число. В процедуре ОбновитьПоле выводится игровое поле на форме в соответствии с этим массивом.

Кнопка Игра, вызывает процедуру Игра(), которая начинает новую игру: расставляет на поле лис с помощью функции СлучайноеЧисло(). Кстати, очень полезная функция, но 1С ее почему-то не реализовала. Наверное, думала, что в бухгалтерии "ничто не случайно".

При нажатии на кнопку с лисой вызывается процедура ЛисаПоле(), при нажатии на кнопку с кустом или скрытой лисой вызывается процедура КустПоле. Если на поле скрытой лисы не было, то отображается число лис же горизонтали, вертикали и диагоналях клетки. Это число подсчитывается процедурой КоличествоЗапеленгованныхЛис().

Если количество пойманных лис (переменная ПЛ) равняется количеству всех лис (переменная ВЛ), то игра заканчивается. Если ходов было сделано меньше, чем в рекорде, то победителю придлагается увековечить свое достижение (процедура Увековечить).

Домашнее задание

Заставьте компьютер играть в эту игру. Придумайте алгоритм для поиска всех лис за минимальное число ходов.

Что можно скачать

Скачать игру "Охота на лис" (14К)


Работёнка (пример)

Постановка задачи
Объекты конфигурации
Справочник "Работодатели"
 Справочник "Соискатели"
 Справочник "Резюме "
 Справочник "Вакансии"
Обработка "Чистка базы"
 Что можно скачать

 Работа не волк - в лес не убежит.

Постановка задачи
Требуется создать простейшую информационно-справочную систему для трудоустройства. Система должна хранить список работодателей и соискателей. У каждого работодателя может быть несколько вакансий. У каждого соискателя может быть несколько резюме. Система должна позволять работодателям подбирать сотрудников, а соискателям помогать находить место работы.

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Справочники
  • Работодатели
  • Соискатели
  • Вакансии
  • Резюме
  • Должности
Перечисления
  • ВидОбразования
  • ГрафикРаботы
  • Пол
Обработки
  • ЧисткаБазы

Справочник "Работодатели"

Данный справочник будет содержать сведения о фирмах и индвидуальных предпринимателях, которые предлагают свои вакансии. При нажатии на кнопку Вакансии показывается список вакансий данного работодателя.

Справочник "Соискатели"

Данный справочник будет хранить сведения о соискателях, которые предлагают свои резюме. При нажатии на кнопку Вакансии показывается список резюме данного соискателя. У каждого соискателя может быть несколько резюме. Например, соискатель знает 1С и знает Photoshop, но указывать их в одном резюме - признак плохого тона. Себя надо позиционировать очень четко, потому что работодателей раздражают люди, которые знают все.

Справочник "Резюме"

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

Справочник "Вакансии"

Данный справочник будет содержать сведения о вакансиях работодателей. У каждого работодателя может быть несколько различных вакансий. Некоторые поля можно не заполнять, например График работы, Образование, Пол. Это означает, что работодателя не интересует данная характеристика. При нажатии на кнопку "Поиск подходящих резюме" программа просматривает список резюме и выбирает из них те, которые подходят для данной вакансии.

Обработка "Чистка базы"

Данная обработка находит вакансии и резюме, срок размещения которых истек, и помечает их на удаление.

Что можно скачать

Скачать конфигурацию "Работёнка" (30К)


Простейший кадровый учет

Сейчас мы создадим мини-систему кадрового учета сотрудников предприятия. Она позволит принимать и увольнять сотрудников, а также работать с кадровыми документами.

Каждая конфигурация должна храниться в отдельном каталоге (папке).

1. Создайте новую папку на любом диске, например, "C:\Учебная"
2. Запустите 1С:Предприятие. Откроется список информационных баз.

1С:Предприятие может работать с несколькими базами данных на одном компьютере. Например, в одной базе ведется кадровый учет, в другой базе - учет товаров, в третьей - бухгалтерский учет для Фирмы А, в четвертой - бухгалтерский учет для фирмы Б.

3. Нажмите кнопку Добавить. Укажите имя информационной базы, как оно будет отображаться в списке баз, например "Учебная". Имя базы может быть произвольным, от него ничего не зависит.

4. В следующем поле укажите путь к папке, которую вы создали на 1 шаге. Нажмите кнопку "…", войдите в папку и нажмите Выбрать.

Папка может располагаться на локальном жестком диске компьютера, например "C:\Учебная" или на другом компьютере в сети, например, "\\SERVER\KADR". При этом должны быть предоставлены полные права доступа к этой папке (чтение, запись и т.д.).

5. Нажмите ОК. В списке информационных баз появится новая строка. Для ее редактирования можно нажать кнопку Изменить. Например, информационную базу перенесли в другое место или вы хотите задать другое название для информационной базы. Для удаления информационной базы из списка нужно нажать кнопку Удалить. При этом информационная база удаляется из списка, но не удаляется физически с диска.

<Картинка, обведены кнопки Изменить, Удалить>

6. Укажите режим запуска Конфигуратор.

1С может запускаться в четырех режимах:

  • Предприятие - режим использования информационной базы. В этом режиме работают обычные пользователи, вводят данные, печатают отчеты и т.д. В этом режиме нельзя редактировать структуру конфигурации.
  • Конфигуратор - режим конфигурирования (программирования). В этом режиме работают программисты, создают новые справочники, отчеты, пишут программные модули. Вводить данные в информационную базу в этом режиме нельзя.
  • Монитор - режим наблюдения за пользователями, работающими в данный момент с информационной базой. Все операции с информационной базой регистрируются в Журнале регистраций. В режиме Монитор можно получить протокол всех операций совершенных конкретным пользователем, над конкретным объектом, а также можно задать другие условия фильтра.
  • Отладчик - режим для программистов, когда у них что-то не ладится с программой. Здесь можно отследить как выполняется программа буквально по шагам. При этом программа выполняется в режиме Предприятие.

7. Нажмите ОК для запуска базы в режиме конфигуратор.

8. Так как в созданной папке пока ничего нет, то 1С спросит в каком формате будет храниться база данных: В файлах DBF или на SQL-Server Укажите формат "Файлы DBF" и нажмите ОК.

9. Запустится конфигуратор. Откройте дерево конфигурации, в котором мы будем работать очень часто. Для этого щелкните меню Конфигурация => Открыть конфигурацию или кнопочку [image]. Появится окно дерева конфигурации. Задайте ему нормальные размеры.

В этом окне представлены все объекты конфигурации, такие как справочники, документы, отчеты и т.д. Для раскрытия какой-то ветки нужно два щелкнуть на плюсике или два раза щелкнуть на ее названии.

Создание объектов конфигурации

10. Установите курсор на строку Справочники и щелкните кнопку [image] (или щелкните правой кнопкой мыши и выберите Новый справочник). При этом откроется окно Конструктора справочников.

Конструктуры предназначены для помощи программисту в выполнении определенных действий. Только что мы увидели конструктор справочников. В 1С есть еще конструктур документов, конструктор отчетов, конструктор запросов и т.д. Все действия, которые делает конструктор, можно выполнить вручную, но возможно, что с конструктором будет быстрее. Если вам конструктор не нужен (или не нравится), тогда снимите флажок "Использовать конструкторы при создании новых объектов". В данном Учебнике мы все будем делать вручную, поскольку только так можно стать настоящим программистом и выжать из 1С все, на что она способна (или он? кстати, какого рода слово "1С". Это он, она или оно?).

11. Снимите флажок "Использовать конструкторы при создании новых объектов" и нажмите кнопку Отмена для закрытия конструктора. Он будет сопротивляться, но вы будьте настойчивы!

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

12. Опять установите курсор на строку Справочники и щелкните кнопку [image] (или щелкните правой кнопкой мыши и выберите Новый справочник). При этом откроется окно Конструктора справочников уже не откроется, а появится обычное окно для редактирования структуры справочника.

13. Задайте идентификатор справочника (имя), например сейчас мы создадим справочник "Должности".

Идентификатор справочника очень важен, поскольку он будет использоваться при программировании. Его нельзя будет исправить просто так, поскольку придется также исправить все места в программе, где используется этот справочник. Относитесь к идентификатору справочника очень серьезно. Идентификатор должен быть лаконичным, понятным, отражающим содержимое справочника, например: "Страны", "Сотрудники", "Товары" и т.д.

Заметьте, что общепринятым правилом является множественное число в имени справочника, но это не обязательно. Например, вы можете создать справочник "АдреснаяКнига". В идентификаторах объектов, а также в названиях переменных не может быть пробелов, но могут быть цифры и знак подчеркивания. Идентификатор не может начинаться с цифры. Правильное название объектов, переменных - признак хорошего стиля программирования и залог успеха. Будьте профессионалами в этом деле!

14. Задайте длину наименования 30 символов.

У каждого справочника есть уже заранее заданные два поля "Код" и "Наименование". Вы можете редактировать длину наименования, длину кода, а тажке тип кода: Числовой/Текстовый.

15. Закройте окно структуры справочника Должности.

14. На всякий случай сохраните конфигурацию, чтобы ваш труд не пропал даром, если вдруг отключится электричество или прямо сейчас наступит конец света.

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

Нажмите Да.

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

Нажимаем Да.

1С проанализирует структуру базы и покажет окно со списком изменений.

Нажмите кнопку "Принять".

После реорганизации базы появится сообщение "Реорганизация информациии закончена ".

15. Создадим справочник Сотрудники. (Установите курсор на Справочники и щелкните кнопку Новый). Задайте имя справочника (идентификатор) "Сотрудники".

16. Задайте длину наименования 100 символов.

В наименовании у нас будет храниться ФИО сотрудника. Иногда бывают довольно длинные имена, например "Александровский-Петровский Александр Александрович".

17. В этом справочнике у нас будет еще одно поле (реквизит, атрибут) Должность. Список реквизитов сейчас пустой. Нажмите кнопку Добавить, откроется окно редактирования свойств реквизита. Кстати, реквизит, атрибут и поле - это в принципе одно и то же. Просто нужно привыкнуть к слову "реквизит".

18. Задайте имя реквизита "Должность". Укажите тип реквизита "Справочник.Должности", который мы создали раньше. Это говорит о том, что значения данного реквизита будут выбираться из справочника Должности. Нажмите ОК.

19. Создайте реквизит Оклад (тип Число, Точность 2 знака после запятой)

20. Создайте реквизиты ДатаПриема и ДатаУвольнения (тип Дата)

21. Сохраните конфигурацию (на всякий случай).

Теперь у нас есть два справочника и можно ввести некоторые данные.

22. Запустите 1С:Предприятие в режиме Предприятие. Это можно сделать прямо из Конфигуратора, нажав кнопку [image]. Появится окно 1С:Предприятие.

23. Откройте справочник Должности. Для этого щеклните меню Операции => Справочники => Должности. Откроется окно справочника.

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

24. Введите несколько должностей, используя кнопку [image] или клавишу INS. Например, Директор, Бухгалтер, Программист.

Заметьте, что коды присваиваются автоматически, хотя их можно редактировать. При этом необходимо соблюдать уникальность кодов. Параметры уникальности можно настраивать в конфигураторе, например можно ее вообще отключить, если она не нужна.

По умолчанию установлена сортировка по Наименованию. Это позволяет набрать первые буквы названия должности и курсор автоматически перейдет на нужную должность. Можно установить и другой тип сортировки: по коду или по реквизиту. Для этого нужно щелкнуть правой кнопкой и выбрать Сортировка. Мы этого делать не будем и оставим все, как есть.

25. Закройте справочник Должности и откройте справочник Сотрудники. (Щеклните меню Операции => Справочники => Сотрудники).

26. Заведите нескольких сотрудников. Например, Иванов - директор, Петров - Бухгалтер, Сидоров - Программист.

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

В реальной жизни принятие сотрудника на работу производится кадровым документом "Приказ о приеме на работу". Поэтому сейчас мы это организуем.

27. Закройте 1С:Предприятие и запустите базу в режиме Конфигуратор.

28. Теперь создайте новый документ "ПриемНаРаботу". (установите курсор на Документы и щелкните Новый). Задайте имя документа ПриемНаРаботу.

29. Добавьте реквизит шапки "Сотрудник", укажите ему тип значения Строка и длина 100 символов. Нажмите ОК.

У документа есть шапка и табличная часть. В шапке содержатся реквизиты, которые относятся к документу в целом, например НомерДок, ДатаДок и т.д. В табличной части содержатся строки. Например, один документ Накладная содержит информацию по нескольким товарам. Такая ситуация в 1С предусмотрена. (правда не предусмотрена ситуация, когда в документе есть две или даже несколько табличных частей)

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

30. У документа должна быть удобная форма для ввода данных. Нажмите кнопку "Форма" в нижней части окна.

31. Так как мы сюда зашли в первый раз, то 1С предлагает автоматически создать форму документа.

Мы договорились все делать вручную, поэтому нажимаем Отмена.

32. Нам нужно создать форму следующего вида:

· Установите подходящие размеры формы.
· Разместите на форме текстовую надпись "Прием на работу". Для этого щелкните на кнопку [image] внизу и затем на форме.

Кстати, рядом с этой кнопкой есть и другие элементы управления, которыми мы будем пользоваться в дальнейшем: кнопки, поля, переключатели, флажки и т.д.

· Укажите размер шрифта побольше, это же все-таки заголовок. Для этого щелкните правой кнопкой на надписи, выберите Свойства, щелкните вкладку Шрифт, снимите флажок "Шрифт по умолчанию" и укажите размер шрифта 12, Можете еще что-нибудь указать, например Цвет, жирность и т.д. Не бойтесь экспериментировать, мы же пока только учимся. нажмите ОК.

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

Теперь в этот документ можно будет вводить данные о новом сотруднике. Затем пользователь нажмет кнопку ОК и ваша программа должна добавить в справочник Сотрудники новый элемент (новую строку). При нажатии ОК документ сначала будет записан, а потом будет проведен.

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

Что конкретно произойдет при проведении документа определяется программистом. При проведении выполнится предопределенная процедура ОбработкаПроведения(). Именно в этой процедуре программист пишет программу, которая и совершает все изменения в системе. Сейчас нам нужно до нее добраться. Она хранится в "Модуле документа".

Для открытия модуля документа закройте экранную форму документа. На экране останется окно структуры документа. Внизу есть кнопка "Модуль документа", вот на нее и нажмите. Откроется окно для редактирования текста программы.

Там уже есть процедура ОбработкаПроведения, но внутри нее пока ничего существенного. Напишите там следующий текст, пока не вникая в его смысл.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.Новый();
СпрСотр.Наименование = Сотрудник;
СпрСотр.Должность = Должность;
СпрСотр.Оклад = Оклад;
СпрСотр.ДатаПриема = ДатаПриема;
СпрСотр.Записать();

Хотя, если присмотреться, то можно кое-что понять. Первая строка обращается к справочнику Сотрудники. Вторая строка создает новый элемент, пока пустой. Потом заполняются реквизиты справочника, данные берутся из документа и переносятся в справочник. И в конце происходит запись измененного элемента в справочник.

Кстати, часто начинающие программисты забывают вызвать Записать(). Не попадайте в эту ловушку! Если вы не вызовете метод Записать(), то все ваши изменения не сохранятся в базе.

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

Также обратите внимание как оформляются комментарии.
// это комментарий

Комментарии не учитываются компилятором и предназначены для человека, которому нужно разобраться в программе. Комментариев не должно быть слишком много и слишком мало. Программа сама по себе должна быть понятна, без комментариев. Но в сложных местах в комментариях можно пояснить логику работы программы. Написание комментариев и понятных программ - тоже признак хорошего тона. Будьте в этом деле профессионалами!

· Закройте окно модуля и окно структуры документа. Сохраните конфигурацию.

Теперь можно попробовать принять нового сотрудника по всей форме.
· Запустите 1С в режиме Предприятие.

Все документы хранятся в журналах документов. Может быть вы не обратили внимание, но для документа "ПриемНаРаботу" был задан журнал по умолчанию "Прочие". Потом мы создадим специальный журнал для всех кадровых документов, а пока будем пользоваться тем, что есть.

· Для открытия журнала документов Прочие щелкните Операции => Журналы документов => Прочие. Откроется журнал документов.

· Щелкните кнопку [image] или нажмите клавишу INS. Откроется форма документа "Прием на работу" для ввода данных. Номер документа присвоится автоматически, дата документа - сегодняшнее число.

· Введите все данные: ФИО сотрудника, укажите ему должность и оклад.
· Нажмите кнопку ОК. Сначала документ будет записан, а потом проведен. При проведении сработает процедура ОбработкаПроведения и в справочник Сотрудники добавится новая строка. Проверьте это.

Если вдруг выскочит ошибка, значит вы неправильно написали программу. Опять запускайте Конфигуратор и все перепроверяйте.

Можно сделать так, чтобы 1С проверяла программу на синтаксические ошибки автоматически при сохранении конфигурации. Для этого в Конфигураторе щелкните меню Сервис => Параметры и установите флажок "Проверять ошибки автоматически".

Заметьте, что отсутствие синтаксических ошибок не гарантирует того, что программа правильная. В ней по-прежнему могут быть ошибки. Такие ошибки могут выскочить при выполнении программы, а могут быть очень скрытые. Ошибки - главная беда программистов. Но еще большая беда - неправильное понимание требований заказчика.

Теперь организуем правильное увольнение сотрудников с помощью кадрового приказа.
· Создайте в Конфигураторе новый документ "Увольнение".
· Укажите, что он содержит реквизиты шапки "Сотрудник" тип "Справочник.Сотрудники и "Дата увольнения" тип Дата.
· Создайте для него удобную форму для ввода данных.

· Напишите следующий
        текст в модуле документа в процедуре ОбработкаПроведения():
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.ДатаУвольнения = ДатаУвольнения;
СпрСотр.Записать();

Первая строка создает ссылку на справочник Сотрудники. Вторая строка ищет в справочнике того сотрудника, который будет уволен. Следующая строка устанавливает ему дату увольнения. И последняя строка записывает сделанные изменения в справочнике.

Создадим журнал "КадровыеДокументы". Для этого установите курсор на "Журналы документов" в дереве конфигурации и щелкните Новый. Задайте имя журнала. Здесь больше ничего не трубуется.

Теперь откройте окно для редактирования структуры документа "ПриемНаРаботу". В верхней части окна измените журнал "Прочие" на журнал "КадровыеДокументы"

То же самое проделайте для документа Увольнение.
Сохраните конфигурацию на всякий случай.

Теперь создадим пользовательское меню. В окне конфигурации внизу есть вкладка Интерфейсы.

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

Создайте новый Интерфейс и назовите его Администратор. Интерфейс появится в списке интерфейсов.
Щелкните дважды на интерфейсе и выберите "Редактировать меню". Откроется окно редактора меню.

У него есть замечательная кнопка [image], которая автоматически создает все пункты меню. Сделаем исключение и воспользуемся помощью конструктора меню, потому что нам нужно создать обычное меню для доступа ко всем объектам без всяких заморочек. Если нужно сделать что-нибудь более интересное, например, добавить разделители, перегруппировать пункты меню, то это нужно будет делать вручную.

· Нажмите кнопку [image] и затем "Построить". Конструктур автоматически создаст все пункты меню.

· Меню можно сразу протестировать, как оно будет выглядеть для пользователя. Для этого нажмите кнопку "Пуск", появится тестовое окно. Посмотрите на меню и закройте тестовое окно.

· Кстати, вы можете попробовать научиться редактировать пункты меню. Смелее экспериментируйте. Например, перетащите пункт меню Кадровые документы в пункт Документы, а пункт Журналы документов удалите. Отделите журнал от документов разделителем. Мне кажется, так будет удобнее.

· Закройте редактор меню.

Сохраните конфигурацию и запустите ее. Проверьте работу документа Увольнение и пощелкайте меню.

На этом создание простейшей системы для кадрового учета завершено. Она позволяет принимать и увольнять сотрудников. Конечно, все очень неудобно. Уволенные хранятся вместе с работающими в одном списке. Реквизитов для хранения информации очень мало, нет печатных форм документов, нет кнопочек на панели инструментов, нет кадрового перемещения - куча пробелов в нашей системе. Но это же только простейшая кадровая система и она уже работает!

Для сравнения скажу, что написание такой же системы на другом языке программирования Visual Basic или Delphi займет в два-три раза больше времени и сил. Что бы там ни говорили недоброжелатели, но на 1С программы пишутся в несколько раз быстрее.


"Конкурент-магазин 3.18"

Описание конфигурации
 Ограничения
 Начало работы
 Работа с программой
 Что можно скачать

 - Почему новые русские ходят в магазины с двумя сотовыми?
- По одному сотовому они с братками советуются, а другим указывают, что им завернуть.

Описание конфигурации

Быстрая и простая конфигурация для сети магазинов.
Идеальна для модели "Склад - сеть магазинов".
Мощные аналитические отчеты.
Анализ расхода товара по складу, реализатору (по прибыли, по количеству)
Анализ поступления выручки торговых точек
Анализ остатков по складу и реализаторам
Анализ розничных цен
Импорт-экспорт единичных документов. Удобно перебрасывать документы из
одной программы в другую, если учет ведется в разных программах.
Учет товара по торговым точкам идет в розничных ценах.
Весь товарооборот идет через склад. Например переброс товара из
одной торговой точки в другую проходить в два этапа.
1 Возврат товара на склад (ДокументРеализатора-Возврат)
2 Отпуск товара реализатору (ДокументРеализатора-Расход)
Списать товар с торговой точки можно несколькими способами.
1. Списание суммой (СписаниеРеализатора)
2. Списание товаром (ДокументРеализатора-Списание)
3. Возврат на склад, потом списать со склада (ДокументРеализатора-Возврат)
Большинство отчетов вынесено во внешние отчеты. Исправлять и дорабатывать
отчеты можно без выбрасывания пользователей из программы 1с-Торговля.
В прайс-листе видны две колонки: остатки на складе и остатки реализатора.
При обновлении прайса в него заносится товар с не нулевыми остатками на складе.

Ограничения

Учет товара идет по беспартионной схеме, но есть динамический расчет партионности.
При больших объемах баз данных этот расчет может занять несколько минут.
Например в "Карточке оплаты" закрытие оплаты документов вычисляется динамически.
В справочнике Номенклатуры 2 уровня
Первый - для групп товара, второй для товара.
Это ограничение связано с построением некоторых отчетов.

Начало работы

Порядок начала работы и ввода остатков.
//-------------------------------------------------------------------
1. Заполняются константы и справочники.
Справочник номенклатуры удобнее заполнять по ходу работы.
Сервис-Параметры-Общие установить 4 цифры в датах.
Сервис-Параметры-Журналы установить период видимости журналов
начало года - конец года или по Вашему усмотрению.
2. Вносятся остатки товара на складе.
Приходная накладная со статусом документа ВводОстатков.
3. Вносятся остатки товара по точкам.
Документ реализатора со статусом документа ВводОстатков.
4. Вносятся остатки взаиморасчетов с клиентами.
Документ Остатки взаиморасчетов.

Импорт из типовой торговой конфигурации 7.XXX.
//-------------------------------------------------------------------
1. Из типовой конфигурации выполнить обработку EX_TRADE.ERT
Установить дату нач. и дату кон. на текущую дату они влияют на выборку периодических реквизитов.
Выгрузить Склады, Пользователей, Номенклатуру, Контрагентов
2. Из новой конфигурации выполнить загрузку Склады, Пользователей, Номенклатуру, Контрагентов
3. Для переноса некоторых реквизитов можно использовать обработку EX_SPRAV.ERT
При этом для сязи баз используется поле НАИМЕНОВАНИЕ а конкретный реквизит справочника
Вы можете задать в коде обработки.

4. В типовой конфигурации создайте документ ИНВЕНТАРИЗАЦИЯ_РЕАЛИЗАТОРА для каждого реализатора
И выгрузите в файл через обработку EX_TRADE.ERT.
Для файла обмена лучше задавать полный путь файла например: C:\OST1.TXT
5. В типовой конфигурации создайте документ ИНВЕНТАРИЗАЦИЯ для каждого склада
И выгрузите в файл через обработку EX_TRADE.ERТ
6. В новой конфигурации выполните обработку DOC_EXCH.ERT
Указывайте правильно имена файлов обмена.
Для остатков склада нажимайте кнопку загрузка в ПРИХОДНУЮ_НАКЛАДНУЮ
Для остатков реализатора нажимайте кнопку загрузка в ДОКУМЕНТ_РЕАЛИЗАТОРА
Исправьте шапки документов. Укажите правильно статус документа. (ВводОстатков)

Работа с программой

Порядок работы с программой.
//-------------------------------------------------------------------
1. Товар поступает на склад по документам ПриходнаяНакладная (см. описание документа ПН)
При внесении ПН можно проконтролировать и исправит розничную цену.
2. Отпуск товара по точкам выполняется только через ДокументРеализатора (см. описание документа ДР)
Направление движения товара задается СтатусомДокумента.
3. По документам ПКО вносится выручка торговых точек.
4. Периодически выполняется инвентаризация реализатора.
Для этого нужно распечатать остатки реализатора. (Меню\Отчеты\Остатки реализатора)
Отдать на торговую точку для заполнения.
Затем следует создать документ ИнвентаризацияРеализатора,
заполнить его согласно ведомости инвентаризации.
При этом конфигурация рассчитывает количество проданного товара,
так чтобы остатки реализатора совпадали с документом ИнвентаризацияРеализатора.
В отчете ВзаиморасчетыРеализатора можно увидеть баланс торговой точки.
(к-во проданного товара, сумма выручки, сумма недостачи, остаток товара)

Что можно скачать

Скачать конфигурацию "Конкурент-магазин 3.18" (115К)
Автор конфигурации Андрей Величко


Мини-библиотека (пример)

Постановка задачи
Объекты конфигурации
 Справочник "Произведения"
Справочник "Книги"
Документ "Выдача книги"
 Документ "Продление книги"
Документ "Возврат книги"
 Документ "Потеря книги"
Отчет "Библиотечная выписка"
 Отчет "Долги читателя"
Дополнительные функции
 Что можно скачать

 В три часа ночи:
- Как пройти в библиотеку?

Постановка задачи
Требуется создать простейшую систему учета для библиотеки, которая позволит выдавать книги читателям, отслеживать задолженности читателя и формировать отчеты по совершенным операциям за заданный период.

Конфигурация, по-видимому, должна содержать справочник Книги. У каждой книги есть уникальный библиотечный номер (код). Необходимо отметить, что может быть несколько экземпляров одного и того же произведения.

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

В программе должны фиксироваться следующие события:

  • Выдача книг читателю из библиотеки на определенный срок
  • Продление книги
  • Возврат книги читателем в библиотеку
  • Потеря книги читателем

Для каждого события в конфигурации необходимо предусмотреть соответствующий документ.

Правила работы библиотеки следующие:

  • Читатель может взять в библиотеке только определенное количество книг (задается директором библиотеки).
  • Читатель берет книги обычно на месяц, но может сразу взять книгу на больший срок, если явно скажет об этом.
  • Читатель может продлевать книгу, т.е. сообщать о том, что он вернет ее позже указанного ранее срока.
  • При просрочке возврата книги, читатель получает предупреждение.
  • Когда предупреждений у читателя накапливается больше определенного предела, он лишается правом пользования библиотекой на 1 месяц.
  • При потере книги читатель лишается правом пользования библиотекой на 1 месяц, независимо от количества предупреждений.

В программе должна быть возможность сформировать библиотечную выписку, которая показывает все совершенные операции за заданный период. Необходимо иметь возможность выбрать операции только по указанному читателю и/или по указанной книге.

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

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Константы
  • МаксКолвоПредупреждений
  • МаксКолвоКнигНаРуках
  • КолвоДнейБлокировки
  • КолвоДнейДляВыдачи
Справочники
  • Произведения
  • Книги (подчинен спр. Произведения)
  • Читатели
  • ЖанрыКниг
  • Авторы
Перечисления
  • СтатусКниги (значения: Свободна, Выдана, Списана)
  • ДаНет (значения: Да, Нет)
Документы
  • ВыдачаКниги
  • ПродлениеКниги
  • ВозвратКниги
  • ПотеряКниги
Журналы документов
  • Библиотека
Отчеты
  • БиблиотечнаяВыписка
  • ДолгиЧитателя

Справочник "Произведения" (форма элемента)

Экранная форма элемента справочника Произведения выглядит следующим образом:

Справочник "Книги" (форма списка)

Экранная форма списка справочника Книги выглядит следующим образом:

Документ "Выдача книги"

Экранная форма документа выглядит следующим образом:

Модуль формы см. в конфигурации "Мини-библиотека".

Модуль проведения:

Процедура ОбработкаПроведения()

СпрКниги = создатьОбъект("Справочник.Книги");

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

СпрКниги.НайтиЭлемент(Книга);
СпрКниги.Статус = Перечисление.СтатусКниги.Выдана;
СпрКниги.Читатель = Читатель;
СпрКниги.ДатаВыдачи = ДатаДок;
СпрКниги.СрокВозврата = СрокВозврата;
СпрКниги.Записать();

КонецЦикла;

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

Документ "Продление книги"
Экранная форма документа выглядит следующим образом:

Модуль формы см. в конфигурации "Мини-библиотека".

Модуль проведения:

Процедура ОбработкаПроведения()

СпрКниги = создатьОбъект("Справочник.Книги");

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Если Число(НовыйСрокВозврата)<>0 Тогда

СпрКниги.НайтиЭлемент(Книга);
СпрКниги.СрокВозврата = НовыйСрокВозврата;
СпрКниги.Записать();

КонецЕсли;

КонецЦикла;

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

Документ "Возврат книги"
Экранная форма документа выглядит следующим образом:

Модуль формы см. в конфигурации "Мини-библиотека".

Модуль проведения:

Процедура ОбработкаПроведения()

СпрКниги = создатьОбъект("Справочник.Книги");
СпрЧитатели = СоздатьОбъект("Справочник.Читатели");

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

СпрКниги.НайтиЭлемент(Книга);

Если СпрКниги.СрокВозврата < ДатаДок Тогда

СпрЧитатели.НайтиЭлемент(Читатель);
СпрЧитатели.КоличествоПредупреждений = СпрЧитатели.КоличествоПредупреждений
              + 1;
СпрЧитатели.Записать();

Если СпрЧитатели.КоличествоПредупреждений > Константа.МаксКолвоПредупреждений
              Тогда

УстановитьРеквизитСправочника(Читатель, "Блокирован",Перечисление.ДаНет.Да, ДатаДок);
УстановитьРеквизитСправочника(Читатель, "Блокирован",Перечисление.ДаНет.Нет, ДатаДок + Константа.КолвоДнейБлокировки);

КонецЕсли;

КонецЕсли;

СпрКниги.Статус = Перечисление.СтатусКниги.Свободна;
СпрКниги.Читатель = 0;
СпрКниги.ДатаВыдачи = 0;
СпрКниги.СрокВозврата = 0;
СпрКниги.Записать();

КонецЦикла;

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

Документ "Потеря книги"
Экранная форма документа выглядит следующим образом:

Модуль формы см. в конфигурации "Мини-библиотека".

Модуль проведения:

Процедура ОбработкаПроведения()

СпрКниги = создатьОбъект("Справочник.Книги");

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

СпрКниги.НайтиЭлемент(Книга);
СпрКниги.Статус = Перечисление.СтатусКниги.Списана;
СпрКниги.Читатель = 0;
СпрКниги.ДатаВыдачи = 0;
СпрКниги.СрокВозврата = 0;
СпрКниги.Записать();

КонецЦикла;

УстановитьРеквизитСправочника(Читатель, "Блокирован", Перечисление.ДаНет.Да, ДатаДок);
УстановитьРеквизитСправочника(Читатель, "Блокирован", Перечисление.ДаНет.Нет, ДатаДок + Константа.КолвоДнейБлокировки);

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

Отчет "Библиотечная выписка"

Экранная форма диалога отчета выглядит следующим образом:

Пример работы отчета:

Модуль отчета см. в конфигурации "Мини-библиотека".

Отчет "Долги читателя"

Экранная форма диалога отчета выглядит следующим образом:

Пример работы отчета:

Модуль отчета см. в конфигурации "Мини-библиотека".

Дополнительные функции

Вам предлагается самостоятельно реализовать следующие дополнительные функции:

  • Поиск нужной книги по названию, автору, жанру и другим известным признакам.
  • Технология штрих-кодирования. Каждому читателю и каждой книге присваивается уникальный штрих-код. В экранных формах выбор читателя производится путем считывания штрих-кода, программа должна найти читателя или книгу в справочнике по штрих-коду.
  • Денежные расчеты. Допустим каждая книга имеет определенную ценность и библиотека является коммерческой. Каждый день взятия книги должен быть оплачен читателем исходя из задаваемых директором тарифов. При потере книги читатель должен заплатить штраф.
  • Отмена документов. При отмене проведения документов все изменения, которые он сделал в системе должны быть также отменены. Для сохранения непротиворечивости базы данных отмена документов должна проводиться в обратном порядке для каждого читателя и книги.
  • Может быть вам захочется реализовать учет на регистрах, а не только на справочниках и документах.
  • Добавьте другие функции, которые вы считаете просто необходимыми для работы нормальной библиотеки.

Что можно скачать

Скачать конфигурацию "Мини-библиотека" (20К)


Почтальон Печкин (пример)

Постановка задачи
Объекты конфигурации
Справочник "Пользователи"
 Справочник "Черный список"
 Документ "Письмо"
Журнал "Письма"
Документ "Сообщение"
 Журнал "Чат"
 Обработка "Чистка базы"
 Что можно скачать

Тук-тук...

- Кто там?
- Это я, Почтальон Печкин! Принес заметку про вашего мальчика.

Постановка задачи
Требуется создать простейшую почтовую систему для локальной сети предприятия. Система должна позволять отправлять письма и должен быть общий чат. У каждого пользователя может быть черный список его недругов, от которых он не желает получать письма. Нужно иметь возможность прицеплять к письму различные объекты базы 1С:Предприятие, например, товары, накладные и пр.

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Справочники
  • Пользователи
  • Черный список (подчинен спр. Пользователи)
Документы
  • Письмо
  • Сообщение
Журналы
  • Письма
  • Чат
Обработки
  • ЧисткаБазы

Справочник "Пользователи"

Данный справочник будет содержать сведения о пользователях конфигурации. Фактически - это будет список почтовых ящиков. При входе в систему производится поиск логина в этом справочнике и если он не находится, то в справочник автоматически добавляется новый пользователь. Глобальная переменная ТекПользователь при начале работы системы получает значение из этого справочника, т.е. по этой переменной в любом модуле программы всегда можно узнать, какой пользователь работает с конфигурацией.

Данный справочник содержит следующие поля:

  • Код
  • Наименование (краткое имя, логин)
  • ПолноеИмя
  • Подпись (для подстановки в новые письма)
  • ЕстьПисьмо (флажок, который показывает, что пришла новая почта)

Справочник "Черный список"

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

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

Документ "Письмо"

Данный документ имеет шапку и табличную часть. В шапке отражается, кто написал письмо, кому оно адресуется (адресат), тема письма, текст письма и флажок важности. Табличная часть содержит приложения к письму. Приложением может быть элемент любого справочника или любой документ с небольшим сопроводительным текстом. Данная почта отличается от Outlook тем, что позволяет прицеплять к письму конкретные объекты базы 1С, в которой работают пользователи. Т.е. пользователь может отправить такое письмо: "Света, посмотри, что творится с этой накладной!" и прицепить к письму саму накладную.

А на вкладке Приложения прицеплены сами товары с комментариями!

При сохранении письма производится следующее. У адресата устанавливается в единицу флажок ЕстьПисьмо в спр. Пользователи. Каждые несколько секунд (интервал настраивается в константах) производится проверка новой почты, если флажок взведен и есть новые непрочитанные письма, о которых еще не было оповещения, тогда пользователю выдается сообщение "Пришла почта! Прочитать?". Флажок ЕстьПисьмо снимается и утех писем, о которых пользователь был оповещен, устанавливается флажок БылоОповещение. Если пользователь ответит Да, тогда откроется его почтовый ящик (журнал Письма).

Журнал "Письма"

Этот журнал представляет из себя почтовый ящик. При открытии журнала показываются письма только текущего пользователя. Это нужно для того, чтобы пользователи не смотрели чужие почтовые ящики.

Документ "Сообщение"

Данный документ является коротким сообщением в общий чат. При сохранении документа он отражается в журнале Чат.

Журнал "Чат"

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

При нажатии на кнопку "Что мне сказали" производится отбор только тех сообщений, которые были адресованы текущему пользователю. Кнопка "Все сообщения" опять показывает все сообщения всем пользователям.

Обработка "Чистка базы"

Данная обработка находит старые прочитанные письма, а также старые сообщения, и помечает их на удаление.

Что можно скачать

Скачать конфигурацию "Почтальон Печкин" (30К)


Денежки (пример)

Постановка задачи
Объекты конфигурации
Спр. Участники
 Спр. Кошельки
 Спр. Статьи доходов
 Спр. Статьи расходов
 Док. Ввод нач. остатков
 Док. Доход
 Док. Расход
 Док. Перевод
Отчет Остатки
 Отчет Доходы и расходы
 Что можно скачать

 Быть было беде, да случились деньги на бедре.

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

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Справочники
  • Участники
  • Кошельки (доп. реквизит Участник)
  • Статьи доходов
  • Статьи расходов
Документы
  • Доход
    (реквизиты шапки: Участник, Статья, Кошелек, Сумма)
  • Расход
    (реквизиты шапки: Участник, Статья, Кошелек, Сумма)
  • Перевод
    (реквизиты шапки: КошелекОткуда, КошелекКуда, Сумма)
  • ВводНачОстатков
    (реквизиты табличной части: Кошелек, Сумма)

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

Создайте два общих реквизита Автор и Комментарий текстового типа.
Журналы документов
  • ВсеДокументы
Регистры
  • Кошельки (регистр остатков)
  • Доходы (оборотный регистр)
  • Расходы (оборотный регистр)
Отчеты
  • Остатки
  • ДоходыРасходы

Справочник "Участники"

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

Справочник "Кошельки"

Данный справочник будет содержать названия мест хранения денежных средств семьи.

Справочник "Статьи доходов"

Данный справочник будет содержать названия источников дохода семейных средств.

Справочник "Статьи расходов"

Данный справочник будет содержать названия направлений расходования семейных средств. Это многоуровневый справочник.

Документ "Ввод начальных остатков"

Экранная форма документа выглядит следующим образом:

Модуль проведения:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Регистр.Кошельки.Кошелек
            = Кошелек;
Регистр.Кошельки.Сумма = Сумма;
Регистр.Кошельки.ДвижениеПриходВыполнить();

КонецЦикла;

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

Документ "Доход"

Экранная форма документа выглядит следующим образом:

Модуль проведения:

Процедура ОбработкаПроведения()

 Регистр.Доходы.Участник
          = Участник;
Регистр.Доходы.Статья = Статья;
Регистр.Доходы.Сумма = Сумма;
Регистр.Доходы.ДвижениеВыполнить();

Регистр.Кошельки.Кошелек = Кошелек;
Регистр.Кошельки.Сумма = Сумма;
Регистр.Кошельки.ДвижениеПриходВыполнить();

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

Документ "Расход"
Экранная форма документа выглядит следующим образом:

Модуль проведения:

Процедура ОбработкаПроведения()

 Регистр.Расходы.Участник
          = Участник;
Регистр.Расходы.Статья = Статья;
Регистр.Расходы.Сумма = -Сумма;
Регистр.Расходы.ДвижениеВыполнить();

Регистр.Кошельки.Кошелек = Кошелек;
Регистр.Кошельки.Сумма = Сумма;
Регистр.Кошельки.ДвижениеРасходВыполнить();

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

Документ "Перевод"
Данный документ переводит средства из одного кошелька в другой.

Модуль проведения:

Процедура ОбработкаПроведения()

 Регистр.Кошельки.Кошелек
          = КошелекОткуда;
Регистр.Кошельки.Сумма = Сумма;
Регистр.Кошельки.ДвижениеРасходВыполнить();

Регистр.Кошельки.Кошелек = КошелекКуда;
Регистр.Кошельки.Сумма = Сумма;
Регистр.Кошельки.ДвижениеПриходВыполнить();

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

Отчет "Остатки"

Экранная форма диалога отчета выглядит следующим образом:

Модуль отчета:

Процедура Сформировать()

Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса
          = "
|Кошелек = Регистр.Кошельки.Кошелек;
|Участник = Регистр.Кошельки.Кошелек.Участник;
|Сумма = Регистр.Кошельки.Сумма;
|Группировка Кошелек;
|Функция СуммаВКошельке = КонОст(Сумма);
|Условие(Кошелек в ВыбрКошелек);
|Условие(Участник в ВыбрУчастник);
|";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
.......Возврат;
КонецЕсли;

Таб = СоздатьОбъект("Таблица");

Таб.ВывестиСекцию("Все<");

Пока Запрос.Группировка(1) = 1 Цикл
....... Таб.ВывестиСекцию("Кошелек");
КонецЦикла;

Таб.ВывестиСекцию("Все>");
Таб.Показать();

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

Пример работы отчета:

Отчет "Доходы и расходы"

Экранная форма диалога отчета выглядит следующим образом:

Сначала указывается тип отчета: доходы или расходы. Затем выбирается период, за которые формируется отчет. В отчете можно указать 1 или 2 группировки Участник и Статья в произвольном порядке. Также можно указать отбор по одному участнику или статье.

Модуль отчета см. в конфигурации "Денежки".

Пример работы отчета (отчет о доходах, включены две группировки):

Пример работы отчета (отчет о расходах, включена только одна группировка Статьи):

Что можно скачать

Скачать конфигурацию "Денежки" (30К)


Игра "Реверси" (пример)
Постановка задачи
Объекты конфигурации
Технические подробности
Домашнее задание
 Что можно скачать 		Вся наша жизнь - игра.

Постановка задачи
Требуется создать средствами 1С игру "Реверси". Правила игры следующие.

Игра ведется на поле 8х8. Противники ходят по очереди. На каждом ходе игрок может поставить на поле одну фишку своего цвета. Фишки можно ставить только в том случае если одна или несколько фишек противника попадают в окружение. Окруженной считается фишка или ряд фишек если они ограничены с двух противоположных сторон по вертикали, горизонтали или диагонали фишками противника. Окруженные фишки меняют свой цвет. Если игрок не может выполнить ход, то право хода передается противнику. Игра продолжается до тех пор, пока хотя бы один из игроков может ходить. Побеждает тот, чьих фишек в конце игры оказывается больше.

Объекты конфигурации
Игра реализована в виде внешнего отчета (ert-файл). Поэтому игру можно подключить к любой конфигурации и доставить радость вашим пользователям!

Технические подробности
Игровое поле реализовано в виде множества кнопок (64х3). На каждом поле размещается по три кнопки: пустая, с белой фишкой и с черной фишкой. В процедуре ПоказатьДоску в соответствии с массивом Доска скрываются и показываются нужные кнопки. В массиве Доска хранится текущая игровая ситуация. Значение поля = 1 означает пустую клетку, 2 и 3 - белые и черные фишки.

При нажатии на кнопку игрового поля происходит вызов процедуры ХодЮзера. В этой процедуре определяется правильность хода (функция ВозможенХод) и вызывается процедура ВыполнитьХод, которая меняет цвет окруженных фишек. Затем проверяется, есть ли у компьютера возможные ходы и если есть, тогда происходит самое "интеллектуальное": процедура НашХод подбирает самый лучший ход в данной игровой ситуации. В этой процедура в памяти создается копия доски (процедура ДублироватьДоску) и на ней происходит перебор всех возможных ходов с выбором наилучшего с помощью оценочной функции РейтингХода.

Домашнее задание

Заставьте компьютер играть с самим собой. Но обязательно сделайте паузы между ходами, чтобы и человеку было интересно.

Что можно скачать

Скачать игру "Реверси" (10К)


Мини-склад (пример)
Постановка задачи
Объекты конфигурации
Документ Приход
Документ Расход
Отчет "Остатки материалов"
 Дополнительные функции
 Что можно скачать 		- Только что здесь была моя ладья, а теперь ее нет.
- Нет - значит не было. Я ее съел.
- На каком ходу?
- На четырнадцатом. Что вы мне голову морочите?
- Позвольте! У меня все ходы записаны!

Постановка задачи
Требуется создать простейшую систему складского учета для нескольких складов, которая позволит приходовать и отпускать материалы, а также формировать отчет по остаткам материалов.

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Справочники
  • Материалы (количество уровней: 3)
  • Склады
Документы
  • Приход
    (реквизиты шапки: Склад,
    реквизиты табличной части: Материал, Количество)
  • Расход
    (реквизиты шапки: Склад,
    реквизиты табличной части: Материал, Количество)
При создании документов не забудьте поставить галочку "Оперативный учет", чтобы данный документ мог делать движения в регистрах.
Журналы документов
  • Складские
Регистры
  • ОстаткиМатериалов
Отчеты
  • ОстаткиМатериалов

Документ "Приход"

Экранная форма документа Приход выглядит следующим образом:

Модуль проведения:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Регистр.ОстаткиМатериалов.Материал
            = Материал;
Регистр.ОстаткиМатериалов.Склад = Склад;
Регистр.ОстаткиМатериалов.Количество = Количество;
Регистр.ОстаткиМатериалов.ДвижениеПриходВыполнить();

КонецЦикла;

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

Документ "Расход"
Экранная форма документа Расход выглядит следующим образом (отличается только названием):

Модуль проведения:

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

Регистр.ОстаткиМатериалов.Материал
            = Материал;
Регистр.ОстаткиМатериалов.Склад = Склад;
Регистр.ОстаткиМатериалов.Количество = Количество;
Регистр.ОстаткиМатериалов.ДвижениеРасходВыполнить();

КонецЦикла;

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

Отчет "Остатки материалов"

Экранная форма диалога отчета выглядит следующим образом:

Шаблон печатной формы (в Конфигураторе):

Модуль отчета:

Процедура Сформировать()

 Запрос =
          СоздатьОбъект("Запрос");

ТекстЗапроса = "
|Материал = Регистр.ОстаткиМатериалов.Материал;
|Склад = Регистр.ОстаткиМатериалов.Склад;
|Количество = Регистр.ОстаткиМатериалов.Количество;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Материал;
|Группировка Склад;
|Условие (Материал в ВыбрМатериалГруппа);
|Условие (Склад в ВыбрСклад);
|";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
...Возврат;
КонецЕсли;

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Заголовок");

Пока Запрос.Группировка(1) = 1 Цикл

Если Запрос.Материал.ЭтоГруппа()=1 Тогда
... Таб.ВывестиСекцию("Группа");
Иначе

Таб.ВывестиСекцию("Материал");

Если Фл_НеВыводитьСклады = 0 Тогда
...Пока Запрос.Группировка(2) = 1 Цикл
......Таб.ВывестиСекцию("Склад");
...КонецЦикла;
КонецЕсли;

КонецЕсли;

КонецЦикла;

Таб.Опции(0);
Таб.Показать("ОстаткиМатериалов", "");

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

Примеры работы отчета:

В следующем примере отключена детализация по складам:

Дополнительные функции

Вам предлагается самостоятельно реализовать следующие дополнительные функции:

  • Единицы измерения для каждого материала. У материала есть основная единица измерения (выбирается из справочника ЕдиницыИзмерения), в которых хранятся остатки в регистре. При приходовании и расходовании материала пользователь может указать любую единицу измерения, допустимую для данного материала (выбирается из подчиненного справочника ЕдИзмМатериалов). Программа пересчитывает указанное количество в основную единицу измерения с использованием коэффициента пересчета из справочника ЕдИзмМатериалов. В отчет добавляется новая колонка "Ед. изм."

  • Учет денежного выражения. В регистр Материалы добавляется новый ресурс СуммаРуб. (название Сумма не рекомендуется, так как есть встроенная функция Сумма в языке запросов). В отчете выводятся две колонки: Количество и Сумма. Должна быть возможность выводить только одну колонку по требованию пользователя. По колонке Сумма должны выводиться итоги по каждой группе материалов и по всему отчету.

  • Отчет о движении материалов за период. Пользователь в диалоге указывает период. В отчете выводятся колонки: Материал, Остаток на начало период, Приход за период, Расход за период, Остаток на конец периода. Для ускорения работы отчета на больших базах можно создать оборотный регистр ДвижениеМатериалов, тогда каждый документ должен делать движения по двум регистрам.

  • Партионный учет. Списание материалов по средней себестоимости / по методу FIFO / LIFO. В регистр добавляется новое измерение Партия (типа Документ). При расходовании материала подсчитывается сумма списания по заданному методу. Метод задается пользователем в константе МетодСписанияМатериалов (выбирается из перечисления МетодыСписанияМатериалов).

Что можно скачать

Скачать конфигурацию "Мини-склад" (15К)


Мини-зарплата (пример)

Постановка задачи
 Объекты конфигурации
Минимальный кадровый учет
 Налоговые льготы сотрудника
 Расчет зарплаты
 Отчеты по зарплате
Что можно скачать

 Разговаривают между собой два босса. Один другому говорит:
- Представляешь! Я своим сотрудникам уже полгода зарплату не плачу, а они всё ходят и ходят на работу.
- А ты сделай вход платным...

Постановка задачи
Требуется создать простейшую систему расчета зарплаты, удовлетворяющую следующим минимальным требованиям:

  1. Минимальный кадровый учет (справочник Сотрудники, документы Прием, Перемещение, Увольнение, журнал Кадровые документы)
  2. Две категории сотрудников: "Руководители и специалисты" (сидят на окладе), "Рабочие" (работают по тарифу)
  3. Возможность учета невыходов сотрудника на работу (например, прогулы).
  4. Ввод премий сотрудникам.
  5. Расчет подоходного налога с учетом налоговых льгот (стандартных вычетов).
  6. Отчетность по зарплате (ведомость на выплату зарплаты, свод, расчетные листочки, лицевые счета)

Объекты конфигурации
В конфигурации потребуется создать следующие объекты:

Тип объектов
Объекты
Константы
  • НазваниеОрганизации
  • СтавкаПН (периодич.)
Справочники
  • Сотрудники
  • НалоговыеЛьготы (подчинен спр.Сотрудники)
  • Категории
  • Подразделения
  • Должности
  • Разряды
  • ТипНалоговойЛьготы
  • ОснованияУвольнения
Перечисления

нет
Документы
  • ПриемНаРаботу
  • Перемещение
  • Увольнение
  • НачалоМесяца
  • ВводНевыходов
  • ВводПремий
Журналы документов
  • КадровыеДокументы
  • Премии
  • Отклонения
  • Системные
Отчеты
  • ВедомостьНаЗарплату
  • РасчетныеЛисточки
  • Свод
  • ЛицевыеСчета
  • ПоискВидаРасчета
Календари
  • Табель_8час
  • Табель_7час
Журналы расчетов
  • Зарплата
Обработки
  • РасчетЗарплаты
Виды расчета
  • ПоОкладу
  • ПоТарифу
  • Невыход
  • Премия
  • СтандВычетНаСебя
  • СтандВычетНаДетей
  • Премия
  • Подоходный налог
  • НаРуки
Группы расчетов
  • ВсеНачисления
  • ВсеУдержания
  • ОблагаетсяПН
  • ВсеВычеты

Минимальный кадровый учет

В конфигурации есть 2-хуровневый справочник Сотрудники, содержащий две системные группы: Работающие и Уволенные. Ввод нового сотрудника производится документом "Прием на работу".

В конфигурации есть три кадровых документа, обеспечивающих самые обязательные операции по движению кадров: "Прием на работу", "Перемещение", "Увольнение". Эти документы хранятся в журнале "Кадровые документы".

По каждому сотруднику хранится следующая информация:

  • Табельный номер (реквизит Код)
  • ФИО (реквизит Наименование)
  • Категория*
  • Подразделение*
  • Должность*
  • Разряд*
  • Оклад*
  • Календарь*
  • Дата приема
  • Дата увольнения

Реквизиты, отмеченные звездочкой, являются периодическими. Это означает, что в программе хранится история их изменения по датам. Изменение этих реквизитов должно оформляться кадровым документом "Перемещение". Реквизиты "Дата приема" и "Дата увольнения" заполняются автоматически при проведении документов "Прием на работу" и "Увольнение". При увольнении сотрудник автоматически переходит в группу Уволенные.

Налоговые льготы сотрудника

Если у сотрудника есть право на стандартные налоговые вычеты, то их следует ввести в справочник НалоговыеЛьготы, который подчинен справочнику Сотрудники. Для этого нужно открыть справочник Сотрудники, перейти курсором на нужного сотрудника и открыть подчиненный справочник НалоговыеЛьготы.

Для каждой налоговой льготы можно указать период ее действия. Если не указывать окончание периода действия льготы, тогда она будет действовать все время, пока сотрудник не уволен.

Если у сотрудника введены налоговые льготы, тогда при проведении документа "Начало месяца" в журнал Зарплата добавляются виды расчета "СтандВычетНаСебя" и "СтандВычетНаДетей". Вычеты влияют на расчет подоходного налога.

Расчет зарплаты

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

  1. Для инициализации расчета сначала необходимо провести документ "Начало месяца", который введет в журнал Зарплата нерассчитанные записи с нулевым результатом (за исключением стандартных вычетов, которые сразу рассчитываются).
  2. Затем необходимо ввести периоды невыходов (прогулов) документом "Ввод невыходов". Этот документ вводит вид расчета "Невыход", который вытесняет виды расчета ПоОкладу и ПоТарифу.
  3. Если некоторым сотрудникам полагаются премии, то нужно провести документ "Ввод премий".
  4. После этого можно произвести расчет зарплаты обработкой "Расчет зарплаты". Существует два режима расчета зарплаты: только начисления и окончательный расчет. При окончательном расчете рассчитываются все виды расчетов, включая подоходный налог и сумму "на руки".
  5. После окончательного расчета можно сформировать отчеты по зарплате.
  6. Для закрытия месяца следует сменить период расчета в журнале Зарплата. Все записи станут архивными и их уже нельзя будет корректировать. Если все-таки это потребуется, то для корректировки результатов расчета предыдущих месяцев следует вводить новые записи-сторно, у которых период действия распространяется на прошлые месяцы. Т.е. запись введена, например, в феврале, а период действия у нее - январь.

Отчеты по зарплате

В конфигурации есть следующие отчеты по зарплате:

Отчет | Описание
Ведомость на зарплату | Предназначен для кассира и показывает сумму "на руки" по каждому сотруднику.
Лицевые счета | Показывает промежуточные и конечные результаты расчета зарплаты по всем сотрудникам. Можно задать фильтр по категории и/или подразделению.
Расчетные листочки | Показывает промежуточные и конечные результаты расчета зарплаты по конкретному сотруднику. Расчетный листочек выдается сотруднику перед выдачей зарплаты для ознакомления. Можно распечатать листочек только для указанного сотрудника или по всем сотрудникам сразу. Можно задать фильтр и/или группировку по категории и подразделению.
Свод | Показывает сводные результаты расчета с различной группировкой. Строка отчета соответствует виду расчета или группе расчетов. Колонка отчета соответствует категории или подразделению. По строке подводится итог. Можно задать фильтр по категории и/или подразделению.
Поиск вида расчета | Позволяет выбрать всех сотрудников с определенным видом расчета или группой расчетов. Пользователь может задать фильтр по категории и/или подразделению. Можно задать любой период и при необходимости разбить его по месяцам. Есть возможность вывести дополнительные графы по сотруднику.

Что можно скачать

Скачать конфигурацию "Мини-зарплата". (80К)

В программе во всех модулях примерно 800 строк, поэтому разобраться в ней вам вполне по силам. Самый большой модуль (отчет Свод) содержит примерно 150 строк. Для сравнения скажу, что типовая конфигурация "Зарплата и Кадры" содержит больше 50 000 строк.

Если вам понравились отчеты или некоторые приемы программирования, то вы можете включить их в свои программы. Никаких запретов на использование конфигурации нет. Естественно, все под вашу ответственность.


Краткая справка о фирме "1С"

Фирма "1С" специализируется на дистрибьюции, поддержке и разработке компьютерных программ и баз данных делового и домашнего назначения. Основанная в 1991 г., "1С" – чисто российская фирма со штатом более 200 человек, опирающаяся исключительно на собственные профессиональные успехи. По данным многочисленных опросов "1С" занимает первое место в софтверном секторе российской компьютерной индустрии и отличается рекордной отдачей от одного сотрудника. Среднемесячный оборот компании превышает 2 млн. долларов, из него более половины -- на продаже продуктов производства фирмы 1С. Количество зарегистрованных пользователей продуктов фирмы 1С превышает 200 000. Бесменный директор и бизнес-идеолог компании - Борис Нуралиев.

Фирма "1С" поставляет со своего склада полный спектр программ массовой ориентации для офиса и дома, насчитывающий в настоящее время более 1500 позиций. Из собственных разработок фирмы "1С" наиболее известны "1С:Бухгалтерия", самый продаваемый в СНГ программный продукт, а также "1С:Торговля и Склад", "1С:Зарплата и Кадры", "1С:Налогоплательщик", "1С:Электронная почта", "1С:Деньги", серия обучающих программ "1С:Репетитор", игра "Князь. Легенды Лесной страны", издательские проекты 1С:Геймос "Братья Пилоты" (2 выпуска), "Дальнобойщики", "Аллоды" и "Аллоды 2", "Проклятые Земли", "Корсары", серии локализаций популярных западных игровых продуктов, сказок, коллекции игр и другие.

В распространении программ других вендоров фирма "1С" выступает в качестве официального дистрибьютора Microsoft, Novell, Symantec, IBM-Lotus и других зарубежных фирм. "1С" является самым серьезным дистрибьютором продукции российских софтверных компаний: ПроМТ, ABBYY, ИНЭК, Лаборатория Касперского и более чем 50 других отечественных фирм. "1С" поддерживает самый большой в России склад по отечественному домашнему софту, являясь крупнейшим дистрибьютором таких поставщиков, как Бука, Никита, Руссобит-М и других

Адрес сайта фирмы 1С: www.1c.ru

Сеть партнеров фирмы "1С"

Фирма "1С" работает с пользователями через самую разветвленную на компьютерном рынке СНГ партнерскую сеть. У фирмы 1С мощная франчайзинговая сеть. Франчайзи -- это фирмы-партнеры 1С. Они занимаются продажей и внедрением продуктов 1С. Таких фирм насчитывается около 1600. В самой фирме 1С работает 200 человек. Оборот фирмы составляет 1-2 млн. долларов в месяц. В 1998 году оборот фирмы составил 17 млн долларов. Если рассматривать сеть партнеров 1С как единую компанию, то оказывается, что это -- мегафирма с оборотом свыше 200 млн. долларов в год, численностью персонала свыше 30 тыс. человек, представленная в более чем 400 городах России и СНГ !

Дилерами фирмы "1С" являются более 2300 постоянных партнеров в 430 городах России, стран СНГ и Балтии. 1С:Франчайзинг представляет собой сеть из более 1600 предприятий, сертифицированных фирмой "1С" на оказание комплексных услуг по автоматизации учетной и офисной работы на базе программных продуктов "1С". Авторизованные учебные центры фирмы "1С" (более 700) проводят обучение силами сертифицированных Финансовой Академией при Правительстве РФ специалистов на базе поставляемых "1С" типовых учебных курсов. Авторизованные центры сертификации в рамках новой программы "1С:Профессионал" проводят сертификацию пользователей "1С:Бухгалтерии" для официального подтверждения высокой квалификации, опыта и навыков работы с самой распространенной в России и СНГ программой бухгалтерского учета. Сервис-партнеры "1С" обеспечивают регулярное информационно-технологическое сопровождение программ системы "1С:Предприятия" на рабочих местах пользователей. Дистрибьюторы в регионах позволяют дилерам программных продуктов не тратить время и деньги на доставку программ из Москвы, а целиком посвятить себя основному делу - полноценному обслуживанию конечных пользователей. И, наконец, 1С:Мультимедиа - Ассоциация магазинов, работающих в сфере розничных продаж программ для домашних компьютеров, насчитывающая более 190 торговых точек в 70 городах бывшего СССР.

История фирмы 1С

Основателями и владельцами компании 1С являются два брата Борис и Сергей Нуралиевы. Борис раньше работал в системе ЦСУ СССР. В середине 80-х годов он возглавил отдел, занимавшийся разработкой программы, позволявшей извлекать информацию из огромных баз данных ЦСУ с помощью запросов на некотором псевдоестетственном языке. Система была создана, а затем адаптирована для персональных компьютеров. Причем гарантировалось, что система дает ответ на заданный вопрос не более чем за одну секунду, поэтому и была названа "1С", а точнее "1С система информационного обслуживания". Эта программа была востребована более чем сотней предприятий для построения телекоммуникационных коммерческих сетей. Позднее по имени системы была названа и компания.

Тут наступил решающий с точки зрения Бориса Нуралиева момент в истории компании. Изучая литературу об устройстве софтверного бизнеса на Западе, он принимает решение вложить заработанные деньги в дистрибуцию готовых программ, причем для этой цели он решает создавать разветвленную дистрибьюторскую сеть.Вначале (с февраля 1991) компания стала продавать в России зарубежный программный продукт "Lotus 1-2-3", суперпопулярный в то время на Западе и малоизвестный в России. "Lotus 1-2-3" - электронные таблицы, конкурирует с более распространенной Microsoft Excel.

Затем, проанализировав, для чего используется покупателями Lotus, Борис Нуралиев принимает второе стратегическое решение - изготовить бухгалтерскую программу и запустить ее в дистрибьюторскую сеть (на продажу). На рынке бухгалтерских программ к тому времени уже были "Парус", "Инфин", "Инфобухгалтер", "Турбобухгалтер", "Финансы без проблем" и другие. Однако у фирм-изготовителей этих программ не было такой мощной сбытовой сети, как у 1С и это давало шанс последней.

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

В 1997 году Нуралиев решил охватить не только бухгалтерию, но и другие сферы деятельности предприятия, что было реализовано в продукте 1C:Предприятие. Было создано универсальное средство автоматизации различных задач. Система 1С:Предприятие 7.0 была построена на совершенно новой идеологии, сохранив преемственность с 1С:Бухгалтерией 6.0. Именно с версии 7.0 фирма 1С встала на путь объектно-ориентированной системы, чем сильно упростила жизнь программистов. Существуют версии 1С:Предприятие 7.5 и 1С:Предприятие 7.7. Была создана универсальная инструментальная среда для разработки учетных приложений. Это решение вывело фирму 1С в абсолютное лидерство в сфере отечественных продуктов для автоматизации работы предприятий малого и среднего бизнеса.


1С:Предприятие

1С:Предприятие является универсальной системой автоматизации деятельности предприятия. За счет своей универсальности система 1С:Предприятие может быть использована для автоматизации самых разных участков экономической деятельности предприятия: учета товарных и материальных средств, взаиморасчетов с контрагентами, расчета заработной платы, расчета амортизации основных средств, бухгалтерского учета по любым разделам и т. д.

Конфигурируемость
Основной особенностью системы 1С:Предприятия является ее конфигурируемость. Собственно система 1С:Предприятие представляет собой совокупность механизмов, предназначенных для манипулирования различными типами объектов предметной области. Конкретный набор объектов, структуры информационных массивов, алгоритмы обработки информации определяет конкретная конфигурация. Вместе с конфигурацией система 1С:Предприятие выступает в качестве уже готового к использованию программного продукта, ориентированного на определенные типы предприятий и классы решаемых задач.

Конфигурация создается штатными средствами системы. Конфигурация обычно поставляется фирмой «1С» в качестве типовой для конкретной области применения, но может быть изменена, дополнена пользователем системы, а также разработана заново.

Компонентная структура
Система 1С:Предприятие имеет компонентную структуру. Часть возможностей, предоставляемых системой для решения задач автоматизации, являются базовыми, то есть поддерживаются в любом варианте поставки системы. Это, прежде всего, механизмы поддержки справочников и документов. Другие возможности реализуются компонентами системы: например, ведение списка бухгалтерских счетов. Таким образом, состав установленный компонент определяет функциональные возможности системы.

Всего существуют три основных компоненты: «Бухгалтерский учет», «Оперативный учет», «Расчет». Каждая компонента расширяет возможности системы своим механизмом обработки информации. Эти механизмы нельзя однозначно сопоставить с конкретными задачами автоматизации предметной области, однако, они имеют достаточно четкую направленность, которая определяет выбор состава необходимых компонент, для создания конкретной конфигурации.

Компонента «Бухгалтерский учет» реализует отражение хозяйственных операций, происходящих на предприятии в бухгалтерском учете. Она манипулирует такими понятиями, как бухгалтерские счета, операции и проводки. Возможности компоненты «Бухгалтерский учет» позволяют вести учет параллельно в нескольких планах счетов, вести многомерный и многоуровневый аналитический учет, количественный и валютный учет.

Компонента «Бухгалтерский учет» предоставляет возможность ведения бухгалтерского учета для нескольких предприятий в одной информационной базе.
Компонента «Оперативный учет» предназначена для автоматизации оперативного учета наличия и движения средств. Возможности компоненты «Оперативный учет» позволяют регистрировать движения и получать информацию о движениях и остатках товарных, материальных, денежных и других средств предприятия в реальном времени в самых различных разрезах. Компонента «Оперативный учет» поддерживает механизм регистров, который и обеспечивает запись движений и получение остатков в различных разрезах. Использование этого механизма позволяет автоматизировать учет взаиморасчетов с клиентами, учет складских запасов товаров, и многое другое. Одна из главных областей применения данной компоненты — автоматизация учета складских и торговых операций.

Компонента «Расчет» предназначена для автоматизации сложных периодических расчетов. Возможности этой компоненты позволяют выполнять расчеты различной сложности, в том числе — с пересчетом результатов «задним числом», и вести архив расчетов за прошедшие периоды. Эти возможности реализуются журналами расчетов, поддерживаемыми данной компонентой. Одна из основных областей применения компоненты — расчет заработной платы.


Об этом Учебнике

Пpофессоpа спpашивают:
-Сколько вам надо вpемени, чтобы выучить китайский ?
-10 лет.
Спpосили доцента (Д)
Д: - 6 лет
Спpосили аспиpанта (А):
А:- 3 года
Студента(С):
С:- А методичка есть?
- Есть.
С:- Сейчас пиво допью и сдам.

Этот Учебник посвящен единственной цели - обеспечить мягкий и плавный старт для разработчиков в среде 1С:Предприятие. Учебник в доступной форме объясняет базовые принципы программирования на встроенном языке 1С. Описаны приемы работы со справочниками, документами, регистрами, отчетами. Все главы иллюстрированы наглядными примерами, что позволяет очень легко начать изучение языка 1С.

Автор учебника - ваш покорный слуга, владелец и разработчик этого сайта - Станислав. Подробнее обо мне и об этом сайте вы можете прочитать здесь.

Идея написания учебника по 1С пришла мне в 1999 году. В тот момент я заканчивал разработку своей конфигурации для расчета зарплаты и кадрового учета в строительной организации. Тогда я решил не применять типовую конфигурацию "Зарплата и кадры", а написать собственную конфигурацию "с нуля". Такое решение было стратегически верным. С тех давних пор и до сегодняшнего дня моя программа успешно ведет ежедневный кадровый учет на предприятии и ежемесячно рассчитывает зарплату. Работать без моей программы пользователи уже не могут, разучились. ;-)

Разработка программы велась параллельно с изучением удивительных возможностей 1С. Осваивать язык 1С по справочнику - это все равно, что изучать английский язык по англо-русскому словарю. У меня это заняло примерно 4 года, причем до сих пор я не считаю себя суперпрофессионалом в программировании на 1С. Поэтому я решил заполнить вакуум в этой области и пояснить людям базовые принципы среды 1С, которые отличают ее от других средств разработки.

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

Если вы можете помочь в развитии или распространении этого Учебника или если у вас есть замечания и предложения, то напишите мне письмо по адресу stasmit@mail.ru (Станислав).


Почему 1С?

При приеме на работу:
- Языком владеете?
- Да, свободно.
- Хорошо. Будете наклеивать марки на конверты.

Любая учетная система имеет как минимум четыре компонента:

  • Систему хранения, поиска и редактирования условно-постоянной и нормативно-справочной информации, которая изменяется достаточно редко (справочники).

  • Систему ввода и фиксации событий внешнего мира (документов, хозяйственных операций и др.), влияющих на состояние системы

  • Систему работы с динамической информацией (остатки).

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

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

Так вот, в 1С все это есть, причем даже три варианта хранения динамической информации: Планы счетов и проводки, используемых обычно для бухгалтерского учета, Регистры и движения, используемых обычно для оперативного учета и Журналы расчетов, используемых для всяких замороченных расчетов типа расчета заработной платы. Поэтому использование 1С является естественным выбором, если вам требуется построить какую-нибудь учетную автоматизированную систему.

На сегодняшний день бесспорным лидером по продажам и количестве инсталляций являются программные продукты фирмы "1С". Более 2300 компаний в 430 городах России занимаются внедрением программ серии "1С". Не в последнею очередь такому успеху способствует особая политика фрайчазинга, когда сама фирма "1С" занимается только разработкой программного обеспечения, а внедрением и "подгонкой" под конкретные нужды потребителей заняты местные специалисты. К примеру, согласно, данным журнала "Эксперт" более 40 (если не 50) процентов пользователей делового программного обеспечения используют в повседневной работе продукты именно этой фирмы.

Вообще согласно этим же данным (а они получены за 2000 и 2001 год на российских компьютерных выставках - источник: журнал "Эксперт" №38 за 15 октября 2001 года) распределение рынка делового прикладного обеспечения выглядит примерно так. Первое место, как уже говорилось, занимают продукты "1С". Следующим по предпочтению отдаются продукты местных разработчиков (собственные отделы автоматизации на предприятиях и сторонние разработчики), которые объединяют в группу "Прочие". Потом идут продукты "БЭСТ", "Инфо-Бухгалтер", "Парус" занимающие примерно одинаковую нишу - 6-7 процентов опрошенных указывают, что используют их. Следом идут продукты "Турбо-Бухгалтер", "Инфин", "Инфософт" и "Галактика". Последнее, явно говорит на то, что рынок корпоративных систем различной сложности несомненно растет. Конечно не семимильными шагами, но все же. Об этом свидетельствует и то, что многие из производителей программного обеспечения, изначально определяя его в сфере автоматизации учета, начинают делать заявки и на более крупные проекты, позиционируя свои продукты все чаще как "корпоративные системы для среднего бизнеса".

Можно попробовать назвать и другие аргументы в пользу 1С, например, сравнительно небольшую цену при таких возможностях, передовые идеи в программировании приложений для бизнеса, наличие данного Учебника ;-)


Файловая система

Для работы с файлами и каталогами в 1С:Предприятие используется специальный объект "ФС" (файловая система). Средства языка 1С имеют возможности поиска, копирования, переименования, удаления и совершения других операций с файлами и каталогами.

Обращение к файловой системе

Для работы с файловой системой предназначен объект "ФС". В принципе его не требуется создавать с помощью функции СоздатьОбъект. Можно считать, что он уже создан. Но 1С позволяет создать сколько угодно таких объектов при помощи функции СоздатьОбъект;

Пример:

ГдеМыНаходимся
        = ФС.ТекКаталог();
ФС.СоздатьКаталог("DOCS");
НовФС = СоздатьОбъект("ФС");

Объект "ФС" имеет следующие методы:

Метод
Описание
ВыбратьФайл(<ИмяФайла>)

Открывает окно диалога выбора/сохранения файла. Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.

Синтаксис: ВыбратьФайл (<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <ЗаголовокОкна>, <Фильтр>, <Расширение>, <Таймаут>)

Параметры:
<ТипДиалога> -: 0 - диалог типа <открыть>, 1 - диалог типа <сохранить>;
<ИмяФайла> - переменная, содержащая на входе строку с именем файла, а на выходе - имя выбранного файла;
<ИмяНачКаталога> - переменная, содержащая на входе строку с начальным каталогом, а на выходе - имя выбранного каталога;
<ЗаголовокОкна> - строка с заголовком окна;
<Фильтр> - строка с фильтром отбора файлов (например: 'Все файлы (*.*) |*.*');
<Расширение> - строка с расширением файла по умолчанию;
<Таймаут> - время ожидания отклика пользователя в секундах (необязателен).
ВыбратьФайлКартинки Открывает окно диалога выбора/сохранения файла картинки.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Синтаксис: ВыбратьФайлКартинки (<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <ЗаголовокОкна>, <Расширение>, <Таймаут>)
ВыбратьКаталог

Открывает окно диалога выбора каталога.
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена'; 1 - если в окне диалога нажата кнопка 'ОК', при этом в переменную <ИмяНачКаталога> возвращается имя выбранного каталога; -1 (минус единица) - закончилось время <Таймаут> ожидания отклика пользователя.
Синтаксис: ВыбратьКаталог(<ИмяКаталога>,<ЗаголовокОкна>,<Таймаут>)
СуществуетФайл

Проверяет существование файла..
Возвращает: 1 - файл существует; 0 - не существует.
Синтаксис: СуществуетФайл(<ИмяФайла>)
КопироватьФайл

Копирует файл.
Синтаксис: КопироватьФайл(<ИмяФайлаИсточника>,<ИмяФайлаПриемника>,<ФлагПерезаписи>)

Параметры:
<ИмяФайлаИсточника> - строка с именем файла источника;
<ИмяФайлаПриемника> - строка с именем файла приемника;
<ФлагПерезаписи> -:
0 - существующий файл приемника перезаписать;
1 - существующий файл приемника не перезаписывать.
УдалитьФайл

Удаляет файл.
Синтаксис: УдалитьФайл(<ИмяФайла>)
ПереименоватьФайл

Переименовать/переместить файл.
Синтаксис: ПереименоватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>, <ФлагПерезаписи>)

Параметры:
<ИмяФайлаИсточника> - строка с именем файла источника;
<ИмяФайлаПриемника> - строка с новым именем файла;
<ФлагПерезаписи> -:
0 - запрещает перемещение файла между дисками и существующий файл приемника не перезаписывается;
1 - разрешает перемещение файла между дисками (только для файлов) и существующий файл приемника перезаписывается.
НайтиПервыйФайл

Открывает выборку файлов по заданной маске и находит первый файл.
Возвращает строку с именем найденного файла.
Синтаксис: НайтиПервыйФайл(<МаскаИмени>)
НайтиСледующийФайл

Находит следующий файл по открытой выборке файлов.
Возвращает строку с именем найденного файла.
Синтаксис: НайтиСледующийФайл()
АтрибутыФайла

Возвращает атрибуты файла (в параметрах).

Синтаксис:
АтрибутыФайла (<ИмяФайла>, <РазмерФайла>, <АтрибутыФайла>, <ВремяСоздания>, <ВремяПоследнегоДоступа>, <ВремяПоследнейЗаписи>, <РасширенноеИмяФайла>)

Атрибуты файла закодированы, об этом см. Синтакс-Помощник или описание встроенного языка
СоздатьКаталог

Создать новый каталог (папку).
Синтаксис:СоздатьКаталог(<ИмяКаталога>)
УдалитьКаталог

Удаляет каталог файлов.
Синтаксис: УдалитьКаталог(<ИмяФайла>)
УстТекКаталог

Устанавливает текущий каталог файлов.
Синтаксис: УстТекКаталог(<ИмяФайла>)
ТекКаталог | Возвращает строку с именем текущего каталога файлов.
WindowsКаталог | Возвращает строку с именем Windows директории.
СвободноеМестоНаДиске Возвращает размер свободного дискового пространства в байтах.
Синтаксис: СвободноеМестоНаДиске(<ИмяДиска>)

Также часто применяются системные функции:

Метод | Описание
КаталогИБ | Возвращает имя каталога базы данных.
КаталогПользователя | Возвращает имя каталога пользователя.
КаталогПрограммы | Возвращает имя каталога с исполняемыми файлами системы 1С:Предприятие.
КаталогВременныхФайлов | Возвращает имя каталога временных файлов.
ИмяКомпьютера | Возвращает сетевое имя компьютера, работающего в данный момент с программой.

Примеры

Пример
//переместить все текстовые файлы (*.txt) из каталога информационной базы в каталог TXT.

ФС.УстТекКаталог(КаталогИБ());
ИмяФайла = "";
ИмяФайла = ФС.НайтиПервыйФайл("*.txt");
Если ИмяФайла <> "" Тогда
.... ФС.СоздатьКаталог("TXT");
.....ФС.КопироватьФайл(ИмяФайла,ФС.ТекКаталог() + "TXT" + ИмяФайла);
.....ФС.УдалитьФайл(ИмяФайла);

Пока 1=1 Цикл

ИмяФайла = "
          ";
.....ИмяФайла = ФС.НайтиСледующийФайл()
Если ИмяФайла <> "" Тогда
.....ФС.КопироватьФайл(ИмяФайла,ФС.ТекКаталог() + "TXT" +
          ИмяФайла);
.....ФС.УдалитьФайл(ИмяФайла);
Иначе
..... Прервать;
КонецЕсли;

КонецЦикла;

Пример
//выбрать файл с фотографией сотрудника

ИмяФайла = "";
ИмяКаталога = КаталогИБ();

Если ФС.ВыбратьФайлКартинки(0,ИмяФайла,ИмяКаталога,"Укажите файл с фотографией:",,20)=1 Тогда

ВремКартинка = СоздатьОбъект("Картинка");
ВремКартинка.Загрузить(ИмяКаталога + ИмяФайла);
КартинкаНаФорме.УстановитьКартинку(ВремКартинка);

КонецЕсли;


ФОРМЫ
Открытие формы
 Элементы диалога
Слои и закладки
Подбор 		Новый русский звонит своему братану и говорит:
- Мне тут 1С какое-то окошко открыл и предлагает сохраниться. Соглашаться?
- Не сразу! А то какой ты авторитет!

Открытие формы
Формы - это основной вид диалога с пользователем. Все справочники, документы, журналы, отчеты и обработки имеют экранные формы. Обычно форма открывается пользователем интерактивно (мышкой), но форму можно открыть и программно.

Конт
        = 0; //контекст формы (ссылка на форму)
ОткрытьФорму("Справочник.Сотрудники.Основная",Конт);
        //открыть форму списка справочника
ОткрытьФорму(ВыбрСотрудник); //открыть форму элемента справочника
ОткрытьФорму("Отчет.ГлавнаяКнига");
ОткрытьФорму("Документ.ПриемНаРаботу",Конт); //новый документ

//можно открыть форму модально и еще можно передать в форму параметр
//в модуле формы переданный параметр доступен через конструкцию Форма.Параметр
ОткрытьФормуМодально("Обработка.УсловияПоиска",10);

Элементы диалога на форме
В модуле формы к элементам диалога можно обращаться по их идентификаторам через конструкцию Форма.ЭлементДиалога

Форма.Сотрудник.Доступность(1);
        //сделать доступным
Форма.Сотрудник.Доступность(0); //сделать недоступным

Форма.Сотрудник.Видимость(1); //сделать видимым
Форма.Сотрудник.Видимость(0); //сделать невидимым

//можно менять заголовки на кнопке и на других элементах диалога
Форма.Кнопка.Заголовок("Далее >>");
Форма.Кнопка.Заголовок("Готово!");

//можно менять цвет элементов диалога
Если ВыбрСотрудник.Выбран()=0 Тогда
... Форма.Надпись_Сотрудник.Цвет(200,50,50); //красный, зеленый, синий (RGB)
....Активизировать("ВыбрСотрудник");
Иначе
... Форма.Надпись_Сотрудник.Цвет(0,0,0);
КонецЕсли;

Слои и закладки на форме
Форма может состоять из нескольких слоев. Каждый слой может быть показан или скрыт в любой комбинации с другими слоями.

Синтаксис: Форма.ИспользоватьСлой(<ИмяСлоя>,[<Режим>])

//показать слой Основной
Форма.ИспользоватьСлой("Основной",1);

//скрыть слой Основной
Форма.ИспользоватьСлой("Основной",0);

//показать слой Основной и скрыть все остальные
Форма.ИспользоватьСлой("Основной",2);

//показать слой Основной и Фон и скрыть все остальные
Форма.ИспользоватьСлой("Основной,Фон",2);

//закладки на форме
        реализуются с помощью слоев

Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение(1, "Закладка 1");
Форма.Закладки.ДобавитьЗначение(2, "Закладка 2");

Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
....Если НомерЗакладки = 1 Тогда
......Форма.ИспользоватьСлой("Фон,Шаг1");
...Иначе
......Форма.ИспользоватьСлой("Фон,Шаг2");
...КонецЕсли;
КонецПроцедуры

Подбор
Функция подбора позволяет выбирать несколько значений из справочника или другого объекта, не закрывая его. Например, есть документ РасходнаяНакладная, в котором пользователь может указать несколько товаров.

Синтаксик: ОткрытьПодбор(<Объект>,<ИмяФормы>,<КонтекстФормы>,<ФлагМножВыбора>,<ТекЗнач>)

ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);

Процедура ОбработкаПодбора(Элемент,КонтФормы)
...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры


Учебник по 1С

 Ваш браузер не поддерживает фреймы. Your browser doesn't support frames.


Учебник по 1С

Автор учебника:
Станислав
www.mista.ru
ВВЕДЕНИЕ

Что такое 1С ? (произносится как "один эс", "один це" или "один сэ" ;-)

1С -- это фирма, которая разработала систему 1С:Предприятие. Фирма 1С основана в 1991 году Борисом Нуралиевым и его братом Сергеем. На сегодняшний день в фирме 1С работает около 200 человек. Лидерством в российском софтверном бизнесе фирма 1С обязана своей разветвленной сети партнеров и своему суперпродукту "1С:Предприятие".

Подробнее... Подробнее..

Что такое 1С:Предприятие?

1С:Предприятие -- это специализированная объектно-ориентированная система управления базами данных (СУБД), предназначенная для автоматизации деятельности предприятия. Особенно хорошо у нее получается автоматизировать учетные задачи: кадровый учет, расчет зарплаты, бухгалтерский учет, складской учет...

Подробнее... Подробнее...

Почему 1С ?

Да, действительно, почему именно 1С? Ведь существует много программ подобного рода. Все дело в том, что 1С:Предприятие воплощает самые передовые технологии баз данных, а именно, объектно-ориентированный подход к разработке программ. Такой подход ускоряет и упрощает разработку в десятки раз! К тому же 1С:Предприятие наиболее распространена в пределах России и СНГ. Владея таким мощным инструментом, Вы можете быть спокойным за свое трудоустройство и приличную зарплату.

Подробнее... Подробнее...

С чего начать?

Начните с этого Учебника! Здесь подробно, шаг за шагом, рассказывается про 1С:Предприятие. Мы начнем с самых простых понятий и дойдем до таких интересных вещей, как Мастер отчетов. Все главы проиллюстрированы наглядными примерами, что позволит Вам быстро и хорошо освоить эту систему.

Подробнее... Подробнее...


Синтаксис языка 1С
Подходит начинающий програмист к хакеру и показывает программу на Бейсике.
- Подскажите, пожалуйста, в чем у меня ошибка?
- В ДНК, - вздыхает хакер.

Язык 1С очень похож на Бейсик. В 1С все ключевые слова можно писать по-русски.

Конструкция языка 1С

Примечание

Процедура РассчитатьНалог(Сотрудник, НекаяДата)

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

Простая процедура. После слова КонецПроцедуры точка с запятой не нужна, потому что это не оператор, а операторная скобка

Функция РассчитатьНалог(Сотрудник, НекаяДата)

Возврат Налог;

КонецФункции

Функция должна обязательно возвращать результат.

Если Оклад > 10000 Тогда
......Результат = "Нормально";
Иначе
......Результат = "Плохо";
КонецЕсли;

Простое условие. После слова КонецЕсли должна быть точка с запятой, потому что так заканчивается оператор Если
Результат = ?(Оклад > 10000, "Нормально","Плохо"); | Сокращенное Если.
Если Оклад > 10000 Тогда
......Результат = "Нормально";

ИначеЕсли Оклад > 5000 Тогда
......Результат = "Средне";

Иначе
......Результат = "Плохо";
КонецЕсли; 		Множественное условие. Если первое условие не выполняется, то проверяется второе. Если второе условие не выполняется, то третье. Если ни одно из условий не выполняется то выполняется блок Иначе.

Если (Оклад > 10000) И (КодКатегории = 2) Тогда

КонецЕсли;

В составном логическом выражении скобки обязательны!
Пока Номер <= 50 Цикл

КонецЦикла;

 Простой цикл Пока (цикл с неизвестным числом повторений). После слова КонецЦикла должна быть точка с запятой, потому что так заканчивается оператор Пока
Для Номер = 1 По 50 Цикл

КонецЦикла;

Простой цикл Для (цикл с известным числом повторений).

Перейти ~метка;

<...>

~метка:

Так оформляются метки и оператор безусловного перехода (GOTO). Чем меньше в вашей программе будет меток, тем лучше.

Пока <условие> Цикл

Если <условие> Тогда
........Продолжить;
КонецЕсли;

КонецЦикла;

 Оператор Продолжить передает управление в начало цикла.

Пока <условие> Цикл

Если <условие> Тогда
.........Прервать;
КонецЕсли;

КонецЦикла;

 Оператор Прервать производит досрочный выход из цикла. Управление передается на операторы после цикла.
Перем Сотр; | Явное объявление переменной.
Номер = 1; | Переменные можно не объявлять явно. При первом присвоении значения создается новая переменная.
ФИО = Фамилия + " " + Имя + " " + Отчество; | Сложение строк (конкатенация)
НекаяДата = '01.01.2002'; | Переменная, которая хранит дату.
Перем глТекущийПользователь Экспорт; | Объявление глобальной переменной в Глобальном модуле. Такие переменные доступны в любом месте конфигурации.

Попытка

а = 10 / 0;

Исключение

Предупреждение("Деление на ноль!");

КонецПопытки;

Обработка исключительных ситуаций.

Если во время выполнения операторов между словами Попытка и Исключение произошла ошибка, то управление передается на операторы между словами Исключение и КонецПопытки

Если ошибки не было, то управление передается на операторы после слова КонецПопытки.
//это комментарий | Так оформляются комментарии.
СпрСотр.ВыбратьЭлементы(); | Вызов метода объекта производится как обычно, через точку.


Периодический

Методы объекта Периодический

Метод | Описание

Также часто применяются следующие методы:

Метод | Описание
Получить |
Установить |
ИспользоватьДату |

Примеры

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

ОчерДата = История.ДатаЗнач;
ОчерДата = История.Значение;
Док = История.ТекущийДокумент();

КонецЦикла;

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

ТекОбъект = История.ТекущийОбъект();
Если ТипЗначенияСтр(ТекОбъект) = "Справочник" Тогда

Если ТекОбъект.Вид()= "Сотрудники" Тогда

ТекСотр = ТекОбъект;
ТекРеквизит = История.ТекущийРеквизит();
ОчерДата = История.ДатаЗнач;
ОчерЗначение = История.Значение;

КонецЕсли;

КонецЕсли;

КонецЦикла;

//поиск
ЗначениеНаДату
НайтиЗначение

//корректировка
НазначитьТип
Записать
Удалить


ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
Назначение
Виды процедур
 Параметры
 СтатусВозврата 		Нострадамус: будущее предопределено, но не окончательно!

Предопределенные процедуры являются особыми процедурами системы 1С. Такие процедуры имеют заранее определенное имя и вызываются системой при наступлении определенных событий. Т.е. можно сказать, что предопределенные процедуры являются обработчиками событий.

Виды предопределенных процедур

В системе 1С существуют следующие виды предопределенных процедур:

Вид предопределенных процедур | Примеры
Предопределенные процедуры глобального модуля | ПриНачалеРаботыСистемы() ПриЗавершенииРаботыСистемы() ПриЗаписиКонстанты() ПриЗаписиИстории() ПриСменеРасчетногоПериода()
Модуль формы списка справочника | ПриОткрытии() ПриЗакрытии() ПриЗаписи() ПриВводеСтроки() ПриВыбореРодителя() ПриВыбореВладельца()
Модуль формы элемента справочника | ВводНового() ПриЗаписи()
Модуль журнала документов | ПриУстановкеИнтервала() ПриУстановкеОтбора()
Модуль формы документа | ВводНового() ВводНаОсновании() ПриЗаписи() ПриВводеСтроки() ПриУдаленииСтроки()
Модуль документа | ОбработкаПроведения() ОбработкаУдаленияПроведения() АрхивироватьДокумент()
Модуль журнала расчетов | ПриУстановкеОтбора() ПриИсправленииРезультата() ПриВыбореВладельца()
Модуль вида расчета | ПровестиРасчет()
Модуль журнала операций | ПриУстановкеОтбора() ПриУстановкеИнтервала()
Модуль формы операции | ВводНового() ПриЗаписи() ПриВводеСтроки() ПриУдаленииСтроки()
Модуль журнала проводок | ПриУстановкеОтбора() ПриУстановкеИнтервала() ПриПоказеПроводокПоДокументу()
Предопределенные процедуры для Таблиц | ОбработкаЯчейкиТаблицы() ПриВыбореЯчейкиТаблицы()
Модуль формы списка счетов | ПриВводеСтроки() ПриВыбореРодителя() ПриЗаписи()
Модуль формы счета | ВводНового() ПриЗаписи()
Для организации подбора | ОбработкаПодбора()

Полный список предопределенных процедур и их параметров см. в Синтакс-помощнике.

Параметры предопределенных процедур

Некоторые предопределенные процедуры имеют параметры, в которые передается информация о произошедшем событии. Например, для процедуры ПриВыбореВладельца(Элемент) в параметр Элемент передается значение нового владельца.

СтатусВозврата

Если в предопределенной процедуре вызвать команду СтатусВозврата(0), то действие не будет выполнено, например, документ не будет записан или форма не откроется. Следует помнить, что после вызова СтатусВозврата(0), предопределенная процедура продолжает свое выполнение. Чтобы выйти из процедуры, используйте команду Возврат.


РЕГИСТРЫ
Запись движений
Обращение к итогам
Обращение к движениям
Фильтрация движений
Временный расчет
Запрос к регистру 		Народная примета: если программист в девять утра уже на работе, значит, он еще на работе.

Зачем нужны регистры?

Регистры - это таблицы для накопления оперативных данных и получения сводной информации.

Данные в регистры добавляются только при проведении документов. Сведения из регистров используются для формирования отчетов. Классическая схема использования регистров в 1С:Предприятие выглядит следующим образом:

Документы => Регистры => Отчеты

Измерения и ресурсы

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

Измерения регистра - это то, в каких разрезах требуется хранение информации.
Ресурсы регистра - это количественные или суммовые данные, которые хранятся в регистре.

Предположим, что регистр «Остатки товаров» должен содержать сведения о количестве и стоимости каждого товара на каждом складе. В идеологии системы 1С:Предприятие регистр такого вида представляет собой прямоугольную систему координат на одной оси которой находятся склады, на другой — товары, а на пересечении конкретного склада и конкретного товара находятся цифры количества товара и стоимости товара.

Регистр: Остатки товаров
Измерения: Товар, Склад
Ресурсы: Кол-во, Стоимость

С помощью методов встроенного языка мы можем легко получить ответы на вопросы:

  • остаток конкретного товара на конкретном складе
  • остаток конкретного товара на всех складах
  • стоимость всех товаров на конкретном складе

Движения в регистрах

В табличном виде регистр ОстаткиТоваров представляется следующим образом:

 | Товар | Склад | Кол-во | Стоимость
приход | Товар4 | Склад1 | 15 | 200
расход | Товар4 | Склад1 | 10 | 100
приход | Товар4 | Склад1 | 5 | 50
... | ... | ... | ... | ...

Одна строка из этой таблицы называется "движение". Движения в регистрах создаются только при проведении документов. В регистре, кроме измерений и ресурсов, можно задать реквизиты. Реквизиты - это дополнительные сведения, сопровождающие движение. Методами встроенного языка можно отбирать движения с заданным значением реквизита.

Виды регистров

В системе 1С:Предприятие возможно использование регистров двух типов: регистры остатков и регистры оборотов. Разница между ними понятна из их названия и заключается в характере хранимой информации: в регистрах остатков всегда хранится информация о конечном состоянии средств, а в регистрах оборотов, образно выражаясь, — как это состояние было достигнуто.

Если из регистра нужно быстро получать остаток чего-либо на текущий момент, тогда нужно сделать регистр остатков. Если из регистра нужно быстро получать приход или расход чего-либо за период, тогда нужно сделать оборотный регистр.

Регистры остатков

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

Для того чтобы оперативно получать информацию о взаимной задолженности предприятия и покупателя, потребуется регистр «Взаиморасчеты», в котором для каждого покупателя будет храниться сумма задолженности. При совершении хозяйственной операции состояние регистра будет соответствующим образом изменяться, каждый раз отражая текущее состояние взаиморасчетов. Регистр «Взаиморасчеты» — это регистр остатков.

Оборотные регистры

Однако, легко получить информацию об объеме закупок, совершенных данным покупателем за какой-либо период времени, из регистра «Взаиморасчеты» нельзя. Можно проанализировать все движения, имеющие отношение к данному покупателю, и вычислить общую сумму закупок. Но, когда необходимо получать эти сведения оперативно (например, по условиям договора при достижении определенного объема закупок покупателю должна предоставляться скидка), такой способ, конечно же, не подходит.

В этом случае решением проблемы может быть использование регистра оборотов. В таком регистре — назовем его «Объем закупок» — в разрезе покупателей будет храниться информация об объеме закупок (об обороте покупателя). При создании регистра оборотов можно указывать, с какой периодичностью будет накапливаться информация: день, неделя, месяц и так далее.

Теперь, при совершении хозяйственных операций, необходимо будет изменять не только состояние регистра «Взаиморасчеты», но и регистр «Объем закупок». В этот регистр при совершении клиентом каждой покупки будет заноситься информация о сумме покупки. В результате в регистре «Объем закупок» будет постоянно накапливаться информация об общем объеме закупок клиента.

Основы программирования
Регистры, используемые в примерах:
Оборотный регистр Доходы Измерения: Клиент, Товар Ресурсы: Доход Реквизиты: нет Периодичность: День | Регистр остатков Товары Измерения: Товар, Склад Ресурсы: Количество, Стоимость Реквизиты: нет
Хранит доходы от продаж за день в разрезе клиентов и товаров. | Хранит остатки товаров на каждом складе в количественном и суммовом выражении.

Запись движений в регистр остатков
(только при проведении документа)

1. Метод ДвижениеПриход
Синтаксис: ДвижениеПриход(<Измерение1>,<Измерение2>...,<Ресурс1>,<Ресурc2>...)
Пример: Регистр.Доходы.ДвижениеПриход(Покупатель,КупленныйТовар,СуммаПокупки)

2. Метод ДвижениеПриходВыполнить
Пример:

Регистр.Доходы.Клиент
        = Покупатель;
Регистр.Доходы.Товар = КупленныйТовар;
Регистр.Доходы.Доход = СуммаПокупки;
Регистр.Доходы.ДвижениеПриходВыполнить();

Запись движений в оборотный регистр
(только при проведении документа)

1. Метод Движение
Синтаксис: Движение(<Измерение1>,<Измерение2>...,<Ресурс1>,<Ресурc2>...)
Пример: Регистр.Товары.Движение (ПоступившийТовар, ТекСклад, КолвоПоНакладной, СуммаПоНакладной)

2. Метод ДвижениеВыполнить
Пример:
Регистр.Товары.Товар = ПоступившийТовар;
Регистр.Товары.Склад = ТекСклад;
Регистр.Товары.Количество = КолвоПоНакладной;
Регистр.Товары.Стоимость = СуммаПоНакладной;
Регистр.Товары.ДвижениеВыполнить();

Примечание: Если сумма или количество в движении будет отрицательным, то это движение будет расходом, иначе приходом.

Обращение к итогам регистра

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

2-й способ. Выгрузка итогов в таблицу значений

РегДоходы = СоздатьОбъект("Регистр.Доходы");
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");

РегДоходы.ВыгрузитьИтоги(ТабЗнач);

ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
......Сообщить("Товар " + Строка(ТабЗнач.Товар) +
...................... " на складе " + Строка(ТабЗнач.Склад) +
...................... " кол-во: " + Строка(ТабЗнач.Количество) +
...................... " стоимость: " + Строка(ТабЗнач.Стоимость) +
КонецЦикла;

Обращение к итогам оборотного регистра

РегДоходы = СоздатьОбъект("Регистр.Доходы");
//установить период выборки "30 ноября 2001 года"
РегДоходы.ИспользоватьПериод(2001,11,30);

1. Метод Итог
Синтаксис: Итог(<Измерен1>,<Измерен2>...,<ИмяРесурса>)
Пример:
//получить доход за день по данному клиенту и данному товару
Доход = РегДоходы.Итог(ТекКлиент, ТекТовар, "Доход");

2. Метод Итоги
Пример:
//получить доход за день по данному клиенту и данному товару
РегДоходы.Итоги(ТекКлиент, ТекТовар);
Доход = РегДоходы.Доход;

3. Метод СводныйИтог
Синтаксис: СводныйИтог(<Измерен1>,<Измерен2>...,<ИмяРесурса>)
Могут быть указаны не все измерения. Фиксируются только указанные измерения.

Пример:
//получить сводные итоги за день
ДоходПоКлиенту = РегДоходы.СводныйИтог(ТекКлиент,,"Доход");
ДоходПоТовару = РегДоходы.СводныйИтог(,ТекТовар,"Доход");

4. Метод СводныеИтоги
Синтаксис: СводныеИтоги(<Измерение1>,<Измерение2>...)
Могут быть указаны не все измерения. Фиксируются только указанные измерения.

Пример:
//получить сводные итоги за день по клиенту
РегДоходы.СводныеИтоги(ТекКлиент,); //указано только одно измерение
ДоходПоКлиенту = РегДоходы.Доход;

//получить сводные итоги за день по товару
РегДоходы.СводныеИтоги(,ТекТовар); //указано только одно измерение
ДоходПоТовару = РегДоходы.Доход;

Обращение к итогам регистра остатков

РегТовары = СоздатьОбъект("Регистр.Товары");

1. Метод Остаток
Синтаксис: Остаток(<Измерен1>,<Измерен2>...,<ИмяРесурса>

Пример:
//получить остаток данного товара на данном складе
Колво = РегТовары.Остаток (ТекТовар, ТекСклад, "Количество");

//получить стоимость данного товара на данном складе
Стоимость = РегТовары.Остаток (ТекТовар, ТекСклад, "Стоимость");

2. Метод Остатки
Синтаксис: Остатки(<Измерение1>,<Измерение2>...)

Пример:
//получить остаток данного товара на данном складе по кол-ву и по сумме
РегТовары.Остатки (ТекТовар, ТекСклад);
Колво = РегТовары.Количество;
Стоимость = РегТовары.Стоимость;

3. Метод СводныйОстаток
Синтаксис: СводныйОстаток(<Измерен1>,<Измерен2>...,<ИмяРесурса>)
Могут быть указаны не все измерения. Фиксируются только указанные измерения.

Пример:
//получить остаток данного товара на всех складах
КолвоТовара = РегТовары.СводныйОстаток (ТекТовар,,"Количество");
СтоимостьТовара = РегТовары.СводныйОстаток (ТекТовар,,"Стоимость");

//получить стоимость всех товаров на данном складе
СтоимостьПоСкладу = РегТовары.СводныйОстаток (,ТекСклад,"Стоимость");

4. Метод СводныеОстатки
Пример:
//получить сводные остатки по товару
РегТовары.СводныеОстатки(ТекТовар,); //указано только одно измерение
КолвоТовара = РегТовары.Количество;
СтоимостьТовара = РегТовары.Стоимость;

//получить стоимость всех товаров на данном складе
РегТовары.СводныеИтоги(,ТекСклад); //указано только одно измерение
СтоимостьПоСкладу = РегТовары.Стоимость;

Обращение к движениям регистра

РегТовары = СоздатьОбъект("Регистр.Товары");

 РегТовары.ВыбратьДвижения(ДатаНач,
        ДатаКон);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
........Сообщить("Дата движения " + Строка(РегТовары.ТекущийДокумент.ДатаДок));
........Сообщить("Клиент: " + РегТовары.Клиент);
........Сообщить("Товар: " + РегТовары.Товар);
........Сообщить("Сумма: " + РегТовары.Доход);
КонецЦикла;

Фильтрация движений и итогов

РегТовары = СоздатьОбъект("Регистр.Товары");

1. Метод УстановитьФильтр
Синтаксис: УстановитьФильтр(<Измерение1>,<Измерение2>...,<Рекв1>,<Рекв2>)
Пример:
//выбрать все движения по данному складу за период
РегТовары.УстановитьФильтр(,ТекСклад);
РегТовары.ВыбратьДвижения(ДатаНач, ДатаКон);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
...
КонецЦикла;

//выбрать все товары на данном складе
РегТовары.УстановитьФильтр(,ТекСклад);
РегТовары.ВыбратьИтоги();
Пока РегТовары.ПолучитьИтог()=1 Цикл
...
КонецЦикла;

2. Метод УстановитьЗначениеФильтра
Синтаксис: УстановитьЗначениеФильтра(<Идентиф>,<Значен>,<Вариант>)
Пример:
//выбрать все движения по данному складу за период
РегТовары.УстановитьЗначениеФильтра("Склад", ТекСклад);

//далее идет выборка движений или итогов

3. Метод ВыбратьДвиженияДокумента (<Документ>)

4. Метод ВыбратьДвиженияСОстатками (<ДатаКонца>,<ГрафаОтбора>)
Применяется только для регистра остатков.

Временный расчет регистров

Временный расчет регистров требуется, если нужно выбрать итоги или движения на определенную дату. По умолчанию итоги регистров выдаются на Точку актуальности.

РегТовары = СоздатьОбъект("Регистр.Товары");
РегДоходы = СоздатьОбъект("Регистр.Доходы");

//установка флага временного расчета для регистров
РегТовары.ВременныйРасчет(1);
РегДоходы.ВременныйРасчет(1);

1. Метод РассчитатьРегистрыНа(<ГраницаРасчета>,<ГрафаОтбора>)
Рассчитать все регистры с установленным флагом временного расчета на начало события.
(на начало даты или на момент до проведения документа)

2. Метод РассчитатьРегистрыПо (<ГраницаРасчета>,<ГрафаОтбора>)
Рассчитать все регистры с установленным флагом временного расчета на конец события.
(на конец даты или на момент после проведения документа)

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

ТекстЗапроса = "
|Период С ДатаНач По ДатаКон;
|Товар = Регистр.Доходы.Товар;
|Клиент = Регистр.Доходы.Клиент;
|Доход = Регистр.Доходы.Доход;
|Условие (Товар = ТекТовар);
|Группировка Клиент;
|Функция ПриходПоКлиенту = Приход(Доход);
|";


ОТЧЕТЫ (объект "Таблица")
Ссылка на таблицу
Вывод секций
Присоединить секцию
Пересечение секций 		Звонок в компьютерный магазин:
- Мы тут у вас монитор приобрели, а он ничего не печатает.

Зачем нужны отчеты?

Отчеты предназначены для вывода информации из базы данных. Отчеты похожи на документы, только эти объекты выполняют разные функции. Документы вводят информацию в базу данных, отчеты выводят результаты.

Состав отчета

У любого отчета в системе 1С есть экранная форма -- Диалог, который пользователь видит на экране. В диалоге пользователь обычно задает параметры формирования отчета, например, период времени. Также у отчета обычно есть одна или несколько бумажных форм -- Таблиц. С помощью таблиц отчет печатается на бумаге. Алгоритм формирования отчета записывается в модуле отчета на встроенном языке 1С. Например, для кадрового отчета "Сотрудники, принятые за период" нужна экранная форма с двумя полями Начало и Окончание. Оба поля будут иметь тип "дата". Модуль отчета должен выбрать из справочника Сотрудники нужных людей и вывести их в таблицу.

Секции

Фирма 1С предоставила мощный инструмент формирования отчетов -- Секции. Секция -- это область таблицы, предназначенная для многократного вывода. Например, в отчете по сотрудникам будет секция "Сотрудник", которую нужно будет выводить для каждого сотрудника. Секции могут быть горизонтальными или вертикальными. Можно также выводить пересечения горизонтальных и вертикальных секций.

Поведение сформированного отчета

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

Хотя в самом начале этой главы было сказано, что отчеты выводят результаты, на самом деле с помощью таблиц можно организовать ввод информации в базу данных. Это бывает удобно, когда нужна сложная форма для ввода данных.

Основы программирования
Ссылка на объект Таблица
Для работы с таблицей требуется сначала создать ссылку на объект Таблица. Если таблица не одна, то следует указать нужную таблицу.

Таб = СоздатьОбъект("Таблица");

или

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("НужныйОтчет");

<вывод секций таблицы>

Таб.Показать(); //показать таблицу на экране

Вывод секций
Секция -- это часть таблицы. Секции можно выводить несколько раз, например, в цикле. Вывести секцию -- означает прицепить ее к таблице снизу. После вывода всех секций, таблицу нужно показать на экране.

Таб.ВывестиСекцию("Шапка");
Пока ...
........Таб.ВывестиСекцию("Сотр");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");

Присоединить секцию
Присоединить секцию -- означает прицепить ее к таблице справа.

Таб.ВывестиСекцию("НомерПП");
Для Месяц = 1 По 12 Цикл
.......Таб.ПрисоединитьСекцию("Месяц");
КонецЦикла;
Таб.Показать();

Пересечение секций
Можно выводить область пересечения горизонтальной и вертикальной секций.

Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.......Таб.ВывестиСекцию("Сотр|ФИО");
.......Для Месяц = 1 По 12 Цикл
..............Таб.ПрисоединитьСекцию("Сотр|Месяц");
.......КонецЦикла;
КонецЦикла;
Таб.Показать();


СПРАВОЧНИКИ

Назначение справочников
Основы программирования
Экранные формы
Создание и запись элемента
 Перебор элементов
Поиск элемента
Удаление элементов
Иерархические справочники
Подчиненные справочники
Периодические реквизиты
Подбор из справочника
Другие полезные методы
Чтение структуры справочников

 Психушка. Один придурок другому:
-Тебе понравился мой рассказ, который я тебе вчера дал почитать?
-Да, но как-то всё размыто и много действующих лиц.
Входит врач:
-Так, придурки, кто спёр мою телефонную книгу?...

НАЗНАЧЕНИЕ СПРАВОЧНИКОВ

Назначение справочников
Справочник является списком возможных значений того или иного реквизита. Справочники используются в тех случаях, когда необходимо исключить неоднозначный ввод информации. Например, для того, чтобы покупатель, продавец, кладовщик, директор понимали, о каком товаре идет речь, каждый должен называть его одинаково. И в этом случае необходим справочник. Обычно в торговом предприятии он имеет вид прайс-листа, а если такой справочник хранится в компьютере, то в него заносят всю возможную номенклатуру товаров, с которыми работает торговая фирма.

Система 1С:Предприятие позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: сотрудников, организаций, товаров и т. д. Каждый такой объект называется элементом справочника.

С точки зрения пользователя, следует иметь в виду, что в Конфигураторе создается не сам справочник, как список значений, а разрабатывается заготовка справочника, его шаблон. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его «поведения».

Атрибуты справочников

В качестве обязательных реквизитов каждый справочник имеет Код и Наименование. Код элемента справочника может быть как числовым, так и текстовым. Система 1С:Предприятие предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие.

Помимо кода и наименования, в справочниках системы 1С:Предприятие может храниться любая дополнительная информация об элементе справочника. Для хранения такой информации в справочнике может быть создан список реквизитов. Используя механизм реквизитов справочника, легко организовать, например, картотеку сотрудников. Например, справочник Сотрудники почти наверняка будет иметь атрибуты Должность, Оклад и другие. Фирма 1С предвосхитила программистов и ввела во все справочники два уже заданных атрибута: Код и Наименование. Действительно, практически любой объект из реальной жизни содержит эти атрибуты. Например, для сотрудников кодом выступает табельный номер, а наименованием -- фамилия, имя, отчество (ФИО).

Типы данных

Для каждого атрибута справочника нужно указать его тип данных, например, "число", "строка", "дата". Это базовые типы, но можно указать и сложные типы данных. Например атрибут Должность имеет тип данных Должности. В этом случае, значения этого атрибута будут выбираться из справочника Должности. Так реализуется простейшая связь между справочниками, когда значения атрибутов одного справочника выбираются из другого справочника.

Справочник Сотрудники
Справочник Должности

Код | Наименование | Должность | Оклад
1 | Иванов Иван Иванович | Бухгалтер | 7000
2 | Петров Петр Петрович | Кадровик | 5000

Код | Наименование
1 | Бухгалтер
2 | Кадровик

Иерархические справочники

Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.

Справочник Сотрудники

Справочник Контрагенты

  • Работающие
    • Иванов Иванов Иванов
    • Петров Петр Петрович
  • Уволенные
    • Светлов Михаил Петрович
    • Цветков Антон Васильевич
  • Партнеры
    • Партнер 1
    • Партнер 2
  • Поставщики
    • Поставщик 1
    • Поставщик 2

Подчиненные справочники

Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь "один-ко-многим". В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник НалоговыеЛьготы. Тогда его можно сделать подчиненным справочнику Сотрудники. Это означает, что "Сотрудник владеет налоговыми льготами".

Справочник Сотрудники

Справочник НалоговыеЛьготы
  • Иванов Иванов Иванов
  • Петров Петр Петрович
  • Светлов Михаил Петрович
  • Цветков Антон Васильевич
(владелец Петров Петр Петрович)
  • Льгота ветеранам
  • Льгота на детей
  • Иванов Иванов Иванов
  • Петров Петр Петрович
  • Светлов Михаил Петрович
  • Цветков Антон Васильевич
(владелец Светлов Михаил Петрович)
  • Льгота афганцам

Сравнение справочников с другими объектами

Объект | Сходства | Различия
Константы | хранит значение, сохраняется в базе данных | Справочник хранит не одно значение, а целый список однородных объектов.
Документы | сохраняется в базе данных, имеет реквизиты, документы могут быть подчиненными друг другу | Справочник хранит нормативно-справочную информацию, а документы отражают события реального мира. Обычно значения реквизитов документов выбираются из справочников. Документ обычно проводится, документ обязательно имеет дату и время, документ может содержать табличную часть, чего нет в справочниках. Справочники могут быть многоуровневыми, в справочнике могут быть периодические реквизиты, чего нет в документах.
Перечисления | хранится в БД, хранит список значений | Множество значений в справочник вводит пользователь в режиме Предприятие, а для перечислений список значений задается разработчиком в режиме Конфигуратор. Перечисления обычно используются в операторах Если.
ТаблицаЗначений | имеет строки и колонки (не хранится в БД) | ТаблицаЗначений предназначена для хранения промежуточных данных в памяти компьютера, возникающих во время работы программы. Таблица значений может хранить разнородные объекты, а в справочнике все элементы одного типа. Таблицы значений не могут быть многоуровневыми или подчиненными друг другу.
СписокЗначений | хранит список значений (не сохраняется в БД) | Список значений может хранить разнородные объекты, а в справочнике все элементы одного типа

Основы программирования

Ссылка на справочник
Для работы со справочником из какого-нибудь модуля требуется сначала создать ссылку на этот справочник.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрДолж = СоздатьОбъект("Справочник.Должности");

Создание и запись нового элемента
Добавление в справочник новых элементов (записей).

СпрСотр.Новый();
СпрСотр.Наименование = "Иванов Иван Иванович";
СпрСотр.Оклад = 5000;
СпрСотр.Записать();

Поиск элемента справочника

//например, в приказе об увольнении
СпрСотр.НайтиЭлемент(Сотрудник);

СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту("Оклад", 5000);

Удаление элемента справочника
Удаление и пометка на удаление элемента справочника.

СпрСотр.Удалить(0); //пометка на удаление
СпрСотр.Удалить(1); //непосредственное удаление

//можно проверить, помечен ли элемент на удаление
//функция возвращает 1 - если помечен, 0 - если нет
Пометка = СпрСотр.ПометкаУдаления();

Перебор элементов справочника
Перебор элементов справочника в цикле.

СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл
... //действия с очередным элементом
...Сообщить("Сотрудник " + СпрСотр.Наименование);
КонецЦикла;

Родитель
Перебор элементов внутри группы. Группа в терминах 1С -- это "родитель".

СпрСотр.НайтиПоНаименованию("Работающие");
Работающие = СпрСотр.ТекущийЭлемент();
СпрСотр.ИспользоватьРодителя(Работающие);
//дальше, например, цикл по сотрудникам (см. выше)
...

Владелец
Перебор элементов справочника принадлежащих элементу другого справочника.
Один справочник подчинен другому справочнику.

СпрНЛ = СоздатьОбъект("Справочник.НалоговыеЛьготы");
СпрНЛ.ИспользоватьВладельца(Сотрудник);
//дальше, например, цикл по льготам этого сотрудника (см. выше)
...

Периодические реквизиты
Чтение и запись периодических реквизитов.
Установка даты выборки периодических реквизитов для всего справочника.

//так мы узнаем, какая была у сотрудника
//категория на определенную дату
Катег = СпрСотр.Категория.Получить(НекаяДата);

//так мы установим сотруднику категорию
//на определенную дату
СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория);

//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);

//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;

ЭКРАННЫЕ ФОРМЫ СПРАВОЧНИКОВ

Форма списка справочника

Для удобства работы пользователей со справочником на этапе конфигурирования можно создать несколько видов экранных форм для показа справочника. В зависимости от контекста вызова справочника можно задать использование определенного диалога для работы с ним.

Лучше один раз увидеть, чем сто раз услышать, поэтому ниже для примера приведена форма списка справочника Сотрудники:

Модуль формы списка содержит процедуры и функции, которые действуют в контексте данной формы (в контексте объекта Справочник).

Предопределенные процедуры вызываются системой 1С при наступлении определенных событий.

Предопределенная процедура
Описание
ПриОткрытии() | Вызывается при открытии формы списка справочника. Можно задать начальные значения для переменных, проверить права пользователя на открытие данного справочника и т.д.
ПриЗакрытии() | Вызывается при закрытии формы списка справочника.
ПриЗаписи()

Вызывается при записи элемента справочника, если элементы вводятся прямо в форме списка, а не в форме элемента. Это используется для справочников с простой структурой, например справочник Должности. В этой процедуре можно проверить вводимые данные на наличие ошибок.

Пример, справочник Должности

Процедура ПриЗаписи
.....Если СокрЛП(Наименование)="" Тогда
..........Предупреждение("Не указано название должности!");
..........СтатусВозврата(0);
.....КонецЕсли;
КонецПроцедуры

ПриВыбореРодителя(НовРодитель) | Вызывается при выборе родителя (группы). В этой процедуре можно проверить права пользователя на просмотр элементов данной группы.
ПриВыбореВладельца(НовВладелец) | Вызывается при выборе владельца справочника-хозяина. Имеет смысл, если данный справочник подчинен другому.
ПриУстановкеОтбора(Реквизит,Значение) | Предопределенная процедура при интерактивной установке отбора любым способом (отбор, быстрый отбор, отбор по значению, история отбора) и при отключении отбора.
ПриВыбореСтроки() | Режим обработки выбора строки (двойной щелчок мыши или клавиша Enter) включается в форме списка справочника, журнала документов, счетов, журнала операций, журнала проводок при помощи метода Форма.ОбработкаВыбораСтроки(1). Тогда при выборе строки будет вызываться эта предопределенная процедура.

Сортировка

В форме списка справочника элементы могут быть отсортированы в различном порядке: по коду, по наименованию или по любому реквизиту, у которого в Конфигураторе установлен флажок Сортировка. Задать тип сортировки можно программно методом Сортировка (Способ, ФлагРазрешенияИзменения)

Процедура ПриОткрытии()
...... Сортировка("Код",0); //сортировка по коду, пользователь изменить не может
КонецПроцедуры

Отбор

В форме списка справочника элементы могут быть отфильтрованы, т.е. пользователю будут показаны только нужные элементы. Программно установить отбор можно методом УстановитьОтбор (Реквизит, Значение). Для этого у реквизита должен быть установлен флажок "Отбор по реквизиту" в Конфигураторе .

Процедура ПриОткрытии()
...... УстановитьОтбор("Год",1980);
КонецПроцедуры

Статический фильтр

В 1С нельзя установить отбор по периодическому реквизиту или по нескольким реквизитам одновременно (сложный фильтр). В этом случае выходом из положения может быть метод ИспользоватьСписокЭлементов. Этому методу нужно передать список элементов, которые должны быть показаны. Предварительно этот список нужно сформировать.

Процедура ПоказатьРаботающихПлотников()

СписокЭлементов
          = создатьОбъект("СписокЗначений");
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьДату(РабочаяДата());
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....Если (СпрСотр.Родитель = группаРаботающие) И (СпрСотр.Должность=длжПлотник)
          Тогда
...........СписокЭлементов.ДобавитьЗначение(СпрСотр.ТекущийЭлемент());
.....КонецЕсли;
КонецЦикла;

ИспользоватьСписокЭлементов(СписокЭлементов);

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

Форма элемента и форма группы

Если справочник имеет сложную структуру, тогда его элементы удобнее редактировать в отдельном окне, а не в списке. Ниже приведена форма элемента справочника Сотрудники.

В форме элемента справочника также есть предопределенные процедуры:

Предопределенная процедура
Описание
ПриОткрытии() | Вызывается при открытии формы элемента справочника. Можно задать начальные значения для переменных, проверить права пользователя на открытие данного элемента справочника и т.д.
ПриЗакрытии() | Вызывается при закрытии формы элемента справочника.
ПриЗаписи()

Вызывается при записи элемента справочника. В этой процедуре можно проверить вводимые данные на наличие ошибок.

Пример, справочник Сотрудники

Процедура ПриЗаписи
....Если Категория.Выбран()=0 Тогда
.........Предупреждение("Не указана категория сотрудника!");
.........СтатусВозврата(0);
.....КонецЕсли;
КонецПроцедуры

ВводНового() | Вызывается при интерактивном вводе нового элемента справочника. В этой процедуре можно проверить права пользователя на создание новых элементов справочника, а также задать начальные значения реквизитов.

СОЗДАНИЕ И ЗАПИСЬ ЭЛЕМЕНТА

Программное создание элемента справочника

Ниже в справочник Сотрудники программно добавляется новый сотрудник в группу Работающие. В справочнике заполняется поля Наименование, ДатаПриема и пара периодических реквизитов.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.Новый();
СпрСотр.Наименование = "Иванов Иван Иванович";
СпрСотр.ДатаПриема = '01.01.2002';
СпрСотр.Записать();
//установка периодических реквизитов возможна только после записи элемента
СпрСотр.Категория.Установить (СпрСотр.ДатаПриема, ктгСовместители);
СпрСотр.Должность.Установить (СпрСотр.ДатаПриема, длжПлотник);

а можно сделать красивее:

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(ДатаПриема); //внимание!
СпрСотр.Новый();
СпрСотр.Наименование = "Иванов Иван Иванович";
СпрСотр.ДатаПриема = '01.01.2002';
//доступ к периодическим реквизитам становится такой же, как к обычным
СпрСотр.Категория = ктгСовместители;
СпрСотр.Должность = длжПлотник;
СпрСотр.Записать();

Программное создание групп

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.НоваяГруппа();
СпрСотр.Наименование = "Работающие";
СпрСотр.Записать();

СпрСотр.НоваяГруппа();
СпрСотр.Наименование = "Уволенные";
СпрСотр.Записать();

Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот.

Транзакции

При создании множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное создание всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции справочник блокируется.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
НачатьТранзакцию();

Для Ном = 1 По 100 Цикл
.....СпрСотр.Новый();
.....СпрСотр.Наименование = "Новый " + Строка(Ном);
.....СпрСотр.Записать();
КонецЦикла;

ЗафиксироватьТранзакцию();

ПЕРЕБОР ЭЛЕМЕНТОВ

Простой перебор

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Режим = 0; //выбирать без учета иерархии, 1 - с учетом (по умолч.)
СпрСотр.ВыбратьЭлементы(Режим);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....<действия с очередным элементом/группой>
КонецЦикла;

Фильтрация (отбор)

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
РежимИерархии = 1; //1- выбирать с учетом иерархии, 0 - без учета
РежимГрупп = 0; //0 - не включать в выборку группы, 1 - включать
ИмяРеквизита = "Год"; //в Конфигураторе у реквизита должен быть
        установлен флажок Отбор
Значение = 1980;
СпрСотр.ВыбратьЭлементыПоРеквизиту(ИмяРеквизита,Значение,РежимИерархии,
        РежимГрупп);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....<действия с очередным элементом>
КонецЦикла;

Фильтрация в цикле

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(РабочаяДата());
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл

Если СпрСотр.Должность <> длжПлотник Тогда
....Продолжить; //этого сотрудника пропускаем, перейти в начало цикла
КонецЕсли;

<действия с очередным элементом>

КонецЦикла;

Порядок сортировки

Перед выборкой можно задать порядок сортировки следующими методами:

ПорядокКодов()
ПорядокНаименований()
ПорядокРеквизита(ИмяРекв) //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ОбратныйПорядок()

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

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ПорядокКодов();
СпрСотр.ОбратныйПорядок();
СпрСотр.ВыбратьЭлементы();

Запрос к справочнику

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

ПОИСК ЭЛЕМЕНТА

Поиск элемента

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Если СпрСотр.НайтиЭлемент(ВыбрСотр)=1 Тогда
....//элемент становится текущим
....СпрСотр.Родитель = грпРаботающие;
....СпрСотр.Записать();
КонецЕсли;

Поиск по коду

Если СпрСотр.НайтиПоКоду(1) = 1 Тогда
....ЭлементИлиГруппа = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Поиск по наименованию

Если СпрСотр.НайтиПоНаименованию("Работающие")=1 Тогда
....грпРаботающие = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Режим = 1; // 1 - поиск внутри установленного подчинения (родителя) (по умолч.); 0 - поиск во всем справочнике
ФлагПоиска = 0; //1 - найти точное соответствие; 0 - найти наименование по первым символам (по умолч)
СпрСотр.ИспользоватьРодителя(грпРаботающие);
Если СпрСотр.НайтиПоНаименованию("Ив",Режим,ФлагПоиска)=1 Тогда
....ПервыйРаботающийИв = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Поиск по реквизиту

ИмяРекв = "Год";
        //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ФлагГлобПоиска = 1; // 1- искать во всем справочнике, 0 - искать в пределах
        подчинения
Если СпрСотр.НайтиПоРеквизиту(ИмяРекв,1980,ФлагГлобПоиска)=1
        Тогда
.....НайденныйЭлемент = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Поиск элемента в цикле

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(РабочаяДата());
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл

Если СпрСотр.Должность = длжПлотник Тогда
....Прервать; //нашли работающего плотника! выйти из цикла
КонецЕсли;

КонецЦикла;
<действия с найденным элементом>

Запрос к справочнику

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

УДАЛЕНИЕ ЭЛЕМЕНТОВ

Непосредственное удаление

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(ВыбрСотрудник);
СпрСотр.Удалить(); //непосредственное удаление

Внимание! Если вы производите непосредственное удаление элемента, то следите, чтобы на него не было ссылок в других объектах. Например, удаляемый сотрудник может использоваться в документе Отпуск. При его удалении ссылочная целостность базы данных будет нарушена. В этом случае рекомендуется пользоваться пометкой на удаление.

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

Пометка на удаление

Для контроля ссылочной целостности базы данных удаляемые элементы всего лишь помечаются на удаление. Затем специальной командой меню Операции => "Удаление помеченных объектов" в монопольном режиме система 1С проконтролирует ссылочную целостность и физически удалит элементы из базы данных, если на них нет ссылок в других объектах.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(ВыбрСотрудник);
СпрСотр.Удалить(0); //пометка на удаление

//можно проверить, помечен ли элемент на удаление
//функция возвращает 1 - если помечен, 0 - если нет
Пометка = СпрСотр.ПометкаУдаления();

//можно снять пометку на удаление
СпрСотр.НайтиЭлемент(ВыбрСотрудник);
СпрСотр.СнятьПометкуУдаления();

Транзакции

При удалении множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное удаление (пометка на удаление) всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции справочник блокируется.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
НачатьТранзакцию();

СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
......СпрСотр.Удалить(0); //пометка на удаление
КонецЦикла;

ЗафиксироватьТранзакцию();

ИЕРАРХИЧЕСКИЕ СПРАВОЧНИКИ

Договоримся о названиях

Иерархический справочник - это также многоуровневый справочник, или справочник с группами.
Группа справочника в 1С часто называется "родитель".

Назначение иерархических справочников

Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Возможное количество уровней вложенности справочника задается в Конфигураторе.

Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.

Программное создание группы

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.НоваяГруппа();
СпрСотр.Наименование = "Работающие";
СпрСотр.Записать();

СпрСотр.НоваяГруппа();
СпрСотр.Наименование = "Уволенные";
СпрСотр.Записать();

Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот.

Установка текущей группы

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие); //теперь мы внутри группы Работающие
СпрСотр.ВыбратьЭлементы(); //открыть выборку элементов группы Работающие

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.Новый(); //создание нового элемента в группе Работающие

Информация о текущем элементе

Если справочник многоуровневый, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:

Метод / атрибут
Описание
Уровень()

Этот метод возвращает уровень текущего элемента. Например, для сотрудника, который находится в группе Работающие, мы получим число 2.

Пример, вывод иерархического справочника в виде дерева:

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлементы()=1 Цикл

//вывести
                отступ в соответствии с глубиной вложенности элемента
Для Ном=1 По СпрСотр.Уровень() Цикл
.....Сообщить(".....");
КонецЦикла;
Сообщить(СпрСотр.Наименование);

КонецЦикла;

ЭтоГруппа() Этот метод возвращает 1, если текущий элемент справочника является группой, или 0 если группой не является.

Пример, вывод сотрудников (группы не выводятся):

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлементы()=1 Цикл

Если СпрСотр.ЭтоГруппа()=1 Тогда
......Продолжить; //группы пропускаем, перейти в начало цикла
КонецЕсли;
Сообщить(СпрСотр.Наименование);

КонецЦикла;

ПринадлежитГруппе(...) Метод проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо от того, на каком нижележащем уровне он находится).
Возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет.

Пример, вывод товаров, принадлежащих к группе Спиртное, независимо от того входят ли они в подгруппы Шампанское, Пиво, Водка, Вино и т.д.:

СпрТовары = СоздатьОбъект("Справочник.Товары");
СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлементы()=1 Цикл

Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1 Тогда
.....Сообщить(СпрТовары.Наименование);
КонецЕсли;

КонецЦикла;

атрибут Родитель

Этот атрибут содержит родителя текущего элемента справочника, т.е. группу, в которой находится текущий элемент. Доступен для чтения и записи.

Пример, перенос всех товаров из группы Спиртное в группу Распродажа:

СпрТовары = СоздатьОбъект("Справочник.Товары");
СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлементы()=1 Цикл

Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1
                Тогда
.....СпрСотр.Родитель = грпРаспродажа;
.....СпрСотр.Записать();
КонецЕсли;

КонецЦикла;

А можно сделать красивее и перенести всю группу Спиртное в группу Распродажа, тогда все подгруппы и элементы также перенесутся в группу Распродажа.

СпрТовары =
              СоздатьОбъект("Справочник.Товары");
СпрТовары.НайтиЭлемент(грпСпиртное);
СпрТовары.Родитель = грпРаспродажа;
СпрТовары.Записать();
ПолныйКод()

Возвращает строку, содержащую полный код выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом "/".

Например, "2/7/123"
ПолноеНаименование()

Возвращает строку, содержащую полное наименование выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом "/".

Например, "Спиртное/Шампанское/Советское"

Возможность выбора группы в реквизите диалога

Часто бывает удобно для реквизитов на форме, имеющих тип Справочник, отключить возможность выбора группы. Тогда в данное поле может быть выбран только элемент и не может быть выбрана группа. В общем, проще один раз попробовать, чем несколько раз объяснять.

Форма.ВыбрСотрудник.ВыборГруппы(0); //отключить возможность выбора группы

Запросы к иерархическому справочнику

Запросы к иерархическому справочнику имеют некоторые особенности. Подробнее см. Запросы

ПОДЧИНЕННЫЕ СПРАВОЧНИКИ

Договоримся о названиях

Справочник-владелец, это также справочник-хозяин.
Справочник-владелец и подчиненный справочник также называются связанными справочниками.
В терминах реляционных баз данных справочник-владелец - это родительская таблица, подчиненный справочник - это дочерняя таблица.

Назначение подчиненных справочников

Любой справочник может использоваться как сам по себе, так и быть подчиненным какому-либо другому справочнику. Например, справочник договоров может использоваться отдельно, а может быть связан со справочником организаций.

Чтобы подчинить справочник какому-либо из справочников, уже существующих в системе, в поле «Подчинен» следует выбрать наименование этого справочника. Такой справочник в системе 1С:Предприятие называется владельцем.

В отличие от многоуровневого справочника, в котором все элементы имеют одинаковую структуру, использование механизма подчиненных справочников позволяет связать элементы разной структуры. В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.

Внешне работа с подчиненным справочником в системе 1С:Предприятие будет выглядеть следующим образом.

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

Если открыть подчиненный справочник, не выбрав элемент-владелец, то в окне подчиненного справочника не будет отображаться ни одного элемента, а в заголовке окна будет выдано сообщение «Не задан элемент-владелец».

При работе с системой 1С:Преднриятие для подчиненного справочника может быть отключен показ в виде иерархического списка. В этом случае в окне подчиненного справочника будут отображаться все элементы этого справочника, то есть элементы, починенные разным владельцам, будут показываться вперемешку. Тем не менее, любой элемент подчиненного справочника «знает» своего владельца: если для справочника включен режим «Редактировать в диалоге» (см. ниже п. «Создание форм справочника»), наименование элемента-владельца будет выдаваться в заголовке окна редактирования элемента справочника.

Установка текущего владельца

СпрДоговоры = СоздатьОбъект("Справочник.Договоры");
СпрДоговоры.ИспользоватьВладельца(ВыбрКонтрагент);
СпрДоговоры.ВыбратьЭлементы(); //открываем выборку по договорам выбранного контрагента
<...>

Информация о текущем элементе

Если справочник подчиненный, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:

Атрибут
Описание
атрибут Владелец

Этот атрибут содержит владельца текущего элемента подчиненного справочника, т.е. элемент справочника-хозяина, к которому относится данный элемент. Атрибут доступен для чтения и записи.

Пример, перенос всех договоров от одного котрагента к другому (справочник Договоры подчинен справочнику Контрагенты):

СпрДоговоры
              = СоздатьОбъект("Справочник.Договоры");
СпрДоговоры.ИспользоватьВладельца(Контрагент1);
СпрДоговоры.ВыбратьЭлементы();
Пока СпрДоговоры.ПолучитьЭлементы()=1 Цикл

СпрДоговоры.Владелец = Контрагент2;
СпрДоговоры.Записать();

КонецЦикла;

ПЕРИОДИЧЕСКИЕ РЕКВИЗИТЫ

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

Подобное свойство реквизита справочника позволяет, например, легко организовать хранение истории изменения курсов в справочнике валют.

К периодическому реквизиту можно обращаться при помощи встроенного языка системы 1С:Предприятие — получать и записывать значение реквизита на указываемую дату. Однако, следует иметь в виду, что при получении значения реквизита на какую-то дату извлекается его значение на указанную или (если значение на указанную дату отсутствует) на ближайшую предыдущую дату, а запись значения периодического реквизита выполняется всегда на указанную дату.

В режиме использования конфигурации для периодического реквизита можно вызвать окно «История». Это окно представляет собой таблицу, состоящую из двух граф: дата изменения значения реквизита справочника и значение на эту дату. Окно «История» позволяет редактировать историю изменений значения реквизита напрямую: вводить новые строки, редактировать или удалять существующие.

Методы периодических реквизитов
//так мы узнаем, какая была у сотрудника категория на определенную дату
Катег = СпрСотр.Категория.Получить(НекаяДата);

//так мы установим сотруднику категорию на определенную дату
СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория);

Внимание! Эти методы можно применять, если ранее не применялся метод ИспользоватьДату

Установка даты выборки периодических реквизитов

//можно установить дату выборки периодических реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);

//тогда ниже уже нельзя использовать методы Установить и Получить
//доступ к периодическим реквизитам становится такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;

Объект "Периодический"

Для работы с историей периодического реквизита очень удобно использовать объект "Периодический".

Пример, вывести историю карьеры сотрудника за текущий год:

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

С помощью объекта Периодический можно также редактировать и удалять значения. Полный список методов см. в Синтакс-помощнике.

Проведение документов

При проведении документа часто требуется установить новое значение периодического реквизита на определенную дату. Это называется движение документа. В этом случае следует применять метод УстановитьРеквизитСправочника:

Процедура ОбработкаПроведения()

УстановитьРеквизитСправочника(Сотрудник, "Должность", НоваяДолжность, ДатаПеремещения);

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

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

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

ПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника(Сотрудник, "Должность", НоваяДолжность, ДатаПеремещения);

КонецЦикла;

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

ПОДБОР ИЗ СПРАВОЧНИКА

Назначение подбора
 Функция подбора позволяет выбирать несколько значений из справочника или другого объекта, не закрывая его. Например, есть документ РасходнаяНакладная, в котором пользователь может указать несколько товаров.

Организация подбора

Синтаксик: ОткрытьПодбор(<Объект>,<ИмяФормы>,<КонтекстФормы>,<ФлагМножВыбора>,<ТекЗнач>)

ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);

Процедура ОбработкаПодбора(Элемент,КонтФормы)
...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры

Можно воспользоваться контекстом формы и сразу перейти в нужную группу, например:

ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);
Конт.ИспользоватьРодителя(грпСпиртное);

Процедура ОбработкаПодбора(Элемент,КонтФормы)
...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры

Установка и получение значений из подбора

КонтФормыПодбора.УстановитьЗначениеВПодборе(<ИмяРеквизита>,<Значение>)

<ИмяРеквизита> - строка с именем реквизита формы подбора значения;
<Значение> - значение реквизита.

КонтФормыПодбора.ПолучитьЗначениеИзПодбора(<Выражение>)

<Выражение> - строковое выражение, значение которого вычисляется в контексте формы подбора и возвращается в качестве результата.

ДРУГИЕ ПОЛЕЗНЫЕ МЕТОДЫ

Метод | Описание
Вид() | Установить или считать текущее название вида справочника. Возвращает текущее название вида справочника, как оно задано в Конфигураторе, например "Сотрудники". Установка вида справочника возможна для реквизитов типа "Справочник", т.е. справочник неопределенного вида.
ПредставлениеВида() | Получить пользовательское представление вида справочника, как он задан в конфигураторе. Возвращает строковое значение, содержащее пользовательское представление вида справочника (синоним).
УстановитьАтрибут(ИмяРеквизита, Значение) | Установить значение реквизита по его имени. <ИмяРеквизита> - строковое выражение, содержащее имя реквизита, как оно задано в конфигураторе. <Значение> - выражение, содержащее устанавливаемое значение реквизита.
ПолучитьАтрибут(ИмяРеквизита) | Получить значение реквизита по его имени. Возвращает значение реквизита.
Выбран() | Возвращает 1 - если элемент справочника выбран, 0 - если не выбран. Часто применяется для проверки на ошибки, чтобы все необходимые данные были указаны.
Выбрать(...) | Вызов диалога для выбора элемента справочника. Возвращает: 1 - если элемент выбран; 0 - если не выбран. Выбранный элемент становится текущим.

ЧТЕНИЕ СТРУКТУРЫ СПРАВОЧНИКОВ

Цикл по справочникам

КолвоСправочниковВКонфигурации = Метаданные.Справочник();
Для Ном=1 to КолвоСправочниковВКонфигурации Цикл

кфгСпр = Метаданные.Справочник(Ном);
Идентификатор = кфгСпр.Идентификатор();
ПолныйИдентификатор = кфгСпр.ПолныйИдентификатор();
Синоним = кфгСпр.Синоним();
Комментарий = кфгСпр.Комментарий();
КоличествоУроней = кфгСпр.КоличествоУроней();
ПодчиненЛи
          = кфгСпр.Владелец().Выбран();
Владелец = кфгСпр.Владелец();
ИдентификаторВладельца = кфгСпр.Владелец().Идентификатор;
.....<и так далее>

КонецЦикла;

т.е. если вызвать метод Метаданные.Справочник() без параметров, то он вернет общее количество справочников в конфигурации. Если передать ему в качестве параметра номер или название справочника, то он вернет справочник как объект конфигурации.

Цикл по реквизитам справочника

кфгСпрСотр = Метаданные.Справочник("Сотрудники");

КолвоРеквизитов = кфгСпрСотр.Реквизит();
Для Ном=1 to КолвоРеквизитов Цикл

кфгРекв = кфгСпрСотр.Реквизит(Ном);
Идентификатор = кфгРекв.Идентификатор();
ПолныйИдентификатор = кфгРекв.ПолныйИдентификатор();
Синоним = кфгРекв.Синоним();
Комментарий = кфгРекв.Комментарий();
Тип = кфгРекв.Тип(); //"Строка", "Число", "Справочник"
Вид = кфгРекв.Вид(); //напр. "Сотрудники"
Длина = кфгРекв.Длина();
Точность = кфгРекв.Точность();
Периодический = кфгРекв.Периодический();
.....<и так далее>

КонецЦикла;

т.е. если вызвать метод Метаданные.Справочник(Х).Реквизит() без параметров, то он вернет общее количество реквизитов справочника Х в конфигурации. Если передать ему в качестве параметра номер или название реквизита, то он вернет реквизит справочника как объект конфигурации.

Обращение к атрибутам по имени

При работе с метаданными часто применяются следующие методы:

Метод | Описание
УстановитьАтрибут(ИмяРеквизита, Значение) | Установить значение реквизита по его имени. <ИмяРеквизита> - строковое выражение, содержащее имя реквизита, как оно задано в конфигураторе. <Значение> - выражение, содержащее устанавливаемое значение реквизита.
ПолучитьАтрибут(ИмяРеквизита) | Получить значение реквизита по его имени. Возвращает значение реквизита.

Что можно скачать

Так как работа с метаданными плохо документирована самой фирмой 1С, то рекомендуется скачать следующий файл, который является файлом для Синтакс-помощника. В нем содержится описание работы с некоторыми методами объекта Метаданные.

metadata_als.zip

Распакуйте и поместите als-файл в каталог Program Files\1cv77\BIN и он будет подключен к Синтакс-помощнику.


Системные процедуры и функции
Один программист 1С другому:
- У тебя генератор случайных чисел есть?
- Четырнадцать.

Эти процедуры и функции часто применяются при программировании на 1С, поэтому знать их обязательно!

Процедура / Функция

Примечание

ОкончатЦена = Окр(Цена*0.5, 2);

Округление.

Рублей = Цел(Цена);

Получить целую часть числа.

ОблНал = Макс(ОблНал-Льготы,0);
МинЗнач = Мин(значение1,значение2,значение3);

Получить минимальное или максимальное из значений. Можно передавать несколько параметров (больше двух)

Длина = СтрДлина("Иванов Иван Иванович");

Получить длину строки.

ФИО = СокрЛ(ФИО);
              //убрать пробелы слева
ФИО = СокрП(ФИО); //убрать пробелы
              справа
ФИО = СокрЛП(ФИО); //убрать
              пробелы слева и справа

 Отсечение пробелов.

АБ = Лев("АБВГДЕ",2);
ГДЕ = Прав("АБВГДЕ",3);
БВГ = Сред("АБВГДЕ",2,3);

Вырезание подстроки слева, справа и из середины.

НомерСимвола = Найти(ФИО, " "); //найти позицию первого пробела

 Поиск вхождения подстроки в строку.

НоваяСтрока = СтрЗаменить(ПрежняяСтрока," ", "_");

 Замена одной подстроки на другую.

ФИОЗаглавнымиБуквами = ВРЕГ(ФИО)
ФИОстрочнымиБуквами = нрег(ФИО)

Изменение регистра букв.
СегодняВ1С = РабочаяДата(); //дата в параметрах 1С
СегодняВСистеме = ТекущаяДата(); //дата в операционной системе
СейчасВСистеме = ТекущееВремя();
         Получить текущую дату и время.
НачалоМесяца = НачМесяца(НекаяДата);
КонецМесяца = КонМесяца(НекаяДата);
НачалоГода = НачГода(НекаяДата);
КонецГода = КонГода(НекаяДата);
Получение начала/конца месяца/года по некой дате.
Год = ДатаГод(ДатаРождения);
Месяц = ДатаМесяц(ДатаРождения);
Число = ДатаЧисло(ДатаРождения); 		Выделить из даты год, месяц и число.
ДатаЧерезДваМесяца = ДобавитьМесяц(НекаяДата,2); | Прибавление к дате нескольких месяцев. Если число отрицательное, то отсчет ведется назад.
ПериодСтрокой = ПериодСтр(Дата1, Дата2); | Строковое представление периода, например "Январь 2002".
НекаяДата = Дата("01.01.2002");
Сообщение = "Месяц " + Строка(НомерМесяца);
НекоеЧисло = Число("5"); 		Преобразование типов.
СуммаСКопейками = Формат(Сумма,"Ч10.2-"); | Форматирование чисел, сумм и дат. Очень много вариантов форматирования!
СуммаПрописью = Пропись(Сумма); | Сумма прописью. Часто применяется в денежных документах.
Если Вопрос("Вы уверены?","Да+Нет")="Да" Тогда | Вопрос пользователю. Можно спросить "Да+Нет", "Повтор+Отмена" и т.д.
Предупреждение("Случилась ошибка!"); | Сообщениию пользователю в виде окошка. Программа приостанавливается, пока пользователь не нажмет ОК.
Сообщить("Документ проведен!"); | Сообщение пользователю в окно сообщений. Программа работает дальше.
Состояние("Выполнено на " + Строка(Проценты) + "%"); | Сообщение пользователю в строку статуса.
глТекущийПользователь = ИмяПользователя(); | Получить имя текущего пользователя.
Права = НазваниеНабораПрав(); | Получить название набора прав текущего пользователя.
ТекКаталогБазы = КаталогИБ(); | Получить каталог, где находится информационная база.

НачатьТранзакцию();

Если <условие ошибки> Тогда
............ОтменитьТранзакцию();
КонецЕсли;

ЗафиксироватьТранзакцию();

Обработка транзакций. Транзакция - это совокупность действий, которая выполняется или вся целиком, или не выполняется ни одно из действий. Т.е. это единый блок действий, который или выполнен целиком, или не выполнен совсем. Транзакции необходимы для сохранения целостности базы данных.
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); | Возвращает ссылку на объект.
Если ТипЗначенияСтр(Параметр)="Справочник" Тогда | Определяет тип значения.


СПИСОК ЗНАЧЕНИЙ
Создание списка значений
 Добавление значений
Перебор
Сортировка
Поиск значения
Удаление значений
Список значений в диалоге
Выгрузка и загрузка 		"Программирование" - как и "любовь" - одно слово, за которым скрывается бесконечное множество занятий.

Создание объекта СписокЗначений

Список значений - это аналог одномерного массива в 1С, который предназначен для хранения и обработки промежуточных данных, возникающих в процессе работы программы. Объект "Список значений" имеет множество полезных возможностей и работает очень быстро. Следует учитывать, что в языке 1С есть и одномерные массивы в том смысле, как это принято в других языках программирования (Перем мас[10]). Список значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.

СписокЗнач = СоздатьОбъект("СписокЗначений");

Добавление значений в список

Синтаксис: ДобавитьЗначение(<значение>,[<представление>]);

//у каждого значения в СпискеЗначений есть экранное представление
//если оно не указано, то используется стандартное строковое представление объекта

СписокЗнач.ДобавитьЗначение("Иванов
        Иван Иванович");
СписокЗнач.ДобавитьЗначение(Сотрудник);
СписокЗнач.ДобавитьЗначение(1,"Значение №1");

СписокЗнач.УстановитьЗначение(3,3,"Значение №3"); //установить новое значение и представление 3-й позиции

Перебор списка значений

стр = "";
Для Номер = 1 По СписокЗнач.РазмерСписка() Цикл
...значение = СписокЗнач.ПолучитьЗначение(Номер, стр); //получить
        значение и представление
...Сообщить(значение + ", " + стр);
КонецЦикла;

Сортировка списка значений

//сортировать по значению
СписокЗнач.Сортировать(); //по возрастанию
СписокЗнач.Сортировать(1); //по убыванию

//сортировать по представлению
СписокЗнач.СортироватьПоПредставлению(); //по возрастанию
СписокЗнач.СортироватьПоПредставлению(1); //по убыванию

Поиск значения в списке

//поиск по значению
Синтаксис: НайтиЗначение(<Знач>)
Возвращает номер позиции списка, в которой найдено значение или 0, если не найдено

номстр = СписокЗнач.НайтиЗначение (Сотрудник);

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

Если СписокЗнач.Принадлежит(Сотрудник)=1 Тогда
....<действия>
КонецЕсли;

Удаление значений из списка

СписокЗнач.УдалитьВсе(); //очистить список значений

//удаляет значения из указанной позиции
СписокЗнач.УдалитьЗначение(откуда, [сколько]);

Список значений как элемент диалога
Список значений может использоваться в экранных формах как элемент диалога с пользователем.

//установить курсор на указанную строку или можно узнать, где находится курсор.
ТекСтрока = СписокЗнач.ТекущаяСтрока(НовСтрока);

//список значений в диалоге может иметь пометки (флажки)

пометка = СписокЗнач.Пометка(Позиция); //прочитать пометку у значения списка
СписокЗнач.Пометка(Позиция,1); //установить пометку у значения списка
СписокЗнач.Пометка(Позиция,0); //снять пометку у значения списка

Выгрузка и загрузка списка значений

//выгрузка в другой список значений или таблицу значений
Синтаксис: Выгрузить(<Знач>,<НачПоз>,<Колич>)
СписокЗнач.Выгрузить(НовыйСписок,1,10); //выгрузить первые 10 значений

//выгрузка списка значений в строку с разделителями
стр = СписокЗнач.ВСтрокуСРазделителями(); //возвращает строку: 10,12,"Иванов","Петров"

//загрузка списка значений из строки с разделителями
//обратите внимание на двойные кавычки для строковых значений
СписокЗнач.ИзСтрокиСРазделителями("10,12,""Иванов"",""Петров""");


Текст

Для работы с текстами в системе используется специальный агрегатный тип данных — «Текст». Механизм работы с текстами предназначен для формирования отчетов в текстовом виде, а также для обмена информацией с другими программами посредством текстовых файлов. Средства языка имеют возможность не только вывода строк в текстовые файлы, но и считывания имеющихся файлов с последующим разбором его по строкам.

Методы

Метод
Описание
Открыть(<ИмяФайла>) | Открыть текстовый файл с указанным именем.
КоличествоСтрок() | Возвращает число строк в тексте.
ПолучитьСтроку(<НомерСтроки>) | Возвращает строку текста с заданным номером.
ДобавитьСтроку(<Строка>) | Добавить строку в конец текста.
УдалитьСтроку(<НомерСтроки>) | Удалить строку с указанным номером.
ВставитьСтроку(<НомСтроки>,<Строка>) | Вставить строку с указанным номером.
ЗаменитьСтроку(<НомерСтроки>,<Строка>) | Заменить строку с указанным номером.
Шаблон(<Флаг>)

Включить/Отключить режим добавления строк по шаблону. Шаблон означает, что в квадратных скобках указаны имена переменных или выражения на встроенном языке. При формировании такой строки 1С вычислит все выражения в квадратных скобках и подставит их в строку.

Пример, "Сотрудник с табельным номером [Сотрудник.Код] обработан." При формировании такой строки в режиме шаблона результирующая строка будет иметь вид: "Сотрудник с табельным номером 123 обработан."
ФиксШаблон(<Флаг>) | В отличие от метода Шаблон, ограниченные квадратными скобками поля замещаются значениями выражений с сохранением своей длины в символах, то есть обрезаются, если поле короче результата вычисления выражения и дополняются пробелами если длиннее. Если результат числовой, то в границах поля строка прижимается к правой границе.
Показать(<Заголовок>,<ИмяФайла>) | Открыть окно редактирования текста.
ТолькоПросмотр(<Режим>)

Разрешить / запретить возможность редактирования текста в окне просмотра. Вызывается до метода Показать.
Очистить() | Очищает содержимое текстового документа. Его использование позволяет заново заполнить содержимое текстового документа.
КодоваяСтраница(<Режим>) Установить режим кодировки текста. 0 - windows-кодировка, 1 - DOS-кодировка.
Возвращает текущее числовое значение режима кодировки (на момент до исполнения метода).
Записать(<ИмяФайл>) | Записать текст в файл с указанным именем.

Пример

ТекстДок
        = СоздатьОбъект("Текст");
ТекстДок.Открыть("catalog.txt");
ТекстДок.ЗаменитьСтроку(52, "Установка оборудования......" +
        Стоимость);
ТекстДок.ВставитьСтроку(53, "Замена оборудования... ");
ТекстДок.УдалитьСтроку(10);
ТекстДок.ДобавитьСтроку("Конец файла");

ТекстДок2 = СоздатьОбъект("Текст");
ТекстДок2.Шаблон(1);

Для н
        = 1 По ТекстДок.КоличествоСтрок(1) Цикл
..........стр = ТекстДок.ПолучитьСтроку(н);
..........стр2 = "[н]" + стр;
.........ТекстДок2.ДобавитьСтроку(стр2);
КонецЦикла;

ТекстДок2.Записать("catalog2.txt");
ТекстДок2.ТолькоПросмотр(1);
ТекстДок2.Показать();


ВАШИ ОТЗЫВЫ

Олег (г.Самара)

Добрый вечер, уважаемый Станислав. Хотел бы выразить благодарность за прекрасно написанный, удобоваримый, без лишних заморочек учебник. А благодарность хочу выразить за то, что столкнувшись с проблемой изучения языка, оказалось целой проблемой (извиняюсь за каламбур) найти хорошее учебное пособие. Возможно книга, написанная специалистами, входящая в комплект и более продвинутая, но на рынке (читай - в специализированных магазинах) книг для первоначального изучения просто нет. А твой учебник оказался совсем кстати. Да и на курсы особо не хотелось идти, т.к. стоят они по нашим (самарским) меркам не мало (4000 руб за неделю).
Ещё раз хочу выразить благодарность за учебник и хочу пожелать успехов в новых начинаниях.
PS. Возможно, выразился коряво, но от всего сердца.

Юрий (г.Череповец)

Огромное Вам спасибо за книгу по 1С, она мне очень помогла в моей работе.

Михаил (г.Санкт-Петербург)

Приятный сайт. Очень рад что нашел здесь учебник по 1C - долго не мог найти его в рунете. Спасибо!

Максим (г.Казань)

Просто замечательно. Давно искал подобный сайт, именно в плане реализации описания 1С, примеры, подробные описания и комментарии, все это очень помогло в изучении. Спасибо :-)...Обязательно буду регулярно посещать.

Марат (г.Уфа)

Мне понравился учебник. Большое спасибо.

Вячеслав (г.Москва)

Давно искал что-либо по программированию 1с для забывчивых (после "курсов", и перерыва в полгода).
Большое спасибо за возможность обновить свои знания.

Андрей

Хороший учебник. Большое спасибо за проделанную работу. Многие не хотят делиться своими знаниями, ссылаясь на то что они были заработаны упорным трудом, а тут их просто на блюдечки получат. Ты не из таких.

Александр

Сделано очень даже прилично, и учебничек неплохой. Хоть мне и ни к чему, а вот "чайникам" будет весьма кстати. Успехов тебе!

Денис (г.Днепропетровск)

Здорово! Правда здорово и очень полезно. К тому же сделано с умом и заботой о пользователях. Особенно порадовала возможность скачки учебников одним файлом. Этой возможностью часто пренебрегают создатели сайтов, что приводит к большому геморою ;) Спасибо, мастер. Спасибо от всей души.

Александр (г.Ярославль)

Очень понравился самоучитель по 1С - "Простой Склад" - очень полезная вещь, за что очень благодарен.

Леонид (г.Санкт-Петербург)

Первичная благодарность от "чайника". Попробовал начать создание складской конфигурации. Пока все ясно и понятно. Написано живым языком. Если бы так преподавали на курсах по программированию в 1С, которые я имел "счастье" закончить, глядишь не пришлось бы по второму кругу учить с нуля :))

Glaz

Слушай, хороший красивый учебник!
Дополняй его каждым объектом, а не только регистрами и будет ваще куууул!

Оставьте и Вы свой отзыв в Гостевой книге!


ТАБЛИЦА ЗНАЧЕНИЙ
Создание таблицы значений
 Добавление строк
Перебор строк
Сортировка
Поиск значения
Итоги и группировка
Удаление строк и колонок
Таблица значений в диалоге
Специальные методы
Выгрузка таблицы значений 		Работа программиста и шамана имеет очень много общего: каждый бормочет непонятные слова и не может объяснить почему это все работает.

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

ТабЗнач = СоздатьОбъект("ТаблицаЗначений");

ТабЗнач.НоваяКолонка("Номер");
ТабЗнач.НоваяКолонка("Сотрудник");
ТабЗнач.НоваяКолонка("Должность");
ТабЗнач.НоваяКолонка("Оклад");

//можно указать тип
        данных каждой колонки
//если тип данных колонки не указан, то можно хранить данные любого типа
Синтаксис: НоваяКолонка(<Идентификатор>, <Тип>, <Длина>,
        <Точность>, <Заголовок>, <Ширина>, <Формат>, <Положение>)

ТабЗнач.НоваяКолонка("Номер","Число",10,0);
ТабЗнач.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТабЗнач.НоваяКолонка("Должность","Справочник.Должности");
ТабЗнач.НоваяКолонка("Оклад","Число",10,2);

Добавление строк в таблицу значений

ТабЗнач.НоваяСтрока();
ТабЗнач.Номер = 1;
ТабЗнач.Сотрудник = "Иванов Иван Иванович"; //следите за типом
        колонки!
ТабЗнач.Должность = "Программист";
ТабЗнач.Оклад = 20000;

ТабЗнач.НоваяСтрока();
ТабЗнач.Номер = 2;
ТабЗнач.Сотрудник = "Петров Петр Петрович";
ТабЗнач.Должность = "Бухгалтер";
ТабЗнач.Оклад = 10000;

//обычно строки добавляются
        в цикле
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....ТабЗнач.НоваяСтрока();
.....ТабЗнач.Номер = СпрСотр.Код;
.....ТабЗнач.Сотрудник = СпрСотр.ТекущийЭлемент(); //следите за типом
        колонки!
.....ТабЗнач.Должность = СпрСотр.Должность;
.....ТабЗнач.Оклад = СпрСотр.Оклад;
КонецЦикла;

Перебор строк таблицы значений

1-й способ.

ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
...Сообщить(ТабЗнач.Сотрудник);
КонецЦикла;

2-й способ.

Для НомерСтроки =
        1 По ТабЗнач.КоличествоСтрок() Цикл
...ТабЗнач.ПолучитьСтрокуПоНомеру(НомерСтроки);
...Сообщить(ТабЗнач.Сотрудник);
КонецЦикла;

Сортировка таблицы значений

//сортировать по должности по возрастанию
ТабЗнач.Сортировать("Должность+");

//сортировать по должности по возрастанию, а внутри должности по убыванию оклада
ТабЗнач.Сортировать("Должность+,Оклад-");

Поиск в таблице значений

Синтаксис: НайтиЗначение(<Знач>,<Строка>,<Колонка>)
Возвращает число: 0 - значение не найдено; 1 - значение найдено
Если указан параметр <Строка>, то поиск производится только по заданной строке
Если указан параметр <Колонка>, то поиск производится только по заданной колонке

номстр = 0;
Если ТабЗнач.НайтиЗначение (10000, номстр, "Оклад") =
        1 Тогда
...ТабЗнач.ПолучитьСтрокуПоНомеру(номстр);
...Сообщить(ТабЗнач.Сотрудник);
КонецЕсли;

Итоги и группировка таблицы значений

//получить итог по колонке можно методом Итог
ВсеОклады = ТабЗнач.Итог("Оклад")

//часто требуется группировать строки и подсчитывать итоги по группам,
//в этом случае применяется метод Свернуть

Синтаксис: Свернуть(<ГруппКолонки>,<СуммКолонки>)

//проссумировать оклады по каждой должности
ТабЗнач.Свернуть("Должность","Оклад");

//Можно группировать и суммировать сразу по нескольким колонкам
ТабЗнач.Свернуть("Категория, Должность","Оклад,Налог");

Удаление строк и колонок из таблицы значений

ТабЗнач.Очистить(); //очистить таблицу значений и удалить колонки

ТабЗнач.УдалитьСтроки(); //удаляет все строки (колонки сохраняются)

ТабЗнач.УдалитьСтроку(); //удаляет текущую строку
ТабЗнач.УдалитьСтроку(3); //удаляет 3-ю строку

ТабЗнач.УдалитьКолонку("Оклад"); //удаляет колонку Оклад
ТабЗнач.УдалитьКолонку(2); //удаляет 2-ю колонку

ВНИМАНИЕ
Часто требуется удалить строки, удовлетворяющие определенному условию.
Так как при удалении строки из таблицы значений следующая строка становится текущей,
то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.

//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ !!!
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
...Если <условие> Тогда
......ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей,
...КонецЕсли;
КонецЦикла;

В этом случае я рекомендую использовать следующий прием:

ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
~начало:
...Если <условие> Тогда
......ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
......Если ТабЗнач.НомерСтроки<>0 Тогда
........ Перейти ~начало;
......КонецЕсли;
...КонецЕсли;
КонецЦикла;

А вот еще один правильный алгоритм, предложенный Wlad:

ТабЗнач.выбратьстроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
.......Пока (<условие>) и (ТабЗнач.НомерСтроки<>0) Цикл
..............ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
.......КонецЦикла;
КонецЦикла;

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

//установить курсор на указанную колонку или можно узнать, где находится курсор
ТабЗнач.ТекущаяКолонка(НоваяКолонка,ТекКолонка);

//установить курсор на указанную строку или можно узнать, где находится курсор.
ТекСтрока = ТабЗнач.ТекущаяСтрока(НовСтрока);

ТабЗнач.ВидимостьКолонки("Оклад",0); //скрыть колонку Оклад
ТабЗнач.ВидимостьКолонки("Должность, Сотрудник",1); //показать колонки Должность и Сотрудник
ТабЗнач.ВидимостьКолонки("Оклад",1,1); //показать колонку Оклад в 1-й позиции

//можно зафиксировать верхние строки и левые колонки для удобства прокрутки таблицы значений в диалоге
ТабЗнач.Фиксировать(КолСтрок,КолКолонок);

Методы УстановитьЗначение и ПолучитьЗначение
Эти методы позволяют обращаться к данным в таблице значений для чтения и записи.
Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.д.).

Синтаксис: УстановитьЗначение(<Строка>,<Колонка>,<Знач>)
Синтаксис: ПолучитьЗначение(<Строка>,<Колонка>)

ТабЗнач.НоваяСтрока();
ТабЗнач.УстановитьЗначение(1,"Номер",100);
ТабЗнач.УстановитьЗначение(1,"Сотрудник","Иванов Иван Иванович");
ТабЗнач.УстановитьЗначение(1,3,10000); //обращение к 1-й строке и 3-й
        колонке ("Оклад")

Номер = ТабЗнач.ПолучитьЗначение(1,"Номер");
ФИО = ТабЗнач.ПолучитьЗначение(1,"Сотрудник");
Оклад = ТабЗнач.ПолучитьЗначение(1,3); //обращение к 1-й строке и 3-й
        колонке "Оклад"

Выгрузка таблицы значений

Синтаксис: Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)

//выгрузить 10 сотрудников с наибольшими окладами в новую таблицу значений
ТабЗнач.Сортировать("Оклад-");
ТабЗнач.Выгрузить(НоваяТабЗнач,1,10,"Сотрудник,Оклад");


Распределенные базы в 1С

Основные принципы
Регистрация изменений
Выгрузка и загрузка изменений
 Изменения конфигурации
Коллизии
Параметры миграции
Проблемы администрования

Использование компоненты "Управление распределенными ИБ"
Статья с сайта www.klerk.ru

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

Так как средства системы 1С:Предприятие для работы с распределенными информационными базами поставляются отдельно, сначала кратко остановимся на назначении и основных принципах организации работы системы 1С:Предприятие с территориально удаленными подразделениями.

Назначение и основные принципы

В тех случаях, когда предприятие представляет собой территориально распределенную структуру, зачастую сохраняется потребность в ведении единой системы учета. То есть необходимо иметь возможность работать в едином пространстве документов, получать отчеты, отражающие состояние дел как в территориально удаленных подразделениях предприятия, так и на предприятии в целом и т.п. При этом не всегда имеется возможность организовать работу всех подразделений с единой информационной базой в режиме он-лайн.

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

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

В простейшем случае (по умолчанию) областью распространения изменений для всех объектов является вся распределенная ИБ. Таким образом, в случае если в течение какого-то времени изменения данных системы не будут производиться, и, в то же время, будут произведены все необходимые действия по обмену изменениями между узлами распределенной ИБ, то все узлы будут содержать абсолютно одинаковые данные.

В некоторых случаях может возникнуть необходимость в том, чтобы объекты того или иного типа никогда не попадали в те или иные узлы распределенной ИБ или никогда не покидали места своего создания. Для обеспечения такой возможности предназначен механизм настройки параметров миграции объектов. С его помощью можно ограничить распространение изменений объектов того или иного вида. Кроме того, в версии 7.7 системы 1С:Предприятие можно создавать периферийные ИБ, которые будут принимать информацию о измененных объектах из центральной ИБ, но не будут передавать изменения, сделанные в них самих.

Механизмы распространения изменений объектов работают полностью автоматически. Разработчик конфигурации лишен возможности вмешиваться в функционирование этих механизмов. Для того, чтобы механизмы распределенной ИБ начали работать, не нужно производить никаких специальных действий по конфигурированию системы.

Однако, для того, чтобы документы, элементы справочников и другие объекты, созданные в разных узлах распределенной ИБ, имели заведомо непересекающиеся пространства номеров, кодов и т. п., может потребоваться внести в конфигурацию некоторые изменения. Также изменения в конфигурации должны вноситься при необходимости обеспечить специальные ограничения работы пользователей на периферийных информационных базах.

Для переноса измененных объектов в распределенной ИБ и для первичного создания периферийной ИБ используется файл переноса данных. Он представляет собой упакованный (сжатый) файл, содержащий объекты информационной базы (все при создании периферийной ИБ или измененные при передаче изменений) в специальном формате. Формат данного файла не предназначен для использования его способами отличными от тех, которые предусмотрены механизмами выгрузки/загрузки и передачи изменений. Файл переноса фактически отражает содержимое объектов информационной базы в формате, не зависящем от формата базы данных. Это позволяет использовать в распределенной информационной системе в различных узлах различные форматы хранения данных, поддерживаемые системой 1С:Предприятие (DBF/CDX и MS SQL Server).

Регистрация изменений

Перенос измененных данных производится "пообъектно". То есть единицей переноса данных является так называемый ведущий объект. С точки зрения работы в распределенной информационной базе в 1С:Предприятии существуют следующие типы ведущих объектов:

  • константа,
  • элемент справочника,
  • документ,
  • календарь,
  • счет бухгалтерского учета,
  • типовая операция.

Вместе с документами переносятся все действия, выполняемые ими в процессе проведения: движения регистров, акты расчета, бухгалтерская операция, проводки. В случае, если при проведении документа производятся изменения периодических реквизитов элемента справочника, то производится перенос всего элемента справочника.

Регистрация изменений объектов производится автоматически при любом изменении объекта, независимо от того каким способом это изменение производилось (интерактивно или из встроенного языка). Кроме того в версии 7.7 системы 1С:Предприятие для таких объектов как элементы справочников и документы появилась возможность управления регистрацией изменений. Для этого у соответствующих объектов метаданных введен признак "Автоматическая регистрация изменений". Если этот признак установлен (значение по умолчанию), то автоматическая регистрация производится, а если признак сброшен, то регистрация не производится и изменения объектов в распределенной ИБ не распространяются. Но и в данном случае, при выполнении записи изменений объектов из встроенного языка можно управлять регистрацией изменений с помощью метода встроенного языка РегистрацияИзменений().

Регистрация изменений ведущих объектов производится в специальной служебной таблице. При этом фиксируются следующие данные об изменении объекта:

  • Сам ведущий объект;
  • Идентификатор той ИБ, в которую должно быть передано изменение;

Идентификатор ИБ, в которую должно быть передано изменение, служит для отслеживания переноса данных в каждую из ИБ, с которой данная ИБ обменивается данными. Таким образом, при изменении какого-либо объекта в центральной ИБ в таблицу будет помещено по одной записи для каждой из зарегистрированных периферийных информационных баз. Если же изменение объекта происходит в периферийной ИБ, то в таблицу будет занесена только одна запись, соответствующая центральной ИБ, так как каждая из периферийных ИБ непосредственно взаимодействует только с центральной.

Заметим, что удаление объекта является частным случаем изменения. Оно также помечается в таблице регистрации изменений и передается при выгрузке.

Выгрузка и загрузка изменений

Каждая выгрузка изменений осуществляется в адрес конкретной ИБ. В файл переноса, создаваемый при выгрузке попадают все объекты, записи об изменениях которых содержатся в таблице регистрации изменений для данной ИБ.

Заметим, что выгружаются не изменения объектов, а сами измененные объекты. То есть, если в документе изменилось значение одного реквизита, то будет передаваться весь документ и он будет полностью перезаписан на той ИБ, в которую переносится. Как уже отмечалось, вместе с документом будут перенесены и сделанные им движения регистров, операция и проводки. Если изменяется любой реквизит справочника, то передается полностью весь элемент. При этом история периодических реквизитов передается целиком. Последнее означает, что изменения сделанные в истории периодического реквизита элемента на в двух ИБ не будут сливаться вместе.

В процессе выгрузки в таблице регистрации изменений отмечается выгрузка изменений объектов.

При загрузке файла переноса данных помимо загрузки измененных данных выполняется так называемый прием подтверждений.

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

Причем выгрузка измененного объекта будет производиться до тех пор, пока не будет получено подтверждение, о доставке изменения. Это значит, что если выполнять перенос все время в одном направлении и не выполнять обратного переноса то объем файла переноса данных будет все время расти, так как каждый раз будут передаваться все объекты, измененные после последнего полученного подтверждения.

При загрузке изменений объектов из периферийной ИБ в центральную, в таблицу регистрации изменений (если, конечно, параметры миграции настроены соответствующим образом) заносятся записи, указывающие, что загруженные из периферийной ИБ изменения объектов должны быть переданы в другие периферийные ИБ.

Изменения конфигурации

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

Для регистрации изменений конфигурации и передачи ее на периферийные ИБ используется тот же механизм, что и для объектов данных. При записи измененной конфигурации, в таблицу регистрации изменений объектов по числу известных периферийных ИБ заносятся записи, фиксирующие факт изменения конфигурации.

После записи измененной конфигурации в распределенной ИБ складывается такая ситуация, что центральная и периферийные ИБ работают фактически с разными конфигурациями. В таком состоянии созданные на периферийной ИБ файлы переноса данных не могут быть загружены на центральной ИБ по той причине, что в условиях различных конфигураций содержащаяся в файле информация не может быть правильно интерпретирована. Обмен будет восстановлен только после того, как в периферийную ИБ будет загружена измененная конфигурация с центральной ИБ. То есть после изменения конфигурации требуется выполнить перенос из центральной ИБ в каждую из периферийных, а уже затем выполнять перенос из периферийных ИБ в центр.

Перенос измененной конфигурации в периферийные ИБ осуществляется тем же способом, что и перенос измененных объектов данных. В процессе очередной выгрузки из центральной ИБ, в файл переноса данных целиком включается измененная конфигурация, если, конечно, в таблице регистрации изменений содержится запись о том, что измененную конфигурацию следует передать в соответствующую периферийную ИБ. Выгрузка конфигурации также будет производиться до получения извещения о приеме измененной конфигурации.

Заметим, что конфигурация считается измененной при любых изменениях метаданных, форм, модулей, таблиц конфигурации, наборов прав, пользовательских интерфейсов, описаний. В состав конфигурации не входит список пользователей, а также внешние по отношению к файлу конфигурации (1CV7.MD) файлы (внешние отчеты, отдельно записанные таблицы и тексты). И эти внешние файлы не переносятся механизмом управления распределенной ИБ. Поэтому при конфигурировании распределенной системы не рекомендуется использовать в конфигурации находящиеся в отдельных файлах модули, таблицы и отчеты.

Для изменения уже работающей конфигурации можно рекомендовать использовать механизм загрузки измененной конфигурации. Он позволяет специалисту скопировать конфигурацию, выполнить в ней все необходимые изменения, отладить внесенные изменения (этот процесс может занять и несколько дней), а затем загрузить измененную конфигурацию в центральную ИБ, после чего изменения будут распространены на все периферийные ИБ с очередной передачей изменений. Такая последовательность позволит избежать многократной передачи измененной конфигурации в периферийные ИБ в процессе ее модернизации.

При загрузке файла переноса данных на периферийной ИБ, этап загрузки измененной конфигурации (если, конечно, она содержится в файле переноса данных) предшествует этапу загрузки измененных объектов данных. В случае неудачного завершения загрузки конфигурации, загрузка объектов данных производиться не будет и информационная база останется в том же состоянии, что и была до начала загрузки. Загрузка измененной конфигурации может завершиться неудачей, если измененная конфигурация не соответствует существующим данным. Например, было уменьшено число уровней справочника, а новое число уровней оказывается меньшим, чем фактически содержащееся в справочнике или в других подобных случаях. Если такое произошло, то следует привести данные в соответствие с новой конфигурацией или изменить конфигурацию в центральной ИБ и заново произвести выгрузку, чтобы ликвидировать возникшее противоречие.

Коллизии

При работе в реальных распределенных ИБ один и тот же объект может изменяться одновременно в различных узлах распределенной ИБ. И при переносе измененных объектов из одной ИБ в другую может случиться так, что в какую-либо ИБ будет загружаться объект, зарегистрированный в самой этой ИБ как измененный. Такая ситуация носит название коллизии. Приведем описание действий системы в наиболее типовых вариантах коллизий.

Один и тот же объект изменен более чем в одной ИБ.

Общий принцип здесь состоит в том, что "главным" считается изменение, произведенное в центральной ИБ. Отработка ситуации различается в зависимости от того, на какой ИБ - центральной или периферийной коллизия обнаружена. Если коллизия обнаружена на центральной ИБ, то есть при загрузке файла переноса из периферийной ИБ обнаружено, что один из измененных объектов также изменен и в центральной ИБ, то изменения объекта в центральную ИБ не загружаются. При этом гарантируется, что при очередной выгрузке в адрес периферийной ИБ будет передано состояние объекта как оно есть в центральной ИБ. Если же коллизия обнаружена на периферийной ИБ, то изменения объекта, прибывшие из центральной ИБ загружаются.

Объект, измененный в одной ИБ, удален в другой.

В данном случае принцип заключается в том, что изменение всегда "главнее" удаления. В случае, если на центральную ИБ прибывает файл переноса, в котором содержится информация, что некоторый объект удален на периферийной ИБ, то в центральной ИБ объект не удаляется, а в записи таблицы регистрации изменений данный объект помечается как измененный. То есть при очередном обмене объект будет восстановлен в той ИБ, в которой он был удален, причем само содержание объекта будет соответствовать той ИБ, которая "отвергла" удаление.

Аналогичные действия производятся, если коллизия обнаружена на периферийной ИБ.

Объект, удаленный в одной ИБ, не может быть удален в другой по причине наличия ссылок на него.

При загрузке изменений, если загружается информация об удалении объектов, автоматически включается механизм контроля ссылочной целостности и выполняется проверка наличия ссылок в данной ИБ на объекты, которые переданы как удаленные.

В случае обнаружения коллизии такого рода, вне зависимости от того на какой из ИБ она была обнаружена, выполняется следующее: удаление не выполняется, а в таблицу регистрации изменений заносится запись о том, что объект должен быть перенесен в адрес той ИБ, из которой была прислана информация о его удалении.

При очередном обмене объект восстанавливается в той ИБ, в которой он был удален, однако само содержание объекта будет соответствовать той ИБ, которая "отвергла" удаление.

Таким образом, управление распределенной информационной базой имеет определенную стратегию автоматического разрешения любых коллизий с описанными приоритетами. Однако, в реальных условиях рекомендуется средствами конфигурации определить возможные действия пользователей на различных узлах таким образом, чтобы исключить или минимизировать вероятность возникновения коллизий. Основным путем является определения средствами конфигурации "ответственного" узла за каждый ведущий объект в распределенной ИБ и ограничение всем остальным возможности его редактирования и удаления. Определение "ответственных" должно происходить исходя из логики работы предприятия. Очевидно, что многие виды объектов можно разрешить изменять только в центральной ИБ (например, список складов). Для многих объектов можно рекомендовать средствами встроенного языка установить возможность изменения только на той ИБ, на которой они созданы, например для документов.

Параметры миграции

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

Все информационные базы. Данный вариант настройки используется по умолчанию для всех объектов. В этом случае любые изменения объектов данного типа будут распространяться по всем узлам распределенной ИБ. Этот вариант обеспечивает полную синхронизацию объектов данного вида во всей распределенной ИБ. Очевидно, что этот вариант наиболее прост для конфигурирования.

Место создания. Данный вариант настройки также является довольно простым. В этом случае изменения объекта не передаются в другие ИБ. При такой настройке параметров миграции, объект данного вида никогда не "покидает" места своего создания и не появляется в других ИБ. Однако при выборе данного варианта следует учитывать возможные ссылки на объекты данного вида из объектов других видов, имеющих другие параметры миграции. Например, если установить такой вариант для справочника, и в документах, которые участвуют в обмене, будет содержаться реквизит типа справочник данного вида, то при переносе документа получится неразрешенная ссылка.

Место создания и центр. При таком варианте настройки области распространения объектов существенную роль играет понятие места создания объекта. Местом создания объекта считается ИБ, в которой был создан конкретный объект. Естественно, что различные объекты одного вида могут быть созданы в различных ИБ. Однако место создания объекта может быть определено не для всех видов "ведущих" объектов. Для таких объектов как константы, календари или корректные проводки место создания не определено. Поэтому для этих видов объектов вариант настройки "Место создания и центр" не может быть установлен.

В случае выбора такого варианта области распространения, объекты данного вида помимо места их создания попадают еще и на центральную ИБ. То есть, в случае, если для некоторого вида объектов установлена область распространения "Место создания и центр", то для объектов этого вида, созданных на периферийной ИБ, их изменения будут передаваться между местом их создания и центральной ИБ. Для объектов того же вида, созданных на центральной ИБ, изменения не будут передаваться никуда. С помощью такого варианта области распространения можно добиться такого эффекта, что все объекты того или иного вида будут "собираться" на центральной ИБ, а на любой из периферийных ИБ будут находиться только те объекты, для которых она является местом создания.

В случае выбора области распространения "Место создания и центр", для вида объекта можно задать перечень периферийных узлов распределенной ИБ, которые дополнительно включаются в область распространения всех объектов данного вида. Этот перечень задается как список кодов периферийных ИБ, разделенный запятыми. При задании кодов ИБ допускается использование символов-заменителей '*'. Символ-заменитель должен завершать последовательность символов, образующих код одной или нескольких периферийных ИБ. Таким образом, "A*" представляет собой обозначение всех периферийных ИБ, коды которых начинаются символом 'А'. Последовательность "A*B" является ошибочной, так как символ '*' не завершает последовательность символов, представляющих код периферийной ИБ.

Кроме того, как отмечалось выше, дополнительной возможностью управлять распространением изменений объектов в версии 7.7 системы 1С:Предприятие является особый вид периферийных ИБ, которые получают изменения из центральной ИБ, а сами информацию о сделанных в них изменениях не передают. Для создания периферийной ИБ такого рода, надо при ее инициализации указать признак "Только получатель".

Отдельно стоит рассмотреть случай, когда параметры миграции объектов изменяются в процессе изменения конфигурации уже работающей системы. Изменения параметров миграции для каждого из объектов производится независимо от других. То есть, Конфигуратор не отслеживает ссылки между объектами при настройке параметров миграции. Таким образом, при определенных вариантах настройки параметров миграции у некоторых объектов могут появиться ссылки, указывающие "никуда". Ответственность за сохранение ссылочной целостности в распределенных ИБ возлагается на лицо, занимающееся конфигурированием системы. Общим правилом настройки параметров миграции является определение области миграции для конкретного вида объектов равной более широкой, чем область миграции ссылающихся на него объектов. Например, для справочника область миграции должна быть определена не уже, чем области миграции документов и справочников, в которых есть реквизиты типа "справочник" данного вида. Если, например, измерение регистра имеет тип "справочник" данного вида, то область миграции справочника должна покрывать области миграции всех документов, которые могут записать движения данного регистра.

При изменении параметров миграции того или иного объекта система старается привести имеющиеся данные в соответствие с новыми параметрами. Общим принципом здесь является то, что при изменении параметров миграции объекты никогда ни в каком узле распределенной ИБ не удаляются. Даже в том случае, если в соответствии с вновь установленными параметрами миграции их там быть не должно. Изменения производятся лишь в таблице регистрации изменений. Рассмотрим случаи изменения параметров миграции объектов подробнее.

Наиболее простой случай - это смена любого из вариантов области распространения на вариант "Место создания". В этом случае из таблицы регистрации изменений удаляются все записи по данному виду объектов. То есть все изменения объектов, еще не переданные в другие ИБ, не будут переданы. При этом, все объекты для которых данная ИБ не является местом создания, не будут удалены. Просто их изменения (как и изменения других объектов данного вида) не будут больше передаваться в другие ИБ.

Следующий случай - это смена области распространения "Место создания" на варианты "Все информационные базы" или "Место создания и центр". В этом случае в таблицу регистрации изменений заносятся записи для передачи всех объектов, для которых текущая ИБ является местом создания во все ИБ, в которые должны передаваться изменения в соответствии с вновь заданной настройкой. В случае, если такая смена производится для объектов, для которых место создания не определено (константы, календари, корректные проводки), то записи в таблицу регистрации изменений будут произведены только в центральной ИБ. Этими двумя вариантами и ограничиваются возможные случаи изменения параметров миграции для такого рода объектов. Все остальные случаи возможны только для тех объектов, для которых место создания можно определить.

При изменении области распространения объектов с "Место создания и центр" на "Все информационные базы", какие-либо действия предпринимаются только в центральной ИБ. В этом случае определяется список периферийных ИБ, попавших в список дополнительно включаемых в область распространения, но ранее в него не входивших. После этого производится обход всех объектов данного вида и для каждого из объектов в таблицу регистрации изменений вносятся записи для передачи состояния объекта в каждую из попавших в список периферийных ИБ, за исключением ИБ места создания объекта.

Последний и самый сложный случай - это изменение области распространения объектов с "Все информационные базы" на "Место создания и центр" или изменение списка дополнительных ИБ в варианте "Место создания и центр". Действия, производимые в данном случае различаются в зависимости от того, производятся они в центральной ИБ или в периферийной. В центральной ИБ для каждой из периферийных ИБ, не попавших в новый перечень дополнительно включаемых в область распространения, выполняется удаление из таблицы регистрации изменений записей соответствующих данному виду объектов, но только для тех объектов, для которых эта периферийная ИБ не является местом создания. Затем определяется список периферийных ИБ, попавших в список дополнительно включаемых в область распространения, но ранее в него не входивших. Естественно, что в случае, если предыдущим вариантом настройки области распространения было "Все информационные базы", то этот список окажется пустым. Затем, как и в предыдущем случае, производится обход всех объектов данного вида и для каждого из объектов в таблицу регистрации изменений вносятся записи для передачи объекта в каждую из попавших в список периферийных ИБ, за исключением ИБ места создания объекта.

Проблемы конфигурирования и администрирования

При разработке конфигурации для распределенной ИБ проявляется ряд объективно существующих проблем, которые решаются как средствами конфигурации, так и административными решениями.

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

Более сложной проблемой является ситуация, когда возникает необходимость использования некоторого нового объекта в двух и более узлах одновременно, до осуществления передачи данных. Например, новый товар должен быть введен и на центральной ИБ и на периферийной. Важно понимать, что созданный ведущий объект системы 1С:Предприятие обладает некоторой сущностью - внутренним идентификатором, который уникален во всей распределенной системе. То есть один и тот же объект не может быть введен в двух узлах. Даже при полном соответствии кодов, номеров и всех данных это будут два разных объекта. Такой принцип необходим для четкой работы системы со всех точек зрения.

Заметим, что возможные варианты ввода двух объектов и затем автоматической замены на центральной ИБ всех ссылок на один из объектов, достаточно сложны в реализации и весьма ненадежны.

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

В отдельных случаях может использоваться следующее решение. В справочник заранее вносится некоторое количество новых элементов со специальными кодами или в специальную группу. При появлении необходимости ввода нового товара реально не вводится новый элемент, а изменяется один этих элементов. При этом административными силами должно быть обеспечено идентичное изменение одного и того же "зарезервированного" объекта в тех узлах распределенной ИБ, в которой он должен быть использован до обмена данными. При обмене данными сами реквизиты элемента будут системой синхронизированы, а ссылки в других объектах, разумеется будут идентичными, так как использовался один и тот же объект.

В любых случаях следует учитывать, что раздельный ввод и использование объектов потребует от пользователей правильного ввода данных. Так, например, при вводе нового товара в двух узлах с разными ценами могут иметь место серьезные ошибки в оформлении документов.

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


ЗАПРОСЫ
Общая схема
Переменные в запросе
Группировка и сортировка
Двойная группировка
Функции в запросе
Условие отбора 		Поймал новый русский золотую рыбку и спрашивает:
- Чего тебе надобно, золотая рыбка?

Общая схема выполнения запроса
Запрос -- это обращение к системе 1С с просьбой выбрать определенные данные из базы данных. Например, с помощью запроса можно быстро организовать выбор всех сотрудников с определенной должностью. Для организации запроса необходимо выполнить следующие действия.

Запрос
        = СоздатьОбъект("Запрос");
ТекстЗапроса = "<текст запроса на особом языке запросов>"
Запрос.Выполнить(ТекстЗапроса);

//далее идет обработка результатов запроса

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

|ФИО = Справочник.Сотрудники.Наименование;
|Долж = Справочник.Сотрудники.Должность;
|ДатаПриема = Справочник.Сотрудники.ДатаПриема;
|ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения;
|";

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

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Долж = Справочник.Сотрудники.Должность;
|Группировка Долж упорядочить по Долж.Наименование;
|";
Запрос.Выполнить(ТекстЗапроса);

Пока Запрос.Группировка("Долж")=1 Цикл
............Сообщить(Запрос.Долж);
КонецЦикла;

Двойная группировка
Этот запрос совершает очень полезную работу: он группирует всех сотрудников по должностям. Заметьте, что сначала идет группировка по должности, а затем по сотруднику, это очень важно. Обратите внимание на переменную запроса Сотр. Она ссылается на строку справочника Сотрудники. Чтобы вывести ФИО сотрудника используется обращение к атрибуту объекта: Сотр.Наименование.

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Сотр = Справочник.Сотрудники.ТекущийЭлемент;
|Долж = Справочник.Сотрудники.Должность;
|Группировка Долж упорядочить по Долж.Наименование;
|Группировка Сотр упорядочить по Сотр.Наименование;
|";
Запрос.Выполнить(ТекстЗапроса);

Пока Запрос.Группировка("Долж")=1 Цикл
............Сообщить(Запрос.Долж);
............Пока Запрос.Группировка("Сотр")=1 Цикл
................Сообщить("......" + Запрос.Сотр.Наименование);
............КонецЦикла;
КонецЦикла;

Функции в запросе
Этот запрос совершает очень полезную работу: он подсчитывает, сколько сотрудников работает по каждой должности. Другие возможные функции приведены в Синтакс-помощнике.

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Долж = Справочник.Сотрудники.Должность;
|Группировка Долж упорядочить по Долж.Наименование;
|Функция Колво = Счётчик();
|";
Запрос.Выполнить(ТекстЗапроса);

Пока Запрос.Группировка("Долж")=1 Цикл
...Сообщить("По должности " + Строка(Запрос.Долж) +
.............." работает " + Строка(Запрос.Колво) + " чел.");
КонецЦикла;

Условие отбора
Часто требуется ограничить выборку только нужными значениями. Например, этот запрос выбирает всех сотрудников с определенной должностью.

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Сотр = Справочник.Сотрудники.ТекущийЭлемент;
|КодДолж = Справочник.Сотрудники.Должность.Код;
|Группировка Сотр упорядочить по Сотр.Наименование;
|Условие (КодДолж = 7);
|";
Запрос.Выполнить(ТекстЗапроса);

Пока Запрос.Группировка("Долж")=1 Цикл
............Сообщить(Запрос.Сотр);
КонецЦикла;


ЗАРПЛАТА

Компонента Расчет в системе 1С:Предприятие предназначена для реализации сложных периодических расчетов. Обычно она используется для расчета зарплаты.

Журналы расчетов

Журнал расчетов предназначен для хранения данных сложных периодических расчетов, поддерживаемых компонентой «Расчет», и их предыстории. Основным свойством журнала расчетов является его принадлежность тому или иному справочнику системы. Такой справочник называется справочником объектов расчета. Фактически, справочник определяет вид объектов, по которым ведется расчет. Например, это может быть: журнал расчетов зарплаты, причем списком объектов расчета будет выступать справочник сотрудников; журнал расчетов дивидендов, тогда списком объектов расчета будет выступать справочник акционеров; журнал расчетов амортизации — списком объектов расчета будет выступать справочник основных средств. В процессе конфигурирования настраивается неограниченное число журналов расчета, каждый из которых будет решать ту или иную задачу предметной области.

Непременными атрибутами каждой записи журнала расчетов являются: объект, для которого данный расчет проведен (обычно сотрудник); вид расчета, по которому данный расчет проведен; дата начала и дата окончания действия данного расчета и результат расчета.

Для одного справочника могут быть созданы несколько журналов расчетов, каждый из которых будет содержать данные определенной предметной области. Например, в том случае, если предприятие — акционерное общество закрытого типа, справочник сотрудников может выступать списком объектов расчета для журнала расчетов заработной платы и для журнала расчетов дивидендов акционеров.

Виды расчета

Для описания алгоритмов, по которым выполняются те или иные вычисления, служит понятие виды расчетов. На этапе конфигурирования можно описать неограниченное количество видов расчетов. В отличие от справочников, журналов расчета и документов, за понятием «вид расчета» не лежит реальных данных — это не более чем алгоритм вычисления, оперирующий данными журналов расчета, документов и справочников.

Алгоритм вида расчета описывается с помощью встроенного языка. Типичными примерами видов расчетов являются «начисление по окладу», «подоходный налог».

Приоритет.

Часто очень важным бывает очередность, в которой выполняются те или иные расчеты. Например, в случае расчета заработной платы, как минимум, важно сначала рассчитать начисления, а затем удержания.

Для организации последовательности выполнения расчетов служит понятие их приоритета. Этот параметр может принимать значение от 0 до 999 и действует следующим образом: чем меньше приоритет расчета, тем раньше он выполняется. Это отражается в последовательности расположения записей журнала расчетов — записи с видами расчетов меньшего приоритета располагаются перед записями с видами расчетов большего приоритета.

Вытесняющие расчеты.

В некоторых случаях требуется автоматизировать предметные области, в которых расчет каких-либо величин может вестись взаимно исключающими способами. Возвращаясь вновь к задаче расчета заработной платы, рассмотрим пример расчета следующих начислений: оплата рабочих дней по окладу, оплата дней болезни по больничному листу и оплата дней отпуска.

Очевидно, что в этом случае выполняется условие взаимоисключения перечисленных видов расчета — нельзя, например, одновременно и болеть и работать, т. е. получать и оклад, и деньги по больничному листу. Такие расчеты взаимно исключают друг друга во времени и система должна гарантировать, что ввод одного из них приведет к исключению другого. (Как выяснилось из реальной жизни можно заболеть во время отпуска ;-)

Группы расчетов

Для того чтобы при тех или иных расчетах можно было оперировать не только результатами расчетов по конкретным видам, но и результатами по нескольким видам расчетов, объединенных по определенному принципу, служит понятие групп расчетов. Примерами групп расчета могут служить: «начисления, облагаемые подоходным налогом», «начисления, входящие в расчет средней зарплаты», «все удержания» и другие.

Правила перерасчета

«Правила перерасчета» являются вспомогательными объектами метаданных, предназначенными для автоматического отслеживания актуальности результатов проведенных расчетов при вводе новых записей журнала расчетов, удалении существующих или ручном исправлении результата расчета.

При создании правила перерасчета в Конфигураторе определяются виды расчетов, при редактировании которых правило перерасчета «срабатывает» (едущие виды расчета), и виды расчетов, которые должны быть перерассчитаны при срабатывании данного правила (зависимые виды расчета).

Например, для организации правильного перерасчета доплат к основным начислениям следует в качестве ведущих видов расчета указать оклад, тариф, сдельная оплата), а в качестве зависимых видов расчета следует указать доплаты к окладу, доплаты к тарифу и т.д.

Календари и Праздники

Для ведения рабочего графика предприятия или сторонних организаций, для учета рабочего времени сотрудников разных категорий в системе 1С:Предприятие служат календари. Примерами календарей могут служить: календарь рабочего графика предприятия (где отмечены выходные и рабочие дни); календарь работы банка, через который осуществляются взаиморасчеты; календарь работы служащих; календарь, в котором проставлена продолжительность рабочих дней для рабочих.

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

Праздники. Допустим, что у вас на предприятии несколько категорий работников, например 5 категорий, и для каждой категории заведен свой календарь. Представьте, что в стране объявлен всеобщий праздник, например, "День 1С". Используя данную функцию вы можете один раз завести этот праздник, и он автоматически отразится во всех календарях, у которых стоит флажок "Учитывать праздники". Красота!


КАЛЕНДАРИ

Ссылка на календарь
 Подсчет дней и часов
 Отсчет даты

Ссылка на календарь

1-й вариант:

Календ = СоздатьОбъект("Календарь.Служащие");

2-й вариант:

Календ = Календари.Служащие;

Подсчет дней и часов по календарю

Подсчитаем количество рабочих дней для служащих за заданный период с учетом выходных и праздников:
Дни = Календари.Служащие.Дней (НачДата, КонДата);

Подсчитаем количество часов для рабочих за заданный период с учетом выходных, праздников и укороченных предпраздничных дней:
Часы = Календари.Рабочие.Часов (НачДата, КонДата);

Календари, казалось бы простой объект, но без них отсчитывать дни было бы неимоверно тяжело. Наверное, программисты в других программах мучаются без календарей. Пожелаем им приятных кошмаров. ;-)

Отсчет даты

Получим дату, отстоящую по календарю от указанной даты на заданное количество дней. Календарь пропускает дни с нулевыми значениями (выходные и праздники).

КонецОтпуска = Календари.Служащие.ПолучитьДату (НачалоОтпуска, 28);


ЖУРНАЛЫ РАСЧЕТОВ

Ссылка на журнал расчетов
 Ввод записей
 Перебор записей
Удаление записей
Период журнала

Ссылка на журнал расчетов

ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");

Ввод записей в журнал расчетов

Записи в журнал расчетов обычно вводятся при проведении документов.

ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ЖЗ.УстановитьРеквизит("Рассчитана",1);
ЖЗ.ВвестиРасчет(ВыбрСотрудник, ВидРасчета.Премия, НачалоМесяца, КонецМесяца, ПремияСотруднику);

или

ЖЗ.ЗаписатьРасчет(ВыбрСотрудник, ВидРасчета.Премия, НачалоМесяца, КонецМесяца, ПремияСотруднику);

Отличие метода ЗаписатьРасчет заключается в том, что ввод вытесняющих расчетов приводит к вытеснению только тех расчетов, которые имеют меньший приоритет, а не меньший либо равный, как в случае с методом ВвестиРасчет. Это приводит, в частности, к тому, что за счет применения этого метода расчет не вытесняет «сам себя».

При записи невытесняющего расчета ввод новых записей также происходит «осмотрительно» — новые записи вводятся только в том случае, если в журнале расчетов нет точно такой же записи. Под точно такой же записью здесь подразумевается запись с таким же видом расчета, для того же объекта и с тем же периодом действия.

Перебор записей журнала расчетов

Например, организуем перебор записей с периодом действия в январе.

ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ДатаКон = '31.01.2002';
ЖЗ.ВыбратьЗаписи(ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
......<действия с тек. записью>
КонецЦикла;

А теперь организуем перебор записей, введенных в январе.

ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ЖЗ. ВыбратьПериод(ДатаНач);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
.......<действия с тек. записью>
КонецЦикла;

Отличие методов ВыбратьЗаписи и ВыбратьПериод проявляется, если запись введена в другом месяце, но период ее действия лежит в январе. Например, в феврале сотруднику выдают премию за январь. Тогда запись будет введена в феврале (период регистрации), но период ее действия - январь. В первый цикл она попадет, а во второй нет.

Посчитаем все начисления текущего сотрудника за январь:
ВсегоНачислено = 0;
ЖЗ.ВыбратьЗаписиПоОбъекту (ТекСотр, ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
....Если ЖЗ.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда
..........ВсегоНачислено = ВсегоНачислено + ЖЗ.Результат;
....КонецЕсли;
КонецЦикла;

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

Рассчитаем все записи по документу, независимо от того, в каком расчетном периоде записи порождались:

ЖЗ.ВыбратьЗаписиПоДокументу (ВыбрДокумент);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
......ЖЗ.Рассчитать();
КонецЦикла;

Рассчитаем все записи по указанному подразделению. В журнале расчетов указана графа отбора "Подразделение".

ТекПер = ЖЗ.ТекущийПериод();
ЖЗ.ВыбратьПоЗначению ("Подразделение",ВыбрПодразделение, ТекПер, ТекПер);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
......ЖЗ.Рассчитать();
КонецЦикла;

Удаление записей в журнале расчетов

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

Можно также явно удалять записи методом журнала расчетов УдалитьЗапись().

Методы работы с периодом журнала расчетов

 НачалоПериода = ЖЗ.НачалоТекущегоПериода();
КонецПериода = ЖЗ.КонецТекущегоПериода();
ПериодСтрокой = ЖЗ.ОписательПериода(НачМес); //например "Январь
        2002 г"


ВИДЫ И ГРУППЫ РАСЧЕТОВ

Ссылка на вид расчета
 Вхождение в группу
 Перебор видов расчета в группе
 Перебор всех видов расчета
 Перебор всех групп расчета

Ссылка на вид расчета

1-й вариант:

ВР = ВидРасчета.НаРуки;
ВР = ВидРасчета.Премия;

2-й вариант:

ВР = ВидРасчета.ПолучитьАтрибут("НаРуки");

Пример, определим сумму "по окладу" текущего сотрудника:

ПоОкладу = 0;
ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ЖЗ. ВыбратьПериодПоОбъекту(ТекСотр, ДатаНач);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
....Если ЖЗ.ВидРасч = ВидРасчета.ПоОкладу Тогда
.........ПоОкладу = ПоОкладу + ЖЗ.Результат;
....КонецЕсли;
КонецЦикла;

Вхождение вида расчета в группу

Посчитаем все начисления текущего сотрудника за январь:
1-й вариант:
ВсегоНачислено = 0;
ЖЗ.ВыбратьЗаписиПоОбъекту (ТекСотр, ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
....Если ЖЗ.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда
..........ВсегоНачислено = ВсегоНачислено + ЖЗ.Результат;
....КонецЕсли;
КонецЦикла;

2-й вариант:
ВсегоНачислено = 0;
ЖЗ.ВыбратьЗаписиПоОбъекту (ТекСотр, ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
....Если ГруппаРасчетов.ВсеНачисления.СодержитВидРасчета(ЖЗ.ВидРасч)=1 Тогда
..........ВсегоНачислено = ВсегоНачислено + ЖЗ.Результат;
....КонецЕсли;
КонецЦикла;

Перебор видов расчета, входящих в группу

Для Ном=1 По ГруппаРасчетов.ВсеНачисления.Количество()
        Цикл
....ВР = ГруппаРасчетов.ВсеНачисления.ПолучитьРасчет(Ном);
....Сообщить(ВР.Код);
КонецЦикла;

Перебор всех видов расчета

Для Ном=1 По Метаданные.ВидРасчета()
        Цикл
....кфгВР = Метаданные.ВидРасчета(Ном);
....ВР = ВидРасчета.ПолучитьАтрибут(кфгВР.Идентификатор);
КонецЦикла;

Перебор групп расчета

Для Ном=1 По Метаданные.ГруппаРасчета() Цикл
....кфгГруппаРасч = Метаданные.ГруппаРасчета(Ном);
....//недоработка фирмы 1С. По имени группы расчета нельзя получить саму группу расчета как объект.
....//если помечтать, то можно было бы сделать вот так:
....// ГруппаРасч = ГруппаРасчета.ПолучитьАтрибут(кфгГруппаРасч.Идентификатор);
КонецЦикла;

Еще я совсем не понимаю, почему группа расчетов не является типообразующим объектом в 1С. Т.е. нельзя, например, завести реквизит справочника и указать его тип "ГруппаРасчетов.ВсеНачисления". Нельзя в диалоге поместить поле типа "ГруппаРасчета", чтобы пользователь мог самостоятельно выбрать группу расчетов так же, как он выбирает вид расчета. Будем надеяться, что в версии 8.0 фирма 1С исправит эти упущения.