С. Н. Постовалов Программирование в системе 1С: Предприятие 7 (компонента "Бухгалтерский учет") курс лекций

Вид материалаКурс лекций

Содержание


Итог общий
Итог по товару Стул
Итог по товару Шкаф
Подобный материал:
1   2   3   4

Глубина вложенности групп настраивается в конфигураторе и не может превышать 10 уровней.


4.1.3. Обработка элементов справочника

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


Спр=СоздатьОбъект(«Справочник.НазваниеСправочника»);


Спр.ИспользоватьДату(<Дата>); // Используется, если есть периодические //реквизиты


Спр.ИспользоватьВладельца(<Владелец>); // Используется, если нужно //выбрать только элементы, подчиненные Владельцу


Спр.ИспользоватьРодителя(<Группа>); // Используется, если нужно выбрать //только элементы, принадлежащие Группе


Спр.ВыбратьЭлементы(); // Делаем выборку элементов


Пока Спр.ПолучитьЭлемент()=1 Цикл

// Обработка текущего элемента выборки, например

Сообщить(Спр.Код+« »+Спр.Наименование);

КонецЦикла;


4.1.4. Добавление нового элемента справочника


Спр.Новый();

Спр.Наименование = «ЭтоНовыйЭлемент»;


// Заполняем остальные реквизиты


Спр.Записать(); // Происходит запись нового элемент в базу данных


4.1.5. Поиск элемента справочника


Есть несколько способов поиска элемента справочника:

  • НайтиЭлемент(<Элемент>),
  • НайтиПоКоду(<Код>),
  • НайтиПоНаименованию(<Наименование>),
  • НайтиПоРеквизиту (<Реквизит>, <Значение>).


В последнем случае необходимо, чтобы элементы справочника были отсортированы по этому реквизиту – в свойстве реквизита в закладке «Дополнительно» нужно поставить флажок «Сортировка».


Пример. Следующая функция выполняет поиск элемента справочника по наименованию. Если элемент с таким наименованием не найден, то создается новый элемент. Параметр «Справ» – строка с идентификатором справочника, «Наим» – наименование по которому производится поиск элемента. Функция возвращает ссылку на найденный или созданный элемент.


Функция ПоискЭлемента(Справ,Наим)

Спр=СоздатьОбъект(«Справочник»);

Спр.Вид(Справ);

Если Спр.НайтиПоНаименованию(Наим)=0 Тогда

Спр.Новый();

Спр.Наименование=Наим;

Спр.Записать();

КонецЕсли;

Возврат Спр.ТекущийЭлемент();

КонецФункции


4.1.6. Удаление элементов справочника


Для удаления текущего элемента справочника используется функция Удалить(<Режим>), где <режим> может иметь значение 0 – пометка на удаление, 1 – непосредственное удаление (используется по умолчанию). Вообще непосредственное удаление не рекомендуется, из-за возможного нарушения ссылочной целостности базы данных.

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

4.2. Документы

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





4.2.1. Реквизиты документа

Реквизиты шапки документа задаются в списке «Реквизиты шапки». Реквизиты табличной части задаются в списке «Реквизиты табличной части».


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

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


Формирование проводок происходит в «Модуле документа» в предопределенной процедуре «Обработка проведения».


Операция.НоваяПроводка();

Операция.СодержаниеПроводки = "Поступили товары";

Операция.НомерЖурнала = "ТВ";

Операция.Дебет.Счет = СчетПоКоду(«41.1»);

Операция.Дебет.Номенклатура = Товар;


Операция.Кредит.Счет = СчетПоКоду(«60.1»);

Операция.Кредит.Контрагенты = Контрагент;

Операция.Кредит.Договоры = Договор;

Операция.Количество = Количество;

Операция.Сумма = УчетнаяСтоимость;

Операция.Записать();


4.2.3. Обработка документов

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


Док=СоздатьОбъект(«Документ.НазваниеДокумента»);


Док.ВыбратьДокументы(); // Делаем выборку документов


Пока Док.ПолучитьДокумент()=1 Цикл


// Обработка шапки документа, например

Сообщить(«Вид документа »+Строка(Док.Вид()));

