Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

237429

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
651.5 Кб
Скачать

Если Спр.Выбрать("Выберите объект", "")=1 Сообщить( "Выбран сотрудник"+Спр.Наименование);

Пример 3 (изменение атрибута «Содержание» для документа, являющегося основанием для текущего):

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

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

Атрибут – свойство агрегатного типа данных. Так, атрибутами документов являются «НомерДок», «ДатаДок», <Реквизит> (определенные в конфигурации реквизиты), «НомерСтроки» и «Операция». Все возможные атрибуты для каждого агрегатного типа данных в системе заранее определены (а возможность создания любых реквизитов в конфигурации позволяет пользователю добавлять свои атрибуты). Доступ к атрибутам конкретного объекта агрегатного типа данных определяется следующим образом. Если объект, согласно контекста, входит в набор доступных для данного модуля значений, то для доступа к атрибуту достаточно указать его имя (так в модуле формы документа непосредственно доступны реквизиты текущего документа). В других случаях доступ к атрибутам осуществляется созданием ссылки на объект при помощи функции СоздатьОбъект(). Тогда имя атрибута пишется через точку после имени переменной, содержащей ссылку (как в приведенном выше примере 3: Док.Содержание). В общем случае атрибуты могут стоять в левой и в правой части оператора присваивания, быть параметрами вызываемых методов, процедур и функций.

Методы – это действия, которые может выполнять агрегатный тип данных. Методы могут иметь возвращаемое значение (т.е. аналогичны функциям) или не иметь (как процедуры). Синтаксис методов агрегатных типов данных аналогичен указанным

31

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

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

исистемные предопределенные процедуры

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

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

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

32

Рис. 12. Список предопределенных процедур модуля формы документа

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

Процедура ВводНового() ДатаДок=Рабочая Дата(); Фирма=Константа.ОснФирма; Сумма=0;

СтавкаНДС=Константа.ОсновнаяСтавкаНДС; НДС=0; КонецПроцедуры

33

Список заданий

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

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

2.Автоматизировать перечисление заработной платы сотрудникам на пластиковые карты в банк. Предполагаем при этом, что в организации могут использоваться пластиковые карточки разных банков. Задачу можно разбить на ряд подзадач:

реализовать возможность указания номера лицевого счета и банка в карточке сотрудника;

в табличную часть документа «Выплата зарплаты» добавить колонку «Лицевой счет»;

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

организовать экспорт данных в dbf-файл сведений о начисленной зарплате и расчетных счетах сотрудников из документа «Выплата зарплаты»; имена файлов должны быть разными для разных файлов; формат файла: фамилия, имя, отчество сотрудника, табельный номер, номер лицевого счета, сумма;

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

34

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

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

настроить карточку договора с учетом указанных требова-

ний;

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

5. Реализовать автоматическое формирование актов на ежемесячно оказываемые услуги по договорам. Для этого в справочник договоров предварительно добавить следующие поля: флаг, указывающий, формировать ли по данному договору акт; поле для ввода ежемесячной суммы договора; поле для ввода названия услуги. Задачу можно разбить на две подзадачи:

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

разработать печатную форму списка постоянно действующих договоров следующего формата (при этом если у одного контрагента есть два подобных договора, то название контрагента печатается только один раз):

35

Контрагент

Договор

Дата

Дата

Сумма

 

 

возникновения

погашения

 

 

 

 

 

 

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

7.Реализовать процедуру экспорта расходных накладных во внешний текстовый файл следующего формата:

# – так в первой позиции отмечаются строки, в которых хранится информация из шапки документа;

@ – так в первой позиции отмечаются строки, в которых хранится информация из табличной части документа;

из шапки документа через запятую выгрузить дату документа, номер, данные о контрагенте (ИНН, название, адрес);

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

Возможны следующие варианты реализации (в порядке усложнения):

выгружать все накладные за указанный пользователем пе-

риод;

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

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

всоответствующих справочниках.

36

9.Реализовать процедуру экспорта расходных накладных во внешний файл в XML формате (аналогично текстовому файлу задачи 7).

10.Реализовать процедуру импорта расходных накладных из внешнего файла в XML формате (аналогично текстовому файлу задачи 8).

