Вы находитесь на странице: 1из 207

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Государственное образовательное учреждение высшего


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

Учебно-научный и инновационный комплекс


«Социально-гуманитарная сфера и высокие технологии:
теория и практика взаимодействия»

Хворенков С.Г.

Сборник тематических задач по программированию


в среде 1С: Предприятие8.

Мероприятие 1.2. Совершенствование образовательных технологий, укрепление


материально- технической базы учебного процесса.

Учебные дисциплины: Разработка информационных систем (бухгалтерских,


налоговых, корпоративных)

Специальности, направления: Прикладная информатика (в экономике)

Нижний Новгород
2010
Введение......................................................................................................................................................... 3
1.Работа со списками значений..................................................................................................................... 4
1.1.Техника работы со списком значений................................................................................................. 4
1.2. Выбор значения из списка................................................................................................................... 5
1.3. Метаданные и список значений. ....................................................................................................... 12
1.4. Метод НайтиПоЗначению() при работе со списками .................................................................... 13
1.5. Построение списков на основе справочника и их использование .................................................15
2. Работа с многотабличными справочниками, временем, списками значений, запросами,
построителем отчетов.................................................................................................................................. 23
2.1. Задача «Количество детей».............................................................................................................. 23
2.2. Построитель отчетов. ........................................................................................................................ 34
2.3.Работа построителя с подчиненными справочниками. ................................................................... 38
3.Тарифы........................................................................................................................................................ 39
4.Регистры Сведений.................................................................................................................................... 54
4.1. БАЗА.................................................................................................................................................... 54
4.2. Синтаксис основных методов............................................................................................................ 61
4.3. Отчет «По регистратору».................................................................................................................. 63
4.4. Непериодический регистр сведений ............................................................................................... 65
4.5. Независимый периодический регистр сведений........................................................................... 66
5. Запросы на основе документов............................................................................................................... 73
5.1. Сортировка по возрастанию (материалов)...................................................................................... 73
5.2. Сортировка по убыванию материалов............................................................................................. 74
5.3. Ключевое слово ИМЕЮЩИЕ.............................................................................................................. 74
5.4. Применение ключевого слова МЕЖДУ............................................................................................ 75
5.5. Выгрузка результата запроса в ТЗ..................................................................................................... 76
5.6. Ключевое слово «В»........................................................................................................................... 77
5.7. Задача «Проверка выполнения поставок по конкретной заявке покупателя ............................... 79
6. Регистры накопления................................................................................................................................ 91
6.1. База для исследования возможностей регистров........................................................................... 91
6.2. Регистры накопления (вид регистра «остатки»).............................................................................. 93
6.3 Решение ЗАДАЧ с помощью запросов............................................................................................... 97
6.3.1.Регистр накопления сам по себе(не остатки и не обороты). ......................................................... 97
6.3.2. Регистры накопления (остатки).................................................................................................... 103
6.3.3. Регистры накопления (обороты).................................................................................................. 110
6.3.4. Регистры накопления (обороты и остатки) .................................................................................. 113
6.4. Работа с регистрами накоплений на объектном уровне .............................................................. 120
2
6.5. Регистр накопления со ссылками................................................................................................... 128
7.Бухгалтерские запросы............................................................................................................................ 140
7.1. РЕГБУХ.............................................................................................................................................. 149
7.2. РЕГБУХСТАТКИ.................................................................................................................................. 158
7.3. РЕГБУХОБОРОТЫ.............................................................................................................................. 167
7.4. РЕГБУХСУБКОНТО............................................................................................................................. 172
7.5. РЕГБУХОБОРОТЫОСТАТКИ............................................................................................................... 174
7.6. регбухОБОРОТЫДТКТ....................................................................................................................... 178
7.7. регбухдвижениясСУбконто............................................................................................................. 181
8. Разузлование......................................................................................................................................... 184
9. Работа с закладками............................................................................................................................... 189
10. Внешняя обработка «Загрузка данных из табличного документа» (из Excel в 1С: Предприятие 8.1).
...................................................................................................................................................................... 198
Литература.................................................................................................................................................. 207

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

1. Работа со списками значений.

1.1.Техника работы со списком значений.

Часто требуется выбрать какое-то значение из заранее известного


множества значений. Для этого нужно сначала увидеть это множество. Затем
мышью выбрать искомое значение для последующего использования. Более
жесткий вариант - выбрать некоторое подмножество значений для
последующего использования. Эти задачи решаются с использованием объекта
СписокЗначений. Основные приемы работы со списками рассмотрим на
примере следующей задачи.
Создать обычные справочники Номенклатура и Материалы.
Создать, подчиненный Номенклатуре, справочник НормыРасхода со
следующими полями материал и норма.
Заполненные справочники приведены ниже.

4
1.2. Выбор значения из списка.

Задача ставится следующим образом.

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

Например: Ввели - стол. По Сформировать заполнили список.


Выбрав мышью болты скопировали в поле мат.

Со списками можно работать в режиме «Пометка», а именно, можно


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

К этому моменту постановка задачи понятна и приступим к нюансам


реализации. В конфигураторе в свойствах списка надо поставить галочку в поле

7
«ОтображатьПометку» и убрать галочку «ТолькоПросмотр», если необходимо
обеспечить режим множественного выбора.
Заметим, что объект типа СписокЗначений как и любой другой объект
конфигурации можно создать программно Спис= Новый СписокЗначений;
или в конфигураторе «Вставить элемент управления» на форму. Или Или.

Поле «Влад» - тип справочник Номенклатура. Поле «мат» - тип строка.


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

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

9
Теперь перейдем к программированию.
Процедура «КнопкаСформироватьНажатие» привязана и к полю «Влад» и
к кнопке «сформировать». Без всякого смысла.
Итак, указали владельца и обеспечили перебор Справочники.
НормыРасхода для владельца.
Процедура КнопкаСформироватьНажатие(Кнопка)
Выборка = Справочники.НормыРасхода.Выбрать( , влад);
Пока Выборка.Следующий() Цикл
Спис.Добавить(выборка.Ссылка.Материал);
КонецЦикла;
КонецПроцедуры
Единственный оператор, обеспечивающий заполнение списка
Спис.Добавить(значение).Откуда берем значение, зависит от задачи. В
нашем случае из НормыРасхода.
Следующая процедура, обеспечивает копирование, выбранного мышью
материала в поле мат.
Процедура списВыбор(Элемент, ЭлементСписка)
мат=ЭлементСписка;
КонецПроцедуры
Следующая процедура работает только в режиме пометка. В принципе
организован цикл по перебору всех элементов списка и вывод в окно
служебных сообщений только тех значений, у которых пометка истина.
Поскольку цикл идет с 0, то кс на единицу меньше чем количество значений в
списке
спис.Количество().
Процедура пометкаНажатие(Элемент)
кс=спис.Количество()-1;
для л=0 по кс цикл
стр=спис.Получить(л);
если стр.Пометка=Истина тогда
сообщить(стр);
конецесли;
конеццикла;
КонецПроцедуры

Рассмотрим еще один весьма полезный метод выбора значения из


списка.
К ранее рассмотренной процедуре КнопкаСформироватьНажатие
после конеццикла добавлено два оператора. Оператор
выбрали=спис.ВыбратьЭлемент();
Повторно открывает список, что полезно, когда список сделан невидимым
или список открывается программно. После этого программа не будет
продолжать работу, пока мышью не будет выбрано значение. Переход к
следующему оператору
10
мат=выбрали.Значение; обеспечит копирование значения в поле мат.
Очевидно, что в этом варианте Процедура списВыбор просто не нужна.

Процедура КнопкаСформироватьНажатие(Кнопка)
// Вставить содержимое обработчика.

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


Выборка = Справочники.НормыРасхода.Выбрать( , влад);

Пока Выборка.Следующий() Цикл


Спис.Добавить(выборка.Ссылка.Материал);

КонецЦикла;
выбрали=спис.ВыбратьЭлемент();
мат=выбрали.Значение;
КонецПроцедуры
По кнопке Сформировать откроется окно и пока не выберем значение
дальше не поедем.

11
Конечный результат разумеется тот же самый.

1.3. Метаданные и список значений.

Свойство Метаданные Глобального контекста позволяет реализовать


доступ к структуре метаданных конфигурации.
Задача. Вывести перечень справочников в список.

Текст процедуры очевиден.

12
Процедура КнопкаСформироватьНажатие(Кнопка)

мет=метаданные.Справочники;
для каждого к из мет цикл
спис.Добавить(к);
конеццикла;
КонецПроцедуры

1.4. Метод НайтиПоЗначению() при работе со списками


Часто возникает проблема, проверить существует ли значение в списке
значений. Если да, то ответить «да», иначе «нет».

13
Реализация.

Из текста процедур – все ясно.

Процедура КнопкаСформироватьНажатие(Кнопка)
если спис.НайтиПоЗначению(товар)= неопределено тогда
ответ="нет";
иначе
ответ="да";
конецесли;
КонецПроцедуры

Процедура ПриОткрытии()
спис.Добавить("нефть");
спис.Добавить("сахар");
14
спис.Добавить("спирт");
спис.Добавить("пшено");
КонецПроцедуры

При рассмотрении задачи «Количество детей» многократно вернемся к


различным нюансам заполнения и использования списка значений. Пока –
достаточно!

1.5. Построение списков на основе справочника и их использование


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

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