Сообщить(«Дата документа »+Строка(Док.ДатаДок));

Сообщить(«Номер документа »+Строка(Док.НомерДок));

Док.ВыбратьСтроки();// Делаем выборку табличной //части документа


Пока Док.ПолучитьСтроку()=1 Цикл

// Обработка строк табличной части документа

Сообщить(«Товар »+Док.Товар.Наименование);


КонецЦикла


Сообщить(Строка(Спр.Код)+Спр.Наименование);


КонецЦикла;


4.2.4. Ввод нового документа

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


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

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


4.4. План занятия

В соответствии с заданием №1 из приложения 3 создать справочники и документы в новой информационной базе.

5. Работа с запросами и создание отчетов


5.1. Таблица

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





5.1.1. Таблица для ввода

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


5.1.2. Таблица для вывода

Таблица для вывода фактически является шаблоном для вывода данных. В свойствах каждая ячейки таблицы можно задать тип ячейки: «Текст», «Выражение», «Шаблон» и «Фиксированный шаблон». «Текст» печатается так, как он задан в конфигураторе. «Выражение» вычисляется и в ячейку записывается результат. «Шаблон» – это текст, в котором может присутствовать выражение, которое задается в квадратных скобках. Пример шаблона: «Сумма равна [ПечСумма]».

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


Пример.


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


Таб.ИсходнаяТаблица(«ТОРГ-12»); // Задаем конкретную таблицу


Таб.ВывестиСекцию(«Шапка»); // Выводим горизонтальную секцию


Док.ВыбратьСтроки();


Пока Док.ПолучитьСтроку()=1 Цикл


Таб.ВывестиСекцию(«Строка|БезНГСМиНП»); //Выводим ячейки на //пересечении секций «Строка» и «БезНГСМиНП»

Если ПечататьНП=1 Тогда

Таб.ПрисоединитьСекцию(«Строка|НГСМиНП»); //Присоединяем //к текущей секции ячейки на пересечении секций «Строка» и //«НГСМиНП»

КонецЕсли;

КонецЦикла;


Таб.ВывестиСекцию(«Подвал»);


Таб.Показать(); // Выводим таблицу на экран


5.2. Запросы

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


5.2.1. Создание запроса

Запрос создается функцией «СоздатьОбъект(«Запрос»)». Для выполнения запроса используется функция «Выполнить(<ТекстЗапроса>)», которая возвращает 1, если запрос выполнился. <ТекстЗапроса> – это строковое выражение на “языке запросов”.


Пример:

НашЗапрос = СоздатьОбъект("Запрос");

ТекстЗапроса =

"//{{ЗАПРОС(Сформировать)

|СКЛАД = Документ.РасходнаяНакладная.Склад;

|ТОВАР = Документ.РасходнаяНакладная.Товар;

|КОЛИЧЕСТВО = Документ.РасходнаяНакладная.Количество;

|Группировка ТОВАР Упорядочить По ТОВАР.Код;

|Группировка СКЛАД Упорядочить По СКЛАД.Код;

|Функция КОЛ = Сумма(КОЛИЧЕСТВО);

|"//}}ЗАПРОС

;

// Если ошибка в запросе, то выход из процедуры

Если НашЗапрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

Структура временного набора данных, созданная запросом "НашЗапрос" после его выполнения, представлена на следующем рисунке:




Товар

Склад

Кол.

Итог общий

X

X

62

Итог по товару Стол

Стол

X

35

Строка по товару Стол на складе Первый

Стол

Первый

10

Строка по товару Стол на складе Второй

Стол

Второй

20

Строка по товару Стол на складе Третий

Стол

Третий

5

Итог по товару Стул

Стул

X

9

Строка по товару Стул на складе Второй

Стул

Второй

7

Строка по товару Стул на складе Третий

Стул

Третий

2

Итог по товару Шкаф

Шкаф

X

18

Строка по товару Шкаф на складе Первый

Шкаф

Первый

8

Строка по товару Шкаф на складе Третий

Шкаф

Третий

10

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

