Срабатывает при установке отбора кнопкой
Срабатывает при двойном щелчке на документе или при нажатии ENTER. Режим обработки выбора строки предопределенной процедурой ПриВыбореСтроки включается при помощи метода Форма.ОбработкаВыбораСтроки(1).
ВНИМАНИЕ. Сортировка в журнале документов по произвольной графе невозможна!
Поиск документа в журнале
Кнопка "Поиск по номеру" (см. панель инструментов формы журнала документов) + набор первых символов.
В теле описываются подготовка данных
Процедура ОбработкаУдаленияПроведения()
Если ВыбратьСтроки() = 1 Тогда // Обратите внимание
Пока ПолучитьСтроку() = 1 Цикл
Сумма = 0; // Сумма - реквизит документа ***
КонецЦикла;
КонецЕсли;
КонецПроцедуры
*** Пример доступности контекста документа в модуле документа
Модуль формы запускается при каждом открытии формы документа. В его контексте доступны все реквизиты документа и реквизиты формы. Кроме предопределенных процедур модуля формы, там можно разместить вспомогательные процедуры и функции, вызываемые, например, экранными кнопками. Не путайте: предопределенные процедуры модуля документа нельзя размещать в модуле формы, и наоборот!
Вызывается при создании интерактивном создании
Процедура ВводНового(Копирование)
Если ИмяПользователя() <> "Бухгалтер" Тогда
Предупреждение("Вам не позволено создавать этот документ!");
СтатусВозврата(0); Возврат; //Новый документ не будет создан
КонецЕсли;
Если Копирование = 1 Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
СуммаДоплаты=Основание.СуммаСверху; //Свой реквизит принимает значение реквизита документа-основания.
Помните, что после обработки этой процедуры система не сохранит информацию о том, что новый документ введен на основании другого. Для реализации такой возможности вы должны иметь во вновь создаваемом документе реквизит типа "Документ", куда можно записать ссылку на документ-основание. Лучше сделать её доступной пользователю, чтобы он потом имел возможность выбрать другой документ-основание.
Процедура ПриВводеСтроки()
.......СтатусВозврата(0);
КонецПроцедуры
и время ТА. Примерный вид
или вид документа) данной последовательности.
ПолучитьДокумент()
ПолучитьВремя(Ч,М,С)
Отключить режим добавления строк по
Пример, "Сотрудник с табельным номером [Сотрудник.Код] обработан." При формировании такой строки в режиме шаблона результирующая строка будет иметь вид: "Сотрудник с табельным номером 123 обработан."
Возвращает текущее числовое значение режима кодировки (на момент до исполнения метода).
в окне диалога нажата кнопка
Синтаксис: ВыбратьФайл (<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <ЗаголовокОкна>, <Фильтр>, <Расширение>, <Таймаут>)
Параметры:
<ТипДиалога> -: 0 - диалог типа <открыть>, 1 - диалог типа <сохранить>;
<ИмяФайла> - переменная, содержащая на входе строку с именем файла, а на выходе - имя выбранного файла;
<ИмяНачКаталога> - переменная, содержащая на входе строку с начальным каталогом, а на выходе - имя выбранного каталога;
<ЗаголовокОкна> - строка с заголовком окна;
<Фильтр> - строка с фильтром отбора файлов (например: 'Все файлы (*.*) |*.*');
<Расширение> - строка с расширением файла по умолчанию;
<Таймаут> - время ожидания отклика пользователя в секундах (необязателен).
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена', 1 - если нажата кнопка 'ОК'.
Синтаксис: ВыбратьФайлКартинки (<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <ЗаголовокОкна>, <Расширение>, <Таймаут>)
Возвращает: 0 - если в окне диалога нажата кнопка 'Отмена'; 1 - если в окне диалога нажата кнопка 'ОК', при этом в переменную <ИмяНачКаталога> возвращается имя выбранного каталога; -1 (минус единица) - закончилось время <Таймаут> ожидания отклика пользователя.
Синтаксис: ВыбратьКаталог(<ИмяКаталога>,<ЗаголовокОкна>,<Таймаут>)
Возвращает: 1 - файл существует; 0 - не существует.
Синтаксис: СуществуетФайл(<ИмяФайла>)
Синтаксис: КопироватьФайл(<ИмяФайлаИсточника>,<ИмяФайлаПриемника>,<ФлагПерезаписи>)
Параметры:
<ИмяФайлаИсточника> - строка с именем файла источника;
<ИмяФайлаПриемника> - строка с именем файла приемника;
<ФлагПерезаписи> -:
0 - существующий файл приемника перезаписать;
1 - существующий файл приемника не перезаписывать.
Синтаксис: УдалитьФайл(<ИмяФайла>)
Синтаксис: ПереименоватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>, <ФлагПерезаписи>)
Параметры:
<ИмяФайлаИсточника> - строка с именем файла источника;
<ИмяФайлаПриемника> - строка с новым именем файла;
<ФлагПерезаписи> -:
0 - запрещает перемещение файла между дисками и существующий файл приемника не перезаписывается;
1 - разрешает перемещение файла между дисками (только для файлов) и существующий файл приемника перезаписывается.
Возвращает строку с именем найденного файла.
Синтаксис: НайтиПервыйФайл(<МаскаИмени>)
Возвращает строку с именем найденного файла.
Синтаксис: НайтиСледующийФайл()
Синтаксис:
АтрибутыФайла (<ИмяФайла>, <РазмерФайла>, <АтрибутыФайла>, <ВремяСоздания>, <ВремяПоследнегоДоступа>, <ВремяПоследнейЗаписи>, <РасширенноеИмяФайла>)
Атрибуты файла закодированы, об этом см. Синтакс-Помощник или описание встроенного языка
Синтаксис:СоздатьКаталог(<ИмяКаталога>)
Синтаксис: УдалитьКаталог(<ИмяФайла>)
Синтаксис: УстТекКаталог(<ИмяФайла>)
Синтаксис: СвободноеМестоНаДиске(<ИмяДиска>)
Кроме стандартных вышеперечисленных реквизитов, разработчик
Пример, прочитать и установить ответственного за ведение счета:
Счета = СоздатьОбъект("Счет.ОснПлан");
Счета.НайтиПоКоду("10.1");
БылОтветственный = Счета.Ответственный.Получить(НекаяДата);
Счета.Ответственный.Установить(НекаяДата, ВыбрСотрудник);
Счета.Записать();
Можно установить дату выборки периодических реквизитов, тогда ниже уже нельзя применять методы Установить и Получить
Счета = СоздатьОбъект("Счет.ОснПлан");
Счета. ИспользоватьДату(НекаяДата);
Счета.НайтиПоКоду("10.1");
БылОтветственный = Счета.Ответственный;
Счета.Ответственный = ВыбрСотрудник;
Счета.Записать();
является ли данный счет группой
Возвращает: 1 - счет является группой; 0 - счет не является группой.
Пример, вывести все синтетические счета:
Счета = СоздатьОбъект("Счет.ОснПлан");
Счета.ВыбратьСчета();
Пока Счета.ПолучитьСчет()=1 Цикл
....Если Счета.ЭтоГруппа()=1 Тогда
..........Сообщить(Счета.Код + " " + Счета.Наименование);
....КонецЕсли;
КонецЦикла;
Пример, вывести все субсчета счета "10 Материалы":
Счета = СоздатьОбъект("Счет.ОснПлан");
Сч10 = СчетПоКоду(10);
Счета.ИспользоватьРодителя(Сч10);
Счета.ВыбратьСчета();
Пока Счета.ПолучитьСчет()=1 Цикл
.....Сообщить(Счета.Код + " " + Счета.Наименование);
КонецЦикла;
Пример, вывести все счета в виде дерева:
Счета = СоздатьОбъект("Счет.ОснПлан");
Счета.ВыбратьСчета();
Пока Счета.ПолучитьСчет()=1 Цикл
отступ = "";
Для ном = 1 По Счета.Уровень() Цикл
....отступ = отступ + " ";
КонецЦикла;
Сообщить(отступ + Счета.Код + " " + Счета.Наименование);
КонецЦикла;
Пример,
Сч10 = СчетПоКоду("10");
СубСч10 = СчетПоКоду("10.5.1");
Сообщить(СубСч10.ПринадлежитГруппе(Сч10)); //метод вернет 1
Например, для счета "10.5" этот метод вернет счет с кодом "10".
Возвращает: строковое значение - код счета без кодов счетов вышестоящих уровней.
Например, для счета "10.5" этот метод вернет строковое значение "5".
ВыбрСчет.ВыборГруппы(1); //разрешить выбор группы
ВыбрСчет.ВыборГруппы(0); //запретить выбор группы
Этот метод выполняет поиск счета
Создание операции и проводок Простой перебор Перебор с фильтром Перебор с корр. счетом Фильтр по субконто Графа отбора Поиск операции Удаление операции и проводок Другие полезности |
Операция обычно содержит одну или несколько проводок. Именно проводки влияют на бухгалтерские итоги. Каждая проводка принадлежит одной и только одной операции. Следует помнить, что любая операция вводится на основании документа. Даже операции, введенные вручную, привязываются к документу специального типа "Операция".
Работа с операциями похожа на работу с документами. Проводки можно представить, как табличную часть операции, по аналогии с табличной частью документа. С точки зрения пользователя все операции и проводки хранятся в журнале операций и связанном с ним журнале проводок.
Атрибут ДатаОперации содержит дату бухгалтерской
Атрибут Документ предназначен только для доступа к атрибутам и реквизитам документа, которому принадлежит операция. Для получения значения типа «Документ» используется метод ТекущийДокумент.
Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм «Операции» и «Журнал проводок» текущая проводка определяется положением курсора.
Дебет.Счет
Дебет.Субконто
Атрибут Дебет.Счет служит для доступа к счету дебета/кредита проводки или корреспонденции операции.
Атрибут Дебет.Субконто служит для доступа к значению субконто дебета проводки (корреспонденции) операции. В конкретном случае обращение к субконто для дебета определяется счетом дебета, то есть заданными для него видами субконто по которым ведется аналитический учет по этому счету.
Разные варианты обращения к субконто см. выше в примере.
Кредит.Счет
Кредит.Субконто
все проводки со счетом 51
выбирает первую проводку слудующей операции удовлетворяющую заданным условиям.
Проверить проводку на соответствие корректным
УстановитьВремя()
ПроводкаВыбрана()
ПредставлениеСубконто()
Данный метод имеет смысл использовать, только в том случае, если существует необходимость обращения к итогам, измененным проводками записываемой операции.
Процедура ОбработкаПроведения()
Сч20 = СчетПоКоду("20");
Cч40 = CчeтПoKoдy("40");
СписаниеСчетаНаСч20(СчетПоКоду("25"));
СписаниеСчетаНаСч20(СчетПоКоду("26"));
Операция.ЗаписатьПроводки();
СписаниеСчета20На40();
Операция.Содержание = "Закрытие фин. результатов за " + Формат(ДатаДок, "Д ММММГГГГ");
Операция.Записать();
КонецПроцедуры
Механизм бухгалтерских итогов, поддерживаемый компонентой «Бухгалтерский учет» системы 1С:Предприятие релизует хранение накопленных итогов для обеспечения быстрого обращения к ним при составлении отчетов и выполнения различных вычислений.
Хранение итогов поддерживается системой с детализацией до месяца. Кроме того, хранятся не все возможные итоги, а те, обращение к которым выполняется наиболее часто — это остатки и обороты по счетам с детализацией по объектам аналитики (субконто), а также обороты между счетам (без учета аналитики). Такие итоги называются основными. Обращение к этим итогам выполняется системой непосредственно. Для получения других итогов (с детализацией меньше месяца, с получением оборотов между различными объектами аналитики, а также сложных выборок) требуется выполнение предварительных действий — временного расчета или запроса.
Объект «БухгалтерскиеИтоги» может работать в 3-х различных режимах:
работа с основными итогами;
работа с временными итогами;
работа в режиме запроса;
При создании объекта он работает в режиме работы с основными итогами. Переключение его в остальные режимы выполняется методами Рассчитать и ВыполнитьЗапрос. В зависимости от режима изменяется состав и использование атрибутов и методов объекта.
дебетовое сальдо по счету на
1 ("С") — сумма;
2 ("В") — валютная сумма;
3 ("К") — количество.
Если параметр не указан, метод возвращает сумму.
<Субконто2>
...…
БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги);
ОстатокНаСчетеНаНачалоПериода = БухИтоги.СНД("51");
ОстатокНаСчетеНаКонецПериода = БухИтоги.СКД("51");
ПриходГвоздейНаСкладЗаПериод = БухИтоги.ДО("10.1",3,,МатериалГвозди,ЦентрСклад);
счет расчета итогов. Может использоваться
1 ("С") — сумма;
2 ("В") — валютная сумма;
3 ("К") — количество.
Если параметр не указан, метод возвращает сумму.
<Субконто2>
...…
БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги);
ОстатокНаСчетеНаНачалоПериода = БухИтоги.СНД("51");
ОстатокНаСчетеНаКонецПериода = БухИтоги.СКД("51");
ПриходГвоздейНаСкладЗаПериод = БухИтоги.ДО("10.1",3,,МатериалГвозди,ЦентрСклад);
дебетовое развернутое сальдо по субсчетам
* Для помещения в бухгалтерский баланс вычисляется развернутое сальдо по 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 — остатки и обороты по счету в целом (по умолчанию);
2 — обороты между счетами;
3 — Первое и второе вместе.
ния сальдо по субсчетам основного
0 — не разворачить по субсчетам (по умолчанию);
1 — разворачивать по субсчетам;
-1 (минус единица) — не выдавать итоги по счетам-группам.
0 — не разворачить по субсчетам (по умолчанию);
1 — разворачивать по субсчетам;
-1 (минус единица) — не выдавать итоги по корреспондирующим счетам-группам.
ных итогов будет выполнен только
1 — разворачивать по данному субконто (по умолчанию),
2 — отбирать по данному субконто,
3 — не учитывать это субконто вообще.
0 — не показывать итоги по группам справочника (по умолчанию);
1 — показывать итоги по группам справочника.
* Данный запрос формирует итоги по счету 10 в разрезе материалов по одному складу.
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Материалы, , 1);
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Склады, ВыбСклад, 2);
БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон, "10");
Синтаксис: ВыбратьСчета
ПолучитьСчет
0 — отбирать те счета, которые имели итоги на этом уровне обхода итогов запроса (по умолчанию);
1 — включить в выборку все счета, которые имели итоги в данном запросе;
-1, -2 ... — включить в выборку счета, которые имели итоги в группировке n-го вышестоящего уровня.
1 — включать в выборку счета только с дебетовыми оборотами;
2 — включать в выборку счета только с кредитовыми оборотами.
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 ("С") - сумма (по умолчанию)
2 ("В") - валютная сумма
3 ("К") - количество
СКДРС
СНКРС
СККРС
СКДРС — дебетовое развернутое сальдо на конец периода;
СНКРС — кредитовое развернутое сальдо на начало периода;
СККРС — кредитовое развернутое сальдо на конец периода;
КорКО
ВыбранаПоКт
Глава 1
1. Постановка задачи.
Написать простейшую конфигурацию по учету хозяйственных операций для производственной фирмы. Условия:
Производство готовых изделий из покупных комплектующих путем сборки;
Учет НДС, прочие налоги и сборы не учитываем;
Учет заработной платы, работников непосредственно занятых в производстве (оплата сдельная);
Четыре типа документов по движению заготовок, готовых изделий и товаров (приходная накладная, наряд на сборку, накладная на выпуск из производства и расходная накладная), два по движению денег (приходный ордер, расходный ордер), один по выплате заработной платы (ведомость) и один по учету НДС;
Валюта учета одна;
Учет по FIFO;
Задача будет решена на базе платформы 1С:Предприятие 7.7.
Крайне полезным, перед изучением сего опуса, будет полистать мой первый шедевр "Построение простейшей конфигурации по учету складских операций". Все сокращения, условные обозначения и т.д и т.п. описаны там.
2. Реализация.
2.1 Создание конфигурации.
Для начала создадим пустую конфигурацию и укажем основные настройки. Как это сделать – см. мою методичку "Построение простейшей конфигурации по учету складских операций". Конфигурацию поместим в каталог (для определенность "Study_2").
Настроим свойства задачи:
На закладке "Общие"
Идентификатор – Производство 1.0;
Синоним – Производство;
Комментарий – учебная конфигурация;
На закладке "Задача"
Основной язык – Русский;
Округление – 1.5 до 2
Разрешить непосредственное удаление объектов – Да;
На закладках "Автор" и "Заставка" через [Изменить] вносим разную дополнительную информацию и добавляем заставку и логотип (если есть что добавлять);
2.2 Создание пользователя.
Создаем пользователя "Программист" (см. методичку "Построение простейшей конфигурации по учету складских операций"). Пароль давать не будем. Интерфейс Администратора мы будем создавать автоматически, по мере ввода новых объектов метаданных, если, конечно, будем пользоваться при их создании конструкторами, но можем и в ручном режиме;
Глава 2
2.3 Справочник Сотрудники.
На фирме, что мы описываем будет кто-то работать (или дурака валять, но это кому как нравится). Заведем списочек этих работничков. Для списка создадим справочник. В поле Код будем хранить табельный номер, а в Наименовании – ФИО сотрудника. Сведем структуру справочника в таблицу, как это делалось в предыдущей методичке.
Идентификатор: Сотрудники Подчинен: нет Количество уровней: 1 Код: 5 Тип кода: число Серии кодов: подчинение Наименование: 50 Основное представление: наименование Группы сверху: да Автонумерация: да Уникальность: да Одна форма для элемента и группы?: нет Редактировать: в списке "Код" – табельный номер. "Наименование" – ФИО сотрудника. |
|||||
Реквизит |
Описание |
ТипЗначения |
Доп. |
Исп. |
Изм. |
Создаем новый справочник;
Создадим форму списка;
Переименуем поле "Код" в "Таб. №", а поле "Наименование" в "ФИО"
Перейдем в 1С:Предприятие и заполним список сотрудников:
и конечные результаты расчета зарплаты
Описание конфигурации
Быстрая и простая конфигурация для сети магазинов.
Идеальна для модели "Склад - сеть магазинов".
Мощные аналитические отчеты.
Анализ расхода товара по складу, реализатору (по прибыли, по количеству)
Анализ поступления выручки торговых точек
Анализ остатков по складу и реализаторам
Анализ розничных цен
Импорт-экспорт единичных документов. Удобно перебрасывать документы из
одной программы в другую, если учет ведется в разных программах.
Учет товара по торговым точкам идет в розничных ценах.
Весь товарооборот идет через склад. Например переброс товара из
одной торговой точки в другую проходить в два этапа.
1 Возврат товара на склад (ДокументРеализатора-Возврат)
2 Отпуск товара реализатору (ДокументРеализатора-Расход)
Списать товар с торговой точки можно несколькими способами.
1. Списание суммой (СписаниеРеализатора)
2. Списание товаром (ДокументРеализатора-Списание)
3. Возврат на склад, потом списать со склада (ДокументРеализатора-Возврат)
Большинство отчетов вынесено во внешние отчеты. Исправлять и дорабатывать
отчеты можно без выбрасывания пользователей из программы 1с-Торговля.
В прайс-листе видны две колонки: остатки на складе и остатки реализатора.
При обновлении прайса в него заносится товар с не нулевыми остатками на складе.
Организация подбора
Синтаксик: ОткрытьПодбор(<Объект>,<ИмяФормы>,<КонтекстФормы>,<ФлагМножВыбора>,<ТекЗнач>)
ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);
Процедура ОбработкаПодбора(Элемент,КонтФормы)
...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры
Можно воспользоваться контекстом формы и сразу перейти в нужную группу, например:
ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);
Конт.ИспользоватьРодителя(грпСпиртное);
Процедура ОбработкаПодбора(Элемент,КонтФормы)
...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры
Осн ставка
2
М16
ГДЕ-221
Изделие №2
8.00
80.00
ПРС-555
Изделие №1
12.50
120.00
Основное окно конфигуратора
Слева вы видите дерево конфигурации, в котором редактируется структура базы данных.
Справа окно Синтакс-помощника, которое часто используется при написании программных модулей для того, чтобы вспомнить синтаксис или параметры конкретной процедуры/функции.
Отбор
В форме списка справочника элементы могут быть отфильтрованы, т.е. пользователю будут показаны только нужные элементы. Программно установить отбор можно методом УстановитьОтбор (Реквизит, Значение). Для этого у реквизита должен быть установлен флажок "Отбор по реквизиту" в Конфигураторе .
Отчет "Библиотечная выписка"
Экранная форма диалога отчета выглядит следующим образом:
Пример работы отчета:
Модуль отчета см. в конфигурации "Мини-библиотека".
Отчет "Доходы и расходы"
Экранная форма диалога отчета выглядит следующим образом:
Сначала указывается тип отчета: доходы или расходы. Затем выбирается период, за которые формируется отчет. В отчете можно указать 1 или 2 группировки Участник и Статья в произвольном порядке. Также можно указать отбор по одному участнику или статье.
Модуль отчета см. в конфигурации "Денежки".
Пример работы отчета (отчет о доходах, включены две группировки):
Пример работы отчета (отчет о расходах, включена только одна группировка Статьи):
Мини-библиотека
Отчет "Долги читателя"
Экранная форма диалога отчета выглядит следующим образом:
Пример работы отчета:
Модуль отчета см. в конфигурации "Мини-библиотека".
Отчет курьера
Данный документ оформляет результат поездки курьера по путевому листу. Отмечается количество фактически доставленных товаров. Экранная форма документа выглядит следующим образом:
Пользователь указывает путевой лист, по которому отчитывается курьер. При этом автоматически заполняется табличная часть документа. Пользователь может подкорректировать колонку "Доставлено" в соответствии с фактически доставленным количеством товара. При установке флажка "Недоставленные товары возвращены на склад" товары из регистра Доставка переходят в регистр Остатки, т.е. курьер нам ничего не должен.
При проведении документа совершаются движения в регистрах:
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Если Доставлено > 0 Тогда
Регистр.Доставка.Товар = Товар;
Регистр.Доставка.Клиент = Клиент;
Регистр.Доставка.Цена = Цена;
Регистр.Доставка.Заказ = Заказ;
Регистр.Доставка.ДатаДоставки = ДатаДоставки;
Регистр.Доставка.Количество = Доставлено;
Регистр.Доставка.Сумма = Сумма;
Регистр.Доставка.ДвижениеРасходВыполнить();
Регистр.Заказы.Товар = Товар;
Регистр.Заказы.Клиент = Клиент;
Регистр.Заказы.ДатаДоставки = ДатаДоставки;
Регистр.Заказы.Цена = Цена;
Регистр.Заказы.Заказ = Заказ;
Регистр.Заказы.Количество = Доставлено;
Регистр.Заказы.Сумма = Сумма;
Регистр.Заказы.ДвижениеРасходВыполнить();
Регистр.Доходы.Товар = Товар;
Регистр.Доходы.Клиент = Клиент;
Регистр.Доходы.Доход = Сумма;
Регистр.Доходы.ДвижениеВыполнить();
КонецЕсли;
Если Фл_ВозвратОстатков=1 Тогда
Если Доставлено < Заказано Тогда
Регистр.Доставка.Товар = Товар;
Регистр.Доставка.Клиент = Клиент;
Регистр.Доставка.Цена = Цена;
Регистр.Доставка.Заказ = Заказ;
Регистр.Доставка.ДатаДоставки = ДатаДоставки;
Регистр.Доставка.Количество = Доставлено;
Регистр.Доставка.Сумма = Сумма;
Регистр.Доставка.ДвижениеРасходВыполнить();
Регистр.Остатки.Товар = Товар;
Регистр.Остатки.Количество = Заказано - Доставлено;
Регистр.Остатки.ДвижениеПриходВыполнить();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Отчет "Остатки"
Экранная форма диалога отчета выглядит следующим образом:
Модуль отчета:
Процедура Сформировать()
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Кошелек = Регистр.Кошельки.Кошелек;
|Участник = Регистр.Кошельки.Кошелек.Участник;
|Сумма = Регистр.Кошельки.Сумма;
|Группировка Кошелек;
|Функция СуммаВКошельке = КонОст(Сумма);
|Условие(Кошелек в ВыбрКошелек);
|Условие(Участник в ВыбрУчастник);
|";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
.......Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Все<");
Пока Запрос.Группировка(1) = 1 Цикл
....... Таб.ВывестиСекцию("Кошелек");
КонецЦикла;
Таб.ВывестиСекцию("Все>");
Таб.Показать();
КонецПроцедуры
Пример работы отчета:
Отчет "Остатки материалов"
Экранная форма диалога отчета выглядит следующим образом:
Шаблон печатной формы (в Конфигураторе):
Модуль отчета:
Процедура Сформировать()
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Материал = Регистр.ОстаткиМатериалов.Материал;
|Склад = Регистр.ОстаткиМатериалов.Склад;
|Количество = Регистр.ОстаткиМатериалов.Количество;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Материал;
|Группировка Склад;
|Условие (Материал в ВыбрМатериалГруппа);
|Условие (Склад в ВыбрСклад);
|";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
...Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Заголовок");
Пока Запрос.Группировка(1) = 1 Цикл
Если Запрос.Материал.ЭтоГруппа()=1 Тогда
... Таб.ВывестиСекцию("Группа");
Иначе
Таб.ВывестиСекцию("Материал");
Если Фл_НеВыводитьСклады = 0 Тогда
...Пока Запрос.Группировка(2) = 1 Цикл
......Таб.ВывестиСекцию("Склад");
...КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб.Опции(0);
Таб.Показать("ОстаткиМатериалов", "");
КонецПроцедуры
Примеры работы отчета:
В следующем примере отключена детализация по складам:
Отчет "Товары"
Данный отчет показывает текущую картину по товарам и оценивает дефицит товаров на указанный будущий период. Экранная форма диалога отчета выглядит следующим образом:
Пользователь может ограничить выборку конкретной группой товаров. Кроме того, пользователь указывает период времени в днях, за который учитываются заказы. Это позволяет заранее определить дефицитные товары и не допустить срыва поставок.
Пример работы отчета представлен ниже:
Дефицит определяется по формуле:
Дефицит = (Заказано - Доставляется) - Остаток;
Открытие формы
Формы - это основной вид диалога с пользователем. Все справочники, документы, журналы, отчеты и обработки имеют экранные формы. Обычно форма открывается пользователем интерактивно (мышкой), но форму можно открыть и программно.
Конт = 0; //контекст формы (ссылка на форму)
ОткрытьФорму("Справочник.Сотрудники.Основная",Конт); //открыть форму списка справочника
ОткрытьФорму(ВыбрСотрудник); //открыть форму элемента справочника
ОткрытьФорму("Отчет.ГлавнаяКнига");
ОткрытьФорму("Документ.ПриемНаРаботу",Конт); //новый документ
//можно открыть форму модально и еще можно передать в форму параметр
//в модуле формы переданный параметр доступен через конструкцию Форма.Параметр
ОткрытьФормуМодально("Обработка.УсловияПоиска",10);
Отсчет даты
Получим дату, отстоящую по календарю от указанной даты на заданное количество дней. Календарь пропускает дни с нулевыми значениями (выходные и праздники).
КонецОтпуска = Календари.Служащие.ПолучитьДату (НачалоОтпуска, 28);
Мини-зарплата
Параметры предопределенных процедур
Некоторые предопределенные процедуры имеют параметры, в которые передается информация о произошедшем событии. Например, для процедуры ПриВыбореВладельца(Элемент) в параметр Элемент передается значение нового владельца.
Печатные формы документа
Документ обычно имеет печатную форму. Печатная форма полностью формируется средствами встроенного языка 1С, что придает большую гибкость программе. Это одна из причин ошеломляющего успеха системы 1С:Предприятие. Печатная форма документа - это фактически отчет, формируемый обычно из формы открытого документа и содержащий сведения из этого документа. Чтобы научиться формировать печатные формы, вам нужно изучить главу Отчеты (объект "Таблица"). Все операторы, которые выполняют вывод на печать данных отчетов, точно так же позволяют печатать данные из документов.
У документа может быть несколько шаблонов печатных форм. Средствами встроенного языка (метод ИсходнаяТаблица) задается тот шаблон печатной формы, который будет использоваться.
Шаблоны печатных форм (таблицы) могут быть общие. Это дает возможность использовать один шаблон для печати нескольких видов документов. Т.е. общая таблица является глобальной для конфигурации и может быть использована в любом модуле. Примером из типовой конфигурации может являться шаблон печатной формы "Отчет о движении документа", который используется разными модулями конфигурации.
Маленькая хитрость: если вы создали свою печатную форму для какого-либо документа, или "заточили" типовую, рекомендую сохранить её в отдельном файле печатной формы (*.mxl) тогда при переходе с релиза на релиз вам не будет нужды переделывать таблицы документа, достаточно будет в операторе ИсходнаяТаблица() процедуры печати вставить ссылку на внешний файл.
Перебор документов
ДокПрием.ВыбратьДокументы(дата1, дата2); //можно задать период выборки
Пока ДокПрием.ПолучитьДокумент()=1 Цикл
......<действия с текущим документом>
КонецЦикла;
Перебор групп расчета
Для Ном=1 По Метаданные.ГруппаРасчета() Цикл
....кфгГруппаРасч = Метаданные.ГруппаРасчета(Ном);
....//недоработка фирмы 1С. По имени группы расчета нельзя получить саму группу расчета как объект.
....//если помечтать, то можно было бы сделать вот так:
....// ГруппаРасч = ГруппаРасчета.ПолучитьАтрибут(кфгГруппаРасч.Идентификатор);
КонецЦикла;
Еще я совсем не понимаю, почему группа расчетов не является типообразующим
объектом в 1С. Т.е. нельзя, например, завести реквизит справочника и указать его тип "ГруппаРасчетов.ВсеНачисления". Нельзя в диалоге поместить поле типа "ГруппаРасчета", чтобы пользователь мог самостоятельно выбрать группу расчетов так же, как он выбирает вид расчета. Будем надеяться, что в версии 8.0 фирма 1С исправит эти упущения.
Календари
Ссылка на календарь Подсчет дней и часов Отсчет даты |
Перебор операций и проводок с фильтром
Синтаксис: ВыбратьОперацииСПроводками (<НачалоПериода>, <КонецПериода>, <Фильтр>, <Валюта>, <ПланСчетов>, <РазделительУчета>)
Пример, выбрать проводки по счету "10.1" по филиалу "Северный".
Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(НачДата, КонДата,"10.1",,ПланыСчетов.Основной,филСеверный);
Пока Опер.ПолучитьПроводку()=1 Цикл
....<действия с текущей проводкой>
КонецЦикла;
Примеры фильтра:
Перебор операций и проводок с указанием счета и корр. счета
Синтаксис: ВыбратьОперацииСПроводками (<НачалоПериода>, <КонецПериода>, <Счет>, <КорСчет>, <Флаг>, <Валюта>, <ПланСчетов>, <РазделительУчета>)
<Счет>. Необязательный параметр. Счет — счет, по которому будут отбираться проводки.
<КорСчет>. Необязательный параметр. Счет — корреспондирующий счет, по которому будут отбираться проводки. Параметр имеет смысл, если указан параметр <Счет>.
<Флаг>. Необязательный параметр. Число — признак вида оборота. Параметр может принимать значения: 1 — отбирать проводки только по дебету счета; 2 — отбирать проводки только по кредиту счета; 3 — отбирать проводки и по дебету, и по кредиту. По умолчанию 3.
Пример, выбрать проводки Д10.1 К51 или Д51 К10.1
Сч10_1 = СчетПоКоду("10.1");
Сч51 = СчетПоКоду("51");
Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками (НачДата, КонДата, Сч10_1, Сч51,,,ПланыСчетов.Основной);
Пока Опер.ПолучитьПроводку()=1 Цикл
....<действия с текущей проводкой>
КонецЦикла;
Перебор счетов
1-й вариант:
Счета = СоздатьОбъект("Счет.ОснПлан");
Счета.ВыбратьСчета();
Пока Счета.ПолучитьСчет()=1 Цикл
....ТекСчет = Счета.ТекущийСчет();
....<действия с тек. счетом>
КонецЦикла;
2-й вариант:
Счета = СоздатьОбъект("Счет"); //не указан план счетов
Счета.ИспользоватьПланСчетов(ПланыСчетов.ОснПлан); //а вот теперь указан
Счета.ВыбратьСчета();
Пока Счета.ПолучитьСчет()=1 Цикл
....ТекСчет = Счета.ТекущийСчет();
....<действия с тек. счетом>
КонецЦикла;
Перебор списка значений
стр = "";
Для Номер = 1 По СписокЗнач.РазмерСписка() Цикл
...значение = СписокЗнач.ПолучитьЗначение(Номер, стр); //получить значение и представление
...Сообщить(значение + ", " + стр);
КонецЦикла;
Перебор строк таблицы значений
1-й способ.
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
...Сообщить(ТабЗнач.Сотрудник);
КонецЦикла;
2-й способ.
Для НомерСтроки = 1 По ТабЗнач.КоличествоСтрок() Цикл
...ТабЗнач.ПолучитьСтрокуПоНомеру(НомерСтроки);
...Сообщить(ТабЗнач.Сотрудник);
КонецЦикла;
Перебор видов расчета, входящих в группу
Для Ном=1 По ГруппаРасчетов.ВсеНачисления.Количество() Цикл
....ВР = ГруппаРасчетов.ВсеНачисления.ПолучитьРасчет(Ном);
....Сообщить(ВР.Код);
КонецЦикла;
Перебор всех видов расчета
Для Ном=1 По Метаданные.ВидРасчета() Цикл
....кфгВР = Метаданные.ВидРасчета(Ном);
....ВР = ВидРасчета.ПолучитьАтрибут(кфгВР.Идентификатор);
КонецЦикла;
Перебор записей журнала расчетов
Например, организуем перебор записей с периодом действия в январе.
ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ДатаКон = '31.01.2002';
ЖЗ.ВыбратьЗаписи(ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
......<действия с тек. записью>
КонецЦикла;
А теперь организуем перебор записей, введенных в январе.
ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ЖЗ. ВыбратьПериод(ДатаНач);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
.......<действия с тек. записью>
КонецЦикла;
Отличие методов ВыбратьЗаписи и ВыбратьПериод проявляется, если запись введена в другом месяце, но период ее действия лежит в январе. Например, в феврале сотруднику выдают премию за январь. Тогда запись будет введена в феврале (период регистрации), но период ее действия - январь. В первый цикл она попадет, а во второй нет.
Посчитаем все начисления текущего сотрудника за январь:
ВсегоНачислено = 0;
ЖЗ.ВыбратьЗаписиПоОбъекту (ТекСотр, ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
....Если ЖЗ.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1 Тогда
..........ВсегоНачислено = ВсегоНачислено + ЖЗ.Результат;
....КонецЕсли;
КонецЦикла;
Теперь рассчитаем все записи текущего сотрудника, введеные в текущем месяце:
ЖЗ.ВыбратьПериодПоОбъекту (ТекСотр, ДатаНач);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
........ЖЗ.Рассчитать();
КонецЦикла;
Рассчитаем все записи по документу, независимо от того, в каком расчетном периоде записи порождались:
ЖЗ.ВыбратьЗаписиПоДокументу
(ВыбрДокумент);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
......ЖЗ.Рассчитать();
КонецЦикла;
Рассчитаем все записи по указанному подразделению. В журнале расчетов указана графа отбора "Подразделение".
ТекПер = ЖЗ.ТекущийПериод();
ЖЗ.ВыбратьПоЗначению ("Подразделение",ВыбрПодразделение, ТекПер, ТекПер);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
......ЖЗ.Рассчитать();
КонецЦикла;