11.Реализовать контроль за датой создания карточки договора и датой изменения значения полей «Дата возникновения обязательств», «Дата погашения обязательств». Эту информацию с последними значениями дат (кроме даты создания, которая может быть только одна) хранить в программе, не отображая явно для пользователя. Информацию по датам предоставлять пользователю в виде отчета по отдельному контрагенту, по списку контрагентов или по отдельному договору.

Пример решения задания

Рассмотрим первую из приведенных задач.

Есть вопрос, на который придется ответить перед тем, как приступать к решению: как правильно рассматривать оплату, приходящую от покупателя? В выписке из банка мы указываем документ, который оплачивает данный платеж. Значит, теоретически мы можем получить информацию в системе обо всех еще не оплаченных или частично оплаченных документах нашего покупателя. Тогда, анализируя по датам такие документы, мы и сможем определить их принадлежность к текущему или просроченному долгу. Однако во многих организациях, имеющих потребность в таком отчете, бухгалтеры готовы сделать некое допущение. Оно состоит в том, что любая приходящая оплата от покупателя погашает самую давнюю его задолженность. В этом случае наша задача упрощается и мы можем не анализировать первичные документы вообще, а исходить только из движения по 62 счету. Следует еще обратить внимание на возможность существования расчетов с контрагентом по разным договорам. Тогда, даже если следовать нашему предположению, правильнее анали-

37

зировать 62 счет не только в разрезе контрагентов, но и в разрезе договоров.

Рассмотрим решение нашей задачи в упрощенном варианте и без учета договоров. Тогда если за указанный пользователем период сумма отгрузки нашему покупателю превышает или равна его долгу на конец этого периода, то весь долг будет текущим, в противном случае разница и составит просроченный долг. Посмотрим, как можно реализовать такой отчет средствами системы «1С:Предприятие» и получить результат в следующем виде:

Контрагент

Текущий

Просроченный

Общая

 

долг

долг

сумма

 

 

 

 

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

Теперь перейдем к модулю отчета.

Перем ДатаН; Перем ДатаК; Перем СчетД; Перем Долг; Перем Отгружено;

Перем ПросроченныйДолг;

38

Перем ТекущийДолг; Перем НазваниеКонтрагента;

//-------------------------------------------------------------------------

Процедура ПриОткрытии()

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

Форма.КнопкаПоУмолчанию("Сформировать"); //задаем кнопку, которая будет срабатывать при нажатии

комбинации Ctrl-Enter

ДатаН = НачалоПериодаБИ();

//дата начала бухгалтерских итогов, установленная в режиме //"Настройка параметров системы"

ДатаК = КонецПериодаБИ(); СчетД = СчетПоКоду("62.1");

//установить номер счета по умолчанию 62.1 КонецПроцедуры

//------------------------------------------------------------------------------

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

//процедура выполняется при нажатии кнопки "Сформиро-

вать"

Таб = СоздатьОбъект("Таблица");

//переменная типа "Таблица" служит для формирования печатной формы //отчета; в качестве исходной таблицы-шаблона для нее автоматически //назначается первая таблица из формы отчета

Таб.ВывестиСекцию("Заголовок");

//перенести секцию таблицы-шаблона в результирующую таблицу Таб

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

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

//открываем выборку по субконто

Пока БИ.ПолучитьСубконто()=1 Цикл

39

Долг=БИ.СКДРС(); Отгружено = БИ.ДО(); Если Долг > Отгружено Тогда

ПросроченныйДолг = Долг – Отгружено; ТекущийДолг = Отгружено; Иначе ПросроченныйДолг = 0; ТекущийДолг = Долг; КонецЕсли;

НазваниеКонтрагента=БИ.ПредставлениеСубконто(); Таб.ВывестиСекцию("Итоги"); КонецЦикла; Таб.ТолькоПросмотр(1);

// установить режим только для просмотра таблицы Таб.Показать(); // вывести сформированную таблицу на экран КонецПроцедуры

//------------------------------------------------------------------------------

Ниже изображен фрагмент шаблона печатной формы отчета.

Рис. 13. Шаблон печатной формы отчета

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

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]