Далее, допустим, в цикле мы проходим только по самой внешней группировке запроса: "Товар". В теле этого цикла объект "НашЗапрос" позиционируется во временном наборе данных на записи, содержащие итоги по каждому конкретному товару, поэтому в теле этого цикла мы можем использовать итоги по товарам.

После завершения цикла по самой внешней группировке, объект "НашЗапрос" снова позиционируется на первой записи временного набора данных, где содержится общий итог по запросу. Поэтому, общие итоги по запросу можно использовать в двух местах: до и после цикла по самой внешней группировке запроса.


//Итог общий

Пока НашЗапрос.Группировка("Товар") = 1 Цикл

//Итог по товару

КонецЦикла;

//Итог общий

5.2.2. Обработка результатов запроса

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


Запрос=СоздатьОбъект(«Запрос»);


ТекстЗапроса = «…»; // Создаем текст запроса на «языке запросов»


Если Запрос.Выполнить(ТекстЗапроса)<>1 Тогда

Возврат;

КонецЕсли;


Пока Запрос.Группировка(1)=1 Цикл


// Вывод результатов по первой группировке


Пока Запрос.Группировка(2)=1 Цикл


// Вывод результатов по второй группировке



КонецЦикла;


КонецЦикла;


// Вывод результатов по всем группировкам («Итого»)


5.2.3. Использование конструктора запросов

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

5.3. План занятия

  1. Создать печатную форму документа «ДоговорЗайма»
  2. Создать печатную форму журнала договоров займа с помощью конструктора отчета.
  3. Создать печатную форму списка заимодавцев с помощью конструктора отчета.
  4. Создать отчеты из задания №1 из приложения 3 без использования запросов.
  5. Создать отчеты из задания №1 с использованием и без использования запросов.


6. Работа со служебными типами данных и объектами компоненты "Бухгалтерский учет"


6.1. Работа с бухгалтерскими счетами

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

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

Структура данных объектов типа «Счет» задается в конфигураторе в разделе «Планы счетов» и является одинаковой для всех планов счетов.





У счета определены следующие атрибуты:
  • «Код» – в общем случае представляет собой символьную строку вида <Код счета>.<Код субсчета>.<Код субсчета> и т.д.
  • «Наименование» – наименование счета.
  • «Валютный» – признак ведения валютного учета.
  • «Количественный» – признак ведения количественного учета.
  • «Забалансовый» – признак того, что счет является забалансовым.
  • «Активный» – принимает три значения: 1 – активный, 2 – пассивный, 3 – активно-пассивный.

Наиболее важные функции: «КоличествоСубконто()» – возвращает количество субконто у текущего счета, «ВидСубконто()» – устанавливает/возвращает вид субконто по порядковому номеру.


6.2. Работа с операциями и проводками

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


Операция имеет следующие атрибуты:

«ДатаОперации», «Содержание», «СуммаОперации», «Документ» – документ, которому принадлжит операция, «Сумма» – сумма текущей проводки операции, «Валюта» – валюта текущей проводки, «ВалСумма» – валютная сумма текущей проводки, «Количество» – количество текущей проводки, «Дебет» – обращение к дебету проводки, «Кредит» – обращение к кредиту проводки. Объекты «Дебет» и «Кредит» имеют следующие атрибуты: «Счет», «Субконто»


Пример


Опер=СоздатьОбъект(«Операция»);


Опер.ВыбратьОперации(Дата1,Дата2);


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


Опер.ВыбратьПроводки();


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

Если Опер.Дебет.Счет=СчетПоКоду(«60.1») Тогда

Сообщить(«Субконто »+Опер.Дебет.Организация);

КонецЕсли;

КонецЦикла;


КонецЦикла;


Чтобы проводки не попадали в бухгалтерские итоги, используется функция «ОтключитьПроводки()».


6.3. Работа с корректными проводками

Для работы с корректными проводками в системе используется специальный тип данных «КорректныеПроводки». Объект создается функцией «СоздатьОбъект». Атрибуты: «Комментарий», «СчетДт», «СчетКт».

Для добавления новой корректной проводки используется функция «Новая()»;


Пример


КП=СоздатьОбъект(«КорректныеПроводки»);


КП.Новая();


КП.Комментарий= «НДС с комиссионного вознаграждения»;


