Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1c.docx
Скачиваний:
11
Добавлен:
25.09.2019
Размер:
232.61 Кб
Скачать

Вопрос 18 Регистры остатков

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

Оборотные регистры

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

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

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

19 Создание запросов. Структура запроса. Источники данных для запросов. Методы запросов.

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

Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "<текст запроса на особом языке запросов>" Запрос.Выполнить(ТекстЗапроса);

//далее идет обработка результатов запроса

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

|ФИО = Справочник.Сотрудники.Наименование; |Долж = Справочник.Сотрудники.Должность; |ДатаПриема = Справочник.Сотрудники.ДатаПриема; |ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения; |";

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

Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Сотр = Справочник.Сотрудники.ТекущийЭлемент; |КодДолж = Справочник.Сотрудники.Должность.Код; |Группировка Сотр упорядочить по Сотр.Наименование; |Условие (КодДолж = 7); |"; Запрос.Выполнить(ТекстЗапроса);

Пока Запрос.Группировка("Долж")=1 Цикл ............Сообщить(Запрос.Сотр); КонецЦикла;

23 Список значений. Таблица значений.

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

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

ТабЗнач.НоваяКолонка("Номер"); ТабЗнач.НоваяКолонка("Сотрудник"); ТабЗнач.НоваяКолонка("Должность"); ТабЗнач.НоваяКолонка("Оклад");

//можно указать тип данных каждой колонки //если тип данных колонки не указан, то можно хранить данные любого типа Синтаксис: НоваяКолонка(<Идентификатор>, <Тип>, <Длина>, <Точность>, <Заголовок>, <Ширина>, <Формат>, <Положение>) ТабЗнач.НоваяКолонка("Номер","Число",10,0); ТабЗнач.НоваяКолонка("Сотрудник","Справочник.Сотрудники"); ТабЗнач.НоваяКолонка("Должность","Справочник.Должности"); ТабЗнач.НоваяКолонка("Оклад","Число",10,2);

Добавление строк в таблицу значений

ТабЗнач.НоваяСтрока(); ТабЗнач.Номер = 1; ТабЗнач.Сотрудник = "Иванов Иван Иванович"; //следите за типом колонки! ТабЗнач.Должность = "Программист"; ТабЗнач.Оклад = 20000;

ТабЗнач.НоваяСтрока(); ТабЗнач.Номер = 2; ТабЗнач.Сотрудник = "Петров Петр Петрович"; ТабЗнач.Должность = "Бухгалтер"; ТабЗнач.Оклад = 10000;

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

Сортировка таблицы значений

//сортировать по должности по возрастанию ТабЗнач.Сортировать("Должность+");

//сортировать по должности по возрастанию, а внутри должности по убыванию оклада ТабЗнач.Сортировать("Должность+,Оклад-");

Поиск в таблице значений

Синтаксис: НайтиЗначение(<Знач>,<Строка>,<Колонка>) Возвращает число: 0 - значение не найдено; 1 - значение найдено Если указан параметр <Строка>, то поиск производится только по заданной строке Если указан параметр <Колонка>, то поиск производится только по заданной колонке

номстр = 0; Если ТабЗнач.НайтиЗначение (10000, номстр, "Оклад") = 1 Тогда ...ТабЗнач.ПолучитьСтрокуПоНомеру(номстр); ...Сообщить(ТабЗнач.Сотрудник); КонецЕсли;

Итоги и группировка таблицы значений

//получить итог по колонке можно методом Итог ВсеОклады = ТабЗнач.Итог("Оклад")

//часто требуется группировать строки и подсчитывать итоги по группам, //в этом случае применяется метод Свернуть

Синтаксис: Свернуть(<ГруппКолонки>,<СуммКолонки>) //проссумировать оклады по каждой должности ТабЗнач.Свернуть("Должность","Оклад"); //Можно группировать и суммировать сразу по нескольким колонкам ТабЗнач.Свернуть("Категория, Должность","Оклад,Налог");

Удаление строк и колонок из таблицы значений

ТабЗнач.Очистить(); //очистить таблицу значений и удалить колонки

ТабЗнач.УдалитьСтроки(); //удаляет все строки (колонки сохраняются)

ТабЗнач.УдалитьСтроку(); //удаляет текущую строку ТабЗнач.УдалитьСтроку(3); //удаляет 3-ю строку ТабЗнач.УдалитьКолонку("Оклад"); //удаляет колонку Оклад ТабЗнач.УдалитьКолонку(2); //удаляет 2-ю колонку Таблица значений как элемент диалога Таблица значений может использоваться в экранных формах как элемент диалога с пользователем.