15
В разделе свойств «События» в событии «В начало выбора» определим
процедуру, которая будет создавать список только тех букв, которые есть у
заданного класса. Затем, из этого созданного списка выбираем нужный класс.
Процедура имеет имя «БукваНачалоВыбора».

16
Аналогично для «Фио». Режим «выбора групп и элементов» - элементы,
так как ФИО –это элемент.

17
Имя процедуры, прикрепленной к ФИО –«ФиоНачалоВыбора» и
она обеспечивает сначала формирование списка фамилий, для выбранных
класса и буквы, а затем и выбор из списка какой-то фамилии.

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

19
Аналогично формируется другой список для выбора фамилий. Имена
списков (и там и там список) совпадают чисто случайно. Все равно они в
разных процедурах. Можно назвать по - разному.

Ниже приведена иллюстрация работы.

20
21
22
2. Работа с многотабличными справочниками, временем,
списками значений, запросами, построителем отчетов.
2.1. Задача «Количество детей»
Постановка задачи.
Создать справочник Сотрудники(сотр), следующей структуры:
- наименование(ФИО);
-гр – дата рождения;
-первая табличная часть «дети» с реквизитами «имя» ребенка и «год»-
дата рождения;
- вторая табличная часть «мра» (места работ) с реквизитами «орг» -место
работы, «дн» -дата начала работы в организации и «до» - дата окончания
работы в организации.

23
Ниже приведены заполненные записи справочника Сотрудники.

24
25
26
Теперь о сути задачи. Для задаваемого в качестве параметра отчета Фио и
места работы, определить количество детей, возраст которых не превышает 18
лет на конец интервала времени, когда ФИО работал в заданной организации.
Рассмотрим результаты выполнения отчета для Иванова и
организации «кобра»

Рассмотрим множество вариантов реализации этой задачи, каждый


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

27
конецесли;
конеццикла;
для каждого а из спр.дети цикл
если ((год(кр)-год(а.год))<18)и ((год(кр)-
год(а.год))>0) тогда
сообщить(а.имя);
сообщить(а.год);
кд=кд+1;
конецесли;
конеццикла;
конецесли;
конеццикла
КонецПроцедуры

Сделаем необходимые пояснения. В цикле перебираем записи


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

Вариант 2. Основным недостатком Варианта 1 является,, то что


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

28
Процедура КнопкаСформироватьНажатие(Кнопка)
кд=0;
спр=справочники.сотр.Выбрать();
пока спр.Следующий() цикл
если спр.Ссылка=фио тогда
для каждого к из спр.мра цикл
Сп.Добавить(к.орг);
КонецЦикла;

выбрали=сп.ВыбратьЭлемент();
орган=выбрали.Значение;
для каждого к из спр.мра цикл
если к.орг=орган тогда
нр=к.дн;
кр=к.до;
сообщить(к.орг);
сообщить(нр);
сообщить(кр);
конецесли;
конеццикла;
для каждого а из спр.дети цикл
если ((год(кр)-год(а.год))<18)и ((год(кр)-
год(а.год))>0) тогда
сообщить(а.имя);
сообщить(а.год);
кд=кд+1;
29
конецесли;
конеццикла;
конецесли;
конеццикла
КонецПроцедуры

30
Результат, разумеется, аналогичен Варианту 1.

Вариант 3. Абсолютно аналогичен Варианту 2. Отличие единственное –


СП сделан невидимым (убран флаг видимости в свойствах). Заметим, что
применяя метод сп.ВыбратьЭлемент() система высветит список и в этом
варианте.

Вариант 4. Аналогичен варианту 3. Отличие – СП создано программно, а


не помещено на форме диалога.

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

32
если ((год(кр)-год(а.год))<18)и ((год(кр)-
год(а.год))>0) тогда
сообщить(а.имя);
сообщить(а.год);
кд=кд+1;
конецесли;
конеццикла;
конецесли;
конеццикла
КонецПроцедуры
Вариант 5. В вариантах 2,3,4 СП заполнялся применением объектных
методов, а именно перебором табличной части мра справочника.Сотр.
Попробуем реализовать заполнение СП на основе запросов.