КП.СчетДт=СчетПоКоду(«46.28»);

КП.СчетКт=СчетПоКоду(«68.2»);


КП.Записать();


6.4. План занятия


Выполнить задание №4 из приложения 3.


7. Работа с бухгалтерскими итогами


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

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

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

Обращение к бухгалтерским итогам выполняется при помощи агрегатного объекта типа «БухгалтерскиеИтоги». Объект может работать в трех режимах:
  • работа с основными итогами,
  • работа с временными итогами,
  • работа в режиме запроса.


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

Функции «ИспользоватьПланСчетов()» и «ИспользоватьРазделитель Учета()» позволяют назначить план счетов и разделитель учета по которым будут выдаваться итоги.


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

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

Функции работы с итогами:
  • ПериодД(<ДатаНач>,<ДатаКон>) – установка периода итогов
  • СНД(,<ТипСуммы>,<Валюта>,,…) – сальдо начальное дебетовое;
  • СНК() – сальдо начальное кредитовое;
  • СКД() – сальдо конечное дебетовое;
  • СКК() – сальдо конечное кредитовое;
  • ДО() – дебетовый оборот по счету за период;
  • КО() – кредитовый оборот по счету за период;


Параметры: – счет, <ТипСуммы> = 1 – сумма, 2 – валютная сумма, 3 – количество, <Валюта> – значение типа “Справочник.Валюты”, <Субконто1> – значение первого субконто счета, <Субконто2> – значение второго субконто счета и т.д.

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


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


7.2. Работа с временными итогами

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


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


В параметре <ФильтрПоСчетам> можно задать в виде строки список счетов, разделенных запятой или точкой с запятой, по которым будет делаться расчет. Если параметр <ТолькоСинтетика> = 1, то расчет будет делаться только по счетам, иначе по счетам и субконто.


7.3. Работа в режиме запроса

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


7.3.1. Выполнение запроса

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

  • ВключатьСубсчета() – устанавливать режим отбора по субсчетам.
  • ИспользоватьСубконто(<ВидСубконто>,<Значение>,<ТипФильтра>,<ПоГруппам>) – устанавливать режим отбора итогов в разрезе субконто. Параметр <ВидСубконто> задается выражением типа “ВидСубконто” или строкой, содержащей имя идентификатора вида субконто. Параметр <Значение> задает конкретное значение субконто. Если <ТипФильтра>=1, тогда итоги будут разворачиваться по этому виду субконто. Если <ТипФильтра>=2, тогда итоги будут отбираться по значению субконто. Если <ТипФильтра>=3, тогда это субконто вообще не будет учитываться.
  • Функцию ИспользоватьСубконто() можно выполнять несколько раз для задания в запросе нескольких видов субконто. Обращение к субконто производится по порядковому номеру (порядок определяется последовательностью команд «ИспользоватьСубконто()»).
  • ИспользоватьКорСубконто(<ВидСубконто>,<Значение>,<ТипФильтра>,<ПоГруппам>) – устанавливать режим отбора итогов по корреспондирующим счетам в разрезе субконто.


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

которая возвращает 1, если запрос выполнился успешно.

Параметр <ТипИтогов> принимает следующие значения: 1 – остатки и обороты по счетам, 2 – обороты между счетами, 3 – и то и другое.


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

1 («Период») – промежуточные итоги не рассчитываются;

2 («Операция») – промежуточные итоги рассчитываются по операциям;

3 («Проводка») – по проводкам;

4 («День») – по дням;

5 («Неделя») – по неделям;

6 («Декада») – по декадам;

7 («Месяц») – по месяцам;

8 («Квартал») – по кварталам;

9 («Год») – по годам;


7.3.2. Обращение к результатам запроса

Для перебора группировок используются следующие функции:

  • ВыбратьСчета(), ПолучитьСчет();
  • ВыбратьКорСчета(), ПолучитьКорСчет();
  • ВыбратьВалюты(), ПолучитьВалюту();
  • ВыбратьПериоды(), ПолучитьПериод();
  • ВыбратьСубконто(), ПолучитьСубконто();
  • ВыбратьКорСубконто(), ПолучитьКорСубконто();