//установить курсор на указанную колонку или можно узнать, где находится курсор ТабЗнач.ТекущаяКолонка(НоваяКолонка,ТекКолонка); //установить курсор на указанную строку или можно узнать, где находится курсор. ТекСтрока = ТабЗнач.ТекущаяСтрока(НовСтрока); ТабЗнач.ВидимостьКолонки("Оклад",0); //скрыть колонку Оклад ТабЗнач.ВидимостьКолонки("Должность, Сотрудник",1); //показать колонки Должность и Сотрудник ТабЗнач.ВидимостьКолонки("Оклад",1,1); //показать колонку Оклад в 1-й позиции //можно зафиксировать верхние строки и левые колонки для удобства прокрутки таблицы значений в диалоге ТабЗнач.Фиксировать(КолСтрок,КолКолонок);

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

Синтаксис: УстановитьЗначение(<Строка>,<Колонка>,<Знач>) Синтаксис: ПолучитьЗначение(<Строка>,<Колонка>)

ТабЗнач.НоваяСтрока(); ТабЗнач.УстановитьЗначение(1,"Номер",100); ТабЗнач.УстановитьЗначение(1,"Сотрудник","Иванов Иван Иванович"); ТабЗнач.УстановитьЗначение(1,3,10000); //обращение к 1-й строке и 3-й колонке ("Оклад")

Номер = ТабЗнач.ПолучитьЗначение(1,"Номер"); ФИО = ТабЗнач.ПолучитьЗначение(1,"Сотрудник"); Оклад = ТабЗнач.ПолучитьЗначение(1,3); //обращение к 1-й строке и 3-й колонке "Оклад"

Выгрузка таблицы значений

Синтаксис: Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)

//выгрузить 10 сотрудников с наибольшими окладами в новую таблицу значений ТабЗнач.Сортировать("Оклад-"); ТабЗнач.Выгрузить(НоваяТабЗнач,1,10,"Сотрудник,Оклад");

Создание объекта СписокЗначений

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

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

Добавление значений в список

Синтаксис: ДобавитьЗначение(<значение>,[<представление>]);

//у каждого значения в СпискеЗначений есть экранное представление //если оно не указано, то используется стандартное строковое представление объекта

СписокЗнач.ДобавитьЗначение("Иванов Иван Иванович"); СписокЗнач.ДобавитьЗначение(Сотрудник); СписокЗнач.ДобавитьЗначение(1,"Значение №1");

СписокЗнач.УстановитьЗначение(3,3,"Значение №3"); //установить новое значение и представление 3-й позиции

Перебор списка значений

стр = ""; Для Номер = 1 По СписокЗнач.РазмерСписка() Цикл ...значение = СписокЗнач.ПолучитьЗначение(Номер, стр); //получить значение и представление ...Сообщить(значение + ", " + стр); КонецЦикла;

Сортировка списка значений

//сортировать по значению СписокЗнач.Сортировать(); //по возрастанию СписокЗнач.Сортировать(1); //по убыванию //сортировать по представлению СписокЗнач.СортироватьПоПредставлению(); //по возрастанию СписокЗнач.СортироватьПоПредставлению(1); //по убыванию

Поиск значения в списке

//поиск по значению Синтаксис: НайтиЗначение(<Знач>) Возвращает номер позиции списка, в которой найдено значение или 0, если не найдено

номстр = СписокЗнач.НайтиЗначение (Сотрудник);

//проверка вхождения значения в список //работает очень быстро, если между проверками список не изменяется. //если передается элемент справочника, а в списке хранятся группы справочника //тогда проверяется вхождение элемента справочника в группу Если СписокЗнач.Принадлежит(Сотрудник)=1 Тогда ....<действия> КонецЕсли;

Удаление значений из списка

СписокЗнач.УдалитьВсе(); //очистить список значений

//удаляет значения из указанной позиции СписокЗнач.УдалитьЗначение(откуда, [сколько]);

Список значений как элемент диалога Список значений может использоваться в экранных формах как элемент диалога с пользователем.

//установить курсор на указанную строку или можно узнать, где находится курсор. ТекСтрока = СписокЗнач.ТекущаяСтрока(НовСтрока);

//список значений в диалоге может иметь пометки (флажки)

пометка = СписокЗнач.Пометка(Позиция); //прочитать пометку у значения списка СписокЗнач.Пометка(Позиция,1); //установить пометку у значения списка СписокЗнач.Пометка(Позиция,0); //снять пометку у значения списка

Выгрузка и загрузка списка значений

//выгрузка в другой список значений или таблицу значений Синтаксис: Выгрузить(<Знач>,<НачПоз>,<Колич>) СписокЗнач.Выгрузить(НовыйСписок,1,10); //выгрузить первые 10 значений //выгрузка списка значений в строку с разделителями стр = СписокЗнач.ВСтрокуСРазделителями(); //возвращает строку: 10,12,"Иванов","Петров"

//загрузка списка значений из строки с разделителями //обратите внимание на двойные кавычки для строковых значений СписокЗнач.ИзСтрокиСРазделителями("10,12,""Иванов"",""Петров""");