Процедура КнопкаСформироватьНажатие(Кнопка)
кд=0;
запрос=новый запрос(
"ВЫБРАТЬ
| сотрмра.Ссылка,
| сотрмра.орг как орг
|ИЗ
| Справочник.сотр.мра КАК сотрмра
|ГДЕ
| сотрмра.Ссылка = &фио");
запрос.УстановитьПараметр("фио",фио);
результат=запрос.Выполнить().Выбрать();
пока результат.Следующий() цикл
сп.Добавить(результат.орг);
конеццикла;
выбрали=сп.ВыбратьЭлемент();
орган=выбрали.Значение;
спр=справочники.сотр.Выбрать();
пока спр.Следующий() цикл
если спр.Ссылка=фио тогда
для каждого к из спр.мра цикл
если к.орг=орган тогда
нр=к.дн;
кр=к.до;
33
сообщить(к.орг);
сообщить(нр);
сообщить(кр);
конецесли;
конеццикла;
для каждого а из спр.дети цикл
если ((год(кр)-год(а.год))<18)и ((год(кр)-
год(а.год))>0) тогда
сообщить(а.имя);
сообщить(а.год);
кд=кд+1;
конецесли;
конеццикла;
конецесли;
конеццикла
КонецПроцедуры
Рассмотрим текст запроса, формирующий СП. Язык запросов будет
подробно рассматриваться отдельно, а пока ограничимся полуинтуитивными
соображениями. Общее замечание, опирающееся на принципы организации
базы в 1С8. Если объект (документ или справочник) имеют табличные части, то
система формирует взаимные ссылки от общей части к табличным и наоборот
от табличных частей к общей части.
Выборка рабочих мест идет ИЗ табличной части
Справочник.сотр.мра, псевдонимом которой объявлена переменная сотрмра.
Что выбираем. сотрмра.Ссылка – это ФИО.
сотрмра.орг как орг – это организация
При условии. ГДЕ
сотрмра.Ссылка = &фио
&фио – это параметр запроса. По смыслу, обеспечиваем выборку
организаций для задаваемой извне запроса ФИО. Оператор
запрос. УстановитьПараметр("фио",фио); сообщает в текст запроса
значение ФИО для которого решается задача. После выполнения запроса идет
очевидный текст по извлечению результатов запроса и заполнению СП.

2.2. Построитель отчетов.


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

34
По кнопке «Действия» войдем в построитель.

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

Перебрасываем необходимую информацию в колонку «Таблицы» и


далее в «Поля».

36
В колонке «Условия» задаем условие выборки.

По кнопке «Запрос» можно увидеть текст запроса.

37
По кнопке в верхнем углу можно сделать его доступным для копирования
и скопированный фрагмент вставлять в свои программы.

Наконец, обновить конфигурацию и выполнить сформированный


построителем отчет. Перед нажатием кнопки «Сформировать» в поле «Ссылка»
- указать ФИО, для которой выполняется запрос.

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

38
3.Тарифы
Работа со списками на примере задачи «Тариф».
Тарифы перевозок.
1.Создать справочник «номпоезд». Он содержит только номера поездов.
2. Создать справочник «города». Он содержит только города.
3. Создать двухуровневый справочник «Направления». На верхнем уровне
(группе) – в качестве наименования номер поезда , который будем выбирать из
справочника «Номпоезд».На уровне элементов в качестве наименования пункты
по пути следования от первого до последнего и выбирать их будем из
справочника «города».
4.Справочнику «Направления» подчиним справочник «докуда».Обратим
внимание на то, что подчинение двойное. Это и номер поезда, и пункт откуда. В
нем в качестве наименования пункты докуда можно доехать из выбранного
владельца с указанием цены купе и цены плацкарта.
5. Создать отчет «Тариф». на форму поместить следующие поля :-номер
поезда из «номпоезд»; -откуда и куда (тип справочник города); -типвагона из
перечисления(его надо создать). Эти поля заполняем вручную. Введем поле
цена, которое будет заполняться программно.

39
Поле «Номпо» используется в группе.

Поле «пункты» используется в элементе. Обратим внимание на то, что


необходимо написать две процедуры копирования «номпо» и «пункты» в поля
наименования группы и элемента.

40
Обратим внимание на поле «использование подчинения». В нем можно
задать три значения.

В нашей задаче владелец двухуровневый. На уровне группы владельцем


может быть «номпо». На уровне элемента – «пункты». По смыслу задачи,
подчинение должно быть «пункты». Поэтому в поле «Использование
подчинения» поставлен режим «элементам». Разумеется «номпо» также будем
учитывать при определении однозначного подчинения, но в другом месте
другими приемами.

41
42
43
Обращаем внимание что процедуры «Точка отправления…» и
«точканазначения…» прикреплены к событию «начало выбора» и эти
процедуры формируют последовательно списки пунктов отправления для
выбранного поезда, а затем список только тех пунктов до которых можно
доехать из пункта отправления для заданного поезда. Тем самым не будет даже
возможности ошибиться при выборе пунктов.
Перед написанием и выполнением процедур заполним справочники.

Ниже – первый уровень (нулевой) справочника «Направления».

Второй уровень для группы 261.


44
Второй уровень для группы (поезд) 37.

45
Процедура топрНачалоВыбора(Элемент, СтандартнаяОбработка)
сп=новый списокзначений;

запр=новый запрос;
запр.Текст =
"ВЫБРАТЬ
| направления.пункты как пункты
|ИЗ
| Справочник.направления КАК направления
|ГДЕ
| направления.Родитель.номпо = &номпо";

запр.УстановитьПараметр("номпо",номерпоезда);
результат=запр.Выполнить().Выбрать();
пока результат.Следующий() цикл
сп.Добавить(результат.пункты);
конеццикла;
выбрали=сп.ВыбратьЭлемент();
топр=выбрали.Значение;

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

Если возникают трудности при написании запроса, то воспользуемся


построителем отчетов.
46
47
Процедура тназнНачалоВыбора(Элемент, СтандартнаяОбработка)
сп1=новый списокзначений;
запр1=новый запрос;
запр1.Текст =
"ВЫБРАТЬ
| докуда.пункты как пункты
|ИЗ
| Справочник.докуда КАК докуда
|ГДЕ
| докуда.Владелец.пункты = &пункты
|И докуда.Владелец.родитель.номпо = &номпо ";
запр1.УстановитьПараметр("номпо",номерпоезда);
запр1.УстановитьПараметр("пункты",топр);
результат=запр1.Выполнить().Выбрать();
если результат.Количество()=0 тогда
сообщить("ноль") ;
возврат;
конецесли;
пока результат.Следующий() цикл
сп1.Добавить(результат.пункты);
конец
выбрали=сп1.ВыбратьЭлемент();
тназн=выбрали.Значение;

48
Заремленный ниже текст, демонстрирует ту же самую логику, что логика
запроса, но выполненную на обЪектном уровне. Попробуйте заремить
запросную часть и открепить объектную и выполнить.
//Выборка = Справочники.докуда.Выбрать();

//Пока Выборка.Следующий() Цикл


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

49
Создадим с помощью построителя вспомогательный отчет для получения
цены, если заданы топр тназн.

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

51
Вернемся к основной задаче.
Скопируем полученный построителем текст запроса в процедуру
сформировать и дополним логикой выборки и проверки.
52
Процедура
КнопкаСформироватьНажатие(Кнопка)
// Вставить содержимое обработчика.
запр2=новый запрос;
запр2.Текст =
"ВЫБРАТЬ
| докуда.пункты,
| докуда.цк как цк,
| докуда.цп как цп
|ИЗ
| Справочник.докуда КАК докуда
|ГДЕ
| докуда.Владелец.Родитель.номпо = &номпо
| И докуда.Владелец.пункты = &топр
| И докуда.пункты = &тназн";
запр2.УстановитьПараметр("номпо",номерпоезда);
запр2.УстановитьПараметр("топр",топр);
запр2.УстановитьПараметр("тназн",тназн);

результат=запр2.Выполнить().Выбрать();
пока результат.следующий() цикл
если типваг=перечисления.тп.купе тогда
цена=результат.цк
иначе
цена=результат.цп
конецесли;
конеццикла;

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

53
4.Регистры Сведений.
4.1. БАЗА.
Введем перечисление с именем «Списание» и значениями ЛИФО и
ФИФО.
Введем перечисление с именем «Учпол» (учетная политика) и
значениями ЛИФО, ФИФО и посредней.

54
Для демонстрации различных вариантов применения регистра сведений
создадим 4 регистра, у всех из них всего один ресурс «Метод» и тип
«перечисление.списание». Сами регистры сведений отличаются режимом
применения.

Регистр сведений «Методсписания» объявлен периодическим с


периодичностью «в пределах секунды» (можно задать разные кванты времени –
это не принципиально) и режим записи независимый, и это означает, что
информация в него попадает не в результате проведения какого-то документа, а

55
непосредственно в ручном режиме используя форму регистра. Этот регистр
обслуживается перечислением «Списание».

Точно такой-же регистр «Учп», только на основе другого


перечисления(перечисление «учпол»).

Регистр сведений «Мой» подчинен регистратору (документу) и это


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

56
Регистр сведений «непер» непериодический и независимый. Его можно
рассматривать как константу.

Ниже показано заполнение регистра «Метод списания». Методы


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

57
Аналогично, Список «Учп» и список «Непер»

Регистр «Мой». Он подчинен регистратору, в качестве которого создан


документ «Устпол» без табличной части и всего с одним реквизитом «Метод».

58
59
В конструкторе движений создадим модуль проведения этого документа.

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

4.2. Синтаксис основных методов


РегистрСведенийМенеджер.<Имя регистра сведений>
(InformationRegisterManager.<Имя регистра сведений>)
Получить (Get)
Вариант синтаксиса: Для периодического регистра
Описание:
Получает значения ресурсов записи регистра, соответствующей
указанным значениям измерений регистра и периоду.
Синтаксис:
Получить(<Период>, <Отбор>)
Параметры:
<Период> (обязательный)
Тип: Дата, МоментВремени. Определяет момент времени, на
который необходимо получить значения ресурсов. Если указанный момент
времени не совпадает с периодом ни одной записи регистра, то будет
возвращена структура, содержащая пустые значения.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая отбор по измерениям
регистра.
В переданной структуре должны содержаться те измерения, по которым
должны быть отфильтрованы записи. В элементе структуры задается имя и
значение отбора. Должны указываться значения для всех измерений.
Параметр обязателен для регистров, имеющих измерения.
Если параметр не указан, то отбор не используется.
Вариант синтаксиса: Для непериодического регистра
Описание:
Получает значения ресурсов записи регистра, соответствующей
указанным значениям измерений регистра.
61
РегистрСведенийМенеджер.<Имя регистра сведений>
(InformationRegisterManager.<Имя регистра сведений>)
ПолучитьПервое (GetFirst)
Синтаксис:
ПолучитьПервое(<Начало периода>, <Отбор>)
Параметры:
<Начало периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Определяет момент
времени, начиная с которого необходимо получить значения ресурсов. Может
задаваться значениями типа Дата, МоментВремени или Граница. Если
параметр не указан, то будут возвращены значения ресурсов самой первой
записи регистра.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая отбор по измерениям
регистра. Имя ключа структуры должно совпадать с именем измерения
регистра, заданного в конфигураторе, а значение элемента структуры - задает
отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: Структура. Возвращает структуру, содержащую значения
ресурсов.
Описание:
Получает значения ресурсов наиболее ранней записи регистра,
соответствующей указанным периоду и значениям измерений регистра. Поиск
по периоду осуществляется "включительно", т.е. если существует запись с
таким же значением одноименного свойства, то она и будет найдена.
Примечание:
Применим только для периодических регистров сведений.

РегистрСведенийМенеджер.<Имя регистра сведений>


(InformationRegisterManager.<Имя регистра сведений>)
ПолучитьПоследнее (GetLast)
Синтаксис:
ПолучитьПоследнее(<Конец периода>, <Отбор>)
Параметры:
<Конец периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Определяет момент
времени, по который необходимо получить значения ресурсов. Может
62
задаваться значениями типа Дата, МоментВремени или Граница. Если
параметр не указан, то будут возвращены значения ресурсов самой последней
записи регистра.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая отбор по измерениям
регистра. Имя ключа структуры должно совпадать с именем измерения
регистра, заданного в конфигураторе, а значение элемента структуры - задает
отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: Структура. Возвращает структуру, содержащую значения
ресурсов.
Описание:
Получает значения ресурсов наиболее поздней записи регистра,
соответствующей указанным периоду и значениям измерений регистра.
Примечание:
Применим только для периодических регистров сведений.

РегистрСведенийМенеджер.<Имя регистра сведений>


(InformationRegisterManager.<Имя регистра сведений>)
ВыбратьПоРегистратору (SelectByRecorder)
Синтаксис:
ВыбратьПоРегистратору(<Регистратор>)
Параметры:
<Регистратор> (обязательный)
Тип: ДокументСсылка. Ссылка на документ, являющийся
регистратором для записей регистра.
Возвращаемое значение:
Тип: РегистрСведенийВыборка .
Описание:
Формирует выборку по регистратору записей регистра сведений.
Применяется для регистров сведений, для которых в конфигураторе установлен
режим записи "Подчинение регистратору".

4.3. Отчет «По регистратору»


На форме задаем ссылку на документ- регистратор.

63
И по кнопке «Сформировать» применяя метод «ВыбратьПо
Регистратору» извлекаем «метод».

64
4.4. Непериодический регистр сведений
Поскольку регистр «непер» не периодический, применяем метод
«Получить», в котором не применяется дата. В этом регистре всегда одна
величина.

Если возникает необходимость заменить старую величину на другую, то


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

65
4.5. Независимый периодический регистр сведений
Существуют два, наиболее часто используемых, метода для извлечения
данных из периодического регистра сведений: - «ПолучитьПервое(дата)» и
«ПолучитьПоследнее(дата)».

66
Чтобы понять что же мы получаем, внимательно посмотрим примеры.
Оба примера выполнены для даты=04.10.2010. В регистре нет информации на
эту дату. Но есть информация на 03.10.2010 и на 07.10.2010.
Метод «Первое» выдает информацию на дату первую(ближайшую сверху
к заданной, то есть на 07. –ФИФО.

67
Метод «Последнее» выдает информацию на последнюю, ближайшую
снизу к заданной, дату, то есть на 03 –ЛИФО.

Рассмотрим еще два метода применяемые при работе с регистрами


сведений:-«СрезПервых» и «СрезПоследних». Поясним сущность этих методов.
В предыдущих примерах в регистрах сведений был только один ресурс – метод.
Введем еще один регистр сведений «Цены», в котором будут два ресурса
закупочная цена и продажная цена.
РегистрСведенийМенеджер.<Имя регистра сведений>
(InformationRegisterManager.<Имя регистра сведений>)
СрезПервых (SliceFirst)
Синтаксис:
СрезПервых(<Начало периода>, <Отбор>)
Параметры:
<Начало периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Определяет момент
времени, начиная с которого необходимо выбрать записи.
Если параметр не указан, то будут получены записи без ограничения по
времени.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая отбор по измерениям и
реквизитам регистра. Имя ключа структуры должно совпадать с именем
измерения регистра, заданного в конфигураторе, а значение элемента структуры
- задает отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: ТаблицаЗначений. Таблица значений, заполненная данными
найденных записей регистра сведений.
Описание:
68
Получает наиболее ранние записи регистра, соответствующие
установленным в параметрах метода значениям ключевых полей. Записи
подбираются для каждого сочетания из всех имеющихся значений измерений
регистра.
Примечание:
Применим только для периодических регистров сведений.

РегистрСведенийМенеджер.<Имя регистра сведений>


(InformationRegisterManager.<Имя регистра сведений>)
СрезПоследних (SliceLast)
Синтаксис:
СрезПоследних(<Конец периода>, <Отбор>)
Параметры:
<Конец периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Определяет момент
времени, заканчивая которым необходимо выбрать записи.
Если параметр не указан, то будут возвращены значения ресурсов самой
последней записи регистра.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая отбор по измерениям и
реквизитам регистра. Имя ключа структуры должно совпадать с именем
измерения регистра, заданного в конфигураторе, а значение элемента структуры
- задает отбираемое по данному измерению значение. Если параметр не указан,
то отбор не используется.
Возвращаемое значение:
Тип: ТаблицаЗначений. Таблица значений, заполненная данными
найденных записей регистра сведений.
Описание:
Получает наиболее поздние записи регистра, соответствующие
установленным в параметрах метода значениям ключевых полей. Записи
подбираются для каждого сочетания из всех имеющихся значений измерений
регистра.
Примечание:
Применим только для периодических регистров сведений.

69
Создадим отчет.

Процедура выводит В ТЗ ближайшие сверху к указанной дате значения


всех ресурсов(СрезПервых).

70
Процедура выводит в ТЗ ближайшие снизу к указанной
дате(СрезПоследних).

71
Как видно отличие методов «ПолучитьПервое» и «СрезПервых» только в
том что во втором случае выводятся все ресурсы одновременно (та же аналогия
по последним).
Разумеется, можно и в этом случае пользоваться методами
«ПолучитьПоследнее» и «ПолучитьПервое».
Например:

72
5. Запросы на основе документов
Набор возможностей.
5.1. Сортировка по возрастанию (материалов)

73
5.2. Сортировка по убыванию материалов

5.3. Ключевое слово ИМЕЮЩИЕ

74
5.4. Применение ключевого слова МЕЖДУ.

75
5.5. Выгрузка результата запроса в ТЗ

76
После выгрузки в ТЗ – работай с ТЗ. (Для каждого к из тз цикл…).

5.6. Ключевое слово «В»


Выполнение запроса только для некоторого задаваемого извне перечня
объектов. В примере, объектом являются материалы, которые задаются в виде
массива, передаваемо в запрос через параметр МН.

77
ИЛИ:

Поскольку в массиве материалы задаются как строки, приходится и в


запросе в условии применять строку (зпок.материал.наименование). В
операторе Выбрать – это безразлично (либо зпокзая.материал либо
зпок.материал.наименование).

78
5.7. Задача «Проверка выполнения поставок по конкретной заявке
покупателя

База для решения задачи приведена ниже в этом же пособии п.6


«Регистры накопления».
Вариант решения с использованием запросов, где в качестве таблиц
применяются документы «ЗПОК» и «ПМ»

79
Пояснения по программе. Два независимых запроса, у которых один
внешний параметр заявка покупателя «ЗП». После их выполнения двойной
цикл, сравнение материалов и выдача информации.

80
Вариант решения с использованием запросов, где в качестве одной
таблицы применяется документ «ЗПОК», а в качестве второй – регистр
накопления «ПМ»
Сначала рассмотрим одну исключительную возможность – работу с
вложенными запросами.
Суть задачи – получить информацию о суммарных заявках покупателей в
разрезе материалов.

81
Задача.
По каждой отдельной заявке получить информацию о состоянии заказа.
82
83
По всем вместе взятым заявкам получить состояние поставок.
Во внутреннем запросе просуммировали по каждому материалу по всем
заявкам.

84
Внутреннее соединение отражает только пересекающиеся позиции.
Например, в заявке есть позиция «доска» в количестве 500 штук. Поскольку
поступления доски нет, то и сообщений, то же нет.
Чтобы это увидеть, надо выполнить, в нашем случае, правое
соединение, так как ЗПОК находится справа.

ПРАВОЕ СОЕДИНЕНИЕ.
85
86
ЛЕВОЕ СОЕДИНЕНИЕ.
Если необходимо видеть все поступления, в том числе и не по заявкам.

87
88
В отчете есть «Меткаркас», которого нет в заявке, в то же время
отсутствует информация по «доске», которая есть в заявке и которой нет в
поступлении.
Наконец, если необходимо видеть обе стороны процесса, то используем
ПОЛНОЕ СОЕДИНЕНИЕ.

89
90
6. Регистры накопления
6.1. База для исследования возможностей регистров
Справочники.

91
Документы.

92
Результаты проведения по регистрам.

6.2. Регистры накопления (вид регистра «остатки»)


Вид регистра «Покреал».

93
Структура регистра накопления(максимальный набор параметров)

Выбрать(<Начало интервала>, <Конец интервала>, <Отбор>, <Порядок>)

Параметры:
<Начало интервала> (необязательный)
Тип: Дата, МоментВремени, Граница. Начало интервала, за который будут
выбираться записи регистра накопления. Может задаваться значениями типа
Дата, МоментВремени или Граница.
Если не указан, то будут выбираться записи с самого ранней включительно.
<Конец интервала> (необязательный)
Тип: Дата, МоментВремени, Граница. Конец интервала, за который будут
выбираться записи регистра накопления. Может задаваться значениями типа

94
Дата, МоментВремени или Граница.
Если не указан, то будут выбираться записи до самой поздней включительно.
<Отбор> (необязательный)
Тип: Структура. Задает поле и значение отбора открываемой выборки.
Ключ структуры описывает имя поля, а значение структуры - значение отбора
по этому полю. В качестве полей для отбора могут задаваться измерения или
реквизиты, для которых в конфигураторе признак индексирования установлен в
значение "Индексировать".
Важно! Структура может содержать только один элемент.
Если параметр не указан, то отбор не используется.
<Порядок> (необязательный)
Тип: Строка. Может содержать слово "Возр" или "Убыв", тогда
стандартный порядок будет использоваться с указанным направлением. По
умолчанию "Возр".
Может содержать имя поля (реквизита или измерения для которых указано
индексирование) и слово "Возр" или "Убыв", тогда упорядочивание будет
производится по указанному полю в указанном порядке.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: РегистрНакопленияВыборка.
Описание:
Формирует выборку записей регистра накопления.

Структура регистра накопления.Остатки(максимальный набор


параметров)

Остатки(<Момент времени>, <Отбор>, <Измерения>, <Ресурсы>)


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

95
отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
<Измерения> (необязательный)
Тип: Строка. Список измерений, для которых надо получить остатки.
Строка, содержащая имена измерений, разделенные запятыми.
Если параметр не указан или указана пустая строка, то остатки будут
сформированы по всем измерениям.
<Ресурсы> (необязательный)
Тип: Строка. Список ресурсов, для которых надо получить остатки.
Строка, содержащая имена ресурсов, разделенные запятыми.
Если параметр не указан или указана пустая строка, то остатки будут
сформированы по всем ресурсам.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: ТаблицаЗначений. Сформированная таблица значений.
Описание:
Получает остатки регистра накопления на заданный момент времени.
Есть возможность фильтрации по значениям измерений, а также получения
остатков в разрезе других измерений. Возвращает таблицу значений,
содержащую колонки с измерениями, указанными в параметре Измерения, и
колонки с ресурсами, указанными в параметре <Ресурсы>.
Примечание:
Имеет смысл только для регистров, у которых в конфигураторе указан вид
регистра "Остатки".

Обороты(<Начало периода>, <Конец периода>, <Отбор>, <Измерения>,


<Ресурсы>)

Обороты(<Начало периода>, <Конец периода>, <Отбор>, <Измерения>,


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

96
Если в качестве параметра передана Дата или МоментВремени, то обороты за
указанную дату (момент времени) будут включены в результирующую таблицу
значений.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая набор значений измерений
регистра, по которым надо отбирать обороты. Имя ключа структуры должно
совпадать с именем измерения регистра, заданного в конфигураторе, а значение
элемента структуры - задает отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
<Измерения> (необязательный)
Тип: Строка. Список измерений, для которых надо разворачивать
обороты. Строка, содержащая имена измерений, разделенные запятыми. Если
параметр не указан или указана пустая строка, то обороты будут сформированы
по всем измерениям.
Значение по умолчанию: Пустая строка
<Ресурсы> (необязательный)
Тип: Строка. Список ресурсов, для которых надо получить обороты.
Строка, содержащая имена ресурсов, разделенные запятыми.
Если параметр не указан или указана пустая строка, то обороты будут
сформированы по всем ресурсам.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: ТаблицаЗначений.
Описание:
Получает обороты регистра накопления за заданный период времени.
Есть возможность фильтрации по значениям измерений. Возвращает таблицу
значений, содержащую колонки с измерениями, указанными в параметре
Измерения, и по две колонки на каждый ресурс, указанный в параметре
<Ресурсы>.
Названия колонок для ресурсов формируются следующим образом: для
регистров остатков: "<Имя ресурса>Приход" и "<Имя ресурса>Расход" .

6.3 Решение ЗАДАЧ с помощью запросов.


6.3.1.Регистр накопления сам по себе(не остатки и не обороты).

Сплошная выборка с суммированием по номенклатуре(овфр)


"ВЫБРАТЬ
| СУММА(покреал.кол) КАК кол,
| СУММА(покреал.сумма) КАК сумма,
| покреал.овфр
|ИЗ

97
| РегистрНакопления.покреал КАК покреал
| СГРУППИРОВАТЬ ПО
| покреал.овфр";

Суммирует и приходы, и расходы вместе.


Ниже содержимое регистра после проведения.

Та же задача на ручном уровне.Цель- демонстрация обхода результатов


запроса по одной группировке.
Процедура КнопкаСформироватьНажатие(Кнопка)
// Вставить содержимое обработчика.
запрос=новый запрос;
запрос.текст =
"ВЫБРАТЬ
| покреал.овфр,
| СУММА(покреал.кол) КАК кол,
| СУММА(покреал.сумма) КАК сумма
|ИЗ
| РегистрНакопления.покреал КАК покреал
|
|СГРУППИРОВАТЬ ПО
| покреал.овфр";

98
рез=запрос.выполнить();
выборка=рез.Выбрать();
пока Выборка.Следующий() цикл
сообщить(выборка.овфр);
сообщить(выборка.кол);
сообщить(выборка.сумма);

конеццикла;

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

Далее, двойная группировка. Заметим, что группировка предполагает и


суммирование по ресурсам.

Та же задача на ручном уровне.Цель демонстрация обхода результатов


запроса по двум группировкам, с условием по задаваемой овфр.

99
Выборка всех полей регистра.

100
Поиск по регистратору с помощью запроса.
101
На объектном уровне эта же задача решается с помощью метода
ВыбратьПоРегистратору.

102
ВыбратьПоРегистратору(<Регистратор>)
Параметры:
<Регистратор> (обязательный)
Тип: ДокументСсылка. Ссылка на документ, являющийся регистратором
для записей регистра.
Возвращаемое значение:
Тип: РегистрНакопленияВыборка.
Описание:
Формирует выборку по регистратору записей регистра накопления.
Пример:
Движения =
РегистрыНакопления.Продажи.ВыбратьПоРегистратору(Ссылка);

6.3.2. Регистры накопления (остатки)


Выборка остатков по всем контрагентам и номенклатуре.
Обратим внимание на то, что система сама формирует составные имена
ресурсов по принципу «имя ресурса» +Остатки(например, колОстатки и
суммаОстатки). Аналогично, - колПриход, колРасход,
колОборот,колНачальныйОстаток, колКонечныйОстаток и т.д.

103
Получены остатки, в том числе с учетом прихода и расхода.

Получим остатки по всем овфр.

104
Получим остатки по выбранному овфр.

105
Получим среднюю цену по овфр.

Введем дважды любое поле, например (суммаостаток), для того чтобы на


его основе создать то чего не было в регистрах - среднюю цену. Нажать в
области «Поля» левую верхнюю кнопку и войти в произвольные выражения, где
опираясь на известные из регистра поля создадим формулу вычисления средней
цены.
106
107
В области «Объединение- псевдонимы» можно заменить «поле1», которое
сформировал построитель на свое, например средняя цена.

Средние цены по всем овфр

Правка текста запроса(ручная).


108
В регистре накопления много параметров.Построитель их использует по
умолчанию. Поэтому можно вручную поправить текст запроса и система учтет
эту правку при генерации отчета. В нашем примере внесена дата получения
остатков –ДН. По умолчанию система присваивает ей тип «строка».

Поэтому надо войти в форму регнакост и

Сменить тип «дн» на тип «Дата».

109
6.3.3. Регистры накопления (обороты)
Полный вывод.

110
Это продолжение.

Вывод по условию и только по овфр.

Это продолжение.

111
И так далее, как и в режиме остатков. Смысл этого режима уже понятен.

112
Результат, конечно тот же самый, но показана возможность ручного
внесения в текст запроса параметров, в данном случае начало и конец периода
-ДН и ДК.

6.3.4. Регистры накопления (обороты и остатки)


Полный вывод.

Продолжение.

113
Продолжение.

Синтаксис регистра накопления(вид регистра «обороты»).

Обороты(<Начало периода>, <Конец периода>, <Отбор>, <Измерения>,


<Ресурсы>)
Параметры:
<Начало периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, начиная с
которого необходимо получить обороты. Если параметр не указан, то обороты
будут получены начиная с момента ведения базы данных. Если в качестве
параметра передана Дата или МоментВремени, то обороты за указанную дату
(момент времени) будут включены в результирующую таблицу значений.
<Конец периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, определяющий
конец периода за который необходимо получить обороты. Если параметр не
указан, то обороты будут получены до самого позднего движения регистра.
Если в качестве параметра передана Дата или МоментВремени, то обороты за
указанную дату (момент времени) будут включены в результирующую таблицу
значений.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая набор значений измерений
регистра, по которым надо отбирать обороты. Имя ключа структуры должно
совпадать с именем измерения регистра, заданного в конфигураторе, а значение
элемента структуры - задает отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
<Измерения> (необязательный)
Тип: Строка. Список измерений, для которых надо разворачивать
обороты. Строка, содержащая имена измерений, разделенные запятыми. Если
параметр не указан или указана пустая строка, то обороты будут сформированы
по всем измерениям.
Значение по умолчанию: Пустая строка
<Ресурсы> (необязательный)
Тип: Строка. Список ресурсов, для которых надо получить обороты.
Строка, содержащая имена ресурсов, разделенные запятыми.
Если параметр не указан или указана пустая строка, то обороты будут
сформированы по всем ресурсам.
Значение по умолчанию: Пустая строка
114
Возвращаемое значение:
Тип: ТаблицаЗначений.
Описание:
Получает обороты регистра накопления за заданный период времени.
Есть возможность фильтрации по значениям измерений. Возвращает таблицу
значений, содержащую колонки с измерениями, указанными в параметре
Измерения, и по две колонки на каждый ресурс, указанный в параметре
<Ресурсы>.
Названия колонок для ресурсов формируются следующим образом: для
регистров остатков: "<Имя ресурса>Приход" и "<Имя ресурса>Расход" .
Создадим регистр оборотов –«пкрл» и привяжем его к документам
«Поставка» и «Реализация»

Текст проведения документа «Поставка» по двум регистрам


«покреал» (остатки) и «пкрл» (обороты).

Процедура ОбработкаПроведения(Отказ, Режим)


Для Каждого ТекСтрокатовар Из товар Цикл
// регистр покреал Приход
Движение = Движения.покреал.Добавить();
Движение.ВидДвижения =
ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.контр = поставщик;
Движение.овфр = ТекСтрокатовар.овфр;
Движение.кол = ТекСтрокатовар.кол;

115
Движение.сумма = ТекСтрокатовар.сумма;
КонецЦикла;
Для Каждого ТекСтрокатовар Из товар Цикл
// регистр пкрл
Движение = Движения.пкрл.Добавить();
Движение.Период = Дата;
Движение.контр = поставщик;
Движение.овфр = ТекСтрокатовар.овфр;
Движение.кол = ТекСтрокатовар.кол;
Движение.сумма = ТекСтрокатовар.сумма;
КонецЦикла;
КонецПроцедуры

Текст проведения документа «Поставка» по трем регистрам «покреал»


(остатки) и «пкрл» (обороты) и «продажи»(остатки)
Процедура ОбработкаПроведения(Отказ, Режим)
Для Каждого ТекСтрокапок Из пок Цикл
// регистр покреал Расход
Движение = Движения.покреал.Добавить();
Движение.ВидДвижения =
ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.контр = покупатель;
Движение.овфр = ТекСтрокапок.овфр;
Движение.кол = ТекСтрокапок.кол;
Движение.сумма = ТекСтрокапок.сумма;
КонецЦикла;
Для Каждого ТекСтрокапок Из пок Цикл
// регистр продажи Приход
Движение = Движения.продажи.Добавить();
Движение.ВидДвижения =
ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.товар = ТекСтрокапок.овфр;
Движение.контр = покупатель;
Движение.количество = ТекСтрокапок.кол;
Движение.сумма = ТекСтрокапок.сумма;
КонецЦикла;
116
Для Каждого ТекСтрокапок Из пок Цикл
// регистр пкрл
Движение = Движения.пкрл.Добавить();
Движение.Период = Дата;
Движение.контр = покупатель;
Движение.овфр = ТекСтрокапок.овфр;
Движение.кол = ТекСтрокапок.кол;
Движение.сумма = ТекСтрокапок.сумма;
КонецЦикла;

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

Содержимое регистра «Пкрл»

Полный вывод регистра «ПКРЛ»

117
Полный вывод регистра «ПКРЛ» в режиме «Обороты».

118
Вывод только по овфр.

119
6.4. Работа с регистрами накоплений на объектном уровне
Полный вывод регистра накоплений «Покреал».

Процедура КнопкаСформироватьНажатие(Кнопка)
нак=регистрынакопления.покреал.Выбрать() ;
пока нак.следующий() цикл
сообщить(нак.контр);

120
сообщить(нак.овфр);
сообщить(нак.сумма);
конеццикла;
КонецПроцедуры

Вывод остатков по всем овфр.

Процедура КнопкаСформироватьНажатие(Кнопка)

нак=регистрынакопления.покреал.Остатки(,,"овфр","кол,сумма") ;
121
элементыформы.нак.СоздатьКолонки();
для каждого тс из нак цикл
сообщить(тс.овфр);
сообщить(тс.кол);
сообщить(тс.сумма);
конеццикла;
КонецПроцедуры
Дата , на которую получаем остатки не задана и поэтому перед первой
запятой – пустота. Можно на форме задать переменную типа дата(например,
«ДП» и тогда оператор примет вид …остатки(ДП,,»овфр»…).
Напомним, что результатом обращения к регистрам накопления является
Таблица значений, в нашем случае «нак» которую поместим на форме. Далее с
ней работаем как обычно- « для каждого…».

Вывод остатков по заданному «овфр» и получение средней цены.

Процедура КнопкаСформироватьНажатие(Кнопка)

нак=регистрынакопления.покреал.Остатки(,,"овфр","кол,сумма") ;
элементыформы.нак.СоздатьКолонки();
для каждого тс из нак цикл
если тс.овфр =овфр тогда
срцена=тс.сумма/тс.кол;
конецесли;
122
конеццикла;
КонецПроцедуры

В примере, внутри цикла делается сравнение с овфр.

Результат.

Этого же результата можно достичь с помощью отбора или фильтра, тем


самым делая цикл всего из одного элемента.

123
Выбор оборотов из регистра накопления «Покреал» (сам регистр – это
регистр остатков, но используем его в режиме оборотов.)

Процедура КнопкаСформироватьНажатие(Кнопка)
фильтр=новый структура;
фильтр.Вставить("овфр",овфр);

нак=регистрынакопления.покреал.Обороты(,,фильтр,"овфр","кол,сумма")
;
элементыформы.нак.СоздатьКолонки();
КонецПроцедуры

Обратим внимание, что в параметрах, в принципе надо указывать начало


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

124
Выбор оборотов из регистра накопления «Пкрл» (сам регистр – это регистр
оборотов, и используем его в режиме оборотов.)

процедура КнопкаСформироватьНажатие(Кнопка)
фильтр=новый структура;
фильтр.Вставить("овфр",овфр);

нак=регистрынакопления.пкрл.Обороты(,,фильтр,"овфр","кол,сумма") ;
элементыформы.нак.СоздатьКолонки();
КонецПроцедуры

Обход результатов запроса по Группировкам.

Процедура КнопкаСформироватьНажатие(Кнопка)
запрос =новый запрос;
запрос.Текст =
"ВЫБРАТЬ

125
| покреал.контр,
| покреал.овфр,
| покреал.кол КАК кол,
| покреал.сумма КАК сумма
|ИЗ
| РегистрНакопления.покреал КАК покреал
|ИТОГИ
| СУММА(кол),
| СУММА(сумма)
|ПО
| ОБЩИЕ,
| контр,
| овфр";

рез=запрос.Выполнить();
выборка1=рез.Выбрать(Обходрезультатазапроса.ПоГруппировкам);
пока выборка1.Следующий() цикл
сообщить(выборка1.контр);

выборка2=выборка1.Выбрать();
пока выборка2.Следующий() цикл
сообщить(выборка2.овфр);
сообщить(выборка2.кол);
сообщить(выборка2.сумма);

конеццикла;
конеццикла

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

126
127
6.5. Регистр накопления со ссылками
База.

Заметим, что в документе ПМ в табличной части есть поле «Зая»


тип «ДокументССылка.Зпок». Это означает, что менеджер распределил заявку
покупателя возможно по многим документам «ПМ». Технически , увязаны два
регистра и это позволяет отслеживать исполнение заказа. Эта идеология в
максимальной степени реализована в конфигурациях «Торговля» и «УПП».

Введем два регистра.


Регистр «Зая» обслуживает документ «заяпок».

128
Регистр «ПМ» обслуживает документ «ПМ».

Текст проведения «Заяпок» по регзая.

Текст проведения «ПМ» по регпм.

Вид справочника «Материалы».

129
Документы «ЗПОК», варианты их заполнения и проведения.

130
Документы «ПМ», варианты из заполнения и проведения.

131
132
133
Собственно, в чем заключается задача.
Для задаваемого документа «Заяпок» проверить состояние исполнения
заявки. Для этого необходимо совместно обработать два регистра.
Текст запроса, написанный вручную.

134
Результат работы запроса для «Зпок2»

135
Результат работы запроса для «Зпок1»

136
Эта же задача с помощью построителя.
Поля.

137
Связи.

Условия.

Текст запроса.

Результат запроса

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

139
7.Бухгалтерские запросы
Регистр бухгалтерии - сложный объект, Представленный в модели
данных рядом таблиц. Все таблицы можно разделить на две группы: реальные и
виртуальные. Реальные таблицы предоставляют доступ к физически
существующим таблицам. У регистра бухгалтерии таких таблиц две: основная
таблица и таблица субконто. Реальные таблицы малопригодны для
формирования бухгалтерских отчетов и являются вспомогательным
механизмом. В большинстве случаев используются виртуальные таблицы. Эти
таблицы не хранятся в базе , а формируются при обращении к ним.
Виртуальные таблицы узкоспециализированы и предназначены для решения
конкретных задач.

140
Таблица остатков предназначена для получения остатков по счетам в разрезе
субконто. Обращение к ней «РегистрБухгалтерии.РЕГБУХ.ОСТАТКИ». После
имени таблицы в круглых скобках возможны параметры, задающие условия
отбора из физических таблиц. Параметры: Период, Счет, субконто, условие.
Таблица оборотов используется для получения оборотов по счету и оборотов по
счету в разрезе субконто. Обращение к ней –
«регистрбухалтерии.ребух.Обороты». После имени таблицы в круглых скобках
возможны параметры. Параметры: дата начальная, дата конечная,
периодичность, счет, субконто, условие, корсчет, корсубконто.
Таблица остатков и оборотов предназначена для формирования оборотно
сальдовых ведомостей, где в каждой строке надо показать остатки на начало
периода, обороты за период и остатки на конец периода. Обращение к ней –
«регистрбухгалтерии.регбух.ОстаткиИОбороты». Параметры таблицы:
начпериода, конпериода, периодичность, счет,субконто.
Таблица Движений С Субконто используется для отбора проводок.
Таблица оборотов ДТ КТ предназначена для получения оборотов между
корреспондирующими счетами. Параметры таблицы: начпериода, конпериода,
периодичность , условие счета ДТ, субконто ДТ, условие счетаКТ, субконто КТ
Задача. РУДЫ.
Наша задача, через примеры почувствовать смысл и технику работы
с разными таблицами.
БАЗА.
Создадим три справочника: Руды, контрагенты, склады.
Создадим два документа: - ПР - поступление руды и ОР - отгрузка руды.

141
Создадим план счетов и всю сопутствующую
информацию.

142
143
144
Создадим движения по документу ПР.

Создадим движения по документу ОР.

145
Заполним базу.

146
147
148
Содержимое РЕГБУХ.

База создана. Приступаем к запросам.

7.1. РЕГБУХ
Отчет1. РЕГБУХ – вывод регистра регбух.
Некоторые замечания.
Свойство «активность». Свойство «активность» - свойство записи регистра,
влияющее на отражении этой записи в таблицах итогов. Активные записи
попадают в итоги. Проводка с выключенной активностью не удаляется из базы.
Активность –булева переменная(истина или ложь). ЕЕ можно программно
включать или выключать.

149
Оперативное и неоперативное проведение. Установленное свойство
«Оперативное проведение позволяет контролировать ввод документов задним
числом и запрещает проведение будущей датой.

Отчет 2. Регбух с условием по счету дебета.

150
На объектном уровне.

151
В условии «если» в явном виде указан счет «41.1» и поэтому
применено приведение к строке рб.счет.

152
Второй вариант этой же программы.
Отличие единственное. В условии применено не значение счета «41.1» , а
имя счета как оно указано в плане счетов. Это позволяет не менять программу,
если изменим счет с неизменным именем.

153
Отчет3. Регбух с условием по счету кредита и по регистратору.

154
Отчет 4. РЕГБУХ с группировкой и по условию.

155
Результаты запроса наполовину бессмысленны, так как на какую
сумму отгрузили, имеет смысл, а какое количество неизвестно чего не имеет
смысла.

156
Отчет 5. РЕГБУХ с группировкой, с условием и с итогами.

Отчет 6. Регбух с группировкой, с итогами, но без условии (совсем


глупый, но технически возможный).

157
Как видно, работая с регбух (режим основная таблица) нет никаких
субконто – никакой аналитики.

7.2. РЕГБУХСТАТКИ

Отчет 1. Регбухостатки без каких либо условий.

158
Это продолжение результата.

159
Обсудим полученный результат. На первый взгляд, он выглядит
нелепо. Какие-то минусы появились, но все объяснимо. Вспомним содержимое
РЕГБУХ и ситуацию, приведшею к нему. Документ ПР обеспечивал фиксацию
поступления и по руде и по складу. Документ ОР формировал проводки только
по руде с неопределенного, то есть с отсутствующего склада. Это недопустимо.
Как быть? Либо в документе ОР указывать склад, либо писать свою логику
проведения документа ОР, в которой в этой ситуации списываем руду сначала с
первого склада, затем со второго, пока не выполним заявку на отгрузку. То
есть, необходим партионный учет.

Тот же результат, полученный на объектном уровне.

160
Вид программы.

Результатом метода «остатки» является таблица значений.

В приведенной программе нет никаких параметров. В полном


варианте параметров 5. Все они необязательные.
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии> Остатки
Синтаксис:
Остатки(<Момент времени>, <Виды субконто>, <Отбор>, <Измерения>,
<Ресурсы>)
Параметры:
<Момент времени> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, на который
необходимо получить остатки. Если параметр не указан или установлен в
Неопределено, то будут получены текущие остатки (на максимальную дату
движений регистра). Если в качестве параметра передана Дата, то остатки будут
получены на начало дня, если МоментВремени - то в остатках не будут учтены
движения регистра, произошедшие в тот же момент времени.
<Виды субконто> (необязательный)
Тип: ПланВидовХарактеристикСсылка.<Имя плана видов
характеристик>, Массив. Передается ссылка или массив ссылок на виды
161
субконто. Виды субконто определяют, какие значения субконто будут доступны
по именам "Субконто1", "Субконто2" и т.д. Кроме того, остатки будут
посчитаны только по счетам, имеющим заданные виды субконто. Если виды
субконто не заданы, то обращение к значениям субконто осуществляется по
порядку (индексу), как они определены на соответствующем счете.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая набор значений измерений
регистра, по которым надо отбирать итоги. Допустимые значения ключа: Счет,
Субконто<Номер>, <Имя измерения>.
Если параметр не указан, то отбор не используется.
<Измерения> (необязательный)
Тип: Строка. Список измерений, для которых надо получить остатки.
Строка, содержащая имена измерений, разделенные запятыми. Допустимые
имена измерений: Счет, Субконто<Номер>, <Имя измерения>.
Если параметр не указан или указана пустая строка, то остатки будут
сформированы по всем измерениям.
Значение по умолчанию: Пустая строка
<Ресурсы> (необязательный)
Тип: Строка. Список ресурсов, для которых надо получить остатки.
Строка, содержащая имена ресурсов, разделенные запятыми.
Если параметр не указан или указана пустая строка, то остатки будут
сформированы по всем ресурсам.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: ТаблицаЗначений.

Объектный уровень с параметром виды субконто.

162
Еще вариант.

Обращаем внимание, что в списке измерений не «руда» или что-то


аналогичное конкретное а имя «суконто1,2…»

163
Вариант с фильтром (отбором)

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


выводим только субконто1.

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

Получение средней цены.

Обращаем внимание на то, что результатом является ТЗ и хотя


известно что в ней будет только одна запись необходимо работать как с тз.

165
Тот же результат, но другая техника работы с ТЗ.

Строки в тз и колонки в тз нумеруются с 0. Сначала получаем 0


строку(она единственная по смыслу). А затем обращаемся к полю3-
количествоостатокДТ и к полю5 – суммаостатокдт.

Отчет 2. РЕГБУХОСТАТКИ с условиями.

166
7.3. РЕГБУХОБОРОТЫ
Синтаксис.
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии> Обороты
Синтаксис:
167
Обороты(<Начало периода>, <Конец периода>, <Виды субконто>, <Виды
кор. субконто>, <Отбор>, <Измерения>, <Ресурсы>)
Параметры:
<Начало периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, начиная с
которого необходимо получить обороты. Если параметр не указан, то обороты
будут получены начиная с момента ведения базы данных. Если в качестве
параметра передана Дата или МоментВремени, то обороты за указанную дату
(момент времени) будут включены в результирующую таблицу значений.
<Конец периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, определяющий
конец периода за который необходимо получить обороты. Если параметр не
указан, то обороты будут получены до самого позднего движения регистра.
Если в качестве параметра передана Дата или МоментВремени, то обороты за
указанную дату (момент времени) будут включены в результирующую таблицу
значений.
<Виды субконто> (необязательный)
Тип: ПланВидовХарактеристикСсылка.<Имя плана видов
характеристик>, Массив. Передается ссылка или массив ссылок на виды
субконто. Виды субконто определяют, какие значения субконто будут доступны
по именам "Субконто1", "Субконто2" и т.д. Кроме того, обороты будут
посчитаны только по счетам, имеющим заданные виды субконто. Если виды
субконто не заданы, то обращение к значениям субконто осуществляется по
порядку (индексу), как они определены на соответствующем счете.
<Виды кор. субконто> (необязательный)
Тип: ПланВидовХарактеристикСсылка.<Имя плана видов
характеристик>, Массив. Передается ссылка или массив ссылок на виды
субконто. Виды кор. субконто определяют, какие значения корреспондирующих
субконто будут доступны по именам "КорСубконто1", "КорСубконто2" и т.д.
Кроме того, обороты будут посчитаны только по кор. счетам, имеющим
заданные виды кор. субконто. Если виды кор. субконто не заданы, то обращение
к значениям кор. субконто осуществляется по порядку (индексу), как они
определены на соответствующем счете.
Важно! Имеет смысл только для регистра бухгалтерии с поддержкой
корреспонденцией. Для регистра без корреспонденции параметр не существует!
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая набор значений измерений
регистра, по которым надо отбирать итоги. Допустимые значения ключа: Счет,
Субконто<Номер>, <Имя измерения>, КорСчет, КорСубконто<Номер>, <Имя
измерения>Кор (только для не балансовых измерений).
Если параметр не указан, то отбор не используется.
<Измерения> (необязательный)

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

Регбухобороты без условий.


На объектном уровне(все обороты всего и вся).

169
На уровне запросов.

170
На объектном уровне с условиями (Склад, руда ).

На объектном уровне с условиями (Склад, руда, счет).

171
7.4. РЕГБУХСУБКОНТО
Без условий.

172
С условием.

173
7.5. РЕГБУХОБОРОТЫОСТАТКИ.
Без условий.

Продолжение .

174
Продолжение.

175
С условием.

176
177
7.6. регбухОБОРОТЫДТКТ
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии>
ОборотыДтКт
Синтаксис:
ОборотыДтКт(<Начало периода>, <Конец периода>, <Виды субконто
Дт>, <Виды субконто Кт>, <Отбор>, <Измерения>, <Ресурсы>)
Параметры:
<Начало периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, начиная с
которого необходимо получить обороты. Если параметр не указан, то обороты
будут получены начиная с момента ведения базы данных. Если в качестве
параметра передана Дата или МоментВремени, то обороты за указанную дату
(момент времени) будут включены в результирующую таблицу значений.
<Конец периода> (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, определяющий
конец периода за который необходимо получить обороты. Если параметр не
указан, то обороты будут получены до самого позднего движения регистра.
Если в качестве параметра передана Дата или МоментВремени, то обороты за
указанную дату (момент времени) будут включены в результирующую таблицу
значений.
<Виды субконто Дт> (необязательный)
Тип: ПланВидовХарактеристикСсылка.<Имя плана видов
характеристик>, Массив. Передается ссылка или массив ссылок на виды
субконто. Параметр определяет, какие значения субконто дебета будут
доступны по именам "СубконтоДт1", "СубконтоДт2" и т.д. Кроме того, обороты
будут посчитаны только по счетам дебета, имеющим заданные виды субконто
дебета. Если параметр не задан, то обращение к значениям субконто дебета
осуществляется по порядку (индексу), как они определены на соответствующем
счете.
<Виды субконто Кт> (необязательный)
Тип: ПланВидовХарактеристикСсылка.<Имя плана видов
характеристик>, Массив. Передается ссылка или массив ссылок на виды
субконто. Виды субконто определяют, какие значения субконто кредита будут
178
доступны по именам "СубконтоКт1", "СубконтоКт2" и т.д. Кроме того, обороты
будут посчитаны только по счетам кредита, имеющим заданные виды субконто
кредита. Если виды субконто кредита не заданы, то обращение к значениям
субконто кредита осуществляется по порядку, как они определены на
соответствующем счете.
<Отбор> (необязательный)
Тип: Структура. Структура, содержащая набор значений измерений
регистра, по которым надо отбирать итоги. Допустимые значения ключа:
СчетДт, СубконтоДт<Номер>, СчетКт, СубконтоКт<Номер>, <Имя измерения>
или <Имя измерения>Дт и <Имя измерения>Кт.
Если параметр не указан, то отбор не используется.
<Измерения> (необязательный)
Тип: Строка. Список измерений, для которых надо получить обороты.
Строка, содержащая имена измерений, разделенных запятыми. Допустимые
имена измерений: СчетДт, СубконтоДт<Номер>, СчетКт, СубконтоКт<Номер>,
<Имя измерения> или <Имя измерения>Дт и <Имя измерения>Кт.
Если параметр не указан или указана пустая строка, то обороты будут
сформированы по всем измерениям.
Значение по умолчанию: Пустая строка
<Ресурсы> (необязательный)
Тип: Строка. Список ресурсов, для которых надо получить обороты.
Строка, содержащая имена ресурсов, разделенных запятыми.
Если параметр не указан или указана пустая строка, то обороты будут
сформированы по всем ресурсам.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: ТаблицаЗначений.
Описание:
Получает обороты по регистру бухгалтерии на заданный момент.
Обороты получаются в разрезе заданных измерений и по заданным ресурсам. В
измерения входят счет дебета, субконто дебета, счет кредита, субконто кредита,
измерения кредита, измерения (для балансовых) и измерения дебета, измерения
кредита (для не балансовых).

Без условий.

179
Продолжение.

С условиями.

180
7.7. регбухдвижениясСУбконто

Без условий.

181
С условиями.

182
Все вышеприведенное – это демонстрация работы с
бухгалтерскими регистрами на уровне запросов. Напомним, что на уровне
запросов можно только извлекать информацию и ничего нельзя положить в
регистры. Поэтому не надо забывать и возможность работы на объектном
уровне, где любые объекты конфигурации рассматриваются как массивы и, в
183
зависимости от ситуации, пользуемся конструкциями вида «для каждого из…»
или «пока Следующий».

8. Разузлование
Эта задача лежит в основе любого производственного процесса и, в
частности в основе конфигурации «УПП».
Ниже приводятся два варианта решения этой задачи с рекурсией и
без применения рекурсии. Базой для задачи являются два справочника: ГП –
главный предметный, содержащий все о предметах(материалах,
полуфабрикатах, сырье, сборочных единицах , конечной продукции и т.п.) с их
индивидуальными характеристиками вне связи с деревом разузлования;
СИ – состав изделий, в котором каждый элемент содержит связку
сборочная единица – компонент и информацию, характеризующую эту связь.

184
185
186
Вариант без рекурсии (на три уровня).

187
Вариант с рекурсией (на любое количество уровней)

188
Результат, разумеется такой же.

9. Работа с закладками
База.
Создадим двухуровневый справочник «Товары».

Создадим документ «ПТ» с двумя табличным частями –«Товары» и


«Услуги», с указанными полями.

189
Подходим к проблеме. Как видно , на форме документа размещены две
разнородных табличных части. Это отвлекает внимание и при большом
количестве табличных частей просто неудобно работать. В системе существует
специальный механизм «Закладки», позволяющий работать всегда только с
одной табличной частью и видеть всегда только одну табличную часть -
закладку. Как это делается.
190
Разместим на форме документа «Панель» с любым именем (по
умолчанию – Панель1).

Сразу же появится на панели «Страница 1».

Вызовем, находясь на панели, меню и пунктом «Добавить страницу»,


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

191
Активизируем «Страницу1» и скопируем табличную часть «Товары».

После этого, вставим «Командную панель» на страницу1.

192
Аналогично, проделаем со страницей 2.

Открыв свойства панели можно поменять названия страниц (Например,


тов и усл).

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

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


«При Смене Страницы».

194
Пояснения к тексту процедуры.
Все страницы панели нумеруются, начиная с нуля. Существуем метод
«Индекс», который получает индекс (номер) страницы. Внутри условия,
применен метод «Видимость».

При выборе страницы «Усл» - имеем вид формы.

195
При выборе страницы «Тов» - имеем вид формы.

Введем два регистра накопления(остатки) – «Товары» и «Услуги».

196
Результат проведения по регистру «Товары»

Результат проведения по регистру «Услуги».

197
В завершение, обратим внимание на то что можно создавать только одну
командную панель вне страниц, но указать в свойствах командной панели в
качестве источника действий «все источники»

10. Внешняя обработка «Загрузка данных из табличного


документа» (из Excel в 1С: Предприятие 8.1).

Вначале вставим эту обработку в конфигурацию. Заходим в конфигуратор


и находим ветвь «Обработки».
Щёлкаем по ней правой кнопкой мыши и выбираем «Вставить внешнюю
обработку, отчёт…» .
198
Добавление внешней обработки

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


«ЗагрузкаДанныхИзТабличногоДокумента.epf» .

Загрузка обработки
Откроем эту обработку. В появившемся окне, выберем вкладу «Формы» и
в поле «Основная форма обработки» поставим «Форма».

199
Выбор формы обработки
Далее создадим справочник «Материалы», который будет содержать
информацию о марке и сорте материала.

Создание справочника
В Excel’e создадим прототип этого справочника. Для удобства назовём его
так же «Материалы.xls» .

200
Создание справочника в Excel
Перейдём в 1С «Предприятие». Идём по маршруту: Меню->Операции-
>Обработка…->Загрузка данных из табличного документа. В появившемся окне
в поле «Режим загрузки» поставим «Загрузка в справочник», в поле «Вид
справочника» выберем тот, в который хотим выгрузить данные из табличного
документа.

Настройка загрузки справочника


Далее необходимо выбрать сам табличный документ, из которого мы
будем выгружать данные в справочник «Материалы» в 1С. Для этого жмём на
кнопку . В результате откроется диалог, в котором нужно указать путь к
созданному ранее справочнику в Excel’e «Материалы.xls» .

201
Выбор загружаемого документа
В результате на экране видим следующее:

Выгруженные данные из «Материалы.xls»


Вся информация, что содержалась в Excel’евском документе, была
перенесена в этот табличный документ. Перейдём на вкладку «Настройка». В
поле «Первая строка данных табличного документа» ставим номер строки, с
которой у нас идут сами значения, шапку не трогаем. В нашем случае данные
начинаются с 3 строки. Так же необходимо указать номера колонок. Для этого
нажимаем на кнопку и выбираем «Ручная нумерация колонок». В
появившейся колонке «№ колонки» уже автоматически проставлены номера, но
они не совпадают с нашими, по этому вручную вбиваем их. Так колонка «Код»
у нас 2-ая, «Материал» - 3, «Марка» - 4, «Сорт» - 5 .

202
Настройка загрузки
Вернёмся снова на вкладку «Табличный документ». Для того чтобы
удостоверится, что никаких ошибок при выгрузке и настройке не произошло,
нажмём на кнопку .. Если всё хорошо, должно появиться
сообщение следующего содержания:

Контроль заполнения
Для загрузки справочника всё готово. Жмём кнопку «Загрузить». В
результате открыв справочник «Материалы» в 1С видим:

Справочник, заполненный из табличного документа


Теперь рассмотрим технологию загрузки данных из табличного
документа в документ 1С. Для этого создадим документ «План потребности»,
табличная часть которого будет содержать следующие колонки: Материал
(указав в типе данных ссылку на справочник «Материалы»), Количество, Цена,
Сумма.

203
Документ «План потребности»
Аналогично создадим документ в Excel’e «План потребности.xls».

Документ «План потребности.xls»


Далее по той же схеме. Переходим в 1С «Предприятие». Меню-
>Операции->Обработка…->Загрузка данных из табличного документа. В
появившемся окне в поле «Режим загрузки» выбираем «Загрузка в табличную
часть». В результате этого действия появится ещё пара полей. Поле «Ссылка», в
нём нужно указать документ, в который мы будем выгружать данные (План
потребности). Далее после этого щёлкнув второй раз по кнопке «…» откроется
окно, в котором нужно создать документ нужной даты и номера, затем нажать
кнопку «ОК» и щёлкнуть дважды по документу, для того чтобы его выбрать. В
поле «Табличная часть» указывается табличная часть документа, в которую
должны будут выгружаться данные из файла «План потребости.xls». В нашем
случае это «Потребность».
204
Теперь можно нажать на кнопку и указать путь к документу «План
потребности.xls» .

Выбор загружаемого документа


В результате всех этих действий на экране должно появиться следующее:

Выгруженные данные из «План потребности.xls»


Переходим на вкладку «Настройка». На вкладке заполняем поле «Первая
строка данных табличного документа», ставим значение 3, так как данные у нас
начинаются именно с этой строки. Далее жмём по кнопке и
выбираем «ручная нумерация колонок». После этого в табличной части
появится новая колонка «№ колонки», в которой автоматически уже
проставлены номера. Но они не совпадают с нашими, поэтому вручную вводим
их. Так колонка «Материал» имеет 2-ой номер, «Количество» - 3, «Цена» - 4,
«Сумма» - 5. В колонке «Выражение. Искать по» ставим «Наименование».
Получаем следующее:

205
Настройка загрузки
Теперь можно произвести контроль заполнения. Возвращаемся на вкладку
«Табличный документ» и жмём на кнопку .

Контроль правильности заполнения


Всё в порядке, ошибок нет. Можно приступать к загрузке. Нажимаем на
кнопку «Загрузить». Перейдя к документу «План потребности» видим
следующее:

Документ, заполненный на основе табличного документа

206
Литература

1. А.П. Габец, Д.И. Гончаров, Д.В. Козырев, Д.С. Кухлевский, М.Г.


Радченко Профессиональная разработка в системе 1С: Предприятие 8., Москва,
«1С-Паблишинг», 2006;
2. Системная документация по 1С: Предприятие 8, Москва, Фирма «1С»,
2008;

207

Оценить