Функции получения остатков и оборотов такие же, как и при работе с основными итогами.


Пример.


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

БИ.ИспользоватьСубконто(«Номенклатура»);


БИ.ВыполнитьЗапрос(Дата1,Дата2,«41.1»);


БИ.ВыбратьСчета();

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


// выводим итоги по счету

БИ.ВыбратьСубконто(1);

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


// выводим итоги по субконто


Сообщить(«Остаток на начало по счету » + БИ.Счет.Код + « товара » + БИ.Субконто(1)+Строка(БИ.СНД(3)) + «ед.»);


КонецЦикла;


КонецЦикла;


7.4. План занятия

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

8. Работа с таблицами для ввода данных


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


8.1. Свойства таблицы в режиме ввода данных

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

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

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

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

8.2. Выгрузка и загрузка значений таблицы с помощью объекта «СписокЗначений»


Для выгрузки и загрузки большого числа переменных удобно использовать объект типа «СписокЗначений». Объект этого типа создается функцией «СоздатьОбъект». У каждого элемента списка значений есть «значение» и «представление».

Добавление нового элемента в список осуществляется функцией «ДобавитьЗначение(<Значение>,<Представление>)».

Для загрузки элементов из списка значений используется функция «Загрузить(<Список>)», причем <Значение> элемента списка будет записано в ячейку с именем <Представление>. Кроме имени можно использовать и строковое выражение вида “R1C1”, обозначающее ряд и колонку ячейки.

После ввода данных пользователем делается выгрузка данных из таблицы функцией «Вырузить(<Список>)».


Пример. Следующая программа осуществляет запись чисел от 1 до 30 в первую колонку таблицы


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


Для Н=1 по 30 Цикл

Сп.ДобавитьЗначение(Строка(Н),"R"+Строка(Н)+"C1");


КонецЦикла;

Таблица.Загрузить(Сп);


8.3. Работа с «Пустой» таблицей

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


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


//*******************************************

Процедура Увеличить()

Для Ном=1 По 10 Цикл

Обл=Таблица.Область(Ном,1,Ном,1);

Обл.Текст=Строка(Число(Обл.Текст)*2);


КонецЦикла;

Таблица.Показать();


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


8.4. План занятия

1. Реализовать запись процентов в договор займа в отчете по задержке поступления денежных средств из задания №1 из приложения 3.

2. Реализовать формирование корректирующих проводок по инвентаризационной ведомости в задании №6 из приложения 3.

9. Операции экспорта-импорта данных


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


9.1. Использование текстовых файлов для переноса данных


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

У объекта типа «ФС» имеются стандартные функции для работы с файлами: «ВыбратьФайл()» – открывает диалог выбора файла, «ВыбратьКаталог()»– открывает диалог выбора каталога, «СуществуетФайл()» – проверяет, существует ли файл с указанным именем, «КопироватьФайл()», «УдалитьФайл()», «ПереименоватьФайл()» и др.


Для работы с текстами в системе используется специальный тип данных «Текст». Средства языка позволяют выводить строк в текстовые файлы и считывать из имеющихся файлов текст с последующим разбором его по строкам.
  • Открыть(<ИмяФайла>) – открывает файл.
  • КодоваяСтраница(<Режим>) – получить/установить режим кодировки. <Режим> = 0 – Windows-кодировка, 1 – DOS-кодировка
  • Показать(<Заголовок>,<ИмяФайла>) – открыть окно редактирования текста.
  • Записать(<ИмяФайла>) – записывает текст в файл.


9.1.1. Чтение текста

  • КоличествоСтрок() – количество строк в тексте.
  • ПолучитьСтроку(<НомерСтроки>) – получить строку текста по номеру


Пример. Из файла «exp_imp.txt» загружается справочник номенклатуры


Спр=СоздатьОбъект(«Справочник.Номенклатура»);

Текст = СоздатьОбъект(«Текст»);

Список = СоздатьОбъект(«СписокЗначений»);

Текст.ОткрытьФайл(«exp_imp.txt»);


Для Ном=1 По Текст.КоличествоСтрок() Цикл

Стр = Текст.ПолучитьСтроку(Ном);

Список.ИзСтрокиСРазделителями(Стр); // преобразуем строку

//в список значений


Если Спр.НайтиПоКоду(Список.ПолучитьЗначение(1))=0 Тогда

Спр.Новый();

Спр.Код= Список.ПолучитьЗначение(1);

Спр.Наименование= Список.ПолучитьЗначение(2);

Спр.Записать();

КонецЕсли;

КонецЦикла;


9.1.2. Запись текста
  • ВставитьСтроку(<НомерСтроки>,<Строка>) – вставить строку с указанным номером.
  • ЗаменитьСтроку(<НомерСтроки>,<Строка>) – заменить строку с указанным номером.
  • УдалитьСтроку(<НомерСтроки>) – удалить строку с указанным номером.
  • ДобавитьСтроку(<Строка>) – добавить строку в конец текста.
  • Очистить() –удалить все строки текста.


Пример. В файл «exp_imp.txt» выгружается справочник номенклатуры


Текст = СоздатьОбъект(«Текст»);

Список = СоздатьОбъект(«СписокЗначений»);

Спр=СоздатьОбъект(«Справочник.Номенклатура»);

Спр.ВыбратьЭлементы();


Пока Спр.ПолучитьЭлемент()=1 Цикл


Список.ДобавитьЗначение(Спр.Код);

Список.ДобавитьЗначение(Спр.Наименование);


// и другие поля…


// выводим список в текст

Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями());


Список.УдалитьВсе();// очищаем список

КонецЦикла;


Текст.Записать(«exp_imp.txt»);


9.2. Работа с файлами в формате «DBF»


Для работы с базами данных в формате «DBF» используется объект типа «XBase». При этом надо учитывать следующие ограничения:
  1. Не поддерживаются поля типа memo.
  2. База данных открывается монопольно
  3. Поддерживаются только индексные файлы в формате “CDX”


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


Пример


БД=СоздатьОбъект(“XBase”);


БД.ОткрытьФайл(«data.dbf»);


Если БД.Открыта()=1 Тогда

БД.Первая();//встаем на первую запись


Пока 1=1 Цикл

// Обработка записи базы данных

Сообщить(Строка(БД.CODE) + « » + БД.Name);


Если БД.Следующая()=0 Тогда

// не удалось перейти к следующей записи

Прервать;

КонецЕсли;

КонецЦикла;


КонецЕсли;


9.3. Обмен данными с помощью OLE Automation


Для запуска системы 1С:Предприятие в качестве OLE Automation сервера из внешнего приложения (например, из другой программы 1С), выполняется следующая последовательность действий:

- Создается объект с OLE идентификатором:
  • V1СEnterprise.Application — версия независимый ключ;
  • V77.Application — версия зависимый ключ;
  • V77S.Application — версия зависимый ключ, SQL версия;
  • V77L.Application — версия зависимый ключ, локальная версия;
  • V77M.Application — версия зависимый ключ, сетевая версия.

- Выполняется инициализация системы 1С:Предприятие методом Initialize.

- Вызываются атрибуты и методы системы 1С:Предприятие как OLE Automation сервера

Пример.

Процедура Загрузить()

Если ФС.Существуетфайл(Путь + "\NUL") = 0 Тогда

Предупреждение("Путь информационной базы не найден!");

Иначе

V7 = СоздатьОбъект("V77.Application");

Открыта = V7.Initialize(V7.RMTrade, "/d" + Путь +

" /M /N" + Пользователь, "");

Если Открыта = 0 Тогда

Предупреждение("Ошибка открытия информационной базы");

Возврат;

КонецЕсли;

Импорт = V7.CreateObject("Справочник.Контрагенты");

Импорт.ВыбратьЭлементы();

Пока Импорт.ПолучитьЭлемент() = 1 Цикл

Если Импорт.ЭтоГруппа() = 0 Тогда

Сообщить(Импорт.Наименование);

КонецЕсли;

КонецЦикла;

КонецЕсли;

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


приложение 1. Теоретические вопросы по компоненте «Бухгалтерский учет» комплекса «1С:Предприятие» версий 7.5 и 7.7