1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 1 - Что такое 1С бухгалтерия ? (22.06.2001 - 15 kb)
Шаг 2 - Создание каталога для данных (22.06.2001 - 38 kb)
Шаг 3 - Создаем план счетов. (23.06.2001 - 23 kb)
Шаг 4 - Дальше создаем план счетов. (23.06.2001 - 50 kb)
Шаг 5 - Первый отчет. (23.06.2001 - 37 kb)
Шаг 6 - Первый отчет дальше. (23.06.2001 - 44 kb)
Шаг 7 - Первый отчет переменные. (23.06.2001 - 41 kb)
Шаг 8 - Вывод счетов (24.06.2001 - 14 kb)
Шаг 9 - Создаем справочник Контрагенты (24.06.2001 - 64 kb)
Шаг 10 - Создаем журнал документов. (25.06.2001 - 29 kb)
Шаг 11 - Создаем документ. (25.06.2001 - 39 kb)
Шаг 12 - Общие выводы журнал документов. (26.06.2001 - 32 kb)
Шаг 13 - Изменяем документ (цена,сумма и так далее). (26.06.2001 - 87 kb)
Шаг 14 - Автоматический расчет. (27.06.2001 - 27 kb)
Шаг 15 - Номенклатура товара. (27.06.2001 - 70 kb)
Шаг 16 - Проводка ТМЦ. (28.06.2001 - 27 kb)
Шаг 17 - Делаем карточку счета. (28.06.2001 - 18 kb)
Шаг 18 - Управление бухгалтерскими итогами. (29.06.2001 - 17 kb)
Шаг 19 - Получаем бухгалтерские итоги. (29.06.2001 - 17 kb)
Шаг 20 - Ввод остатков. (30.06.2001 - 38 kb)
Шаг 21 - Виды субконто. (30.06.2001 - 38 kb)
Шаг 22 - Пользовательские интерфейсы. (01.07.2001 - 38 kb)
Шаг 23 - Как формируются рабочие места. (01.07.2001 - 26 kb)
Шаг 24 - Создаем пользователей. (02.07.2001 - 30 kb)
Шаг 25 - Проверяем пользователей. (02.07.2001 - 95 kb)
Шаг 26 - Резервные копии. (03.07.2001 - 28 kb)
Шаг 27 - Восстановление из резервной копии. (03.07.2001 - 30 kb)
Шаг 28 - Агрегатный тип данных. (04.07.2001 - 20 kb)
Шаг 29 - Передача отчета из одной конфигурации в другую. (03.08.2002 - 20 kb)
Шаг 30 - Распространенная ошибка внедрения 1С. (03.08.2002 - 20 kb)
Шаг 31 - Изучаем Счета - Создаем. (03.08.2002 - 20 kb)
Шаг 32 - Изучаем Cчета - создаем объект. (03.08.2002 - 20 kb)
Шаг 33 - Изучаем Cчета - Выбор по номеру НайтиПоКоду. (03.08.2002 - 20 kb)
Шаг 34 - Изучаем Cчета - Атрибут Код. (03.08.2002 - 20 kb)
Шаг 35 - Изучаем Счета - Наименование. (04.08.2002 - 20 kb)
Шаг 36 - Изучаем Счета - Выбор счета. (04.08.2002 - 20 kb)
Шаг 37 - Изучаем Счета - Выбран. (04.08.2002 - 20 kb)
Шаг 38 - Изучаем Счета - Предупреждение. (04.08.2002 - 20 kb)
Шаг 39 - Изучаем Счета - Объект больше не нужен. (04.08.2002 - 20 kb)
Шаг 40 - Что значит количественный учет. (04.08.2002 - 20 kb)
Шаг 41 - Изучаем Счета - Количественный. (04.08.2002 - 20 kb)
Шаг 42 - Объект бухгалтерские итоги. (04.08.2002 - 20 kb)
Шаг 43 - Изучаем бухгалтерские итоги - СКД. (04.08.2002 - 20 kb)
Шаг 44 - Изучаем Счета - ВыбратьСчета. (04.08.2002 - 20 kb)
Шаг 45 - Изучаем Счета - ПолучитьСчет. (04.08.2002 - 20 kb)
Шаг 46 - Как вообще работает бухгалтерия. (05.08.2002 - 20 kb)
Шаг 47 - Делаем проводку. (05.08.2002 - 20 kb)
Шаг 48 - Почему проводка может не отражаться в состоянии предприятия. (05.08.2002 - 20 kb)
Шаг 49 - Изучаем бухгалтерские итоги - КонПериода. (05.08.2002 - 20 kb)
Шаг 50 - Изучаем бухгалтерские итоги - НачПериода. (05.08.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 7 | 8 | 9
Smart Card
Development Kit

Комплект разработчика приложений работающих со смарт картами. Лучшая безопасность и неограниченные возможности для ваших программ. Подробнее...
Шаг 1 - Что такое 1С бухгалтерия ? (22.06.2001 - 15 kb)
Шаг 2 - Создание каталога для данных (22.06.2001 - 38 kb)
Шаг 3 - Создаем план счетов. (23.06.2001 - 23 kb)
Шаг 4 - Дальше создаем план счетов. (23.06.2001 - 50 kb)
Шаг 5 - Первый отчет. (23.06.2001 - 37 kb)
Шаг 6 - Первый отчет дальше. (23.06.2001 - 44 kb)
Шаг 7 - Первый отчет переменные. (23.06.2001 - 41 kb)
Шаг 8 - Вывод счетов (24.06.2001 - 14 kb)
Шаг 9 - Создаем справочник Контрагенты (24.06.2001 - 64 kb)
Шаг 10 - Создаем журнал документов. (25.06.2001 - 29 kb)
Шаг 11 - Создаем документ. (25.06.2001 - 39 kb)
Шаг 12 - Общие выводы журнал документов. (26.06.2001 - 32 kb)
Шаг 13 - Изменяем документ (цена,сумма и так далее). (26.06.2001 - 87 kb)
Шаг 14 - Автоматический расчет. (27.06.2001 - 27 kb)
Шаг 15 - Номенклатура товара. (27.06.2001 - 70 kb)
Шаг 16 - Проводка ТМЦ. (28.06.2001 - 27 kb)
Шаг 17 - Делаем карточку счета. (28.06.2001 - 18 kb)
Шаг 18 - Управление бухгалтерскими итогами. (29.06.2001 - 17 kb)
Шаг 19 - Получаем бухгалтерские итоги. (29.06.2001 - 17 kb)
Шаг 20 - Ввод остатков. (30.06.2001 - 38 kb)
Шаг 21 - Виды субконто. (30.06.2001 - 38 kb)
Шаг 22 - Пользовательские интерфейсы. (01.07.2001 - 38 kb)
Шаг 23 - Как формируются рабочие места. (01.07.2001 - 26 kb)
Шаг 24 - Создаем пользователей. (02.07.2001 - 30 kb)
Шаг 25 - Проверяем пользователей. (02.07.2001 - 95 kb)
Шаг 26 - Резервные копии. (03.07.2001 - 28 kb)
Шаг 27 - Восстановление из резервной копии. (03.07.2001 - 30 kb)
Шаг 28 - Агрегатный тип данных. (04.07.2001 - 20 kb)
Шаг 29 - Передача отчета из одной конфигурации в другую. (03.08.2002 - 20 kb)
Шаг 30 - Распространенная ошибка внедрения 1С. (03.08.2002 - 20 kb)
Шаг 31 - Изучаем Счета - Создаем. (03.08.2002 - 20 kb)
Шаг 32 - Изучаем Cчета - создаем объект. (03.08.2002 - 20 kb)
Шаг 33 - Изучаем Cчета - Выбор по номеру НайтиПоКоду. (03.08.2002 - 20 kb)
Шаг 34 - Изучаем Cчета - Атрибут Код. (03.08.2002 - 20 kb)
Шаг 35 - Изучаем Счета - Наименование. (04.08.2002 - 20 kb)
Шаг 36 - Изучаем Счета - Выбор счета. (04.08.2002 - 20 kb)
Шаг 37 - Изучаем Счета - Выбран. (04.08.2002 - 20 kb)
Шаг 38 - Изучаем Счета - Предупреждение. (04.08.2002 - 20 kb)
Шаг 39 - Изучаем Счета - Объект больше не нужен. (04.08.2002 - 20 kb)
Шаг 40 - Что значит количественный учет. (04.08.2002 - 20 kb)
Шаг 41 - Изучаем Счета - Количественный. (04.08.2002 - 20 kb)
Шаг 42 - Объект бухгалтерские итоги. (04.08.2002 - 20 kb)
Шаг 43 - Изучаем бухгалтерские итоги - СКД. (04.08.2002 - 20 kb)
Шаг 44 - Изучаем Счета - ВыбратьСчета. (04.08.2002 - 20 kb)
Шаг 45 - Изучаем Счета - ПолучитьСчет. (04.08.2002 - 20 kb)
Шаг 46 - Как вообще работает бухгалтерия. (05.08.2002 - 20 kb)
Шаг 47 - Делаем проводку. (05.08.2002 - 20 kb)
Шаг 48 - Почему проводка может не отражаться в состоянии предприятия. (05.08.2002 - 20 kb)
Шаг 49 - Изучаем бухгалтерские итоги - КонПериода. (05.08.2002 - 20 kb)
Шаг 50 - Изучаем бухгалтерские итоги - НачПериода. (05.08.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 51 - Почему проводок может быть не видно. (05.08.2002 - 20 kb)
Шаг 52 - Счета - Субсчета понимаем. (06.08.2002 - 20 kb)
Шаг 53 - Изучаем Счета - ЭтоГруппа. (06.08.2002 - 20 kb)
Шаг 54 - Зачем нужны субконто. (06.08.2002 - 20 kb)
Шаг 55 - Указываем виды субконто для счета. (06.08.2002 - 20 kb)
Шаг 56 - Изучаем Счета - КоличествоСубконто. (06.08.2002 - 20 kb)
Шаг 57 - Изучаем Счета - Выводим виды субконто - ВидСубконто. (06.08.2002 - 20 kb)
Шаг 58 - Субконто + Проводка = Одна тонкость. (06.08.2002 - 20 kb)
Шаг 59 - Разборки с корректностью проводок. (06.08.2002 - 20 kb)
Шаг 60 - Объектная модель проводок. (06.08.2002 - 20 kb)
Шаг 61 - Объект операция. (06.08.2002 - 20 kb)
Шаг 62 - Изучаем операции - Выбираем - ВыбратьОперации. (06.08.2002 - 20 kb)
Шаг 63 - Изучаем операции - ПолучитьОперацию. (07.08.2002 - 20 kb)
Шаг 64 - Изучаем операции - ДатаОперации. (07.08.2002 - 20 kb)
Шаг 65 - Изучаем операции - ВыбратьПроводки. (07.08.2002 - 20 kb)
Шаг 66 - Изучаем операции - ПолучитьПроводку. (07.08.2002 - 20 kb)
Шаг 67 - Объектная модель проводок развиваем. (07.08.2002 - 20 kb)
Шаг 68 - Создаем объект Документ. (07.08.2002 - 20 kb)
Шаг 69 - Изучаем документ - ВыбратьДокументы. (07.08.2002 - 20 kb)
Шаг 70 - Изучаем документы - ПолучитьДокумент. (07.08.2002 - 20 kb)
Шаг 71 - Изучаем документы - НомерДок. (07.08.2002 - 20 kb)
Шаг 72 - Изучаем документ - Операция. (07.08.2002 - 20 kb)
Шаг 73 - А теперь получим проводки. (07.08.2002 - 20 kb)
Шаг 74 - Изучаем проводку - Cумма. (07.08.2002 - 20 kb)
Шаг 75 - Отчеты - Документы - Слои. (07.08.2002 - 20 kb)
Шаг 76 - Изучаем форму - При открытии. (07.08.2002 - 20 kb)
Шаг 77 - Изучаем форму - создаем закладки - ИспользоватьЗакладки. (07.08.2002 - 20 kb)
Шаг 78 - Изучаем форму - Закладки. (07.08.2002 - 20 kb)
Шаг 79 - Изучаем закладку - ДобавитьЗначение. (07.08.2002 - 20 kb)
Шаг 80 - Изучаем форму - ИспользоватьСлой. (07.08.2002 - 20 kb)
Шаг 81 - Изучаем форму - ПриВыбореЗакладки. (07.08.2002 - 20 kb)
Шаг 82 - А как же с диалогом. (07.08.2002 - 20 kb)
Шаг 83 - Видимость элементов. (08.08.2002 - 20 kb)
Шаг 84 - Изучаем форму - как добраться до элементов. (08.08.2002 - 20 kb)
Шаг 85 - Изучаем форму, делаем элементы не видимыми. (08.08.2002 - 20 kb)
Шаг 86 - Изучаем справочники- Код. (08.08.2002 - 20 kb)
Шаг 87 - Изучаем справочники - Тип кода. (08.08.2002 - 20 kb)
Шаг 88 - Изучаем справочники - автоматическая нумерация. (08.08.2002 - 20 kb)
Шаг 89 - Изучаем справочники - Как запретить редактировать код. (08.08.2002 - 20 kb)
Шаг 90 - Изучаем счет - Что такое активный счет. (08.08.2002 - 20 kb)
Шаг 91 - Изучаем Cчета - Активный. (08.08.2002 - 20 kb)
Шаг 92 - Изучаем справочники - ВыбратьЭлементы. (08.08.2002 - 20 kb)
Шаг 93 - Изучаем справочник - ПолучитьЭлемент. (08.08.2002 - 20 kb)
Шаг 94 - Как можно передавать информацию. (08.08.2002 - 20 kb)
Шаг 95 - Создаем объект XBase. (08.08.2002 - 20 kb)
Шаг 96 - Изучаем XBase - Добавляем поле. (08.08.2002 - 20 kb)
Шаг 97 - Изучаем XBase - Создаем файл. (09.08.2002 - 20 kb)
Шаг 98 - Изучаем XBase - Закрываем файл. (09.08.2002 - 20 kb)
Шаг 99 - Изучаем Xbase - Добавляем запись. (09.08.2002 - 20 kb)
Шаг 100 - Изучаем XBase - Записываем запись. (09.08.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 101 - Изучаем справочники - Реквизиты. (09.08.2002 - 20 kb)
Шаг 102 - Изучаем XBase - Пишем реквизит справочника. (09.08.2002 - 20 kb)
Шаг 103 - Как найти общий язык с бухгалтерией - или вторая ошибка внедрения 1С. (09.08.2002 - 20 kb)
Шаг 104 - Изучаем Форму - Итог по колонке. (10.08.2002 - 20 kb)
Шаг 105 - Изучаем форму - Расчет итогов. (10.08.2002 - 20 kb)
Шаг 106 - Изучаем таблицу на форме - Расчеты. (10.08.2002 - 20 kb)
Шаг 107 - Изучаем форму - Автоматический расчет. (10.08.2002 - 20 kb)
Шаг 108 - Изучаем справочник - добавляем элемент. (10.08.2002 - 20 kb)
Шаг 109 - Изучаем справочник - Записать. (10.08.2002 - 20 kb)
Шаг 110 - Изучаем XBase - Открываем файл. (11.08.2002 - 20 kb)
Шаг 111 - Изучаем XBase - Переходим на первую запись. (11.08.2002 - 20 kb)
Шаг 112 - Изучаем XBase - Получаем следующею. (11.08.2002 - 20 kb)
Шаг 113 - Изучаем XBase - определяем конец файла. (11.08.2002 - 20 kb)
Шаг 114 - Перенос справочников из одной конфигурации в другую через XBase - в DBF. (11.08.2002 - 20 kb)
Шаг 115 - Перенос справочников из одной конфигурации в другую через Xbase - из DBF. (11.08.2002 - 20 kb)
Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase. (11.08.2002 - 20 kb)
Шаг 117 - Изучаем Cправочник - пометка удаления. (11.08.2002 - 20 kb)
Шаг 118 - Изучаем Cправочник - удаление. (11.08.2002 - 20 kb)
Шаг 119 - Изучаем Cправочники - типизация реквизитов. (11.08.2002 - 20 kb)
Шаг 120 - Перевод справочника в другую конфигурацию - типизированный атрибут. (11.08.2002 - 20 kb)
Шаг 121 - Изучаем Справочник - запись по наименованию. (12.08.2002 - 20 kb)
Шаг 122 - Изучаем справочник - как заставить выбирать программно. (12.08.2002 - 20 kb)
Шаг 123 - Изучаем справочник - как проверить что выбран. (12.08.2002 - 20 kb)
Шаг 124 - Четвертая ошибка внедрения 1С - с чего начинать. (12.08.2002 - 20 kb)
Шаг 125 - Изучаем операции - Новая проводка. (12.08.2002 - 20 kb)
Шаг 126 - Изучаем операции - Дебет. (12.08.2002 - 20 kb)
Шаг 127 - Изучаем операции - Дебет.Счет. (12.08.2002 - 20 kb)
Шаг 128 - Изучаем операции - Кредит. (12.08.2002 - 20 kb)
Шаг 129 - Изучаем операции - Счет Кредита. (12.08.2002 - 20 kb)
Шаг 130 - Изучаем операцию - Cумма. (12.08.2002 - 20 kb)
Шаг 131 - Изучаем операции - Записать. (12.08.2002 - 20 kb)
Шаг 132 - Операция результат проведения документа. (12.08.2002 - 20 kb)
Шаг 133 - Что делать, если для документа проводок нужно много. (12.08.2002 - 20 kb)
Шаг 134 - Изучаем операцию - Cодержание. (13.08.2002 - 20 kb)
Шаг 135 - Изучаем операции - Количество. (13.08.2002 - 20 kb)
Шаг 136 - Изучаем операции - Еще про дату операции. (13.08.2002 - 20 kb)
Шаг 137 - Откуда берутся формы документов в бухгалтерии. (13.08.2002 - 20 kb)
Шаг 138 - Объектная модель вокруг счет фактур. (13.08.2002 - 20 kb)
Шаг 139 - Изучаем документы - фильтр по журналу. (14.08.2002 - 20 kb)
Шаг 140 - Изучаем документы - Настройки. (14.08.2002 - 20 kb)
Шаг 141 - Изучаем бухгалтерские итоги - на любой момент. (14.08.2002 - 20 kb)
Шаг 142 - Изучаем бухгалтерские итоги - запрос. (14.08.2002 - 20 kb)
Шаг 143 - Бухгалтерские итоги - предварительный обзор. (14.08.2002 - 20 kb)
Шаг 144 - Два варианта получения остатков по складу. (15.08.2002 - 20 kb)
Шаг 145 - Изучаем бухгалтерские итоги - обороты. (15.08.2002 - 20 kb)
Шаг 146 - Немного теории про документы. (15.08.2002 - 20 kb)
Шаг 147 - Изучаем таблицу - Создаем. (16.08.2002 - 20 kb)
Шаг 148 - Изучаем таблицы - Что делать, если нужно две - ИсходнаяТаблица. (16.08.2002 - 20 kb)
Шаг 149 - Изучаем таблицу - показываем. (16.08.2002 - 20 kb)
Шаг 150 - Изучаем таблицу - как она вообще формируется. (16.08.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 151 - Изучаем таблицу - Выводим секцию. (16.08.2002 - 20 kb)
Шаг 152 - Изучаем таблицу - запрещаем редактирование и делаем похожей на документ. (16.08.2002 - 20 kb)
Шаг 153 - Изучаем таблицы - Оформление таблицы. (16.08.2002 - 20 kb)
Шаг 154 - Изучаем таблицу - выводим много секций. (16.08.2002 - 20 kb)
Шаг 155 - Изучаем таблицы - повторение шапки на другой странице. (16.08.2002 - 20 kb)
Шаг 156 - Понимание НДС. (17.08.2002 - 20 kb)
Шаг 157 - Изучаем документы - Ввод на основании. (17.08.2002 - 20 kb)
Шаг 158 - Изучаем документ - процедура ввода на основании. (17.08.2002 - 20 kb)
Шаг 159 - Изучаем документ - два метода создания документов. (17.08.2002 - 20 kb)
Шаг 160 - Изучаем документ - Что происходит при создании нового документа. (17.08.2002 - 20 kb)
Шаг 161 - Изучаем документ - запрещаем создавать новый. (17.08.2002 - 20 kb)
Шаг 162 - Откуда взялся бух учет. (17.08.2002 - 20 kb)
Шаг 163 - Изучаем документ - Проверяем основание. (17.08.2002 - 20 kb)
Шаг 164 - Изучаем документ - Получаем данные от основания. (17.08.2002 - 20 kb)
Шаг 165 - Изучаем документ - Готовимся к контролю. (17.08.2002 - 20 kb)
Шаг 166 - Изучаем документ - Ищем по номеру. (17.08.2002 - 20 kb)
Шаг 167 - Изучаем документ - Записываем. (17.08.2002 - 20 kb)
Шаг 168 - Изучаем документ - При записи. (17.08.2002 - 20 kb)
Шаг 169 - Учет - бухгалтерский и оперативный - еще одна ошибка внедрения 1С. (19.08.2002 - 20 kb)
Шаг 170 - Как ведут оперативный учет, некоторые рассуждения. (19.08.2002 - 20 kb)
Шаг 171 - Пример оперативного учета с использованием документов. (19.08.2002 - 20 kb)
Шаг 172 - Создаем регистр. (19.08.2002 - 20 kb)
Шаг 173 - Что такое измерение в регистрах. (19.08.2002 - 20 kb)
Шаг 174 - Что такое ресурс. (19.08.2002 - 20 kb)
Шаг 175 - Что такое реквизит. (19.08.2002 - 20 kb)
Шаг 176 - Что нужно для изменения состояния регистра. (20.08.2002 - 20 kb)
Шаг 177 - Получаем состояние оборотного регистра. (20.08.2002 - 20 kb)
Шаг 178 - Получаем состояние регистра остатков. (20.08.2002 - 20 kb)
Шаг 179 - Чем еще могут помочь регистры. (20.08.2002 - 20 kb)
Шаг 180 - Изучаем регистр - ВыбратьДвижения. (20.08.2002 - 20 kb)
Шаг 181 - Изучаем регистр - более глубокая расшифровка. (20.08.2002 - 20 kb)
Шаг 182 - Интеграция 1С в мир (как делать свои расширения). (20.08.2002 - 20 kb)
Шаг 183 - Что такое глобальный модуль. (21.08.2002 - 20 kb)
Шаг 184 - Много вариантов? А может один. (21.08.2002 - 20 kb)
Шаг 185 - Журнал Документов - как отображать много. (21.08.2002 - 20 kb)
Шаг 186 - Почему реквизиты должны иметь одинаковые имена. (21.08.2002 - 20 kb)
Шаг 187 - Глобальный модуль и конфигурация, меньше кода, меньше ошибок. (21.08.2002 - 20 kb)
Шаг 188 - Всякое украшательство конфигурации. (21.08.2002 - 20 kb)
Шаг 189 - Изучаем справочник - периодический реквизит. (22.08.2002 - 20 kb)
Шаг 190 - Изучаем константы - Они тоже бывают периодические. (22.08.2002 - 20 kb)
Шаг 191 - Изучаем периодическую константу. (22.08.2002 - 20 kb)
Шаг 192 - Изучаем константы - Получить. (22.08.2002 - 20 kb)
Шаг 193 - Установка константы - Установить. (22.08.2002 - 20 kb)
Шаг 194 - В чем хранится информация в 1C. (22.08.2002 - 20 kb)
Шаг 195 - Где хранится конфигурация. (22.08.2002 - 20 kb)
Шаг 196 - Передача параметров в процедуры. (23.08.2002 - 20 kb)
Шаг 197 - Решаем задачу обратного расчета. (23.08.2002 - 20 kb)
Шаг 198 - Процедуры и функции обратного хода. (23.08.2002 - 20 kb)
Шаг 199 - Когда происходят события. (23.08.2002 - 20 kb)
Шаг 200 - Доступность элемента из процедуры. (23.08.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 201 - Пара слов о синтаксисе помощника. (23.08.2002 - 20 kb)
Шаг 202 - Чем хороша лицензионная версия, как убедить директора. (23.08.2002 - 20 kb)
Шаг 203 - Отладка, вариант первый. (25.08.2002 - 20 kb)
Шаг 204 - Отладка, вариант второй. (25.08.2002 - 20 kb)
Шаг 205 - Второй вариант отладки - только в монопольном режиме. (25.08.2002 - 20 kb)
Шаг 206 - Отладка - использование отладчика. (25.08.2002 - 20 kb)
Шаг 207 - Все ли элементы можно сохранить в документе. (25.08.2002 - 20 kb)
Шаг 208 - Так что же делать с переключателем. (25.08.2002 - 20 kb)
Шаг 209 - 1С против калькулятора - округление. (26.08.2002 - 20 kb)
Шаг 210 - Как сделать разные типы журналов. (26.08.2002 - 20 kb)
Шаг 211 - Что такое сторнирование. (27.08.2002 - 20 kb)
Шаг 212 - Удаление данных из 1C, что реально происходит. (27.08.2002 - 20 kb)
Шаг 213 - Стандартные отчеты в нашу конфигурацию - какие будут проблемы. (27.08.2002 - 20 kb)
Шаг 214 - Короткое Если или чем может помочь знак вопроса. (28.08.2002 - 20 kb)
Шаг 215 - Что такое перечисление. (28.08.2002 - 20 kb)
Шаг 216 - Боремся с удаленными записями - первый способ. (28.08.2002 - 20 kb)
Шаг 217 - Боремся с удаленными записями - второй способ. (28.08.2002 - 20 kb)
Шаг 218 - От перебора документов к запросу. (28.08.2002 - 20 kb)
Шаг 219 - От перебора документов к запросу дальше. (28.08.2002 - 20 kb)
Шаг 220 - Таблица для печати - обратим внимание на шаблон. (29.08.2002 - 20 kb)
Шаг 221 - Использование запроса для перебора. (29.08.2002 - 20 kb)
Шаг 222 - Как узнать в каком файле DBF хранятся данные. (29.08.2002 - 20 kb)
Шаг 223 - Боремся с удаленными записями - третий способ (правильный). (29.08.2002 - 20 kb)
Шаг 224 - Чем может помочь монитор пользователей. (29.08.2002 - 20 kb)
Шаг 225 - Изучаем справочники - Запрет ручного исправления. (29.08.2002 - 20 kb)
Шаг 226 - Что такое ОКУД. (31.08.2002 - 20 kb)
Шаг 227 - Что такое ОКПО. (31.08.2002 - 20 kb)
Шаг 228 - Анализ по субконто - изучаем. (31.08.2002 - 20 kb)
Шаг 229 - Анализ счета по субконто - АнализСчетаПоСубконто. (31.08.2002 - 20 kb)
Шаг 230 - Сетевая версия. (01.09.2002 - 20 kb)
Шаг 231 - Чем хороша Административная установка. (01.09.2002 - 20 kb)
Шаг 232 - Отчет по регистрам, где взять. (01.09.2002 - 20 kb)
Шаг 233 - Универсальные отчеты - первый шаг. (01.09.2002 - 20 kb)
Шаг 234 - Как работают с метаданными. (02.09.2002 - 20 kb)
Шаг 235 - Код - Полный код. (02.09.2002 - 20 kb)
Шаг 236 - Изучаем справочники - ищем по коду. (02.09.2002 - 20 kb)
Шаг 237 - Обзор архитектуры 1C. (02.09.2002 - 20 kb)
Шаг 238 - Один неприятный психологический момент работы в 1C. (02.09.2002 - 20 kb)
Шаг 239 - Несколько документов - как сделать общую нумерацию. (03.09.2002 - 20 kb)
Шаг 240 - Открываем отчет из кода. (03.09.2002 - 20 kb)
Шаг 241 - Передача параметров в форму - способ первый. (03.09.2002 - 20 kb)
Шаг 242 - Как удалять документы, которые управляют справочниками. (04.09.2002 - 20 kb)
Шаг 243 - Самый быстрый способ поиска элемента справочника при выборе на форме. (04.09.2002 - 20 kb)
Шаг 244 - Чем могут помочь обработки. (04.09.2002 - 20 kb)
Шаг 245 - Обзор архитектуры 1C со стороны ввода информации. (04.09.2002 - 20 kb)
Шаг 246 - Обзор архитектуры 1C со стороны хранения информации. (05.09.2002 - 20 kb)
Шаг 247 - Предприятие одним взглядом. (05.09.2002 - 20 kb)
Шаг 248 - Устанавливаем фильтр на движения регистра. (06.09.2002 - 20 kb)
Шаг 249 - Калькулятор к числу. (06.09.2002 - 20 kb)
Шаг 250 - Синтаксис помощник и шаблоны. (07.09.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 251 - Как реализован вызов одного отчета из другого. (07.09.2002 - 20 kb)
Шаг 252 - Подробнее о ОбработкаЯчейкиТаблицы. (07.09.2002 - 20 kb)
Шаг 253 - Как капризы рушат типовую конфигурацию. (11.09.2002 - 20 kb)
Шаг 254 - Ошибки в проводках и перепроведение документов. (11.09.2002 - 20 kb)
Шаг 255 - Еще одно ускорение - поиск ссылок на объект. (11.09.2002 - 20 kb)
Шаг 256 - Программно пишем документ. (13.09.2002 - 20 kb)
Шаг 257 - Что делать если нужно получить сгруппированные данные. (13.09.2002 - 20 kb)
Шаг 258 - Понимание запроса. (13.09.2002 - 20 kb)
Шаг 259 - Регистр и сложная фильтрация. (02.10.2002 - 20 kb)
Шаг 260 - Как не выдавать того, чего нет на складе. (02.10.2002 - 20 kb)
Шаг 261 - Изучаем движение субконто. (07.10.2002 - 20 kb)
Шаг 262 - Как увидеть обороты между счетами. (07.10.2002 - 20 kb)
Шаг 263 - Запуск 1С и параметры запуска. (07.10.2002 - 20 kb)
Шаг 264 - Посреднические услуги. (07.10.2002 - 20 kb)
Шаг 265 - Ведем оперативный учет. (07.10.2002 - 20 kb)
Шаг 266 - Автоматически получаем сумму в счет фактуру. (07.10.2002 - 20 kb)
Шаг 267 - Работаем с датами - НачМесяца. (07.10.2002 - 20 kb)
Шаг 268 - Работаем с датами - КонМесяца. (07.10.2002 - 20 kb)
Шаг 269 - Маленькие замечания по выборке из регистра за период. (07.10.2002 - 20 kb)
Шаг 270 - Знакомимся с диаграммой. (10.10.2002 - 20 kb)
Шаг 271 - Что это за количество серий. (10.10.2002 - 20 kb)
Шаг 272 - Добавляем количество точек. (10.10.2002 - 20 kb)
Шаг 273 - Устанавливаем значения. (10.10.2002 - 20 kb)
Шаг 274 - Что такое - основные средства. (27.10.2002 - 20 kb)
Шаг 275 - ПБУ 6/01 Общие положения. (27.10.2002 - 20 kb)
Шаг 276 - ПБУ 6/01 Оценка основных средств. (27.10.2002 - 20 kb)
Шаг 277 - ПБУ 6/01 Амортизация основных средств. (27.10.2002 - 20 kb)
Шаг 278 - ПБУ 6/01 Восстановление основных средств. (27.10.2002 - 20 kb)
Шаг 279 - ПБУ 6/01 Выбытие основных средств. (27.10.2002 - 20 kb)
Шаг 280 - ПБУ 6/01 Раскрытие информации в бухгалтерской отчетности. (27.10.2002 - 20 kb)
Шаг 281 - Как организован учет основных средств в 1C. (28.10.2002 - 20 kb)
Шаг 282 - Налоговый кодекс - Статья 258 - Амортизационные группы. (28.10.2002 - 20 kb)
Шаг 283 - Методы начисления амортизации. (28.10.2002 - 20 kb)
Шаг 284 - Как делал я. (28.10.2002 - 20 kb)
Шаг 285 - Изучаем справочник основные средства. (29.10.2002 - 20 kb)
Шаг 286 - Что происходит при нажатии на кнопку инвентарной карточки? (29.10.2002 - 20 kb)
Шаг 287 - Изучаем справочники ТекущийЭлемент. (29.10.2002 - 20 kb)
Шаг 288 - Изучаем справочник- Это Группа. (29.10.2002 - 20 kb)
Шаг 289 - А теперь все вместе. (29.10.2002 - 20 kb)
Шаг 290 - Объект работы с периодическими реквизитами. (30.10.2002 - 20 kb)
Шаг 291 - Изучаем периодические реквизиты - ИспользоватьОбъект. (30.10.2002 - 20 kb)
Шаг 292 - Изучаем периодический - Выбираем значения. (30.10.2002 - 20 kb)
Шаг 293 - Что дальше? Получаем основные даты. (30.10.2002 - 20 kb)
Шаг 294 - Изучаем периодический реквизит - ПолучитьЗначение. (30.10.2002 - 20 kb)
Шаг 295 - Изучаем периодический - ТекущийДокумент. (30.10.2002 - 20 kb)
Шаг 296 - А действительно документ был выбран? (30.10.2002 - 20 kb)
Шаг 297 - Получаем ссылки на основные документы или все вместе. (30.10.2002 - 20 kb)
Шаг 298 - Дальше и дальше. (30.10.2002 - 20 kb)
Шаг 299 - Производим расчет бух итогов. (30.10.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 301 - Изучаем СписокЗначений - получаем размер. (31.10.2002 - 20 kb)
Шаг 302 - Изучаем список - получаем значение по индексу. (31.10.2002 - 20 kb)
Шаг 303 - Как получают балансовую стоимость основного средства. (31.10.2002 - 20 kb)
Шаг 304 - Как получается амортизация. (31.10.2002 - 20 kb)
Шаг 305 - Что такое шифр по Шифр По ЕНАОФ. (01.11.2002 - 20 kb)
Шаг 306 - Что в конце процедуры печати ОС-6. (01.11.2002 - 20 kb)
Шаг 307 - Как вводятся в эксплуатацию основные средства. (01.11.2002 - 20 kb)
Шаг 308 - Изучаем ввод в эксплуатацию - кредит. (01.11.2002 - 20 kb)
Шаг 309 - Как организовать реквизит полное наименование в плане счетов. (01.11.2002 - 20 kb)
Шаг 310 - Что происходит при открытии ВводВЭксплуатациюОС. (02.11.2002 - 20 kb)
Шаг 311 - Что происходит при открытии ВводВЭксплуатациюОС - Дальше. (02.11.2002 - 20 kb)
Шаг 312 - Что происходит при открытии ВводВЭксплуатациюОС - Все вместе. (02.11.2002 - 20 kb)
Шаг 313 - Что происходит при выборе вида вложений. (02.11.2002 - 20 kb)
Шаг 314 - Что такое объект внеоборотных активов. (02.11.2002 - 20 kb)
Шаг 315 - Осторожно - основные средства и периодические реквизиты. (03.11.2002 - 20 kb)
Шаг 316 - А что если уже сделали ? (03.11.2002 - 20 kb)
Шаг 317 - Изучаем периодический - Значение на дату. (03.11.2002 - 20 kb)
Шаг 318 - Ликвидируем ошибку. (03.11.2002 - 20 kb)
Шаг 319 - Сохраняем переодический. (03.11.2002 - 20 kb)
Шаг 320 - Как проводится ввод в эксплуатацию. (07.11.2002 - 20 kb)
Шаг 321 - Как проводится ввод в эксплуатацию, дальше. (07.11.2002 - 20 kb)
Шаг 322 - Как проводится ввод в эксплуатацию, еще дальше. (07.11.2002 - 20 kb)
Шаг 323 - Перед проведением сохраняем реквизиты. (07.11.2002 - 20 kb)
Шаг 324 - Откуда взялся налоговый учет. (07.11.2002 - 20 kb)
Шаг 325 - Как организован налоговый учет в 1С. (07.11.2002 - 20 kb)
Шаг 326 - Удаление проводок, документов, элементов справочников. (08.11.2002 - 20 kb)
Шаг 327 - Как самим найти ссылки. (08.11.2002 - 20 kb)
Шаг 328 - Выбираем строки из таблицы значений. (08.11.2002 - 20 kb)
Шаг 329 - Получаем строку из таблицы значений. (08.11.2002 - 20 kb)
Шаг 330 - А вообще, что такое таблица значений ? (08.11.2002 - 20 kb)
Шаг 331 - Получаем значения. (08.11.2002 - 20 kb)
Шаг 332 - Много пользователей и администратор. (12.11.2002 - 20 kb)
Шаг 333 - Как прекратить работу системы. (12.11.2002 - 20 kb)
Шаг 334 - А теперь все вместе - Выгоняем пользователей. (12.11.2002 - 20 kb)
Шаг 335 - Как работать с метаданными. (14.11.2002 - 20 kb)
Шаг 336 - Журнал и справочник тоже форма. (14.11.2002 - 20 kb)
Шаг 337 - Делаем закладки в журнале. (14.11.2002 - 20 kb)
Шаг 338 - Устанавливаем отбор. (14.11.2002 - 20 kb)
Шаг 339 - Как сделать кнопку выбора периода. (17.11.2002 - 20 kb)
Шаг 340 - Первый шаг к своей расшифровке в таблице. (17.11.2002 - 20 kb)
Шаг 341 - Подозрение, что 1C пользуется другим конфигуратором. (17.11.2002 - 20 kb)
Шаг 342 - Первый пункт подозрения не оправдался. (18.11.2002 - 20 kb)
Шаг 343 - Что такое ALS файл. (18.11.2002 - 20 kb)
Шаг 344 - Полное рассеивание подозрений. (19.11.2002 - 20 kb)
Шаг 345 - Что делать когда реквизит не известен. (20.11.2002 - 20 kb)
Шаг 346 - А сохранится ли тип в документе. (20.11.2002 - 20 kb)
Шаг 347 - Типы субконто в соответствии со счетом. (22.11.2002 - 20 kb)
Шаг 348 - Получаем вид субконто. (22.11.2002 - 20 kb)
Шаг 349 - Устанавливаем вид реквизита по счету. (22.11.2002 - 20 kb)
Шаг 350 - Как учитывается уставной капитал. (23.11.2002 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 351 - Бухгалтерия и статистика. (23.11.2002 - 20 kb)
Шаг 352 - БухИтоги - изучаем дальше. (24.11.2002 - 20 kb)
Шаг 353 - Расшифровываем сложные итоги - ВыбратьСчета. (24.11.2002 - 20 kb)
Шаг 354 - Получаем счет. (24.11.2002 - 20 kb)
Шаг 355 - 1C и ошибки - опасно как никогда. (25.11.2002 - 20 kb)
Шаг 356 - Сложные группировки по счетам. (25.11.2002 - 20 kb)
Шаг 357 - Создаем колонки в таблице значений. (25.11.2002 - 20 kb)
Шаг 358 - Заполняем таблицу значений. (25.11.2002 - 20 kb)
Шаг 359 - Вот оно, группировка в таблице значений. (25.11.2002 - 20 kb)
Шаг 360 - Осталось определить количество строк. (25.11.2002 - 20 kb)
Шаг 361 - Форматирование таблицы по умолчанию. (27.11.2002 - 20 kb)
Шаг 362 - Как хранится информация из монитора пользователя. (27.11.2002 - 20 kb)
Шаг 363 - Запуск внешней программы. (28.11.2002 - 20 kb)
Шаг 364 - Экспорт отчетов в Excel. (28.11.2002 - 20 kb)
Шаг 370 - Как скопировать конфигурацию - второй вариант. (14.12.2002 - 20 kb)
Шаг 371 - Объединение конфигураций - код. (14.12.2002 - 20 kb)
Шаг 372 - Объединение конфигураций, как поведут себя элементы на форме. (14.12.2002 - 20 kb)
Шаг 373 - Выводы о объединении конфигурации. (14.12.2002 - 20 kb)
Шаг 374 - Субсчета и типовая (или шестая ошибка). (14.12.2002 - 20 kb)
Шаг 375 - А если очень хочется субсчет (на примере выписки). (14.12.2002 - 20 kb)
Шаг 376 - А если очень хочется субсчет (на примере акта выполнения услуг). (14.12.2002 - 20 kb)
Шаг 377 - А если очень хочется субсчет - продолжение (на примере акта выполнения услуг). (14.12.2002 - 20 kb)
Шаг 378 - Организация валютного учета. (19.12.2002 - 20 kb)
Шаг 379 - Забалансовые счета. (19.12.2002 - 20 kb)
Шаг 380 - Русский и английский. (19.12.2002 - 20 kb)
Шаг 381 - Создаем функцию перевода месяца на английский. (19.12.2002 - 20 kb)
Шаг 382 - Извлекаем день. (19.12.2002 - 20 kb)
Шаг 383 - А год. (16.12.2002 - 20 kb)
Шаг 384 - Фокусы шахматки. (19.12.2002 - 20 kb)
Шаг 385 - Разделитель учета. (19.12.2002 - 20 kb)
Шаг 386 - Объект файловой системы. (19.12.2002 - 20 kb)
Шаг 387 - Изучаем документ - Сами заполняем таблицу. (19.12.2002 - 20 kb)
Шаг 388 - Отбор по нескольким субконто. (07.01.2003 - 20 kb)
Шаг 389 - Отбор по нескольким субконто - дальше. (07.01.2003 - 20 kb)
Шаг 390 - Табло счетов как средство слежения за макропараметрами. (07.01.2003 - 20 kb)
Шаг 391 - Справочник неопределенного типа в таблице. (12.01.2003 - 20 kb)
Шаг 392 - Как разобраться с неопределенным справочником при проведении ? (12.01.2003 - 20 kb)
Шаг 393 - Другой вариант. (12.01.2003 - 20 kb)
Шаг 394 - И еще один вариант. (12.01.2003 - 20 kb)
Шаг 395 - Какие проблемы при проведении неопределенного элемента ? (12.01.2003 - 20 kb)
Шаг 396 - Когда автоматическое формирование налоговых регистров не сработает. (12.01.2003 - 20 kb)
Шаг 397 - Проблемы конфигуратора 1С. (12.01.2003 - 20 kb)
Шаг 398 - Текст в текстовый модуль. (12.01.2003 - 20 kb)
Шаг 399 - Зачем экспортировать текст. (12.01.2003 - 20 kb)
Шаг 400 - Программно создаем группу. (18.01.2003 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

1С Бухгалтерия шаг за шагом

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Smart Card
Development Kit

Комплект разработчика приложений работающих со смарт картами. Лучшая безопасность и неограниченные возможности для ваших программ. Подробнее...
Шаг 401 - Добавляем элемент в группу. (18.01.2003 - 20 kb)
Шаг 402 - Windows 2000 - копируем текст в блокнот. (26.01.2003 - 20 kb)
Шаг 403 - Ключевое слово - далее. (26.01.2003 - 20 kb)
Шаг 404 - Оформление таблиц. (18.02.2003 - 20 kb)
Шаг 405 - Абсолютно универсальный документ. (18.02.2003 - 20 kb)
Шаг 406 - Определяем, что счет валютный. (18.02.2003 - 20 kb)
Шаг 407 - Отбор по нескольким субконто - очень не явная ошибка. (18.02.2003 - 20 kb)
Шаг 408 - Валютные счета. (18.02.2003 - 20 kb)
Шаг 409 - Быстрое перемещение по процедурам. (26.02.2003 - 20 kb)
Шаг 410 - 1C и картинки. (02.03.2003 - 20 kb)
Шаг 411 - Картинка на форме. (02.03.2003 - 20 kb)
Шаг 412 - Загрузка картинки из внешнего файла. (02.03.2003 - 20 kb)
Шаг 413 - Опять опасности при выборе данных по субконто. (16.03.2003 - 20 kb)
Шаг 414 - Быстрое построение отчетов по субконто. (16.03.2003 - 20 kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 1 - Что такое 1С бухгалтерия

Шаг 1 - Что такое 1С бухгалтерия

1С Бухгалтерия - это универсальная программа, которая позволяет вести все типы бухгалтерского учета. История ее развития длительная и первоначально это была отдельная программа, позволяющая строить бухгалтерский баланс. На данный момент она переросла в 1С Предприятие и стала комплексом программ бухгалтерского учета. Если эта программа у Вас установлена, то Вы можете найти ее через Пуск -> Программы -> 1С Предприятие

1_1.gif (8716 b)

Я буду рассказывать о версии 7.5. Версий этих много. Эта наиболее новая и удачная. Отличительная особенность этой версии в разделении процесса настройки и процесса работы. Настройка производится в Конфигураторе, а работа в 1С Предприятии.

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

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

Больше всего времени будет уделено именно поддержке и настройке !!!

Дополнительные материалы:
"Шаг 1 - Преобразование файлов"
"Шаг 134 - Графика, функции GDI и реальные данные - Первый взгляд на проблему"
"Шаг 11 - Объявления(Declarations) и Определения(Definitions)"
"Шаг 21 - Файловая система - FAT32"
"Шаг 31 - Кто такой MCSD ???"
Следующий Шаг | Оглавление
Автор Каев Артем.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 2 - Создание каталога для данных

Шаг 2 - Создание каталога для данных

Для начала нужно создать пустой каталог. Давайте создадим каталог на диске C: с именем 1Сprobe.

2_1.gif (1026 b)

Запускаем конфигуратор:

2_2.gif (3707 b)

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

2_3.gif (3645 b)

Дальше появится окно о регистрации.

2_4.gif (2315 b)

Сюда нужно занести данные и указать каталог. После нажатия кнопки ОК появится запись о новой базе данных.

2_5.gif (3968 b)

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

2_6.gif (1964 b)

Появится окно с объектами конфигурации. Выберите меню Файл -> сохранить для сохранения инициализованных данных. У вас будут спрашивать о том, например, что нет старого словаря данных или нет данных. Всегда отвечайте на все ОК или Принять. В результате у вас появится пустая инициализированная база данных. Выйдите из конфигуратора. Теперь точно также для проверки запустите 1С предприятие, выберите нашу базу и скажите ОК. Программа запустится, правда в ней не все будет работать, так как нет никаких данных, но с этим мы позже разберемся.

2_7.gif (3014 b)

Предыдущий Шаг | Следующий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 3 - Создаем план счетов

Шаг 3 - Создаем план счетов

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

3_1.gif (4035 b)

Мы будет создавать новый план счетов. Щелкните правой кнопкой мыши на названии План счетов. И выберите пункт меню новый план счетов:

3_2.gif (2572 b)

Появится окошко, в котором можно изменять План счетов. В поле идентификатор можно поместить название плана счетов, мы дадим имя Новый.

3_3.gif (2565 b)

Просто закройте это окно и посмотрите в план счетов. Там появится запись о новом элементе. Давайте сохраним данные через пункт меню файл -> сохранить, ответим положительно на все вопросы. И выйдем из конфигуратора. Запустим 1С предприятие монопольно для проверки плана счетов с нашей базой. Теперь при выборе меню Операции -> План счетов будет появляться наш план счетов.

3_4.gif (4013 b)

После этого вы можете запускать 1С в нормальном режиме.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 4 - Дальше создаем план счетов

Шаг 4 - Дальше создаем план счетов

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

4_1.gif (1890 b)

Появится окно редактирования счетов. Посмотрите поля заполнения счетов.

4_2.gif (4366 b)

Название и комментарий, понятно, что ни к чему не обязывает, его содержание понимают исключительно бухгалтера. А вот шаблон кода нужен, он описывает общие правила создания кодов счетов. В данном случае написано, что счет может состоять из 3 символов и к счету могут быть добавлены субсчета на один уровень тоже из трех символов. Давайте поменяем это поле вот так.

###.###.###

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

4_3.gif (2240 b)

Давайте создадим новую строку и введем номер счета 50. Имя счета - проверка. После ввода имени нажмите Enter и у Вас спросят - будет ли счет иметь субсчета. Пока ответим нет.

4_4.gif (4640 b)

В результате появится срока с счетом. Новую строку можно создавать из меню Действие -> Новая строка:

4_5.gif (2629 b)

Давайте вставим новую строку с номером 51. С именем - проверка кол счет, на вопрос об субсчетах ответим нет и поставим количественный учет по счету.

4_6.gif (2815 b)

Тоже самое счет 53 с именем - проверка заб и галочкой забалансовый. Точно также с последующими номерами активный, пассивный.

Вот все счета, которые нужно создать.

4_7.gif (4744 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 5 - Первый отчет

Шаг 5 - Первый отчет

Как всегда идем в конфигуратор и запускаем конфигурацию. Теперь нам нужно создать новый элемент в параметрах отчет.

5_1.gif (3023 b)

Появится окно, в котором настраивается название.

5_2.gif (2463 b)

Теперь можно нажать ОК и вы увидите, что появился новый элемент в дереве.

5_3.gif (1597 b)

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

5_4.gif (4428 b)

Пока закройте эту панель. Сохраните изменения и выйдите из конфигуратора. Запустите 1С предприятие и выберите меню Операции –> Отчеты.

5_5.gif (3418 b)

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

5_6.gif (1635 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 6 - Первый отчет, дальше

Шаг 6 - Первый отчет, дальше

Итак, пора настроить наш отчет. Давайте запустим конфигуратор. Теперь нужно два раза щелкнуть на кнопке сформировать, после этого появится окно настройки:

6_1.gif (3265 b)

В поле идентификатор нужно внести название процедуры, которая будет вызываться в результате нажатия на эту кнопку. Давайте назовем ее "сформировать". Если Вы теперь переключитесь на модуль, то увидите, что есть такая процедура:

6_2.gif (3185 b)

Вот именно здесь и пишется код для формирования отчета. Мы и напишем следующий код:

//*******************************************
Процедура Сформировать()
    Перем Т;
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

Что здесь написано ??? Создать объект таблица. Устанавливаем таблицу и параметры, после этого говорим от том, какие секции нужно выводить. Показываем таблицу. Где находится эта таблица ??? На вкладке "таблица" :-). Но здесь нужно создать секцию.

6_3.gif (4669 b)

Здесь создается шаблон для вывода данных. Пока мы просто создадим секцию и внесем ее. Это делается через меню Таблица -> Включить секцию:

6_4.gif (2997 b)

Дальше у Вас спросят об имени. Дайте имя - секция_1, и о расположении вертикальном и горизонтальном. Сохраните конфигуратор, запустите 1С Бухгалтерия, потом вызовите отчет и нажмите сформировать.

6_5.gif (3342 b)

Вы видите ваш отчет. Теперь его надо бы наполнить, но это в следующем шаге.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 7 - Первый отчет, переменные

Шаг 7 - Первый отчет, переменные

Итак, давайте посмотрим, как использовать и выводить переменные в наших отчетах. Открываем в конфигураторе наш отчет. В модуле заведем переменную и присвоим ей цифру 3.

//*******************************************
Процедура Сформировать()
    Перем Т;
    Перем Пр;
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Пр=3;
    Т.ВывестиСекцию("Секция_2");
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

Создадим в таблице горизонтальную секцию с именем секция_2 и на ячейке щелкнем правой кнопкой мыши, чтобы появились свойства ячейки. В типе нам нужно установить выражение, а ниже ввести имя переменной. После этого нажать на кнопку ОК и вы увидите, что в таблицу занесено значение.

7_1.gif (7215 b)

Давайте сохраним изменения, нажав на кнопку дискета.

7_2.gif (2665 b)

Теперь переключимся на модуль и проверим синтаксис.

7_3.gif (6414 b)

Теперь прямо отсюда можно запустить 1С Предприятие для проверки нашей работы.

7_4.gif (2160 b)

Запустится 1С Предприятие вместе с той базой, в которой мы производим изменения. Выберите отчет и наш отчет ПланСчетов результат должен быть такой.

7_5.gif (2645 b)

Как видите, мы вывели переменную.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 8 - Вывод счетов

Шаг 8 - Вывод счетов

Так как многое теперь умеем, то давайте выведем счета. Вот функция:

//*******************************************
Процедура Сформировать()
Перем Т;
Перем Сч;
Т = СоздатьОбъект("Таблица");
Сч = СоздатьОбъект("Счет");
Т.ВывестиСекцию("Секция_1");
Сч.ВыбратьСчета();
Пока Сч.ПолучитьСчет() = 1 Цикл
    Т.ВывестиСекцию("Секция_2");
КонецЦикла;
Т.ТолькоПросмотр(1);
Т.Показать()
КонецПроцедуры

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

8_1.gif (2351 b)

Вот и можно воспользоваться нашим отчетом:

8_2.gif (1578 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 9 - Создаем справочник Контрагенты

Шаг 9 - Создаем справочник Контрагенты

Итак, для работы помимо счетов нам нужны справочники. Создать их можно в конфигураторе. Наиболее распространенный справочник - это справочник контрагентов, в котором находятся поставщики и покупатели. Вот немного об этом справочнике.

Справочник "Контрагенты" содержит информацию о контрагентах фирмы (юридических и физических лицах). Данный справочник используется как для выписки первичных документов, так и для ведения аналитического учета. Флажок "Прямые расчеты" следует установить, если банк контрагента является самостоятельным банком и рассчитывается с другими банками напрямую. Если же расчетный счет контрагента открыт в филиале головного банка или, в конкретном случае, расчеты ведутся через другой банк, с которым банк контрагента поддерживает корреспондентские отношения, флажок "Прямые расчеты" устанавливать не следует. Если для контрагента выбран тип "Частное лицо", то для него также заполняются сведения в закладке "Паспортные данные".

Находим в конфигураторе справочники и создаем новый:

9_1.gif (6436 b)

В идентификатор вносим Контрагенты и количество уровней 3. Теперь нам нужно описать реквизиты. Мы сделаем один реквизит - это телефон. Выбираем Новый:

9_2.gif (5125 b)

Вносим информацию Идентификатор – телефон и длину строки 50. После чего нажимаем Ок и в реквизитах появится телефон. Дальше нужно установить, как будет редактироваться этот справочник в списке или в диалоге. Давайте поставим в списке:

9_3.gif (2409 b)

Теперь нам нужно установить форму списка. Нажимаем на кнопку "Форма списка":

9_4.gif (1547 b)

И помещаем рядом со списком дерево группы:

9_5.gif (6501 b)

Закрываем и сохраняем изменения в конфигураторе. Теперь мы можем вызвать наш справочник из 1С. В меню Справочники появится наш справочник:

9_6.gif (2524 b)

Давайте создадим две группы покупатели и поставщики:

9_7.gif (9204 b)

Обратите внимание на кнопки вверху, где новые записи и группы. Просто подведите мышку и Вам напишут, что они обозначают.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 10 - Создаем журнал документов

Шаг 10 - Создаем журнал документов

В ходе работы бухгалтера возникает огромное количество документов. Например, документы на поступление товарно-материальных ценностей, платёжки, доверенности и так далее. Удобно хранить данные документы в разных журналах для быстрого доступа к ним. Вот мы и создадим журнал учет ТМЦ. Выбираем журналы и создаем новый журнал:

10_1.gif (3154 b)

Заполним пока только название журнала:

10_2.gif (1630 b)

И закроем окно. Журнал появится у нас в списке:

10_3.gif (3546 b)

Теперь сохраним изменения. Запустим 1С и посмотрим меню Журнал документов. Наш журнал должен быть в списке.

10_4.gif (2661 b)

Откроем его и попробуем создать новый документ. Выйдет окно создания документа. И оно будет пустым потому, что у нас еще нет документа для создания записи в журнале.

10_5.gif (2948 b)

Давайте создадим документ в следующем шаге.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 11 - Создаем документ

Шаг 11 - Создаем документ

Выбираем журналы и создаем новый журнал:

11_1.gif (4188 b)

Даем идентификатор поступление ТМЦ. Выбираем журнал, который создавали ранее, то есть учет ТМЦ. Теперь создадим реквизиты шапки. Нажмем на кнопку Новый, внесем идентификатор и выберем контрагенты.

11_2.gif (5736 b)

Закрывайте окна и смотрите на дерево конфигурации, в шапке появился наш элемент.

11_3.gif (4137 b)

Давайте теперь добавим форму, так как форма добавляется в элементе, то нам нужно его отредактировать. Для этого нажимаем правую кнопку мыши и выбираем Редактировать.

11_4.gif (2613 b)

Там есть кнопка Форма, которая позволяет Вам изменить форму. Щелкните по ней. На форму надо поместить нашего поставщика. Так как поставщик - это реквизит формы, давайте щелкнем по кнопке создания реквизита:

11_5.gif (761 b)

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

11_6.gif (4216 b)

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

11_7.gif (3972 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 12 - Общие выводы журнал документов

Шаг 12 - Общие выводы журнал документов

Итак, у нас есть справочники. В этих справочниках хранится много информации, в нашем случае о поставщиках и покупателях.

12_1.gif (4266 b)

Для хранения данных о документах по темам используется журнал документов. Мы создали журнал документов Учет ТМЦ.

12_2.gif (3797 b)

Ввод в этот журнал производится на основе заполнения документа, который мы тоже создали:

12_3.gif (2083 b)

Мы создали реквизит шапки из справочника контрагентов:

12_4.gif (2755 b)

И пометили этот реквизит на форму для заполнения.

12_5.gif (1570 b)

Теперь этот реквизит будет храниться в нашем документе.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 13 - Изменяем документ (цена,сумма и так далее)

Шаг 13 - Изменяем документ (цена,сумма и так далее)

Естественно, что при поступлении материалов у них есть цена и сумма. Все это надо бы хранить и считать. Поэтому нам нужно создать место для хранения и организовать заполнения этих форм. Давайте для нашего журнала учет ТМЦ создадим графу Сумма:

13_1.gif (4453 b)

В дереве конфигурации вы можете увидеть, что появилась графа Сумма:

13_2.gif (1313 b)

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

13_3.gif (7706 b)

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

13_4.gif (3530 b)

То же самое и для цены. Посмотрите на дерево. Вы увидите новые поля:

13_5.gif (1319 b)

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

13_6.gif (2316 b)

Закроем редактирование документа и вернемся к редактированию журнала. Там нам надо связать наш идентификатор суммы с полями документа.

13_7.gif (4398 b)

Создадим новый объект и свяжем его с поставщиками, вот так:

13_8.gif (8940 b)

Все, сохраняем изменения и запускаем 1С. Здесь теперь мы можем производить операции по созданию документа с сумой и ценой. Пока расчет не производится, но данные сохраняются.

13_9.gif (7094 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 14 - Автоматический расчет

Шаг 14 - Автоматический расчет

Если Вы заметили, то в Документе не производится автоматический расчет. И сумма не сохраняется. Это плохо. Для того, чтобы изменения происходили нам нужно изменить форму и модуль.

С начала код в модуле:

Процедура Расчет()
    Сумма=Количество*Цена;
КонецПроцедуры

Процедура ПриОткрытии()
    Форма.Цена.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.Количество.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.Сумма.ВыполнятьФормулуТолькоПриИзменении(1)
КонецПроцедуры

Процедура ПриЗаписи()
    Операция.СуммаОперации = Итог("Сумма");
КонецПроцедуры

Функция Расчет() будет производить расчет, как таковой. ПриОткрытии() - это стандартная функция, которая будет настраивать параметры формы, а ПриЗаписи() будет подводить итог сумм. Помните, мы устанавливали галочку. Вот теперь этот расчет нужно привязать к колонке, а делается это так:

14_1.gif (8088 b)

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

14_2.gif (980 b)

Так вот давайте сделаем шапочку "поступление товарно-материальных ценностей".

14_3.gif (2417 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 15 - Номенклатура товара

Шаг 15 - Номенклатура товара

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

Мы это уже делали. Количество ровней - 3, длина наименования - 50. У каждого товара есть цена, поэтому мы создадим реквизит "Цена". Не забудьте, что там число.

15_1.gif (4535 b)

Форму списка сделайте опять с деревом. После этого сохраните изменения. Посмотрите в дереве настроек.

15_2.gif (1142 b)

Теперь мы можем добавить к нашей таблице документа в реквизиты табличной части название товарной единицы с идентификатором ТМЦ, привязав к нему номенклатуру.

15_3.gif (3776 b)

Сразу после этого сохраните изменения. Вам придется закрыть документ, открыть снова, удалить табличную часть и внести ее повторно. Не забудьте про наш расчет, поле "ТМЦ" лучше поменять на "Наименование".

15_4.gif (7301 b)

Запустите 1С и создайте группу "Одежда", в которой будет находиться список одежды.

15_5.gif (4507 b)

Теперь при вводе документа мы имеем возможность указывать наименование товара.

15_6.gif (4260 b)

Но неплохо было бы подставлять цену автоматически, раз она у нас есть. Значит, в модуль надо написать процедуру. Только сначала привяжем ее к изменению "ТМЦ".

15_7.gif (5653 b)

А вот и код:

Процедура ПриВыбореТМЦ()
    Цена = ТМЦ.Цена;
    Расчет();
КонецПроцедуры

При выборе "ТМЦ" будет производиться автоматическая подстановка цены:

15_8.gif (3419 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 16 - Проводка ТМЦ

Шаг 16 - Проводка ТМЦ

Давайте создадим проводку и будем считать, что ТМЦ у нас основные средства. Обработка проведения находится в модуле документа. Но нам надо два счета. Мы делаем приобретение основных средств. При приобретении основных средств используются счета.

08 - капитальные вложения
08.04 - приобретение основных средств
60 - расчеты с поставщиками
60.1 - расчеты с поставщиками

16_1.gif (2679 b)

Теперь мы можем с Вами написать процедуру проводки:

Процедура ОбработкаПроведения()
    Пока ПолучитьСтроку() = 1 Цикл
        Операция.НоваяПроводка();
        Операция.Кредит.Счет = СчетПоКоду("60.1");
        Операция.Дебет.Счет = СчетПоКоду("08.4");
        Операция.СодержаниеПроводки = "Поступление ОС";
        Операция.Сумма = Сумма;
        Операция.НомерЖурнала="OC";
    КонецЦикла;
    Операция.Записать();
КонецПроцедуры

Да, к проводке я сделал два реквизита:

16_2.gif (1242 b)

Можно посмотреть операцию в 1С Предприятии:

16_3.gif (3539 b)

И какие приводки она сформировала:

16_4.gif (5327 b)

Видите? Каждая проводка занесена.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 17 - Делаем карточку счета

Шаг 17 - Делаем карточку счета

Итак, нам бы хотелось посмотреть, какие операции проводились с данным счетом. Создадим отчет с именем КарточкаСчета и диалог для него.

17_1.gif (2276 b)

Идентификатор для поля ввода имеет название "счет". Напишем функцию формирования:

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

Процедура Сформировать()
Перем Т;
Перем Ит;
Перем Заголовок;
Перем Опер;

Если Счет.Выбран() = 0 Тогда
Предупреждение("Не указан счет!");
Возврат;
КонецЕсли;

Т = СоздатьОбъект("Таблица");
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ВыполнитьЗапрос(Дата1, Дата2, Счет,,,, "Проводка");
Заголовок = "Карточка счета: "+Счет;
Т.ВывестиСекцию("Секция_1");
Ит.ВыбратьПериоды();

Пока Ит.ПолучитьПериод() = 1 Цикл
Опер = Ит.Операция;
Т.ВывестиСекцию("Секция_2");
КонецЦикла;

Т.ТолькоПросмотр(1);
Т.Показать();
КонецПроцедуры

И таблицу:

17_2.gif (2945 b)

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

17_3.gif (794 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 18 - Управление бухгалтерскими итогами

Шаг 18 - Управление бухгалтерскими итогами

Управление бухгалтерскими итогами производится из меню Операции -> Управление бухгалтерскими итогами.

18_1.gif (5327 b)

Появляется следующее окно:

18_2.gif (2523 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 19 - Получаем бухгалтерские итоги

Шаг 19 - Получаем бухгалтерские итоги

Для быстрого получения информации о состоянии счетов есть возможность использовать объект БухгалтерскиеИтоги. Используя этот объект можно быстро получить информации об итогах бухгалтерской деятельности с детальностью в месяц. Эти итоги 1С поддерживает в актуальном состоянии. При детальности менее месяца нужно использовать запрос. Давайте попробуем воспользоваться этим объектом для того, чтобы получить итоги по счету, дополнив отчет карточки счета. Вот новый код модуля:

Процедура Сформировать()
    Перем Т;
    Перем Ит;
    Перем Заголовок;
    Перем Опер;
    Перем ДебитовоеСальдо;
    Перем КредитовоеСальдо;
    Перем ДебитовоеСальдоКонец;
    Перем КредитовоеСальдоКонец;
    Перем ДебитовыйОборот;
    Перем КредитовыйОборот;

    Если Счет.Выбран() = 0 Тогда
        Предупреждение("Не указан счет!");
        Возврат;
    КонецЕсли;
    Т = СоздатьОбъект("Таблица");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ВыполнитьЗапрос(Дата1, Дата2, Счет,,,, "Проводка");
    Заголовок = "Карточка счета: "+Счет;
    Т.ВывестиСекцию("Секция_1");
    Ит.ВыбратьПериоды();
    Пока Ит.ПолучитьПериод() = 1 Цикл
        Опер = Ит.Операция;
        Т.ВывестиСекцию("Секция_2");
    КонецЦикла;

    Т.ВывестиСекцию("Секция_3");

    ДебитовоеСальдо=Ит.СНД(Счет);
    КредитовоеСальдо=Ит.СНК(Счет);
    ДебитовоеСальдоКонец=Ит.СКД(Счет);
    КредитовоеСальдоКонец=Ит.СКД(Счет);
    ДебитовыйОборот=Ит.ДО(Счет);
    КредитовыйОборот=Ит.КО(Счет);

    Т.ВывестиСекцию("Секция_4");
    Т.ВывестиСекцию("Секция_5");
    Т.ВывестиСекцию("Секция_6");
    Т.ВывестиСекцию("Секция_7");
    Т.ВывестиСекцию("Секция_8");
    Т.ТолькоПросмотр(1);
    Т.Показать();

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

А вот новая таблица:

19_1.gif (5092 b)

Результат построения отчета:

19_2.gif (2752 b)

Как видите очень быстро и просто строится отчет.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 20 - Ввод остатков

Шаг 20 - Ввод остатков

Для начала ведения учета необходимо ввести начальные остатки для формирования сальдо на момент начало операций. Прежде чем будут вводиться остатки необходимо определить дату, начиная с которой необходимо внести остатки. Так вот, ввод остатков должен проводится на число раньше, чем формируемые отчеты. То есть, если Вы собираетесь формировать остатки по первому кварталу 2001 года, то остатки надо вводить 20-30 числами 2000 года. Тогда эти остатки будут как входящее сальдо. Остатки вводятся через фиктивный счет 00, который есть в стандартной конфигурации. Вот он:

20_1.gif (3028 b)

Проводки проводятся для ввода остатков через этот счет. Давайте сделаем этот счет для нашей базы.

20_2.gif (5106 b)

Давайте создадим документ для ввода остатков. И журнал для учета остатков. Я не буду расписывать, как это сделать уже было написано раньше. Смотрите, структура в результате:

20_3.gif (3079 b)

Вот модуль диалога и формы:

Процедура ПриЗаписи()
Операция.СуммаОперации = Итог("Сумма");
КонецПроцедуры

// ********************
//
Процедура ОбработкаПроведения()
Пока ПолучитьСтроку() = 1 Цикл
Операция.НоваяПроводка();
Операция.Кредит.Счет = СчетПоКоду("08.4");
Операция.Дебет.Счет = СчетПоКоду("00");
Операция.СодержаниеПроводки = "Ввод начальних остатков ОС";
Операция.Сумма = Сумма;
Операция.НомерЖурнала="ВOC";
КонецЦикла;
Операция.Записать();
КонецПроцедуры

И теперь проведите ввод остатков но по 1 ноября:

20_4.gif (3119 b)

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

20_5.gif (5802 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 21 - Виды субконто

Шаг 21 - Виды субконто

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

21_1.gif (1884 b)

Давайте дадим имя новому субконто Предприятия. На втором шаге у Вас спросят справочник. Надо выбрать пункт "Создать новый справочник".

21_2.gif (4437 b)

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

21_3.gif (3222 b)

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

21_4.gif (2563 b)

Появится окно, в котором нужно указать максимальное количество субконто:

21_5.gif (1746 b)

Теперь в плане счетов можно выбрать субконто. Есть также возможность выбирать тип субконто связанный со счетом.

21_6.gif (3368 b)

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

21_7.gif (3192 b)


www.ПЕРВЫЕ ШАГИ.ru ::

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

22_1.gif (1479 b)

У нас интерфейсов нет. Давайте создадим новый интерфейс:

22_2.gif (1494 b)

Дадим ему имя "бухгалтер". Имея интерфейс можно редактировать меню:

22_3.gif (2313 b)

У Вас есть конструктор меню:

22_4.gif (804 b)

Нажмите на него, после появления диалогового окна скажите "построить". В результате на основе построенных Вами документов и журналов построится меню.

22_5.gif (1913 b)

Закройте это окошечко, сохраните изменения. Посмотрите на результат в 1С:

22_6.gif (2640 b)

Создались точно такие же меню, которые присутствуют в стандартной конфигурации. Мастер взял все наши настройки и построил меню.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 23 - Как формируются рабочие места

Шаг 23 - Как формируются рабочие места

Итак, 1С позволяет вам создать некоторые рабочие места с набором прав. Эти права дают или запрещают пользователю проводить какие-либо действия над данными программы. Основа распределения прав лежит на создании трех объектов.

23_1.gif (2968 b)

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

23_2.gif (3987 b)

Теперь нам надо сформировать наборы прав. Переходите на вкладку "права":

23_3.gif (916 b)

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

23_4.gif (7913 b)

А для администратора нужно установить все права.

23_5.gif (4754 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 24 - Создаем пользователей

Шаг 24 - Создаем пользователей

Создать пользователей, можно щелкнув на панели инструментов:

24_1.gif (2105 b)

Здесь можно создавать пользователей. Давайте создадим двух пользователей: администратор и директор. Теперь для каждого из пользователей нужно установить свойства. Это атрибуты:

24_2.gif (4098 b)

И роль этого пользователя:

24_3.gif (2234 b)

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

24_4.gif (3781 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 25 - Проверяем пользователей

Шаг 25 - Проверяем пользователей

Теперь давайте запустим 1С предприятие и посмотрим, что изменилось. При запуске у Вас будет проводиться авторизация прав.

25_1.gif (2561 b)

Зайдите под именем "директор" и Вы увидите, что у Вас есть только отчет. И в нем вы можете работать.

25_2.gif (2285 b)

Попробуйте вызвать журнал документов. Вы получите вот такую надпись:

25_3.gif (1441 b)

Как же разрешить директору просматривать журнал документов? Вернемся в конфигуратор. Перейдем на права и выставим права директора.

25_4.gif (5374 b)

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

25_5.gif (1246 b)

Нажав на эту кнопку, у Вас есть возможность установить видимость операций:

25_6.gif (1901 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 26 - Резервные копии

Шаг 26 - Резервные копии

Естественно, что нет ничего важнее резервной копии. А так как бухгалтерский учет на предприятии важен, то повреждение данных может привести к катастрофе. Раз уж ведется бухгалтерия на компьютере, надо обеспечить и возможность восстановления в случае аварии, чтобы потом не было мучительно больно. 1С умеет делать резервные копии, сжимая их в ZIP. Там будут храниться таблицы и конфигурация. Резервное копирование производится в конфигураторе. В меню Файл -> Сохранить данные:

26_1.gif (4336 b)

При выборе меню - Сохранить данные у Вас появится окно с настройками, там нужно указать какие файлы нужно архивировать. Так же Вы должны выбрать место, куда будете производить архивирование.

26_2.gif (3938 b)

По окончанию архивирования должно появиться окно с информацией о совершенной работе.

26_3.gif (3963 b)

По нажатию "завершить" появится окно с номером архива и информацией о количестве частей. Зачем ? Можно копировать и на дискету, тогда 1С сама разделит на архивы. Но лучше хранить информацию на сервере, а с него копию на CD, в последнее время либо дискеты, либо дисководы барахлят. По умолчанию сохраняются следующие файлы:

*.dbf - файлы данных
*.md - описание конфигурации
*.dd - описание структуры данных
*.slp - словать для чисел,дат прописью и так далее.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 27 - Восстановление из резервной копии

Шаг 27 - Восстановление из резервной копии

Восстановление производится в конфигураторе:

27_1.gif (4121 b)

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

27_2.gif (2997 b)

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

27_3.gif (2026 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 28 - Агрегатный тип данных

Шаг 28 - Агрегатный тип данных

Почему я решил написать именно про этот тип данных? Дело в том, что этот тип данных немного не привычен программистам. У него нет типа как такового. Его тип вы задаете в ходе создания объекта. То есть он может быть разным, в зависимости от объекта, с которым вы его создаете. Мы с Вами несколько раз использовали этот тип. Вот смотрите:

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

У этого типа данных есть методы и атрибуты, которые зависят от того, на основании какого объекты вы создали этот тип. Общая идея работы такая:

Создать объект
Выбрать элемент
Использовать методы и атрибуты

На основе чего можно создавать объекты ? На основе реальных объектов естественно. Вот смотрите:

28_1.gif (5821 b)

Есть набор агрегатных типов. Вот он:

Константа
Справочник
Перечисления
Документ
Регистр
ПланСчетов
Счет
ВидСубконто
Операция
БухгалтерскиеИтоги
ЖурналРасчетов
ВидРасчета
ГруппаРасчетов
Календарь
Запрос
Текст
Таблица
СписокЗначений
ТаблицаЗначений
Картинка
Переодический
ФС

Как видите некоторые объекты типа БухгалтерскиеИтоги не имеют физических аналогов в конфигураторе и являются следствием расчетов, а такие объекты как ФС для работы с файлами просто существуют, не отражаясь в конфигураторе. Атрибуты и методы мы с вами использовали в таблице вот здесь:

28_2.gif (2168 b)

А это метод.

Т.ВывестиСекцию("Секция_1");

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 29 - Передача отчета из одной конфигурации в другую

Шаг 29 - Передача отчета из одной конфигурации в другую

Задача эта возникает в тот момент, когда Вы разрабатываете отчет в одном месте, а нужно его передать на место работы. Итак, есть возможность сохранять отчет как внешний. Вызываем правой кнопкой контекстное меню.

29_1.gif (5001 b)

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

29_2.gif (5510 b)

Остается поместить его на дискету или по сети. Дальше мы можем этот отчет вставить. Выбрав другой пункт меню.

29_3.gif (4861 b)

Найти его.

29_4.gif (3612 b)

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

29_5.gif (2219 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 30 - Распространенная ошибка внедрения 1С

Шаг 30 - Распространенная ошибка внедрения 1С

Столкнувшись с попытками внедрением 1С на предприятиях, по крайней мере из того, что я видел вывод простой не идет. Обычно рассуждения у руководства такие. Мы посадим бухгалтера, и все будет хорошо. Совсем забывая про специфику. Итак, самая первая ошибка связана и жизненной реальностью. А реальность такова. План счетов на реальном предприятии отличается от типового. Несмотря на то, что 1C очень и очень рекомендует использовать типовой план счетов, как минимум на начальном этапе, кто же все эти книги читает. Бухгалтер, не долго думая, узнает, что есть конфигуратор и там начинает править счета. Реклама у 1C сделана очень хорошо и кажется, что все будет автоматически. Не тут-то было. Из прошлых шагов ранее хорошо видно, что все документы связаны с проводками. Возьмите например накладную. Типовую накладную. В модуле написано достаточно большое количество вариантов проводок. Вот, например, кусок кода:

Операция.НоваяПроводка();
Операция.Дебет.Счет = СчетПоКоду("62.1");
Операция.Дебет.Контрагенты = Получатель;
Операция.Дебет.Основание = Договор;
Операция.Дебет.ВариантыРеализации = СписокВариантов.ПолучитьЗначение(i);
Операция.Кредит.Счет = СчетПоКоду("46");
Операция.Кредит.ВариантыРеализации = СписокВариантов.ПолучитьЗначение(i);
Операция.Сумма = СуммаОтгр[i];
Операция.СодержаниеПроводки = "Учтена выручка";
Операция.НомерЖурнала = "ТВ";

Как вы думаете, что будет если счета 62.1 не будет? А что, если у этого счета не будет контрагента. Ну, все понятно. На начальном этапе лучше максимально привести план счетов предприятия к плану счетов типовой конфигурации, чтобы Вам не говорил Главный бухгалтер. Практически это так. Получаете остатки по счетам текущего плана счетов, а вносите остатки на стандартный план счетов. В дальнейшем можно хитро манипулировать счетами, создавая субсчета для удобства.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 32 - Изучаем Cчета – создаем объект

Шаг 32 - Изучаем Cчета – создаем объект

Для того, чтобы добраться до счета нам нужно как до него программно добраться. Сделать это можно из разных мест. Мы сделаем это из отчета.

32_1.gif (1744 b)

Для создания объектов используется функция СоздатьОбъект:

СоздатьОбъект Создает объект агрегатного типа данных и возвращает ссылку на него.

Синтаксис:
СоздатъОбъект(<ИмяАгрегатногоТипа>)

Англоязычный синоним:
CreateObject

Параметры:
<ИмяАгрегатногоТипа> Строковое выражение, значение которого содержит имя агрегатного типа данных, объявленного в конфигураторе.

Возвращаемое значение:
Ссылка на созданный объект агрегатного типа данных.

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

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

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

32_2.gif (6096 b)

Вот ей мы воспользуемся.

Процедура Сформировать()
    Сч = СоздатьОбъект("Счет.Основной");
КонецПроцедуры

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

32_3.gif (1731 b)

Сейчас единственный способ проверки правильности это запустить 1C и попробовать запустить отчет на выполнение. Несмотря на то, что ничего не произойдет, но и ошибок быть не должно.

32_4.gif (4849 b)

Почему так. А вот смотрите, я пишу неправильный план счетов.

32_5.gif (7506 b)

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

32_6.gif (5870 b)

Итак, создавать объект счет мы научились. Конечно указав правильный план счетов.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 33 - Изучаем Cчета – Выбор по номеру НайтиПоКоду

Шаг 33 - Изучаем Cчета – Выбор по номеру НайтиПоКоду

В прошлом шаге полученный объект просто объект счета. Абстрактный, ни к чему не обязывающий. Нам же нужно выбрать конкретный счет. Можно сделать это по коду. Вот они:

33_1.gif (2771 b)

Создать реальный объект можно по коду.

НайтиПоКоду
Выполняет поиск счета в плане счетов по коду счета. Синтаксис:
НайтиПоКоду(<КодСчета>)
Англоязычный синоним:
FindByCode

Параметры:
<КодСчета>Символьное выражение — код счета, как он указан в плане счетов.

Возвращаемое значение:
Число: 1 — счет найден; 0 — счет не найден.

Описание:
Метод НайтиПоКоду выполняет поиск счета в плане счетов по коду счета, который передается методу в качестве параметра.
Если счет найден, метод возвращает 1 и позиционирует объект на выбранном счете.

Вот и выберем теперь счет по коду.

33_2.gif (2659 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 34 - Изучаем Cчета – Атрибут Код

Шаг 34 - Изучаем Cчета – Атрибут Код

Мы с Вами пока получили программным путем объект Счет. Но неплохо бы отражать его код в отчете. Нет проблем. Для этого есть свойство КОД.

Код
Полный код счета.
Синтаксис:
Код
Англоязычный синоним:
Code
Описание:
Код счета в общем случае представляет собой символьную строку вида:
<Код счета>.<Код субсчета>.<Код субсчета> ...
Общая длина кода счета в системе 1С:Предприятие ограничена 255 символами. В это значение входят: код счета первого уровня, коды субсчетов всех нижележащих уровней и разделители номеров счета и субсчетов (точка). При помощи атрибута Код можно получать и задавать код счета.

Воспользуемся им для отображения в таблице. Только напишем минимальный код для ее отображения.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Сч = СоздатьОбъект("Счет.Основной");
    Сч.НайтиПоКоду("20");

    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

А в таблице в Секции_1 воспользуемся этим атрибутом для отображения счета.

34_1.gif (4805 b)

Смотрим результат.

34_2.gif (2085 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 35 - Изучаем Счета – Наименование

Шаг 35 - Изучаем Счета – Наименование

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

35_1.gif (5217 b)

А у объекта счета есть соответствующий атрибут.

Наименование
Наименование счета.

Синтаксис:
Наименование Англоязычный синоним: Description

Описание:
Наименование счета представляет собой произвольную строку символов. Наименование, как правило, разъясняет назначение счета. Максимальная длина наименования счета задается при редактировании свойств планов счетов в Конфигураторе.

При помощи атрибута Наименование можно получать и задавать наименование счета. Мы можем им воспользоваться для вывода в отчете:

35_2.gif (3060 b)

Вот так будет выглядеть результат.

35_3.gif (1906 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 36 - Изучаем Счета – Выбор счета

Шаг 36 - Изучаем Счета – Выбор счета

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

36_1.gif (7786 b)

И установить у него свойства, что мы будем выбирать счет.

36_2.gif (7669 b)

Теперь при запуске мы сможем выбрать счета.

36_3.gif (9784 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 37 - Изучаем Счета – Выбран

Шаг 37 - Изучаем Счета – Выбран

Ну хорошо, а как воспользоваться тем, что пользователь выбрал? Во-первых, у поля ввода нужно сделать идентификатор, чтобы можно было им пользоваться.

37_1.gif (5563 b)

Первое, что мы должны сделать - это проверить в момент формирования отчета выбран счет или нет. Для этого у поля ввода есть функция Выбран. Функций Выбран много, вот описание к счету:

Выбран
Проверяет факт выбора счета.

Синтаксис:

Выбран()

Англоязычный синоним:

Selected

Возвращаемое значение:
Число: 1 — если счет выбран (спозиционирован); 0 — если не выбран.

Описание:
Метод Выбран для объекта созданного функцией СоздатьОбъект определяет, спозиционирован ли объект на каком-либо счете или нет, для объекта хранящего значение типа "Счет" он определяет является значение пустым или нет. Метод возвращает число со значением 1 — если счет выбран (спозиционирован) или значение не пустое, 0 — если не выбран или значение пустое.

Вот и воспользуемся.

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

Если ВыборСчета.Выбран() = 0 Тогда

   Возврат;

КонецЕсли;

    Т = СоздатьОбъект("Таблица");
    .......
КонецПроцедуры

Мы просто проверяем, что выбор сделан, если счет не выбран, то просто заканчиваем выполнение и отчет не строится.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 38 - Изучаем Счета – Предупреждение

Шаг 38 - Изучаем Счета – Предупреждение

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

Предупреждение
Вывести окно предупреждения.

Синтаксис:
Предупреждение(<Текст_сообщения>, <Таймаут>)
Англоязычный синоним:
DoMessageBox

Параметры:

  • <Текст_сообщения> - Строковое выражение.
  • <Таймаут> - Необязательный параметр. Числовое выражение интервала времени ожидания в секундах, в течение которого система будет ждать ответа пользователя. Если данный параметр опущен или равен 0, то время ожидания бесконечно. Значение по умолчанию — 0.

Описание:
Процедура Предупреждение выводит на экран окно предупреждения (MessageBox). Текст определяется параметром <Текст_сообщения>. По поведению данная процедура эквивалентна функции:
Вопрос(<Текст_сообщения>, 0, <Таймаут>), но не возвращает значения.
Если закончилось время ожидания ответа, то окно предупреждения автоматически удаляется с экрана.

Воспользуемся ей.

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

Если ВыборСчета.Выбран() = 0 Тогда

   Предупреждение("Я занят, попробуй выбрать счет");
   Возврат;

КонецЕсли;
..........
КонецПроцедуры

Ну и посмотрим что к чему.

38_1.gif (5263 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 39 - Изучаем Счета – Объект больше не нужен

Шаг 39 - Изучаем Счета – Объект больше не нужен

А вот раз мы сделали такой выбор, объект больше не нужен. Он же у нас на форме. Нам остается убрать весь код по созданию объекта.

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

    Если ВыборСчета.Выбран() = 0 Тогда

       Предупреждение("Я занят, попробуй выбрать счет");
       Возврат;

    КонецЕсли;

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Использовать в отчете можно объект ВыборСчета:

39_1.gif (2770 b)

Попробуем наш отчет.

39_2.gif (7780 b)

Вот так, для любого счета.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 40 - Что значит количественный учет

Шаг 40 - Что значит количественный учет

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

40_1.gif (5142 b)

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

Операция.Содержание="Ввод остатков";
Операция.Сумма=Сумма;
Операция.Количество=Количество;

Если счет не количественный, то Вы получите вот такое сообщение об ошибке:

40_2.gif (8682 b)

При количественном учете количество можно извлекать. Вот так, например:

Кол=  Итог.СКД(3);

И показывать в отчетах:

40_3.gif (1447 b)

Лучше продумать все сразу. Например, понято что счет 41 (на котором склад) количественный, потому что нужно учитывать товары на складе, и счет 60 (на котором лежат проплаченные счета, но не оприходованные на склад) тоже количественный.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 41 - Изучаем Счета – Количественный

Шаг 41 - Изучаем Счета – Количественный

Узнать является ли счет количественным можно и программным путем. Для этого есть атрибут Количественный.

Количественный
Признак ведения количественного учета.

Синтаксис:

Количественный

Англоязычный синоним:

IsAmount

Значение:
1 — количественный учет ведется по данному счету;
0 — количественный учет не ведется по данному счету;

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

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

Процедура Сформировать()
Перем  ИнформацияКол; // Переменная всегда в начале

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

А теперь, если атрибут Количественный, то присвоим ей Да, иначе Нет.

Процедура Сформировать()
Перем  ИнформацияКол;
............
Т.ВывестиСекцию("Секция_1");

    Если  ВыборСчета.Количественный = 1 Тогда
          ИнформацияКол="Да";
    Иначе
           ИнформацияКол="Нет";
    КонецЕсли;

   Т.ВывестиСекцию("Секция_2");
   Т.ТолькоПросмотр(1);
   Т.Показать();
КонецПроцедуры

А в таблице просто отобразим эту переменную.

41_1.gif (3600 b)

Запускаем, чтобы убедиться, у меня в плане счетов 41 количественный, а 20 нет.

41_2.gif (6557 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 42 - Объект бухгалтерские итоги

Шаг 42 - Объект бухгалтерские итоги

Я немного отвлекусь от счетов, для дальнейшего связанного рассказа нужно немного других знаний.

Нужно прочитать следующие шаги:

  • "Шаг 16 - Проводка ТМЦ"
  • "Шаг 18 - Управление бухгалтерскими итогами"
  • "Шаг 19 - Получаем бухгалтерские итоги"

1C постоянно после каждой операции поддерживает состояние итогов по счетам в актуальном состоянии. Расчет итогов производится в соответствии с установленным параметрами. Так вот в любой момент времени мы можем получать состояние счетов, а значит и финансовое состояние предприятия. Мы можем воспользоваться функций СоздатьОбъект для получения этого объекта. Но для начала создадим новый отчет – СостояниеПредприятия.

42_1.gif (2630 b)

И создадим этот объект в коде.

Процедура Сформировать()
    Итог = СоздатьОбъект("БухгалтерскиеИтоги");
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 43 - Изучаем бухгалтерские итоги – СКД

Шаг 43 - Изучаем бухгалтерские итоги – СКД

СКД расшифровывается как "сальдо конечное дебетовое" и позволяет получить состояние счета на данный момент. Для этого есть специальная функция СКД.

СКД
Дебетовое сальдо по счету на конец периода;

Синтаксис:

СКД (<Счет>, <ТипСуммы>, <Валюта>, <Субконто1>...)

Англоязычные синонимы:

FDB

Параметры:

  • <Счет> - Значение типа <Счет> — счет расчета итогов. Может использоваться строка — код счета.
  • <ТипСуммы> - Необязательный параметр. Число или строка — тип возвращаемой суммы. Может принимать одно из следующих значений:1 ("С", "S")— сумма;2 ("В", "С")— валютная сумма;3 ("К", "А")— количество.Если параметр не указан, метод возвращает сумму.
  • <Валюта> - Необязательный параметр. Значение типа <Справочник.Валюты>. Если параметр не указан итоги выдаются без учета валюты.
  • <Субконто1><Субконто2>... - Необязательный параметр. Значения субконто. Их количество зависит от настройки субконто для данного счета. Если параметры не указаны, итоги выдаются без учета аналитики.

Все параметры кроме счета могут не указываются.

Возвращаемое значение:
Число —сальдо или оборот.

Описание:
Функция СКД возвращает суммы остатков указанному счету за период. Выдаваться может сумма или валютная сумма или количество, в зависимости от параметра <ТипСуммы>.
Если указана валюта, то данные выдаются по конкретной валюте. Валютная сумма может выдаваться только по конкретной валюте.
Если указаны значения субконто, то данные выдаются по конкретным объектам аналитики.

Вот и воспользуемся ей для вывода отчета по 41 счету. Для начала нужно написать код для таблицы.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

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

    Т.ВывестиСекцию("Секция_1");

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

А самой таблицы воспользоваться этим методом.

43_1.gif (2983 b)

Запустим посмотрим.

43_2.gif (4581 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 44 - Изучаем Счета - ВыбратьСчета

Шаг 44 - Изучаем Счета - ВыбратьСчета

А вот теперь неплохо соединить все это. То есть пробежаться по счетам и получить итоги. Для того, что бы пробежаться по счетам их сначала нужно выбрать в объект счет. Для этого есть функция выбрать счета.

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

Синтаксис:

ВыбратьСчета()

Англоязычный синоним:

SelectAccounts

Возвращаемое значение: Число: 1 — если действие выполнено и в выборке есть хотя бы один счет; 0 — если действие не выполнено или в выборке нет ни одного счета.

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

Вот и выберем их.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

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

    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Пока ничего не происходит, об этом следующий шаг.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 45 - Изучаем Счета - ПолучитьСчет

Шаг 45 - Изучаем Счета - ПолучитьСчет

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

ПолучитьСчет
Получить из выборки следующий счет. Выборка должна быть предварительно открыта при помощи метода ВыбратьСчета.

Синтаксис:

ПолучитьСчет([<Режим>])

Англоязычный синоним:

GetAccount

Параметры:
<Режим> Необязательный параметр. Числовое выражение — признак выборки подчиненных счетов. Может принимать значения: 0 — не включать подчиненные счета; 1 — включать подчиненные счета. По умолчанию — 1.

Возвращаемое значение:
Число: 1 — следующий счет выбран успешно; 0 — следующий счет не выбран (отсутствует).

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

Вот мы ей и воспользуемся.

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

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

    Пока Сч.ПолучитьСчет() = 1 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

То есть пока получаем счета выводить секцию_1. Сколько счетов столько раз она и выведется. Мы же теперь можем воспользоваться объектом счет для вывода.

45_1.gif (3184 b)

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

45_2.gif (5468 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 46 - Как вообще работает бухгалтерия

Шаг 46 - Как вообще работает бухгалтерия

Основа всей бухгалтерии счет. Вот так, например, выглядит общая схема хождения денег вокруг склада.

46_1.gif (3173 b)

На 86 счету у нас лежат финансовые средства. Эти средства путем выписки и оплаты платежного поручения можно перевести на 60 счет где лежат оплаченные, но не полученные товары. Вот такой перевод денег это проводка. Проводку можно просто проводить в 1C из журнала проводок или проводить после создания документа.

46_2.gif (3863 b)

Итак, можно вообще просто вести проводки. Можно для красоты и автоматизации завести документ, который будет формировать проводки. Выписанные документы опять же можно для удобства складывать в журналы. Вот практически и все. Есть еще два понятия, которые я, например, постоянно путаю. Это дебит и кредит. Кредит это расход, а дебит приход. То есть когда говорят кредит 00 дебит 41 это значит, что ушло с 00, а пришло на 41. В 1C счет дебита или прихода стоит первым.

46_3.gif (3973 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 47 - Делаем проводку

Шаг 47 - Делаем проводку

Так как теперь мы можем получать состояние счета, мы изучили это в шаге "Шаг 43 - Изучаем бухгалтерские итоги – СКД", то с нашим 20 счетом можем проводить эксперименты. Получим сначала его состояние.

47_1.gif (2030 b)

Видите на 20 счете у нас ноль. Пойдем в журнал проводок и попробуем провести деньги с счета 00 на 20. Кредит 00 дебит 20. Но мы говорили, что счет 20 может иметь субсчета. Вот нужно его создать.

47_2.gif (6012 b)

Вот она операция. Попробуем опять получить отчет. Вот тут можем быть много проблем.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 48 - Почему проводка может не отражаться в состоянии предприятия

Шаг 48 - Почему проводка может не отражаться в состоянии предприятия

Для того, чтобы все было гарантированно нормально нужно поставить правильный расчет итогов. Вот смотрите. Я ставлю первый квартал через Сервис-Параметры.

48_1.gif (5503 b)

А моя проводка проведена августом.

48_2.gif (7710 b)

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

И теперь проводка отражена в отчетности.

48_4.gif (5109 b)

Так вот проводка может быть не отражена в состоянии счетов, если не попадает в установленный период.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 49 - Изучаем бухгалтерские итоги - КонПериода

Шаг 49 - Изучаем бухгалтерские итоги - КонПериода

Для того, чтобы не путать людей, лучше в отчете показывать период, за который получены данные. Если говорить о состоянии предприятия, то нас больше всего интересует конец периода. Функция есть соответствующая у бухгалтерских итогов для этого.

КонПериода
Выдает конечную дату установленного в данный момент периода основных итогов.

Синтаксис:

КонПериода()

Англоязычный синоним:

EndOfPeriod

Возвращаемое значение:
Конечная дата периода.

Описание:
Метод КонПериода используется для определения конечной даты основных итогов выдаваемых объектом.

Мы ей воспользуемся для вывода информации в состоянии предприятия.

49_1.gif (4115 b)

И посмотрим в отчете.

49_2.gif (2560 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 50 - Изучаем бухгалтерские итоги – НачПериода

Шаг 50 - Изучаем бухгалтерские итоги – НачПериода

Ну и начала периода можно конечно получить с помощью другой функции.

НачПериода
Выдает начальную дату установленного в данный момент периода основных итогов.

Синтаксис:

НачПериода()

Англоязычный синоним:

BeginOfPeriod

Возвращаемое значение:
Начальная дата периода.

Описание:
Метод НачПериода используется для определения начальной даты основных итого выдаваемых объектом.

Точно также в отчет его.

50_1.gif (3241 b)

И на экран.

50_2.gif (2678 b)

01.01.02 потому, что с начала года.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 51 - Почему проводок может быть не видно

Шаг 51 - Почему проводок может быть не видно

Вот смотрим журнал проводок.

51_1.gif (9290 b)

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

51_2.gif (5937 b)

Выбрать диапазон.

51_3.gif (7963 b)

Теперь проводок будет видно больше.

51_4.gif (10170 b)

А точнее все в указанном диапазоне.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 52 - Счета – Субсчета понимаем

Шаг 52 - Счета – Субсчета понимаем

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

41

Субсчета обычно перечисляются через точку. Вот например так.

41.1
41.2

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

52_1.gif (8419 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 53 - Изучаем Счета - ЭтоГруппа

Шаг 53 - Изучаем Счета - ЭтоГруппа

В прошлом шаге мы с Вами посмотрели, что счет можем иметь субсчета, или нет. Сейчас мы определим это из программы.

ЭтоГруппа
Определяет, является ли данный счет группой.

Синтаксис:

ЭтоГруппа()

Англоязычный синоним:

IsGroup

Возвращаемое значение:
Число: 1 — счет является группой; 0 — счет не является группой.

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

Давайте пробовать. У нас уже есть отчет ДляСчета вот в нем заведем новую переменную.

Процедура Сформировать()
Перем  ИнформацияКол;
Перем  ИнформацияСубсч;
.........

А теперь заполним ее значением Да если субсчета есть, и значением Нет если субсчетов нет.

Процедура Сформировать()
Перем  ИнформацияКол;
Перем  ИнформацияСубсч;
........

    Если ВыборСчета.ЭтоГруппа() =1 Тогда
        ИнформацияСубсч="Да";
    Иначе
        ИнформацияСубсч="Нет";
    КонецЕсли;

    Т.ВывестиСекцию("Секция_2");
    Т.ВывестиСекцию("Секция_3");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Ну и секцию описать, конечно.

53_1.gif (4515 b)

Пробуем.

53_2.gif (4732 b)

Отлично, у нулевого счета нет субсчетов. А вот если попробуете 20, то будет написано Да, в соответствии с тем, что устанавливали.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 54 - Зачем нужны субконто

Шаг 54 - Зачем нужны субконто

Рекомендую прочитать:

  • "Шаг 9 - Создаем справочник Контрагенты"
  • "Шаг 21 - Виды субконто"

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

54_1.gif (4245 b)

И среди прочих установок будет количество субконто.

54_2.gif (9511 b)

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

54_3.gif (4847 b)

А в последствии, например, выявлять все скажем операции которые проводились с этим субконто. Забегая вперед вот код для примера.

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

    Если ВыбранныйСубконто.Выбран() = 0 Тогда
        Предупреждение("Не указан вид субконто!");
        Возврат;
    КонецЕсли;

    Если ВыбранныйСчет.Выбран() = 0 Тогда
        Предупреждение("Не указан Счет!");
        Возврат;
    КонецЕсли;

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Опер = СоздатьОбъект("Операция");
    Опер.ВыбратьОперации(ДатаНач, ДатаКон);

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

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

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

            Если ВыбранныйСчет=Опер.Дебет.Счет Тогда

                Если Опер.Дебет.Субконто()=ВыбранныйСубконто Тогда
                    Т.ВывестиСекцию("Секция_1");
                КонецЕсли;

            КонецЕсли

        КонецЦикла;

    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Этот код отбирает все проводки по субконто.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 55 - Указываем виды субконто для счета

Шаг 55 - Указываем виды субконто для счета

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

55_1.gif (5560 b)

У нас будет два субконто. Товары и контрагенты.

55_2.gif (5361 b)

Теперь можно сохранить изменения и запустить 1C. Во-первых, изменения произошли в структуре данных и появиться об этом сообщение.

55_3.gif (5525 b)

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

55_4.gif (4533 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 56 - Изучаем Счета - КоличествоСубконто

Шаг 56 - Изучаем Счета - КоличествоСубконто

Раз количество субконто устанавливается значит можно его получить. У счета есть функция специальная КоличествоСубконто.

КоличествоСубконто
Определяет количество субконто у текущего счета.

Синтаксис:

КоличествоСубконто()

Англоязычный синоним:

SubcontoCount

Возвращаемое значение:
Число — количество видов субконто у текущего счета.

Описание:
Максимальное количество видов субконто, которое можно «прикрепить» к счету, устанавливается в конфигураторе при редактировании свойств планов счетов. Количество субконто, которое реально прикреплено к счету, не может превышать установленного максимального количества.
Метод КоличествоСубконто служит для определения количества видов субконто, прикрепленных к текущему счету в плане счетов.
Необходимо обратить внимание, что все виды субконто, прикрепленные к счету в плане счетов, имеют порядковые номера. Эти номера выдаются в названиях колонок видов субконто в окне редактирования плана счетов; «Субконто1», «Субконто2» ... «Субконто6».
При задании видов субконто для счета их обязательно «выстраивать» по порядку один за другим: например, к счету могут быть прикреплены субконто таким образом, что их порядковые номера будут 1 и 2. Метод КоличествоСубконто возвращает общее количество видов субконто, прикрепленное к счету (в данном примере — 2), а не максимальное количество возможных видов субконто у счета.

Вот можно модернизировать наш отчет про счета. Добавим секцию.

56_1.gif (7856 b)

И выведем ее.

//*******************************************
Процедура Сформировать()
    .........
    Т.ВывестиСекцию("Секция_2");
    Т.ВывестиСекцию("Секция_3");
    Т.ВывестиСекцию("Секция_4");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Смотрим.

56_2.gif (5980 b)

Обратите внимание, что их два. Не общее количество, а реально уставленное.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 57 - Изучаем Счета – Выводим виды субконто - ВидСубконто

Шаг 57 - Изучаем Счета – Выводим виды субконто - ВидСубконто

Получив количество мы можем получить и вид прикрепленного субконто. Для этого есть функция.

ВидСубконто
Устанавливает/возвращает вид субконто счета.

Синтаксис:

ВидСубконто(<НомерСубконто>, <ВидСубконто>, <ТолькоОбороты>)

Англоязычный синоним:

SubcontoKind

Параметры:
<НомерСубконто> Числовое выражение — порядковый номер субконто счета.
<ВидСубконто> Необязательный параметр. Значение типа «Вид субконто», которое должно быть установлено.
<ТолькоОбороты> Необязательный параметр. Числовое значение: 1 или 0. Данный параметр снимает или устанавливает флаг «Только обороты» для данного субконто счета. Если параметр не используется, то флаг «Только обороты» не меняется.

Возвращаемое значение:
Значение типа «Вид субконто».

Описание:
К любому счету или субсчету в плане счетов может быть «прикреплено» до 5 видов субконто. Максимальное количество видов субконто, которое можно «прикрепить» к счету, устанавливается в конфигураторе при редактировании свойств планов счетов. Количество субконто, которое реально прикреплено к счету, не превышает установленного максимального количества. Все виды субконто, прикрепленные к счету в плане счетов, имеют порядковые номера. Эти номера выдаются в названии колонок для видов субконто в окне редактирования плана счетов; «Субконто!», «Субконто2» ... «Субконто5».
Метод ВидСубконто при использовании его без второго параметра возвращает значение типа «ВидСубконто», имеющего порядковый номер, переданный в качестве первого параметра.
Метод ВидСубконто при вызове со вторым параметром устанавливает у счета вид субконто, имеющего порядковый номер, переданный в качестве первого параметра.
Применение данного метода следует производить только в особых случаях и с учетом всех особенностей настройки учета. После изменения настроек учета система может потребовать выполнить пересчет итогов.

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

Процедура Сформировать()
Перем  ИнформацияКол;
Перем  ИнформацияСубсч;
Перем  ВидСубконтоСчета;
.........
КонецПроцедуры

Теперь пробежимся по видам субконто.

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

    .........
    Т.ВывестиСекцию("Секция_2");
    Т.ВывестиСекцию("Секция_3");
    Т.ВывестиСекцию("Секция_4");

    Для Инд = 1 По ВыборСчета.КоличествоСубконто() Цикл
        ВидСубконтоСчета= ВыборСчета.ВидСубконто(Инд);
        Т.ВывестиСекцию("Секция_5");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Отлично выведем в секции вид субконто.

57_1.gif (4681 b)

Смотрим результат.

57_2.gif (2413 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 58 - Субконто + Проводка = Одна тонкость

Шаг 58 - Субконто + Проводка = Одна тонкость

Мы с Вами установили субконто для счета 20 и нам теперь кажется, что теперь все будет нормально. Ничего нормально не будет. Почему? Да потому, что проводку можно провести без указания субконто. Вроде ничего страшного. Пока ничего.

58_1.gif (3302 b)

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

Самый первый и простой выход это формировать для каждой проводки документ. Тогда у Вас документ просто не будет проведен, если не будут выбраны все субконто.

Есть второй менее надежный способ. Можно установить проверку проводок. В меню Сервис – Параметры.

58_2.gif (4423 b)

На вкладке операция можно установить параметр проверять проводки при записи.

58_3.gif (6825 b)

И теперьб если мы попробуем провести такую проводку, то будет появляться окно предупреждения.

58_4.gif (14321 b)

Вот оно и говорит, что проводка некорректная.

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

PS. Я веду этот раздел в режиме как есть. Так что, если вдруг там ошибки или заблуждения пишите.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 59 - Разборки с корректностью проводок

Шаг 59 - Разборки с корректностью проводок

Так вот с этой корректностью нужно разобраться до какой степени это все корректно и как это работает. Итак экспериментировать мы будем с двумя счетами.

00 – нет субконто
20.1 – есть субконто.

Не забудьте установить настройку - проверять проводки при записи. Мы сейчас попробуем провести деньги с 00 на 20.1. Кредит 00 – Дебит 20.1. Операция прошла без замечания.

59_1.gif (4030 b)

Пробуем обратную операцию. И тут же получим сообщение о некорректности проводки.

59_2.gif (7602 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 60 - Объектная модель проводок

Шаг 60 - Объектная модель проводок

Самое низкое звено в 1C бухгалтерии это проводка. Проводки видны из журнала проводок.

60_1.gif (3631 b)

Проводки группируются в операции. Для просмотра операций есть журнал операций.

60_2.gif (3663 b)

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

60_3.gif (5747 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 61 - Объект операция

Шаг 61 - Объект операция

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

61_1.gif (2140 b)

Здесь можно настроить дополнительные поля для операции. Для работы с операциями нам нужно создать объект операции. Вот так, например.

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

Все теперь с ним можно работать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 62 - Изучаем операции – Выбираем - ВыбратьОперации

Шаг 62 - Изучаем операции – Выбираем - ВыбратьОперации

Для получения всех операций у нас есть специальная функция.

ВыбратьОперации
Открывает выборку операций за период.
Синтаксис:

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

Англоязычный синоним:

SelectOpers

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

Возвращаемое значение:
Число: 1 — действие выполнено и в выборке есть хотя бы одна операция;
0 — действие не выполнено или в выборке нет ни одной операции.

Описание:
Метод ВыбратьОперации открывает выборку, содержащую операции за указанный период

Вот и воспользуемся ей.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Опер = СоздатьОбъект("Операция");
    Опер.ВыбратьОперации(ДатаНач, ДатаКон);

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

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

62_1.gif (2992 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 63 - Изучаем операции - ПолучитьОперацию

Шаг 63 - Изучаем операции - ПолучитьОперацию

В прошлом шаге мы выбрали операции. Теперь операцию можно получить. Функция есть для этого.

ПолучитьОперацию
Извлекает операции из выборки, открытой при помощи метода ВыбратьОперции.

Синтаксис:

ПолучитьОперацию()

Англоязычный синоним:

GetOper

Возвращаемое значение:
Число: 1 — операция выбрана успешно; 0 — операция не выбрана (отсутствует).

Описание:
Метод ПолучитьОперацию выбирает очередную операцию из выборки, открытой при помощи метода ВыбратьОперации.
Метод ПолучитьОперацию используется для организации цикла по операциям. Условием цикла может служить равенство 1 возвращаемого значения метода: цикл выполняется, пока метод ПолучитьОперацию возвращает 1.
Метод возвращает 0, когда очередная операция не выбрана. Это происходит, если при предыдущем применении метода была выбрана последняя операция выборки.

Продолжим наш отчет по операциям.

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Опер = СоздатьОбъект("Операция");
    Опер.ВыбратьОперации(ДатаНач, ДатаКон);

    Пока Опер.ПолучитьОперацию() = 1 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Пока, что происходит в секции_1 нас не волнует. Просто сам факт, что мы прошли по всем операциям.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 64 - Изучаем операции - ДатаОперации

Шаг 64 - Изучаем операции - ДатаОперации

А вот теперь мы выведем дату операции. То есть когда она была проведена. Дата операции это свойство самой операции.

ДатаОперации
Дата операции.

Синтаксис:

ДатаОперации

Англоязычный синоним:

OperDate

Значение:
Значение типа <Дата>.

Описание:
Атрибут ДатаОперации содержит дату бухгалтерской операции. Так как каждая бухгалтерская операция принадлежит документу (причем только одному, а операция введенная вручную также принадлежит специальному документу «Операция»), значение атрибута совпадает со значением атрибута ДатаДок документа, которому принадлежит операция. Наличие данного атрибута у операции упрощает обращение к дате документа, которому принадлежит операция.

Вот в секции один мы эту операцию и выведем.

64_1.gif (3331 b)

Ради интереса можно запустить отчет.

64_2.gif (2504 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 65 - Изучаем операции - ВыбратьПроводки

Шаг 65 - Изучаем операции - ВыбратьПроводки

Исходя их того, что написано в шаге "Шаг 60 - Объектная модель проводок" с операцией может быть связана одна или несколько проводок. Для того, чтобы добраться до проводок их нужно выбрать.

ВыбратьПроводки
Открывает выборку проводок текущей операции.

Синтаксис:

ВыбратьПроводки()

Англоязычный синоним:

Select Entries

Возвращаемое значение:
Число: 1 — действие выполнено и в выборке есть хотя бы одна проводка;
0 —действие не выполнено или в выборке нет ни одной проводки.

Описание:
Метод ВыбратьПроводки открывает выборку проводок текущей операции. Данный метод предназначен для организации перебора проводок операции и используется вместе с методом ПолучитьПроводку.

Итак, организуем выбор проводок.

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Опер = СоздатьОбъект("Операция");
    Опер.ВыбратьОперации(ДатаНач, ДатаКон);

    Пока Опер.ПолучитьОперацию() = 1 Цикл
        Т.ВывестиСекцию("Секция_1");
        Опер.ВыбратьПроводки();
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 66 - Изучаем операции – ПолучитьПроводку

Шаг 66 - Изучаем операции – ПолучитьПроводку

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

ПолучитьПроводку
Получить проводку из выборки, открытой методом
ВыбратьПроводки.

Синтаксис:

ПолучитьПроводку()

Англоязычный синоним:

GetEntry

Возвращаемое значение:
Число: 1 — следующая проводка выбрана успешно; 0 — следующая проводка не выбрана (отсутствует).

Описание:
Метод ПолучитьПроводку выбирает очередную проводку из выборки, содержащей проводки текущей операции. Перед применением метода ПолучитьПроводку выборка должна быть открыта при помощи метода ВыбратьПроводки.
Метод ПолучитьПроводку используется для организации цикла по проводкам текущей операции. Условием цикла может служить равенство 1 возвращаемого значения метода: цикл выполняется, пока метод ПолучитьПроводку возвращает 1.
Метод возвращает 0, когда очередная проводка не выбрана. Это происходит, если при предыдущем применении метода была выбрана последняя проводка выборки.

Вот и будем выбирать проводки.

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

    Пока Опер.ПолучитьОперацию() = 1 Цикл
        Т.ВывестиСекцию("Секция_1");
        Опер.ВыбратьПроводки();
            Пока Опер.ПолучитьПроводку() = 1 Цикл
                Т.ВывестиСекцию("Секция_2");
            КонецЦикла;
    КонецЦикла;

    ...

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

В секции 2 мы будем просто выводить слово "Проводка" пока.

66_1.gif (3751 b)

Запустим, посмотрим:

66_2.gif (2020 b)

Пока мы видим, что в каждой операции всего одна проводка.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 67 - Объектная модель проводок развиваем

Шаг 67 - Объектная модель проводок развиваем

Мы с Вами в "Шаг 60 - Объектная модель проводок" изучили самый низ проводок. Теперь пора нам подняться на уровень вверх. Любая операция связана с документом. Это легко увидеть. Я никаких документов не создавал, а в полном журнале документов найти операции можно.

67_1.gif (5968 b)

Соответственно любая операция это документ. И теперь модель выглядит более расширенно.

67_2.gif (10157 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 68 - Создаем объект Документ

Шаг 68 - Создаем объект Документ

Раз операции находятся в документах, то мы можем перебирать документы и добираться до операций. Но для начала объект документ нужно создать. Можно создать объект документ:

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Док = СоздатьОбъект("Документ");

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Ничего не происходит, просто документ создается.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 69 - Изучаем документ - ВыбратьДокументы

Шаг 69 - Изучаем документ - ВыбратьДокументы

Создав объект, документы мы можем выбрать сами документы.

ВыбратьДокументы
Открыть выборку документов.

Синтаксис:

ВыбратьДокументы(<НачалоВыборки>, <КонецВыборки>)

Англоязычный синоним:

SelectDocuments

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

Возвращаемое значение:
Число 1 — если действие выполнено и в выборке есть хотя бы один документ;
Число 0 — если действие не выполнено или в выборке нет ни одного документа.

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

Давайте выберем.

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Док = СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(ДатаНач, ДатаКон);

    Т.ТолькоПросмотр(1);
    Т.Показать();

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 70 - Изучаем документы - ПолучитьДокумент

Шаг 70 - Изучаем документы - ПолучитьДокумент

Выбрав документы мы теперь можем получать их по очереди.

ПолучитьДокумент
Получить из выборки следующий документ.

Синтаксис:

ПолучитьДокумент()

Англоязычный синоним:

GetDocument

Возвращаемое значение:
Числовое значение: 1 — если следующий документ выбран успешно; 0 — если документ не найден (отсутствует).

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

Будем получать.

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Док = СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(ДатаНач, ДатаКон);

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

    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 71 - Изучаем документы - НомерДок

Шаг 71 - Изучаем документы - НомерДок

У каждого документа есть номер. Вот им мы и воспользуемся.

НомерДок
Номер документа

Синтаксис:

НомерДок

Англоязычный синоним:

DocNum

Описание:
При помощи атрибута НомерДок можно получать и задавать значение номера выбранного документа.

В коде выводим секцию.

Процедура Сформировать()
    .......
    Пока Док.ПолучитьДокумент() > 0 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;
    ........
КонецПроцедуры

И выводим Номер документа:

71_1.gif (3076 b)

Вот в результате номера документов:

71_2.gif (3167 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 72 - Изучаем документ - Операция

Шаг 72 - Изучаем документ - Операция

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

Операция
Атрибут <Операция> предназначен для обращения к бухгалтерской операции документа.

Синтаксис:

Операция

Англоязычный синоним:

Operation

Описание:
Атрибут <Операция> документа используется только в случае, если установлена компонента "Бухгалтерский учет" и только для тех видов документов, для которых в конфигурации установлен признак "Бухгалтерский учет". Он предназначен для обращения к операции документа. Данный атрибут не используется как самостоятельное значение, а позволяет обращаться к атрибутам и методам операции. Описание атрибутов и методов операции см. в разделе "Работа с операциями и проводками".

Мы с Вами во второй секции будем выводить уже известную нам ДатаОперации.

Процедура Сформировать()
    ......
    Док = СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(ДатаНач, ДатаКон);
    Пока Док.ПолучитьДокумент > 0 Цикл
        Т.ВывестиСекцию("Секция_1");
        Т.ВывестиСекцию("Секция_2");
    КонецЦикла;
    ......
КонецПроцедуры

Сама Секция:

72_1.gif (3664 b)

Результат смотрим:

72_2.gif (2627 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 73 - А теперь получим проводки

Шаг 73 - А теперь получим проводки

Добавим код для получения проводок. Там все нам известно. Вот код:

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

    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Док = СоздатьОбъект("Документ");
    Док.ВыбратьДокументы(ДатаНач, ДатаКон);

    Пока Док.ПолучитьДокумент() > 0 Цикл
        Т.ВывестиСекцию("Секция_1");
        Т.ВывестиСекцию("Секция_2");
        Док.Операция.ВыбратьПроводки();

        Пока Док.Операция.ПолучитьПроводку() = 1 Цикл
            Т.ВывестиСекцию("Секция_3");
        КонецЦикла;
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Сама секция:

73_1.gif (4639 b)

Смотрим результат:

73_2.gif (2762 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 74 - Изучаем проводку - Cумма

Шаг 74 - Изучаем проводку - Cумма

Мы получили проводку, вот теперь можно получить информацию о этой проводке. Например, сумму.

Сумма
Сумма выбранной проводки (корреспонденции) операции.

Синтаксис:

Сумма

Англоязычный синоним:

Sum

Значение:
Значение типа «Число».

Описание:
Атрибут Сумма служит для обращения к сумме выбранной проводки (корреспонденции) операции.
Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм "Операции" и "Журнал проводок" текущая проводка определяется положением курсора.

Вот и выведем ее рядом с проводкой.

74_1.gif (4482 b)

И посмотрим.

74_2.gif (3106 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 75 - Отчеты – Документы – Слои

Шаг 75 - Отчеты – Документы – Слои

1C предоставляет нам возможность использования слоев, на основе которых можно сделать закладки. Вне зависимости от того диалог это (отчет) или форма (документ) при редактировании формы у нас есть кнопка слои.

75_1.gif (1714 b)

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

75_2.gif (3968 b)

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

75_3.gif (7510 b)

Поначалу я наивно думал, что установив слои можно запускать и будут закладки автоматически и все такое. Даже не надейтесь. Хотя не понятно. В некоторых местах 1C автоматизируется все, а тут могли бы сделать поведения по умолчанию сразу с закладками, раз уж создаем больше одного слоя. Логика-то простая, если я создаю больше одного слоя, то значит хочу закладки и нечего тут рассуждать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 76 - Изучаем форму – При открытии

Шаг 76 - Изучаем форму – При открытии

Мы создали слои. Но слои нужно еще перевести в закладки. И лучше это делать при загрузке формы. Для этого есть специальная предопределенная процедура.

ПриОткрытии
Предопределенная процедура при открытии формы.

Синтаксис:

ПриОткрытии()

Англоязычный синоним:

OnOpen

Описание:
Вызов предопределенной процедуры ПриОткрытии производится самой системой 1С:Предприятие неявно при интерактивном открытии формы. Если в данной предопределенной процедуре установить статус возврата — 0 (например, если данному пользователю запрещено просматривать форму объекта), открытие формы не будет выполнено.
Данная предопределенная процедура может располагаться только в программном модуле формы.

Ее просто нужно описать, что бы использовать.

76_1.gif (2124 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 77 - Изучаем форму – создаем закладки – ИспользоватьЗакладки

Шаг 77 - Изучаем форму – создаем закладки – ИспользоватьЗакладки

Ну, уж тут кажется, что только я вызову эту функцию, как все станет на свои места. Нет и еще раз нет. Это просто мы сообщаем, что закладки будут.

ИспользоватьЗакладки
Установить режим использования закладок в форме.

Синтаксис:

ИспользоватьЗакладки(<Флаг>)

Англоязычный синоним:

TabCtrlState

Параметры:
<Флаг>Необязательный параметр. Числовое выражение:1 — включить закладки в форме;0 — выключить закладки в форме.

Возвращаемое значение:
Текущее значение режима использования закладок формы (на момент до исполнения метода).

Описание:
Метод ИспользоватьЗакладки устанавливает режим использования закладок в форме.
Доступ к данному методу возможен только в контексте Модуля формы.

Что-ж попробуем:

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
КонецПроцедуры

Запустим:

77_1.gif (4301 b)

Документ изменился. Появилась рамка под закладку, но все слои видны. Значит закладки нужно как-то создавать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 78 - Изучаем форму – Закладки

Шаг 78 - Изучаем форму – Закладки

У формы есть специальный атрибут, закладка которой даст нам возможность создать закладки.

Закладки
Объект типа <СписокЗначений>, содержащий описания закладок текущей формы.

Синтаксис:

Закладки

Англоязычный синоним:

TabCtrl

Описание:
Атрибут объекта <Форма> Закладки представляет собой объект типа <СписокЗначений>, содержащий описания закладок текущей формы. Данный атрибут предоставляет возможность программно манипулировать порядком и названиями закладок формы. В тексте программного модуля через точку после имени объекта <Форма> можно вызвать атрибут <Закладки>, а далее через точку можно вызывать методы управления закладками, как объектом типа <СписокЗначений>.

Доступ к данному атрибуту возможен только в контексте Модуля формы после применения метода ИспользоватьЗакладки.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 79 - Изучаем закладку - ДобавитьЗначение

Шаг 79 - Изучаем закладку - ДобавитьЗначение

Ну, наконец-то. Мы можем добраться до момента создания закладки. Добавить значение это свойства не именно закладки, а типа СписокЗначений. Описывать тип я пока не буду просто воспользуемся этой функцией.

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1, "Основной");
    Форма.Закладки.ДобавитьЗначение(2, "Слой1");
КонецПроцедуры

Важно, что здесь устанавливаем номер. Пора, пора наконец увидеть закладки.

79_1.gif (5121 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 80 - Изучаем форму – ИспользоватьСлой

Шаг 80 - Изучаем форму – ИспользоватьСлой

Оказывается у формы есть функция, которая указывает, какой слой использовать.

ИспользоватьСлой

Установить режим отображения слоя в форме.

Синтаксис:

ИспользоватьСлой(<ИмяСлоя>, <Режим>)

Англоязычный синоним:

UseLayer

Параметры:
<ИмяСлоя> Строковое выражение — название слоя формы как оно задано в конфигураторе. Параметр может быть составным (указывать несколько слоев). В этом случае имена слоев перечисляются через запятую.
<Режим> Необязательный параметр. Числовое выражение:0 — скрыть слой <ИмяСлоя> в форме;1 — показать слой <ИмяСлоя> в форме;2 — показать слой <ИмяСлоя> и скрыть все остальные.Значение по умолчанию — 2.

Вот и укажем при загрузке какой слой использовать.

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1, "Основной");
    Форма.Закладки.ДобавитьЗначение(2, "Слой1");
    Форма.ИспользоватьСлой("Основной");
КонецПроцедуры

Запускаем.

80_1.gif (5669 b)

Все нормально первый слой виден всегда. А как же второй? Читаем дальше.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 81 - Изучаем форму - ПриВыбореЗакладки

Шаг 81 - Изучаем форму - ПриВыбореЗакладки

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

ПриВыбореЗакладки
Предопределенная процедура смены закладки формы.

Синтаксис:

ПриВыбореЗакладки(<НомерЗакладки>, <Значение3акладки>)

Англоязычный синоним:

OnTabCtrlPosChanged

Параметры:
<НомерЗакладки> Числовое значение — номер выбранной закладки формы.
<Значение3акладки> Значение выбранной закладки формы.

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

Ну, наконец-то. Давайте быстрее все сделаем.

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1, "Основной");
    Форма.Закладки.ДобавитьЗначение(2, "Слой1");
    Форма.ИспользоватьСлой("Основной");
КонецПроцедуры

Процедура ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)

    Если НомерЗакладки=1 Тогда
        Форма.ИспользоватьСлой("Основной");
    Иначе
        Форма.ИспользоватьСлой("Слой1");
    КонецЕсли;

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

Запускаем:

81_1.gif (7857 b)

Вот оно. Разные слои разные закладки.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 82 - А как же с диалогом

Шаг 82 - А как же с диалогом

В прошлый раз мы использовали форму документа.

82_1.gif (10850 b)

А в отчете это называется диалог.

82_2.gif (5828 b)

А вот код пишется совершенно одинаково и там и там.

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1, "Основной");
    Форма.Закладки.ДобавитьЗначение(2, "Слой1");
    ..............
КонецПроцедуры

А раз так, какого черта это называется по разному ?


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 83 - Видимость элементов

Шаг 83 - Видимость элементов

У элемента на форме есть много всяких свойств, в том числе и видимость. Давайте его установим и попробуем.

83_1.gif (5296 b)

Должен быть по идеи невидим. Запускаем:

83_2.gif (3923 b)

А чихать 1C хотела на этот флаг. Ну да ладно, выход есть.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 84 - Изучаем форму – как добраться до элементов

Шаг 84 - Изучаем форму – как добраться до элементов

В модуле формы добраться до элементов просто. Можно к нему обращаться по идентификатору.

Идентифкатор

Попробуем? Сделаем на форме кнопку:

84_1.gif (3910 b)

Привяжем к ней событие:

84_2.gif (6500 b)

И по этому событию доберемся до элемента Контрол.

Процедура НажалиКнопку()
    Предупреждение(Контрол);
КонецПроцедуры

А вот и результат:

84_3.gif (5769 b)

Мы можем пользоваться идентификатором элемента.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 85 - Изучаем форму, делаем элементы не видимыми

Шаг 85 - Изучаем форму, делаем элементы не видимыми

У элементов на форме есть ряд общих свойств. Одно из них видимость.

Видимость
Установка режима отображения.

Синтаксис:

Видимость(<Режим>)

Англоязычный синоним:

Visible

Параметры:
<Режим> Необязательный параметр. Числовое выражение: 1 — элемент диалога отображается; 0 — элемент диалога скрыт (невидим).

Возвращаемое значение:
Текущее числовое значение режима видимости элемента формы или колонки многострочной части (на момент до исполнения метода).

Описание:
Метод Видимость позволяет установить режим отображения выбранного элемента формы или колонки многострочной части формы.
Доступ к данному методу возможен только в контексте Модуля формы.

Давайте по нажатию на кнопку сделаем элементы не видимыми.

Процедура НажалиКнопку()
    Форма.Контрол.Видимость(0);
КонецПроцедуры

Запускаем. Все видно.

85_1.gif (4654 b)

Нажимаем на кнопку.

85_2.gif (4548 b)

Элемент пропал.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 86 - Изучаем справочники – Код

Шаг 86 - Изучаем справочники – Код

Мы с Вами должны точно понимать, что субконто это тот же справочник. Только понятие субконто применяется в разрезе счетов. Возникает задача, когда в зависимости от выбранного в справочнике значения нужно проводить какие-то действия. Конечно можно пользоваться наименованием.

86_1.gif (5040 b)

Его легко получить обратившись к элементу.

Процедура НажалиКнопку()
    Предупреждение(Контрол);
КонецПроцедуры

Вот, можете проверить:

86_2.gif (5337 b)

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

Код
Значение реквизита Код.

Синтаксис:

Код

Англоязычный синоним:

Code

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

Воспользуемся им.

Процедура НажалиКнопку()
    Предупреждение(Контрол.Код);
КонецПроцедуры

И посмотрим результат.

86_3.gif (10101 b)

Вот им можно оперировать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 87 - Изучаем справочники – Тип кода

Шаг 87 - Изучаем справочники – Тип кода

Понятие кода очень близко к понятию реляционной модели. Код должен однозначно идентифицировать объект. В 1C код может быть числовой или текстовый. Настройки кодировки производятся естественно в конфигураторе.

87_1.gif (1979 b)

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

87_2.gif (5465 b)

Ничего не изменилось в принципе. Был он 0002, а стал 2.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 88 - Изучаем справочники – автоматическая нумерация

Шаг 88 - Изучаем справочники – автоматическая нумерация

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

88_1.gif (4790 b)

Это уже напрягает. Но еще хуже, что можно ввести два элемента с одинаковыми кодами.

88_2.gif (4781 b)

Отчасти может помочь настройка автоматической нумерации. А еще лучше с контролем уникальности.

88_3.gif (2675 b)

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

88_4.gif (4134 b)

Несмотря на то, что номер все равно можно править, ввести повторяющийся Вас не разрешат.

88_5.gif (7742 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 89 - Изучаем справочники – Как запретить редактировать код

Шаг 89 - Изучаем справочники – Как запретить редактировать код

Оставлять пользователю возможность править код в справочнике это не дело. Идем в конфигуратор, находим справочник. Говорим, что будем править только в списке.

89_1.gif (3958 b)

А теперь идем в форму списка.

89_2.gif (2738 b)

И делаем колонку Код недоступной.

89_3.gif (7992 b)

Ну теперь пусть попробуют исправить.

89_4.gif (4865 b)

Ничего у них не выйдет.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 90 - Изучаем счет – Что такое активный счет

Шаг 90 - Изучаем счет – Что такое активный счет

Активный счет всегда имеет дебитовый остаток. В не зависимости ни от чего. Пример. Есть склад. Вы выделили с него не оприходованный товар. Если счет активный, то этот товар будет со знаком "-". Давайте убедимся. У нас есть счет 00. Сделаем его активным.

90_1.gif (2620 b)

И проведем с него несколько проводок.

90_2.gif (9022 b)

Так вот, если мы попробуем получить дебетовое сальдо.

90_3.gif (3811 b)

То оно будет отрицательное.

90_4.gif (2259 b)

Поменяем его на пассивный.

90_5.gif (2417 b)

И тут же дебетового сальдо не будет.

90_6.gif (3302 b)

Так вот, установка счета в "активный" максимально походит на то, что делает бухгалтерия ручками(счеты, калькулятор и все такое). Пришли деньги, сальдо увеличилось, ушли уменьшилось.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 91 - Изучаем Cчета - Активный

Шаг 91 - Изучаем Cчета - Активный

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

Активный
Тип остатка по счету (активный, пассивный, активно-пассивный).

Синтаксис:

Активный

Англоязычный синоним:

IsActive

Значение:
1 — счет является активным;
2 — счет является пассивным;
3 — счет является активно-пассивным;

Описание:
Атрибут содержит тип остатка счета. Счет может являться активным, (остатки должны быть дебетовыми), пассивным (остатки должны быть кредитовыми), активно-пассивным (остатки могут быть дебетовыми и кредитовыми).
Данный признак влияет на способ отражения остатков по счету в итогах. Например, для активного счета, превышение кредитового оборота над дебетовым приведет к отрицательному дебетовому остатку, а для активно-пассивного — к положительному кредитовому.
По умолчанию все счета считаются активно-пассивными.

91_1.gif (3599 b)

А по нажатию на кнопку будем определять.

Процедура  НажалиКнопку()
    Если Счет.Активный = 1 Тогда
    Предупреждение("Активный");
    КонецЕсли;
КонецПроцедуры

В плане счетов активный только 00.

91_2.gif (4036 b)

Вот и посмотрим.

91_3.gif (5718 b)

Кнопка реагирует только на 00.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 92 - Изучаем справочники - ВыбратьЭлементы

Шаг 92 - Изучаем справочники - ВыбратьЭлементы

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

ВыбратьЭлементы
Открыть выборку элементов справочника

Синтаксис:

ВыбратьЭлементы(<Режим>)

Англоязычный синоним:

SelectItems

Параметры:
<Режим> Необязательный параметр. Числовое выражение: 1 — выбирать элементы с учетом иерархии; 0 — выбирать элементы без учета иерархии. Значение по умолчанию — 1.

Возвращаемое значение:
Число 1 — если действие выполнено и в выборке есть хотя бы один элемент;
Число 0 — если действие не выполнено или в выборке нет ни одного элемента.

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

Создадим отчет – СправочникВТекст.

92_1.gif (5338 b)

А по кнопки сформировать создаем объект и выбираем записи.

Процедура Сформировать()
    Спр =СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 93 - Изучаем справочник - ПолучитьЭлемент

Шаг 93 - Изучаем справочник - ПолучитьЭлемент

Итак строки мы выбрали, теперь будем получать элементы.

ПолучитьЭлемент
Получить из выборки следующий элемент справочника.

Синтаксис:

ПолучитьЭлемент(<Режим>)

Англоязычный синоним:

Getltem

Параметры:
<Режим> Необязательный параметр. Числовое выражение: 1 — надо включать в выборку все подчиненные элементы, если 0 — не надо включать подчиненные элементы. Значение по умолчанию — 1.

Возвращаемое значение:
Числовое значение: 1 — если элемент выбран успешно, 0 — если элемент не выбран (отсутствует).

Описание:
Метод ПолучитьЭлемент выбирает следующий элемент справочника в последовательности выборки, открытой перед этим при помощи метода ВыбратьЭлементы.
Данный метод может применяться только для объектов, созданных функцией СоздатьОбъект, и используется для организации цикла поиска по справочнику.

Получаем.

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

    Спр =СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()>0 Цикл

    КонецЦикла;

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 94 - Как можно передавать информацию

Шаг 94 - Как можно передавать информацию

Один из стандартных подходов это использовать DBF файл. В 1C есть объект XBase, который умеет:

СоздатьФайл
ОткрытьФайл

А это говорит о том, что его можно использовать в обоих направлениях. Кроме того.

Добавить
Следующая

Что позволяет создавать записи если пишем, и читать, если передвигаемся. Кроме того нам придется создавать структуру. Это тоже можем. И получать ее описание.

ДобавитьПоле
ОписаниеПоля

Вообщем, на первый взгляд все в норме можем пробовать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 95 - Создаем объект XBase

Шаг 95 - Создаем объект XBase

Все как всегда. Просто создаем объект. Если отчет запустится без ошибок, то объект создан и присутствует в системе.

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

    ДБФ = СоздатьОбъект("XBase");
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()>0 Цикл

    КонецЦикла;

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

Создается и запускается.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 96 - Изучаем XBase - Добавляем поле

Шаг 96 - Изучаем XBase - Добавляем поле

После того, как объект создан нам нужно поле для имени. Его можно создать:

ДобавитьПоле
Добавить поле в структуру базы.

Синтаксис:

ДобавитьПоле(<Название>, <Тип>, <Длина>, <Точность>)

Англоязычный синоним:

AddField

Параметры:
<Название> Строковое выражение — имя создаваемого поля.
<Тип> Строковое или числовое выражение — тип создаваемого поля. Допустимые значения:1 или"N" — число;2 или "S" — строка;3 или "D" — дата;4 или "L" — логическое;5 или "F" — то же, что и 1, т. е. число;6 или "М" — memo (не поддерживается).
<Длина> Числовое выражение — общая длина создаваемого поля.
<Точность> Числовое выражение — длина создаваемого поля после десятичной точки (только для числовых полей).

Пробуем:

Процедура Сформировать()
    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);

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

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

    КонецЦикла;
КонецПроцедуры

Почему длина 25? Да просто в конфигураторе стоит такая длина.

96_1.gif (4846 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 97 - Изучаем XBase – Создаем файл

Шаг 97 - Изучаем XBase – Создаем файл

Поле хоть и одно, но мы описали. Теперь мы создадим файл. Функция выглядит так.

СоздатьФайл
Создать новый файл базы данных.

Синтаксис:

СоздатьФайл(<ПутьКБазе>, <ПутьКИндексу>)

Англоязычный синоним:

CreateFile

Параметры:
<ПутьКБазе> Строковое выражение, содержащее путь к файлу базы данных формата DBF.
<ПутьКИндексу> Необязательный параметр. Строковое выражение, содержащее путь к индексному файлу базы данных.

Описание: Метод СоздатьФайл создает новый файл базы данных формата DBF. Если база с таким именем существует, то выдается ошибка.

Вот ей и воспользуемся.

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

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);
    ДБФ.СоздатьФайл("c:\Test.dbf");

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

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

    КонецЦикла;

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

Запускаем. На диске появится файл:

97_1.gif (7164 b)

Который можно открыть в Excel:

97_2.gif (4620 b)

Или FoxPro:

97_3.gif (4082 b)

Или связать его с ACCESS:

97_4.gif (3522 b)

Нормальный DBF файл.

Внимание ! Мы его не закрыли.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 98 - Изучаем XBase - Закрываем файл

Шаг 98 - Изучаем XBase - Закрываем файл

В прошлом шаге файл-то мы не закрыли. А нужно. Все, что открывается, имеет свойство закрываться.

ЗакрытьФайл
Закрыть базу.

Синтаксис:

ЗакрытьФайл()

Англоязычный синоним:

CloseFile

Описание:
Метод ЗакрытьФайл закрывает ранее открытую или созданную базу данных формата DBF.

Так вот и закроем от греха подальше.

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

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);
    ДБФ.СоздатьФайл("c:\Test.dbf");

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

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

    КонецЦикла;

    ДБФ.ЗакрытьФайл();

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

Вот тут есть отличие от стандартного подхода. Никаких там идентификаторов файла и все такое. Один объект XBase один файл.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 99 - Изучаем Xbase – Добавляем запись

Шаг 99 - Изучаем Xbase – Добавляем запись

Наконец-то мы подошли к этому моменту. Будем добавлять запись.

Добавить
Добавить новую пустую запись.

Синтаксис:

Добавить()

Англоязычный синоним:

Add

Описание:
Метод Добавить добавляет новую пустую запись. Атрибуты объекта обнуляются (см. метод Очистить). Для записи изменений в базу данных необходимо инициировать запись.

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

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

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);
    ДБФ.СоздатьФайл("c:\Test.dbf");

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

    Пока Спр.ПолучитьЭлемент()>0 Цикл
        ДБФ.Добавить();
        ДБФ.NAME=Спр.Наименование;
    КонецЦикла;

    ДБФ.ЗакрытьФайл();

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

Только не надо сейчас сломя голову нестись в Excel. Ничего не произойдет. Добавленную запись еще нужно записать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 100 - Изучаем XBase - Записываем запись

Шаг 100 - Изучаем XBase - Записываем запись

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

Записать
Записать изменения в базу.

Синтаксис:

Записать()

Англоязычный синоним:

Save

Описание:
Метод Записать выполняет запись изменений в базу данных. До его вызова все изменения объекта производились только в памяти и будут потеряны при осуществлении перехода к другой записи или закрытии базы данных, если отключен режим автосохранения (см. Автосохранение).

Записываем.

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

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);
    ДБФ.СоздатьФайл("c:\Test.dbf");

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

    Пока Спр.ПолучитьЭлемент()>0 Цикл
        ДБФ.Добавить();
        ДБФ.NAME=Спр.Наименование;
        ДБФ.Записать();
    КонецЦикла;

    ДБФ.ЗакрытьФайл();

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

А вот теперь посмотрим где-нибудь.

100_1.gif (5885 b)

Вот они записи из справочника. Мало? А что еще нужно мужику.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 101 - Изучаем справочники – реквизиты

Шаг 101 - Изучаем справочники – реквизиты

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

101_1.gif (5651 b)

Если прямо сейчас запустить 1C, то нового реквизита можно и не увидеть.

101_2.gif (6457 b)

Это и хорошо, можно создавать реквизиты для служебного (административного пользования). Настройка видимости справочника для пользователя опять производится в конфигураторе.

101_3.gif (3163 b)

Выбрав форму списка можно щелкнуть по кнопке реквизиты.

101_4.gif (1729 b)

И выбрать реквизиты для отображения.

101_5.gif (5215 b)

Удалить можно из шапки таблицы. То есть, если Вы передумали.

101_6.gif (5458 b)

Запускаем.

101_7.gif (6678 b)

Совсем другое дело.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 102 - Изучаем XBase – Пишем реквизит справочника

Шаг 102 - Изучаем XBase – Пишем реквизит справочника

Мы получали наименование. Но нам ничего не стоит и реквизит записать. Просто нужно использовать его имя и создать поле.

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

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 25,0);
    ДБФ.ДобавитьПоле("INN", "S", 10,0);
    ДБФ.СоздатьФайл("c:\Test.dbf");

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

    Пока Спр.ПолучитьЭлемент()>0 Цикл
        ДБФ.Добавить();
        ДБФ.NAME=Спр.Наименование;
        ДБФ.INN=Спр.ИНН;
        ДБФ.Записать();
    КонецЦикла;

    ДБФ.ЗакрытьФайл();

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

Запустим и посмотрим:

102_1.gif (3462 b)

Записался. Только проследите, чтобы реквизит все-таки был в справочнике.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C

Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C

Итак, бухгалтерия хочет 1C. Мы уже знаем, что лучше придерживаться на начальном этапе стандартного плана счетов. Подробнее - "Шаг 30 - Распространенная ошибка внедрения 1С". Но есть и вторая ошибка. Привожу практически дословный разговор.

Программист – Вам какое сальдо – дебетовое или кредитовое.
Бухгалтер - Мне обычное.
Программист – (Через 12 часов штудирования документации) Есть дебетовое и кредитовое – обычного нет.
Бухгалтер – Ты ничего не понимаешь в бухгалтерии, я тут 10 лет работаю.
Программист – 1С пользуются 60% предприятий России, у них значит есть, а у Вас нет.
Бухгалтер – Да плевать мне на всю России. Если сальдо. Вот ты мне его и дай.
Программист  – Такого нет.
Бухгалтер – Раз нет, то не суйся в наши дела, ты вообще ничего не понимаешь и толку от тебя нет.
Программист  – Да пошли Вы ...

Разговор очень типичный. Большинство бухгалтеров практики, девочки, которые пришли после 10 класса и проработали много времени. У большинства из низ нет высшего образования в бух учете или вообще никакого образования, поэтому и сальдо есть обычное.

А сводится все к очень простой вещи. Сальдо действительно есть дебетовое и кредитовое. Только вот используется оно редко в практике. Вот есть касса. В ней сейчас 100 руб. Сальдо 100 руб. Забрали 50 руб (проводка) сальдо стало 50 руб. Забрали еще 100 руб. Такое может быть. Ну, не принесли с соседнего отдела бумажку. Сальдо стало –50 руб. Принесут, станет в норме. Так вот это и есть обычное сальдо. В понятии 1C это СКД при типе счета активный. Вот и используйте данный вариант.

  1. Счет активный.
  2. СКД.

И все станет в норме, и говорить будете на одном языке. Сальдо оно и в 1C сальдо.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 104 - Изучаем Форму - Итог по колонке

Шаг 104 - Изучаем Форму - Итог по колонке

Конечно, можно перебрать строчки таблицы и получить сумму. Вот так, например:

ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл

КонецЦикла;

Но лучше воспользоваться специальной функцией.

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

Синтаксис:

Итог(<Колонка>)

Англоязычный синоним:

Total

Параметры:
<Колонка> Номер или идентификатор колонки, по которой считать сумму.
Возвращаемое значение:
Сумма по колонке.

Описание:
Метод Итог вычисляет сумму по заданной колонке таблицы значений.

Это легко попробовать. Делаем новый документ – Таблица. А в реквизиты табличной части добавим числовое значение.

104_1.gif (6033 b)

На форму кнопку, чтобы итог выдавала.

104_2.gif (5217 b)

Код по нажатию.

Процедура СчитаемИтог()
    Предупреждение(Итог("Тест"));
КонецПроцедуры

Проверим:

104_3.gif (5173 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 105 - Изучаем форму - Расчет итогов

Шаг 105 - Изучаем форму - Расчет итогов

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

105_1.gif (5323 b)

А по кнопке выводим туда итог.

Процедура СчитаемИтог()
    ИтогПоТест = Итог("Тест");
КонецПроцедуры

Пробуем:

105_2.gif (5735 b)

По нажатию сработало. Но сработает, только если кнопку нажимать. А хочется так, чтобы всегда срабатывало. Добавил поле - сработало, удалил - сработало. Будем изучать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 106 - Изучаем таблицу на форме - Расчеты

Шаг 106 - Изучаем таблицу на форме - Расчеты

Одной из проблем расчетов является закрутка всяких там НДС и так далее. Конечно, можно сделать кнопки всякие. Мы поступим по другому. Заведем в табличной части НДС.

106_1.gif (3760 b)

Сделаем видимой эту колонку в таблице. И вот в свойствах Тест установим формулу, которая будет сразу этот НДС рассчитывать.

106_2.gif (9706 b)

Вот и все. Теперь можно смело все делать.

106_3.gif (3944 b)

Стоит только ввести число как появиться НДС. А дальше Итог для полной картины.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 107 - Изучаем форму – Автоматический расчет

Шаг 107 - Изучаем форму – Автоматический расчет

Самое хорошее поля этого поле – Текст. Поставим его на форму.

107_1.gif (2671 b)

И формулу для него:

107_2.gif (5316 b)

Все. Что бы мы не делали, в поле Текст будет Итог по колонке. Ни каких перехватов событий и так далее. Ну, разве не круто ?

107_3.gif (4711 b)

Вывод, не хотите путаться с формулами в процедурах, используйте элемент Текст.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 108 - Изучаем справочник – добавляем элемент

Шаг 108 - Изучаем справочник – добавляем элемент

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

Новый
Добавить новый элемент справочника.

Синтаксис:

Новый()

Англоязычный синоним:

New

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

Создадим новый отчет.

108_1.gif (2670 b)

По кнопке "сформировать" будем пробовать записать в справочник.

Процедура Сформировать()
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.Новый();
    Спр.Наименование = "Первые шаги";
КонецПроцедуры

Ничего не произойдет. Записать надо.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 109 - Изучаем справочник – Записать

Шаг 109 - Изучаем справочник – Записать

Нам осталось вызвать только функцию записи.

Записать
Записать (обновить) элемент справочника.

Синтаксис:

Записать()

Англоязычный синоним:

Write

Описание:
Метод Записать выполняет запись (обновление) элемента справочника.
Замечание. Если этот метод применяется в Модуле формы элемента справочника непосредственно к элементу справочника локального контекста, то данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой "#Записать".

Добавляем.

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

И смотрим, все работает:

109_1.gif (4176 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 110 - Изучаем XBase - Открываем файл

Шаг 110 - Изучаем XBase - Открываем файл

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

ОткрытьФайл
Открыть существующую базу.

Синтаксис:

ОткрытьФайл(<ПутьКБазе>, <ПутьКИндексу>, <ТолькоЧтение>)

Англоязычный синоним:

OpenFile

Параметры:
<ПутьКБазе> Строковое выражение, содержащее путь к файлу базы данных формата DBF.
<ПутьКИндексу> Необязательный параметр. Строковое выражение, содержащее путь к индексному файлу базы данных.
<ТолькоЧтение> Необязательный параметр. Число: 1 — файл открывается в режиме только чтение; 0 — файл открывается в режиме полного доступа (при этом файл открывается в эксклюзивном режиме). Значение по умолчанию — 0.

Описание:
Метод ОткрытьФайл открывает существующую базу данных формата DBF.

В "Шаг 100 - Изучаем XBase - Записываем запись" мы записали в файл информацию из справочника. Вот его и будем открывать.

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

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ОткрытьФайл("c:\Test.dbf");
    ДБФ.ЗакрытьФайл();

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 111 - Изучаем XBase – Переходим на первую запись

Шаг 111 - Изучаем XBase – Переходим на первую запись

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

Первая
Перейти на первую запись.

Синтаксис:

Первая()

Англоязычный синоним:

First

Возвращаемое значение:
Число: 1 — если действие выполнено; 0 — если действие не выполнено.

Описание:
Метод Первая() предназначен для перехода на первую запись. Если не установлен текущий индекс, объект позиционируется на первую запись в базе данных, если установлен — на запись, имеющую самое младшее значение выражения текущего индекса (если индекс создавался с установленным флагом <Убывание>, то наоборот).

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

111_1.gif (3751 b)

Ну, а теперь код:

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

    Т = СоздатьОбъект("Таблица");
    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ОткрытьФайл("c:\Test.dbf");
    ДБФ.Первая();

    Т.ВывестиСекцию("Секция_1");

    ДБФ.ЗакрытьФайл();

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Запустим, посмотрим.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 112 - Изучаем XBase – Получаем следующую

Шаг 112 - Изучаем XBase – Получаем следующую

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

Следующая
Перейти на следующую запись.

Синтаксис:

Следующая()

Англоязычный синоним:

Next

Возвращаемое значение:
Число: 1 — получена следующая запись; 0 — следующая запись не найдена.

Описание:
Метод Следующая предназначен для позиционирования объекта на следующую запись. В зависимости от того, установлен ли текущий индекс, позиционирование происходит либо в порядке возрастания физического номера записи, либо в порядке возрастания значения выражения текущего индекса (если индекс создавался с установленным флагом "Убывание", то в порядке убывания).

Попробуем:

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

    Т = СоздатьОбъект("Таблица");
    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ОткрытьФайл("c:\Test.dbf");
    ДБФ.Первая();

    Т.ВывестиСекцию("Секция_1");

    ДБФ.Следующая();
    ДБФ.ЗакрытьФайл();

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Ничего не произойдет.

112_1.gif (4494 b)

И правильно. Нам нужен цикл. Типа следующая пока не конец файла. Значит конец файла нужно определить.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 113 - Изучаем XBase – определяем конец файла

Шаг 113 - Изучаем XBase – определяем конец файла

Функция есть подходящая.

ВКонце
Прочитать значение флага конца файла базы банных.

Синтаксис:

ВКонце()

Англоязычный синоним:

EOF

Возвращаемое значение:
Число: 1 — указатель в файле находится за последней записью; 0 — конец файла не достигнут.

Описание:
Метод ВКонце() возвращает значение флага конца файла.

Вот теперь мы полностью готовы что бы прочитать файл.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ОткрытьФайл("c:\Test.dbf");
    ДБФ.Первая();
    Пока ДБФ.ВКонце() = 0 Цикл
        Т.ВывестиСекцию("Секция_1");
        ДБФ.Следующая();
    КонецЦикла;
    ДБФ.ЗакрытьФайл();
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Запустим что ли:

113_1.gif (5108 b)

Получилось.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 114 - Перенос справочников из одной конфигурации в другую через XBase – в DBF

Шаг 114 - Перенос справочников из одной конфигурации в другую через XBase – в DBF

Ну, вот и обзор можно сделать. Смотрим рисунок:

114_1.gif (10267 b)

Первое это нужно создать соответствующий объект справочника. Тут же можно создать объект XBase (СоздатьОбъект). В новом файле нам нужно добавить поля в соответствии с полями в справочнике (ДобавитьПоле). После этого создать сам файл (СоздатьФайл). А в объект справочника получить все элеметы (ВыбратьЭлементы). Вот эти действия можно делать в любом порядке. Или сначала все со справочником, а потом с XBase, или наоборот. Но дальше все синхронно. Получаем элемент (ПолучитьЭлемент) и тут же добавляем запись в DBF (Добавить). Теперь полям в DBF можно присвоить поле из справочника. И так до конца справочника (ПолучитьЭлемент). В самом конце файл DBF нужно закрыть (ЗакрытьФайл).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 115 - Перенос справочников из одной конфигурации в другую через Xbase – из DBF

Шаг 115 - Перенос справочников из одной конфигурации в другую через Xbase – из DBF

А теперь смотрим как в обратную сторону:

115_1.gif (5537 b)

Сначала нужно создать объекты XBase и справочника (СоздатьОбъект). Дальше DBF файл нужно открыть (ОткрытьФайл). Открыв файл мы переходим на первую запись (Первая). А вот теперь все синхронно. Если не в конце (ВКонце), то создаем новую запись (Новый) и присваиваем полям справочника поля DBF. Для сохранения в справочнике новую запись нужно записать(Записать). После этого идем на следующую запись (Следующая) и опять все повторяется. В самом конце DBF файл нужно закрыть (ЗакрытьФайл).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase

Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase

Мы продолжаем разбор ошибок, которые могут убить попытки внедрения 1C вместе с Вашей репутацией. Не главное, что говорят бухгалтера. Главное это Вы, потому что на кону Ваше имя, которое, как известно, нигде не купишь. И еще, одну ошибку запомнят, при этом тысячу побед забудут. Для хронологии, мы уже рассмотрели:

  • "Шаг 30 - Распространенная ошибка внедрения 1С"
  • "Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C"

Итак, раз Вы решаетесь внедрять 1C, то наверно до Вас не на счетах считали, и уже скорее всего точно не на калькуляторе. Скорее всего, данные раскиданы по куче программ, таких как зарплата, складской учет, или вообще в Excel. Начиная использовать 1C не надо начинать все с нуля, заставляя бухгалтеров вбивать все справочники и операции. Попробуйте извлечь из их компов все, что можно и занести все это в 1C. Справочники, проводки, документы - все это можно поместить практически автоматически. Как помещать в 1C Вы уже знаете из "Шаг 115 - Перенос справочников из одной конфигурации в другую через Xbase – из DBF".

Практически все современное программное обеспечение поддерживает экспорт в DBF формат, а старое вообще использует его для хранения данных. Наиболее стандартный вариант использования Access в качестве средства для преобразования формат – access – dbf. Можете почитать для примера:

  • "Шаг 15 - Импорт таблиц из Excel"
  • "Шаг 16 - Импорт текстовых файлов"
  • "Шаг 26 - Доступ к SQL Server из Access"

А вообще Access для импорта поддерживает очень много форматов, в том числе и старых, например, Paradox. Можно использовать ODBC, или на худой конец текстовые файлы.

116_1.gif (5193 b)

А вот дальше данные можно сохранить в DBF. Конечно для экспорта форматов не меньше. Но нам нужен DBF.

116_2.gif (2142 b)

И он есть. Access хорош тем, что вы можете через него конвертировать в DBF очень много форматов и при этом затраты на обучение очень маленькие.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 117 - Изучаем Справочник – пометка удаления

Шаг 117 - Изучаем Справочник – пометка удаления

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

ПометкаУдаления
Прочитать флаг пометки удаления элемента справочника.

Синтаксис:

ПометкаУдаления()

Англоязычный синоним:

DeleteMark

Возвращаемое значение:
Числовое значение: 1 — если на элементе справочника стоит пометка удаления; 0 — если нет пометки удаления.

Описание:
Метод ПометкаУдаления() позволяет прочитать значение пометки удаления текущего элемента справочника.

Вот так это может выглядеть в коде:

Если Спр.ПометкаУдаления() = 1 Тогда
    // не пишем
Иначе
    // пишем.
КонецЕсли;

Так я избавился от помеченных на удаление. Но беды на этом не закончились. Читаем дальше.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 118 - Изучаем справочник – удаление

Шаг 118 - Изучаем справочник – удаление

После первой попытки конвертировать данные в новую конфигурацию я тут же нашел всякие недостатки. В номенклатуре у ряда позиций не стояла, например, единица измерения. В общем поверьте мне на слово пока, что такая ситуация можем случиться, Вы конвертировали, а что-то не то. Так вот, если позиций под 1000, то вручную удалять все из справочника как-то не хочется. Конечно, можно девочку посадить. А есть и другой выход. У справочника есть функция удалить. Вот ей мы то и воспользуемся для очистки справочника. Обратите внимание, что не пометка на удаление, а удалить. Ведь в нашем варианте справочник новый, ни где в операциях пока не задействован.

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

Синтаксис:

Удалить(<Режим>)

Англоязычный синоним:

Delete

Параметры:
<Режим> Числовое выражение: 1 — непосредственное удаление; 0 — пометка на удаление. Необязательный параметр. Значение по умолчанию — 1.

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

Пишем код полного удаления записей из справочника:

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

    Спр =СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()>0 Цикл
        Спр.Удалить();
    КонецЦикла;

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

Код из 7 строк, работает пару минут, экономия нервов и времени.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 119 - Изучаем Справочники – типизация реквизитов

Шаг 119 - Изучаем Справочники – типизация реквизитов

Справочник содержит всякие там реквизиты. О них читайте:

  • "Шаг 9 - Создаем справочник Контрагенты"
  • "Шаг 101 - Изучаем справочники – реквизиты"

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

шт.
штуки.
штк.

Фантазии у меня не хватает, а у бухгалтера хватит еще на много вариантов. Можете не сомневаться. Есть и более интересные задачи. Например, к каждой номенклатуре привязать поставщика. Зачем? Да просто даже одного наименования и цены товары от разного поставщика могут быть разного качества. На дворе перестройка, бардак и все такое. Дорогие любому сердцу снабженца понятия как ГОСТ, ОТК, Знак Качества минули в лету. Так вот и получается, что берешь коронки на Каматцу в ООО "Механический завод", а она из сырца сделана. А, например, в ООО "Каматцу ЛТД" вроде ничего, и служит в два раза дольше. Так вот и хотят люди знать, чья это запчасть, а поэтому запчасть становится свойством номенклатуры. Таким же, как цена и количество. Ну ка, попробуйте сделать это просто атрибутом. Так чего только не на вводят. А при атрибуте в виде строки и пробел лишний большая проблема ввести. Да и начальство хочет знать сколько у него чего и от кого. Конечно, можно это и в проводках отразить при оприходовании 60-41, да только жизнь этой запчасти не закончится на 41, она и на 10 может переползти, а может сразу на 90.2.3 или еще куда. Так вот поставщик и потеряется. А начальство оно как всегда со своими вопросами – "Сколько у Сидорова в подотчете втулок номер 123.34.34, которые мы в Магадане брали?" И что ему отвечать? А теперь представьте алгоритм хотя бы в первом приближении.

Определяем, есть ли у сидорова на 10 эта запчасть.
Теперь нужно эту запчать найти на 41 со всеми последствиями.
А потом определить откуда.

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

119_1.gif (14064 b)

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

Сколько запчастей от такого поставщика.
Кто поставил эту запчасть.
Есть ли у Васи в подотчете эта запчать от такого поставщика.

И на многое многое другое.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 120 - Перевод справочника в другую конфигурацию – типизированный атрибут

Шаг 120 - Перевод справочника в другую конфигурацию – типизированный атрибут

Здесь немного сложнее. Тот шаг, который я написал про удаление справочника был, как раз основан на том, что при перегонке типизированного атрибута я получил вместо наименования – код. Смотрите, как это было. Вот примерный список номенклатуры.

120_1.gif (3401 b)

Так, если его вывести в таблицу, то вроде все нормально.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Спр =СоздатьОбъект("Справочник.Номенклатура");

    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()>0 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Таблица.

120_2.gif (3645 b)

А вот как выглядит в таблице.

120_3.gif (2175 b)

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

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Спр = СоздатьОбъект("Справочник.Номенклатура");

    ДБФ = СоздатьОбъект("XBase");
    ДБФ.ДобавитьПоле("NAME", "S", 50,0);
    ДБФ.ДобавитьПоле("POST", "S", 50,0);
    ДБФ.ДобавитьПоле("ED", "S", 50,0);
    ДБФ.ДобавитьПоле("c:\Test.dbf");

    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()>0 Цикл
        Т.ВывестиСекцию("Секция_1");
        ДБФ.Добавить();
        ДБФ.NAME=Спр.Наименование;
        ДБФ.POST=Спр.Поставщик;
        ДБФ.ED=Спр.ЕдиницыИзмерения;
        ДБФ.Записать();
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

А теперь, что в DBF:

120_4.gif (2177 b)

Так вот код там. А мне нужно было наименование. Именно наименование. Так вот все дело в том, если атрибут типизирован, то нужно вызывать его атрибут Наименование.

ДБФ.POST=Спр.Поставщик.Наименование;
ДБФ.ED=Спр.ЕдиницыИзмерения.Наименование;

Теперь все в порядке:

120_5.gif (3539 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 121 - Изучаем Справочник – запись по наименованию

Шаг 121 - Изучаем Справочник – запись по наименованию

В прошлых шагах я производил экспорт справочников в DBF формат. При этом я использовал не код, а имя для связанных атрибутов. Это очень важно, так как при вводе справочника в настройках была автоматическая нумерация. Связи терялись, а оставлять старые связи мне не хотелось, слишком там все было замучено. Короче, при вводе справочника в другую конфигурацию, в котором есть типизированные атрибуты пришлось снова эти связи устанавливать, а значит находить запись в справочнике по имени. К счастью, такая функция есть.

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

Синтаксис:

НайтиПоНаименованию(<Наименование>, <Режим>, <ФлагПоиска>)

Англоязычный синоним:

FindByDescr

Параметры:
<Наименование> Строковое выражение с наименованием искомого элемента справочника.
<Режим> Необязательный параметр. Числовое выражение — режим поиска: 1 — поиск внутри установленного подчинения (родителя); 0 — поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию — 1.
<ФлагПоиска> Необязательный параметр. Числовое выражение — флаг поиска: 1 — найти точное соответствие наименования; 0 — найти наименование по первым символам.Значение по умолчанию — 0.

Возвращаемое значение:
Число 1 — если действие выполнено;
Число 0 — если действие не выполнено (элемент не найден).

Описание:
Метод НайтиПоНаименованию() выполняет поиск элемента справочника по наименованию, заданному параметром <Наименование> и позиционирует объект справочник на этом элементе.
Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.

Будем тренироваться. Есть справочник контрагентов.

121_1.gif (3564 b)

Вот мы и попробуем поискать в нем Авто-Карьер, смотрим код.

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

    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.НайтиПоНаименованию("Авто-Карьер", 1);
    Если Спр.Выбран() > 0 Тогда
        Предупреждение(Спр.Код);
    Иначе
        Предупреждение("Не найден");
    КонецЕсли;
КонецПроцедуры

А вот и результат.

121_2.gif (3120 b)

Так мы можем восстанавливать связи для типизированных атрибутов.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 122 - Изучаем справочник – как заставить выбирать программно

Шаг 122 - Изучаем справочник – как заставить выбирать программно

Производя поиск по наименованию может получиться такая ситуация, что по имени мы не найдем. Конечно, покажем предупреждение. Но лучше в данный момент заставить пользователя все-таки выбрать запись в справочнике. Для этого нам нужно программно показать окно справочника. И это, тоже можно.

Выбрать
Выбрать элемент справочника в диалоге.

Синтаксис:

Выбрать(<Подсказка>, <Форма Списка>)

Англоязычный синоним:

Choose

Параметры:
<Подсказка> Текст заголовка окна диалога выбора. Может использоваться в качестве подсказки конечному пользователю.
<ФормаСписка> Строковое выражение идентификатора той формы списка справочника (как он объявлен в конфигураторе), которая должна использоваться для выбора. Если это значение пустое, то используется форма списка по умолчанию.

Возвращаемое значение:
Числовое значение: 1 — если элемент выбран; 0 — если не выбран.

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

Теперь наш код выглядит так.

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

    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.НайтиПоНаименованию("Авто - Карьер", 1);
    Если Спр.Выбран() > 0 Тогда
        Предупреждение(Спр.Код);
    Иначе
        Спр.Выбрать(" Авто - Карьер","");
    КонецЕсли;
КонецПроцедуры

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

122_1.gif (4618 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 123 - Изучаем справочник – как проверить что выбран

Шаг 123 - Изучаем справочник – как проверить что выбран

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

Выбран
Проверить факт выбора элемента справочника.

Синтаксис:

Выбран()

Англоязычный синоним:

Selected

Возвращаемое значение:
Числовое значение: 1 — если элемент справочника выбран (спозиционирован); 0 — если не выбран.

Описание:
Метод Выбран возвращает число со значением 1 — если элемент справочника выбран (спозиционирован), 0 — если элемент справочника не выбран.

Попробуем в нашем коде.

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

    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.НайтиПоНаименованию("Авто - Карьер", 1);
    Если Спр.Выбран() > 0 Тогда
        Предупреждение(Спр.Код);
    Иначе
        Спр.Выбрать("Авто - Карьер","");
        Если Спр.Выбран() = 0 Тогда
            Предупреждение("Ну че ты в конце концов.");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Пользователь может отказаться от выбора справочника нажав ESC. Тогда он получит вот такое сообщение.

123_1.gif (3465 b)

Ну, а дальше Вы сами решите, что делать. По мне вырубить комп самое то, если не понимают люди, что просто нужно выбрать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 124 - Четвертая ошибка внедрения 1С – с чего начинать

Шаг 124 - Четвертая ошибка внедрения 1С – с чего начинать

Одна из ошибок вызвана рекламой. Типа купи 1C и жизнь без проблем. Это только на первый взгляд. Сначала нужно посмотреть предыдущие ошибки:

  • "Шаг 30 - Распространенная ошибка внедрения 1С"
  • "Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C"
  • "Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase"

Проблем уже много. Но есть и другие. Вот реальный пример. Счет фактура. Ну, счет фактура да счет фактура. Что может быть проще и в типовой конфигурации она должна быть вроде как отлажена. Ах, нет. И не надейтесь даже на это. Построение работы на каждом предприятии уникальное. Ну, например, посредническая фирма. Она закупает и поставляет товары другим. Тут возникает понятие TPЗ и наценки. ТЗР – транспортные расходы. Поступать можно двумя способами, включить их в стоимость товара или отдельной строкой в счет фактуре. Если включать ТЗР и наценку в стоимость товара, то проблем нет. В счет фактуре будет фигурировать стоимость с наценками. Только вот клиент этой фирмы хочет видеть отдельной строкой ТЗР и отдельной строкой наценку. Вот так, например.

124_1.gif (3326 b)

Если пользоваться типовой конфигурацией, то в справочник номенклатуры придется ввести ТЗР и наценку. А расчеты проводить на калькуляторе. Но ведь это полный бред. ТЗР не имеет никакого отношения к номенклатуре, это просто транспортные расходы. Значит, Вы не сможете просто этого сделать. Придется изменять документ. Кроме того, практика бух. учета на данном предприятии может накладывать свою специфику. Например, все ТЗР могут учитывать на каком-то субсчете. Типовая конфигурация и знать ничего не знает об этом. На мой личный взгляд, не надо создавать наполеоновских планов. Нужно начинать просматривать каждый документ на предприятии и приводить его к требованиям бух. учета на данном предприятии. Именно не с общего баланса, а с отдельных участков. Например, взять 41 счет и сделать все документы для его обслуживания. Никаких ручных проводок. Только на основе документов. Поверьте, бухгалтер и сам не всегда может сказать, что ему надо. Вот и нужно задать вопросы типа – будут субсчета, какие субконто, какие документы используются. Не бывает в бухгалтерии проводок, бываю документы, на основе которых делаются проводки.

Вывод. Начинайте адаптировать документы. Создавать журналы документов. По одному участку(счету). А конечный баланс получится сам собой. Многие промежуточные отчеты отпадут за ненадобностью через пару месяцев учета. Но они Вам нужны будут на этапе тестирования.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 125 - Изучаем операции – Новая проводка

Шаг 125 - Изучаем операции – Новая проводка

Разговаривая об автоматизации и переделывании стандартных документов мы не можем обойти программное создание проводок. Об этом уже упоминалось в шаге "Шаг 16 - Проводка ТМЦ".

Пора рассмотреть этот вопрос глубже. Все начинается с новой проводки.

НоваяПроводка
Создать новую проводку.

Синтаксис:

НоваяПроводка()

Англоязычный синоним:

NewEntry

Описание:
Метод создает новую проводку для текущей операции. Новая проводка становится текущей.
Во-первых, метод может быть вызван для объекта <Операция>, созданного функцией СоздатьОбъект, при создании или изменении операции принадлежащей документу специального вида <Операция>.
Во-вторых, метод может быть вызван для объекта, являющегося атрибутом документа, при создании операции принадлежащей документу, в процессе проведения документа.
Созданная проводка будет записана и повлечет изменения в бухгалтерских итогах после вызова метода операции Записать.

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

125_1.gif (5289 b)

Операция проведения будет формироваться только в том случае, если стоит галочка Бухгалтерский учет. Обратите на это внимание, иначе можно долго (как я) пытаться выяснить почему документ не проводится. А как Вы догадываетесь, ведь 1C напрямую этого не скажет. Если галочка стоит до в модуле будет процедура ОбработкаПроведения, вот в ней и можно создавать новую проводку.

Процедура ОбработкаПроведения()
    Операция.НоваяПроводка();
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 126 - Изучаем операции - Дебет

Шаг 126 - Изучаем операции - Дебет

Любая операция состоит двух частей. Куда – дебит и откуда – кредит. Почитайте "Шаг 46 - Как вообще работает бухгалтерия".

Нам нужно добраться до дебетового счета.

Дебет
Обращение к дебету проводки (корреспонденции).

Синтаксис:

Дебет

Англоязычный синоним:

Debit

Описание:
Атрибут Дебет служит для обращения к дебетовой части текущей проводки (корреспонденции) операции. Данный атрибут возвращает агрегатный объект специального типа <Дебет>, который используется только для доступа к данным дебетовой части конкретной проводки (корреспонденции) операции и не используется отдельно.
Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм <Операции> и <Журнал проводок> текущая проводка определяется положением курсора.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 127 - Изучаем операции - Дебет.Счет

Шаг 127 - Изучаем операции - Дебет.Счет

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

Счет
Счет дебета/кредита проводки (корреспонденции) операции.

Синтаксис:

Счет

Англоязычный синоним:

Account

Значение:
Значение типа «Счет».

Описание:
Атрибут Счет служит для доступа к счету дебета/кредита проводки или корреспонденции операции.

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

Процедура ОбработкаПроведения()

    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("90.3.3");

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

В результате у нас будет установлен счет для дебита. Куда пойдут деньги.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 128 - Изучаем операции – Кредит

Шаг 128 - Изучаем операции – Кредит

Вторая составляющая операции. Откуда деньги будут взяты. Читайте "Шаг 46 - Как вообще работает бухгалтерия".

Кредит
Обращение к кредиту проводки (корреспонденции).

Синтаксис:

Кредит

Англоязычный синоним:

Credit

Описание:
Атрибут Кредит служит для обращения к кредитовой части текущей проводки (корреспонденции) операции. Данный атрибут возвращает агрегатный объект специального типа <Кредит>, который используется только для доступа к данным кредитовой части конкретной проводки (корреспонденции) операции и не используется отдельно.
Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм <Операции< и >Журнал проводок> текущая проводка определяется положением курсора.

Это просто атрибут, для доступа которому нужно указать еще и счет.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 129 - Изучаем операции – Счет Кредита

Шаг 129 - Изучаем операции – Счет Кредита

Обращаться к Счету можно точно так же как и в Дебете. Читайте "Шаг 127 - Изучаем операции - Дебет.Счет".

Укажем откуда деньги будут уходить.

Процедура ОбработкаПроведения()
    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("90.3.3");
    Операция.Кредит.Счет = СчетПоКоду("68.1");
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 130 - Изучаем операцию – Сумма

Шаг 130 - Изучаем операцию – Сумма

Теперь, когда мы знаем, откуда и куда гонятся деньги нужно указать, сколько их денег. Я понимаю, что чем больше, тем лучше, но нужно конкретно. Для этого есть атрибут сумма, чтобы указать деньги.

Сумма
Сумма выбранной проводки (корреспонденции) операции.

Синтаксис:

Сумма

Англоязычный синоним:

Sum

Значение:
Значение типа <Число>.

Описание:
Атрибут Сумма служит для обращения к сумме выбранной проводки (корреспонденции) операции.
Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм <Операции> и <Журнал проводок> текущая проводка определяется положением курсора.

Вот и укажем 100 руб.

Процедура ОбработкаПроведения()
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.3.3");
    Операция.Кредит.Счет = СчетПоКоду("68.1");
    Операция.Сумма = 100;
КонецПроцедуры

В реальности сумма берется после расчета, а данная проводка отражает сумму НДС от выставленного счета, НДС обычно рассчитывается.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 131 - Изучаем операции – Записать

Шаг 131 - Изучаем операции – Записать

Последним шагом является запись операции. Операция в минимальном виде состоит из одной проводки, в максимальном много – не знаю я точно, но много можно. Итак, операция должна быть записана.

Записать
Записать измененную или новую операцию.

Синтаксис:

Записать()

Англоязычный синоним:

Write

Описание:
Метод Записать выполняет запись новой или измененной операции.
Он может быть использован в следующих ситуациях:

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

Замечание. При записи сложной проводки, если у главной корреспонденции сложной проводки не указана сумма (равна 0), то она автоматически вычисляется на основании подчиненных корреспонденции.

Итак, записываем.

Процедура ОбработкаПроведения()
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.3.3");
    Операция.Кредит.Счет = СчетПоКоду("68.1");
    Операция.Сумма = 100;
    Операция.Записать();
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 132 - Операция результат проведения документа

Шаг 132 - Операция результат проведения документа

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

132_1.gif (2274 b)

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

132_2.gif (10681 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 133 - Что делать, если для документа проводок нужно много

Шаг 133 - Что делать, если для документа проводок нужно много

Нормальная ситуация. Например, выписывание операции по счет фактуре ведет к целой серии операций. Нужно и НДС провести и каждую номенклатуру и общею сумму. Вот пример.

Процедура ОбработкаПроведения()
     ..........
    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("90.3.3");
    Операция.Кредит.Счет = СчетПоКоду("68.1");
    Операция.Сумма = НДССумма;
    //__________________________________
    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("90.2.3");
    Операция.Кредит.Счет = СчетПоКоду("41.10");
    Операция.Сумма = СуммаТЗР;
    //__________________________________
    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("62.2");
    Операция.Кредит.Счет = СчетПоКоду("90.1.3");
    Операция.Сумма = СуммаИтоговая;
    //__________________________________
    .........
    Операция.Записать();
КонецПроцедуры

И это далеко не все проводки. Как видите идея простая. Каждый раз Вы вызываете новая проводка и проводка добавляется в операцию. Вот и все. Будет одна операция много проводок. А точнее один документ – одна операция – много проводок.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 134 - Изучаем операцию – содержание

Шаг 134 - Изучаем операцию – содержание

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

Содержание
Содержание операции.

Синтаксис:

Содержание

Англоязычный синоним:

Description

Значение:
Значение типа <Строка>.

Описание:
Атрибут Содержание служит для обращения к содержанию операции. Содержание операции представляет собой произвольную символьную строку. Максимальная длина содержания задается в конфигураторе при редактировании свойств объекта метаданных <Операция>.

Итак, при создании операции перед новыми проводками можно указать содержание. Вот так например.

Процедура ОбработкаПроведения()
    Операция.Содержание="Начисляем НДС";
    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("90.3.3");
    Операция.Кредит.Счет = СчетПоКоду("68.1");
    Операция.Сумма = 100;
    Операция.Записать();
КонецПроцедуры

Как результат в журнале операций можно посмотреть содержание.

134_1.gif (4251 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 135 - Изучаем операции – Количество

Шаг 135 - Изучаем операции – Количество

Мы с Вами уже рассматривали, в каком случае можно использовать количество. Смотрим шаги:

  • "Шаг 40 - Что значит количественный учет"
  • "Шаг 41 - Изучаем Счета – Количественный"

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

Количество
Количество выбранной проводки или корреспонденции операции.

Синтаксис:

Количество

Англоязычный синоним:

Amount

Значение:
Значение типа <Число>.

Описание:
Атрибут Количество служит для обращению к количеству выбранной проводки или корреспонденции операции.
Перед обращением к атрибуту конкретной проводки эта проводка должна быть выбрана с помощью методов ВыбратьПроводки, ПолучитьПроводку или создана при помощи метода НоваяПроводка. В модулях форм <Операции> и <Журнал проводок> текущая проводка определяется положением курсора.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 136 - Изучаем операции – Еще про дату операции

Шаг 136 - Изучаем операции – Еще про дату операции

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

  • "Шаг 64 - Изучаем операции - ДатаОперации"

Вы можете сами установить ДатуОперации. Но опосредованно через указания даты документа. А так как дата документа это внутреннее свойство, то все, что нужно - это выбрать на форме этот атрибут. Еще раз, он всегда есть сам по себе.

136_1.gif (11561 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 137 - Откуда берутся формы документов в бухгалтерии

Шаг 137 - Откуда берутся формы документов в бухгалтерии

Конечно, мы как разработчики не обязаны знать всех тонкостей бух. Учета. Но все-таки общие вещи неплохо понимать. Самый интересный вопрос – откуда берутся формы документов. Например, откуда бухгалтерия решила, что счет фактура должна быть именно такая. Ни какого чуда и полета фантазии здесь нет. Все оговаривает закон. Законов много, они меняются, тут все понятно. Но все-таки. В данном случае со счетом фактурой есть постановление правительства.

ПОСТАНОВЛЕНИЕ от 2 декабря 2000 г. № 914
ОБ УТВЕРЖДЕНИИ ПРАВИЛ ВЕДЕНИЯ ЖУРНАЛОВ УЧЕТА ПОЛУЧЕННЫХ И ВЫСТАВЛЕННЫХ
СЧЕТОВ-ФАКТУР, КНИГ ПОКУПОК  И  КНИГ  ПРОДАЖ   ПРИ  РАСЧЕТАХ ПО НАЛОГУ
НА ДОБАВЛЕННУЮ СТОИМОСТЬ.

А к нему есть приложение.

Приложение № 1   к Правилам ведения журналов учета полученных и выставленных
                 счетов - фактур, книг покупок и книг  продаж при расчетах по
                 налогу   на добавленную стоимость  (в редакции Постановления
                 Правительства РФ   от 15.03.2001 № 189)

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

IV. Заключительные положения

28.  При наличии большого количества покупателей или продавцов    допускается  ведение книги
покупок и книги продаж с использованием    компьютера.  В  этом случае по истечении
отчетного периода,  но не    позднее   20   числа   месяца,   следующего  за  отчетным  месяцем
(кварталом),   книга   покупок   и книга  продаж  распечатываются,   страницы   пронумеровываются,
прошнуровываются   и  скрепляются    печатью.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 138 - Объектная модель вокруг счет фактур

Шаг 138 - Объектная модель вокруг счет фактур

Хотим мы или нет, а понять общие принципы придется. Мы сосредоточимся на том, что приходит вокруг счет фактур. Итак, счетов фактур есть два типа – входящие (покупки) и выходящие (продажи). Для учета счетов фактур есть два журнала. Журнал продаж и журнал покупок. При покупке, счета фактуры нам выдают на руки. Тут никуда не денешься придется вводить с бумаги. А вот при продаже, мы сами можем их выписывать, а значит готовить в 1C и только распечатывать. Если мы хотим автоматизировать учет мы должны заставить делать две веши.

  1. Обязательно вносить счет фактуры при покупках.
  2. Заставить выписывать счет фактуры из 1C.

Тут встает вопрос о том, как все это сделать в 1C. А сделать все это не так сложно. Самое первое нужно сделать документы. И опять много вопросов. Например, при выписывании счета фактуры по номенклатуре могут быть задействованы разные счета. Материалы – 41, ГСМ – 10. Можно конечно налепить все в одном документе, сделать разные галочки и выборы. Только вот мне лично это не нравится. Мне кажется, что логично так.

Один тип документа – Один тип операции (набор проводок).

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

  • "Шаг 69 - Изучаем документ - ВыбратьДокументы"
  • "Шаг 70 - Изучаем документы - ПолучитьДокумент"
  • "Шаг 71 - Изучаем документы - НомерДок"

А вот так все это будет выглядеть в виде модели.

138_1.gif (3017 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 139 - Изучаем документы – фильтр по журналу

Шаг 139 - Изучаем документы – фильтр по журналу

В шаге "Шаг 138 - Объектная модель вокруг счет фактур" я так лихо все расписал как все хорошо. Только вот нужно для формирования книги продаж отсечь документы, которые не входят в журнал. По началу я подумал, что у журнала есть методы всякие типа получить документ. А там нет ничего. Представляете ? Но зато можно у объекта документ установить фильтр. Нужно сказать какой журнал мы будем использовать. Смотрим этот метод.

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

Синтаксис:

ИспользоватьЖурнал(<Журнал>, <ФлагОгрПросм>)

Англоязычный синоним:

UseJournal

Параметры:
<Журнал> Идентификатор журнала, который предполагается использовать для отбора документов и доступа к графам.
<ФлагОгрПросм> Необязательный параметр. Число: 1 — если выборка ограничивается документами, входящими в указанный журнал; 0 — если метод используется только для использования граф методом Графа. Значение по умолчанию 1.

Описание:
Метод ИспользоватьЖурнал позволяет при переборе документов командой Выбрать использовать журнал для отбора документов и доступа к графам журнала.

Так вот смотрим пример. Один из документов у меня заноситься в журнал.

139_1.gif (5191 b)

Хорошо. Построим отчет.

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

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

    Док = СоздатьОбъект("Документ");
    Док.ИспользоватьЖурнал("Теst");

    Док.ВыбратьДокументы("01.01.2002","31.12.2002");

    Пока Док.ПолучитьДокумент() > 0 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

И смотрим. Вывелся только один документ.

139_2.gif (1330 b)

Попробуем убрать наш фильтр.

139_3.gif (1520 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 140 - Изучаем документы – Настройки

Шаг 140 - Изучаем документы – Настройки

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

140_1.gif (4838 b)

Открыли посмотреть или еще раз напечатать она тут как тут. Бороться с ней просто, нужно поставить по умолчанию открытие для просмотра. Нам в сервис – параметры.

140_2.gif (3471 b)

А там нужно найти вкладку общие, а на ней режим редактирования объектов в нем поставить просмотр.

140_3.gif (8165 b)

И теперь при открытии и просмотре Вас не будут спрашивать ни о чем и документ нельзя будет редактировать. А если надо? А вот, если все-таки надо, то в меню Действия - открыть.

140_4.gif (2766 b)

И можно редактировать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 141 - Изучаем бухгалтерские итоги – на любой момент

Шаг 141 - Изучаем бухгалтерские итоги – на любой момент

Одной из проблем, которая часто возникает при внедрении 1C, получение состояния предприятия или отдельных его составляющих на данный конкретный момент. Например, состояние склада на данный период, состояние подотчетных листов. Обычно руководителям предприятий нужно и так и сяк и сверху и снизу и на голове. Выход из данной ситуации в получении временных итогов. А для расчета есть функция специальная. Смотрим.

Рассчитать
Расчет временных итогов.

Синтаксис:

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

Англоязычный синоним:

Calculate

Параметры:
<НачалоПериода> Необязательный параметр. Выражение типа дата, документ или позиция документа начала периода расчета временных итогов. Если этот параметр не указан, будут вычисляться конечные сальдо на момент, указанный в параметре <КонецПериода>.
<КонецПериода> Необязательный параметр. Выражение типа дата, документ или позиция документа конца периода расчета временных итогов. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <НачалоПериода>.
<ФильтрП, рСчетам> Необязательный параметр. Счета, для которых будет выполняться временный расчет итогов. Задается значением типа «Счет» или объектом типа «СписокЗначений», содержащим значения типа «Счет», либо строкой содержащей список кодов счетов, разделенных символом ", " или ";".
<ТолькоСинтетика> Необязательный параметр:
1 — рассчитывать сальдо только по счетам;
0 — или не указан — рассчитывать сальдо по счетам и по субконто.
<ПланСчетов> Необязательный параметр. Значение типа «План Счетов». Ограничение расчета одним планом счетов.
<РазделительУчета> Необязательный параметр. Значение разделителя учета. Ограничение расчета одним значением разделителя учета.

Возвращаемое значение:
Число: 1 — расчет выполнен; 0 — расчет не выполнен.

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

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

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

    Итог = СоздатьОбъект("БухгалтерскиеИтоги");
    Итог.Рассчитать(ТекущаяДата());

    Т.ВывестиСекцию("Секция_1");

    Т.ТолькоПросмотр(1);
    Т.Показать();

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 142 - Изучаем бухгалтерские итоги – запрос

Шаг 142 - Изучаем бухгалтерские итоги – запрос

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

ВыполнитьЗапрос
Выборка итогов в различных разрезах.

Синтаксис:

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

Англоязычный синоним:

DoQuery

Параметры:
<НачалоПериода> Необязательный параметр. Выражение типа дата, документ или позиция документа начала периода запроса. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <КонецПериода>
<КонецПериода> Необязательный параметр. Выражение типа дата, документ или позиция документа конца периода запроса. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <НачалоПериода>.
<ФильтрПоСчетам> Необязательный параметр. Счета, для которых будут отбираться итоги в запросе. Задается значением типа <Счет> или объектом типа <Список-Значений>, содержащим значения типа <Счет>, либо строкой содержащей список кодов счетов, разделенных символом ", " или ";". Если параметр не указан, отбор будет выполняться по всем счетам.
<ФильтрПоКоррСчет> Необязательный параметр. Значение типа <Счет> — корреспондирующий счет, в корреспонденции с которым будут отбираться итоги счета, указанного в параметре <ФильтрПоСчетам>. Задается значением типа <Счет> или объектом типа <СписокЗначений>, содержащим значения типа <Счет>, либо строкой содержащей список кодов счетов, разделенных символом "," или ";". Если параметр не указан, будут отбираться итоги в корреспонденции со всеми счетами.
<Валюта> Необязательный параметр. Значение типа <Справочник.Валюты>. Если параметр не указан итоги выдаются без учета валюты.
<ТипИтогов> Необязательный параметр. Число — тип отбираемых итогов. Может принимать следующие значения:1 — остатки и обороты по счету в целом;2 — обороты между счетами;Первое и второе вместе.По умолчанию — 1.
<Периодичность> Необязательный параметр. Позволяет получить дополнительный разрез итогов по периодам. Число или символьная строка (См. ниже). По умолчанию периодичность не задана.
<ТипСуммы> Необязательный параметр. Число или строка — тип рассчитываемых итогов. Может принимать следующие значения (в скобках указаны строковые синонимы):1 («С», «S») рассчитывать суммы;2 («В», «С») рассчитывать валютные суммы;4 («К», «А») рассчитывать количество.Если требуется одновременно рассчитывать разные суммы, значение параметра получается путем сложения допустимых значений, например: 5 (1+4) — рассчитывать суммы и количество. При указании параметра строкой в ней указываются все символы, которые обозначают типы сумм, которые нужно рассчитывать. По умолчанию рассчитываются все типы сумм.
Параметр <Периодичность> может принимать следующие значения (в скобках указаны строковые синонимы):
1 («Период», «Period») Промежуточные итоги не рассчитываются;
2 («Операция», «Entry») Промежуточные итоги рассчитываются по операциям;
3 («Проводка», «Operation») По проводкам;
4 («День», «Day») По дням;
5 («Неделя», «Week») По неделям;
6 («Декада», «Decade») По декадам;
7 («Месяц», «Month») По месяцам;
8 («Квартал», «Quorter») По кварталам
9 («Год», «Year») По годам.

Возвращаемое значение:
Число: 1 — запрос выполнен; 0 — запрос не выполнен.

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

Прошлый шаг можно модернизировать вот так.

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

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

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

    Т.ВывестиСекцию("Секция_1");

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 143 - Бухгалтерские итоги – предварительный обзор

Шаг 143 - Бухгалтерские итоги – предварительный обзор

Предварительно выглядит все так. Мы должны создать этот объект.

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

А дальше у нас есть три варианта. Просто получать итоги на данный момент обращаясь к функциям. Читайте "Шаг 43 - Изучаем бухгалтерские итоги – СКД" или, если есть необходимость, получать итоги на конкретное время, в том числе и на текущий момент. Для этого предусмотрено две функции: Рассчитать и ВыполнитьЗапрос

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 144 - Два варианта получения остатков по складу

Шаг 144 - Два варианта получения остатков по складу

В любом случае нам нужно получить объект бухгалтерские итоги. Состояние склада нужно на какой-то конкретный момент. Обычно это сегодня, что соответствует вопросу – что есть на складе.

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

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

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

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

    Итог = СоздатьОбъект("БухгалтерскиеИтоги");
    Итог.Рассчитать(ТекущаяДата(),ТекущаяДата(),"41");

    Пока Ном.ПолучитьЭлемент() > 0 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Вывести можно так:

144_1.gif (2970 b)

Второй способ основан на использовании запроса:

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

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

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

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

    // идем по субконто
    Пока Итог.ПолучитьСубконто() = 1 цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Вывести результаты можно так.

144_2.gif (2681 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 145 - Изучаем бухгалтерские итоги – обороты

Шаг 145 - Изучаем бухгалтерские итоги – обороты

Одной из задач является получение оборотов между счетами. Ну, например, есть счет 90.2.3, который должен быть себестоимостью продаж. На этот счет могут приходить деньги из разных направлений. Например, стоимость товара (41.4) и транспортные расходы (41.10). Кстати на Вашем предприятии это можем быть не так. Так вот, может возникнуть вопрос, сколько отнесено на текущий месяц ТЗР. Конечно, начисление ТЗР отражено в проводке и можно извлечь оттуда проанализировав проводки. Можно изучить журнал документов и взять оттуда. Но ответ на этот вопрос можно получить и по другому. Это оборот между 90.2.3 и 41.20.

ОБ
Расчет оборотов между счетами. Синтаксис:

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

Англоязычный синоним:

TO

Параметры:>
<СчетДеб>, <СчетКред> Значения типа <Счет> — счета дебета и кредита, для которых необходимо выдать перекрестные обороты. Может использоваться строка — код счета.
<ТипСуммы> Необязательный параметр. Число или строка — тип возвращаемой суммы. Может принимать одно из следующих значений:1 ("С", "S")— сумма;2 ("В", "С")— валютная сумма;3 ("К", "А")— количество.Если параметр не указан, метод возвращает сумму.
<Валюта> Необязательный параметр. Значение типа «Справочник.Валюты». Если параметр не указан итоги выдаются без учета валюты.

Возвращаемое значение:
Число —оборот с дебета счета <СчетДеб> в кредит счета <СчетКред>.

Описание:
Функция ОБ предназначена для выдачи перекрестных оборотов между счетами. Коды счетов, оборот между которыми требуется рассчитать, передаются функции в качестве параметров.
Если указана валюта, то данные выдаются по конкретной валюте. Валютная сумма может выдаваться только по конкретной валюте.

Ниже приведен пример получения оборота по вводу остатков.

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

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

    Итог.Рассчитать("01.01.2002","31.12.2002");

    Оборот=Итог.ОБ("41","00");
    Т.ВывестиСекцию("Секция_1");

    Т.ТолькоПросмотр(1);
    Т.Показать();

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

Все, что остается вывести данные в отчет.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 146 - Немного теории про документы

Шаг 146 - Немного теории про документы

Нам нужно понять смысл документа оборота. Конечно, есть момент когда документ появляется на свет. Например, счет фактура при покупке. Ее нам присылают. А вот дальше документы начинают преобразовываться. Счет фактура порождает платежку. Опять же та же счет фактура и платежка через некоторое время создаст приходную ведомость (как мы получим товар на склад). Вот так и гуляют данные от одного документа к другому и так далее. Давайте мы это посмотрим.

146_1.gif (2552 b)

Как видите одни и теже данные перетекают из документа одного вида в документ другого вида. Заявка или договор составляется на самом начальном этапе. В нем перечисляются виды и количество номенклатуры. Организация поставщик на основании этой заявки выписывает счет фактуру. Счет фактура является документом основанием для выписки платежки. Но она является и основанием для приходной ведомости. Идея думая понятна. Один документ переходит в другой после очередного этапа. В 1C данный механизм предусмотрен и называется ввод на основании.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 147 - Изучаем таблицу – Создаем

Шаг 147 - Изучаем таблицу – Создаем

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

147_1.gif (5407 b)

При желании таблиц может быть несколько. Вызовите контекстное меню для вкладки таблицы.

147_2.gif (4608 b)

Итак, для начала объект таблицы нужно создать, воспользовавшись обычной функцией СоздатьОбъект.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
КонецПроцедуры

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

147_3.gif (3509 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 148 - Изучаем таблицы – Что делать, если нужно две - ИсходнаяТаблица

Шаг 148 - Изучаем таблицы – Что делать, если нужно две - ИсходнаяТаблица

Если у Вас больше двух таблиц, то нужно указать какая из низ связана с данным объектом таблицы. Для этого есть функция.

ИсходнаяТаблица
Переназначить исходную таблицу.

Синтаксис:

ИсходнаяТаблица(<Строка>)

Англоязычный синоним:

SourceTable

Параметры:
<Строка> Строковое выражение, содержащее имя исходной таблицы формы, определенное в конфигураторе, или имя файла, содержащего таблицу.

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

Если таблица одна, то можно не указывать исходной таблицы. Обычно исходная таблица указываться когда таблиц больше чем две. Вот две и сделаем.

Как исходную укажем вторую.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 149 - Изучаем таблицу – показываем

Шаг 149 - Изучаем таблицу – показываем

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

Показать
Открыть окно табличного документа.

Синтаксис:

Показать([<3аголовок>], [<ИмяФайла>], [<Активизировать>])

Англоязычный синоним:

Show

Параметры:
<Заголовок> Необязательный параметр. Строковое выражение — заголовок окна табличного документа.
<ИмяФайла> Необязательный параметр. Строковое выражение — имя файла для сохранения табличного документа.
<Активизировать> Необязательный параметр. Числовое выражение — признак активизации. Может принимать значения:1 — активизировать окно табличного документа;0 — не активизировать окно табличного документа;-1 (минус единица) — закрыть окно если оно открыто.Значение по умолчанию: 1.

Описание:
Метод Показать открывает окно с табличным документом для просмотра и редактирования.
Параметр <Заголовок> позволяет задать заголовок окна, содержащего табличный документ. Если параметр не указан, в заголовке будет выдаваться слово «Таблица».
Если указан параметр <ИмяФайла>, то при закрытии окна табличного документа система 1С:Предприятие будет предлагать сохранить документ в файл с указанным именем. Если файла с именем <ИмяФайла> не существует, будет создан новый файл с таким именем.
Если параметр <ИмяФайла> опущен или имеет пустое значение, то при закрытии окна табличного документа система 1С:Предприятие не будет предлагать сохранить данные в файл. Это имеет смысл для документов, которые формируются только для просмотра или печати, и их не обязательно записывать в файл. Вместе с этим, пользователь в любом случае может записать табличный документ в файл, используя команды «Сохранить» и «Сохранить как» из меню «Файл» главного меню системы 1С:Предприятие.
Параметр <Активизировать> позволяет регулировать активизацию окна табличного документа при вызове метода Показать. Если значение параметра — 0 , то окно открывается, но не становится активным.

Вот и покажем.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
    Т.Показать();
КонецПроцедуры

В данный момент Вы действительно увидите таблицу. Только не так как надо.

149_1.gif (6048 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 150 - Изучаем таблицу – как она вообще формируется

Шаг 150 - Изучаем таблицу – как она вообще формируется

Стандартная техника создания таблицы такая. Вся таблица разбивается на секции. Секции можно создавать. Для этого в меню "таблица" нужно выбрать команду "включить секцию".

150_1.gif (3456 b)

У Вас появится секция.

150_2.gif (2973 b)

В дальнейшем Вам можем понадобится сделать секцию еще больше. Можно воспользоваться пунктом меню раздвинуть.

150_3.gif (3913 b)

Или изначально создать секцию из многих строк. Только для начала нужно их выделить.

150_4.gif (4587 b)

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

150_5.gif (5784 b)

Все-таки как формируется печатный вид. Есть функция ВывестиСекцию. Сначала выводят шапку, потом строки, а потом подвал. Сроки обычно соответствуют строкам таблицы на форме.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 151 - Изучаем таблицу – Выводим секцию

Шаг 151 - Изучаем таблицу – Выводим секцию

Вот и подошло время вывести секцию. Воспользуемся функцией.

ВывестиСекцию
Перенести секцию исходной таблицы-шаблона в результирующую таблицу.

Синтаксис:

ВывестиСекцию(<Секция>)

Англоязычный синоним:

PutSection

Параметры:
<Ceкция> Выражение типа строка, задающее имя выводимой секции, или значение типа секция, полученное при помощи метода ПолучитьСекцию.
Описание:
Метод ВывестиСекцию выполняет перенос именованной секции из исходной таблицы-шаблона в результирующую таблицу. Имя секции задается строковым выражением следующего формата:
ИдентификаторСекции1[<|>|-][|ИдентификаторСекции2[<|>|-]]
Символы "<" , ">" , "-" после идентификатора секции указывают на то, что выбирается только часть секции:
< заголовочная часть (с начала секции до начала вложенной секции).
> подвальная часть (с конца вложенной секции до конца секции).
— средняя часть (собственно вложенная секция).
В выражении <Секция> можно задавать имена двух секций, разделенных знаком "|". При этом перенесена будет область исходной таблицы, являющаяся пересечением первой и второй указанных секций. При этом одна секция может быть горизонтальной (состоять из строк), а другая — вертикальной (состоять из колонок). В результате перенесется прямоугольная область таблицы.
Если в качестве параметра метода задано строковое значение имени секции, то при переносе ячейки таблицы, имеющие тип <Шаблон> и <Выражение>, будут заполнены соответствующими данными.
Метод ВывестиСекцию помещает новую секцию со следующей строки вслед за последней выведенной секцией, начиная с первой колонки.

Создаем секцию.

151_1.gif (3067 b)

И выводим ее.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
    Т.ВывестиСекцию("Секция_1");
    Т.Показать();
КонецПроцедуры

Мы увидим таблицу и секцию.

151_2.gif (2552 b)

Но что-то внешний вид мало похож на документ для печати, да и пользователь может начать править что-то.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 152 - Изучаем таблицу – запрещаем редактирование и делаем похожей на документ

Шаг 152 - Изучаем таблицу – запрещаем редактирование и делаем похожей на документ

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

ТолькоПросмотр
Установить режим редактирования таблицы.

Синтаксис:

ТолькоПросмотр(<Режим>)

Англоязычный синоним:

Readonly

Параметры:
<Режим> Необязательный параметр. Числовое выражение — режим редактирования: 1 — только просмотр, 0 — допускается редактирование.

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

Описание:
Метод ТолькоПросмотр устанавливает флаг возможности редактирования таблицы в окне. Данный метод должен вызываться до вызова метода Показать. По умолчанию, для табличных документов устанавливается режим с возможностью редактирования.
Замечание: Режим <только просмотр> позволяет воспринимать сгруппированные ячейки таблицы как единое целое и использовать фиксацию шапки и боковика таблицы при просмотре. Таким образом данный режим рекомендуется для отчетов, которые предназначены в основном для просмотра и печати.

Вот и воспользуемся.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Совсем другое дело.

152_1.gif (1732 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 153 - Изучаем таблицы - Оформление таблицы

Шаг 153 - Изучаем таблицы - Оформление таблицы

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

153_1.gif (7439 b)

Выведется окно свойств, в котором можно настраивать отображение. Давайте сделаем границы ячейки.

153_2.gif (7541 b)

Теперь выведем вторую секцию.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
    Т.ВывестиСекцию("Секция_1");
    Т.ВывестиСекцию("Секция_2");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

И посмотрим результат.

153_3.gif (1716 b)

Отлично.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 154 - Изучаем таблицу - выводим много секций

Шаг 154 - Изучаем таблицу - выводим много секций

Создадим еще одну секцию.

154_1.gif (2402 b)

Идея заключается в том, что Вы можете выводить секцию много раз. Давайте это и сделаем.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
    Т.ВывестиСекцию("Секция_1");
    Т.ВывестиСекцию("Секция_2");
    х=0;
    Пока х<100 Цикл
        х=х+1;
        Т.ВывестиСекцию("Секция_3");
    КонецЦикла;
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Теперь мы увидим, что документ длинный.

154_2.gif (3498 b)

Классно это, но ведь скорее всего он не войдет на одну страницу. Это Вы можете посмотреть в предварительном просмотре.

154_3.gif (9172 b)

Теперь Вы точно видите как документ будет расположен на нескольких страницах.

154_4.gif (4359 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 155 - Изучаем таблицы – повторение шапки на другой странице

Шаг 155 - Изучаем таблицы – повторение шапки на другой странице

У нас в прошлом шаге получился большой документ на две страницы. Когда таблица размещается на двух страницах нужно повторять шапку на второй странице. Эта возможность есть.

ПовторятьПриПечатиСтроки
Задать строки результирующей таблицы, повторяющиеся при печати в начале каждой страницы.

Синтаксис:

ПовторятьПриПечатиСтроки(<НачСтрока>, <КонСтрока>)

Англоязычный синоним:

RepeatRowsWhilePrinting

Параметры:
<НачСтрока> Числовое выражение — номер первой строки повторения.
<КонСтрока> Числовое выражение — номер последней строки повторения.

Описание:
Метод ПовторятьПриПечатиСтроки позволяет задать строки результирующей таблицы, повторяющиеся при печати в начале каждой страницы.

Воспользуемся этим методом для повторение нашей шапки таблицы.

Процедура Печать()
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица2");
    Т.ПовторятьПриПечатиСтроки(2,2);
    Т.ВывестиСекцию("Секция_1");
    .......
    Т.Показать();
КонецПроцедуры

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

155_1.gif (2461 b)

Запустим и посмотрим.

155_2.gif (4974 b)

Вроде все в норме.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 156 - Понимание НДС

Шаг 156 - Понимание НДС

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

Есть такой налог – НДС – налог на добавленную стоимость. Много всяких разговоров о нем особенно, что его нет у буржуев. Да есть он везде, так как самый собираемый. Теперь как это все работает. Итак, вам приходит товар. Вместе с товаром счет фактура, в которую включен НДС, там просто сумма, сумма НДС и сумма с НДС. Так вот на склад ложится сумма без НДС. А сам НДС ложится на другой счет. А когда Вы выписываете сами счет-фактуру, то опять НДС накручиваете, но уже на другой счет. Разница между этими счетами и есть Ваша налогооблагаемая база. Если Вы просто купите товар и продадите без всяких наценок по факту покупки, то НДС не будет. Вы разойдетесь с государством ровно в 0. А вот, если вы возьмете деньги за хранение, то на эту сумму Вы и заплатите НДС (20%).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 157 - Изучаем документы – Ввод на основании

Шаг 157 - Изучаем документы – Ввод на основании

Мы уже коснулись этого вопроса в шаге "Шаг 146 - Немного теории про документы". Пора разобраться, что и к чему. Итак, документ может быть основанием для другого документа. То есть можно перенести данные из одного документа в другой. В 1C ввод на основании реализован так. У документа есть кнопка в настройке - ввод на основании.

157_1.gif (8728 b)

Давайте нажмем ее.

157_2.gif (4539 b)

Здесь можно указать основанием для какого документа он может быть. У меня для документа Док1 и Док2. Я решил, что нужно сделать так, Док2 будет вводиться на основе Док1. В настройках это все.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 158 - Изучаем документ – процедура ввода на основании

Шаг 158 - Изучаем документ – процедура ввода на основании

Автоматом ничего не получится. Вся обработка ввода на основании должна проводиться в специальной процедуре.

ВводНаОсновании
Предопределенная процедура при вводе нового документа на основании.

Синтаксис:

ВводНаОсновании(<ДокументОснование>)

Англоязычный синоним:

InputCausedBy

Параметры:
<ДокументОснование> Значение документа, на основании которого вводится новый документ.

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

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

158_1.gif (3120 b)

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

158_2.gif (2598 b)

И выбираете пункт меню "ввести на основании".

158_3.gif (6027 b)

А вот теперь одна тонкость. Если данный вид документа может быть основанием только для одного типа документов, то вопросов не будет. А вот если для нескольких.

158_4.gif (4399 b)

То у Вас спросят какой документ будем создавать.

158_5.gif (3350 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 159 - Изучаем документ – два метода создания документов

Шаг 159 - Изучаем документ – два метода создания документов

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

159_1.gif (5813 b)

Соответственно можно определять, как создается документ.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 160 - Изучаем документ – Что происходит при создании нового документа

Шаг 160 - Изучаем документ – Что происходит при создании нового документа

При создании нового документа вызывается процедура ВводНового

ВводНового
Предопределенная процедура при вводе нового документа.

Синтаксис:

ВводНового(<ПризнКопирования>, <ОбъектКопирования>)

Англоязычный синоним:

InputNew

Параметры:
<ПризнКопирования> Признак того, что объект введен копированием. Число: 1 — объект введен копированием, 0 — просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта.
<ОбъектКопирования> Объект, который был скопирован.

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 161 - Изучаем документ – Запрещаем создавать новый

Шаг 161 - Изучаем документ – Запрещаем создавать новый

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

СтатусВозврата
Установить/определить статуса возврата предопределенной процедуры.

Синтаксис:

СтатусВозврата([<Статус>])

Англоязычный синоним:

ReturnStatus

Параметры:
<Статус> Необязательный параметр. Числовое выражение. Если задано значение 1, то устанавливается статус возврата — Выполнить Действие. Если задано значение 0, то устанавливается статус возврата — Отменить Действие. Если параметр опущен, то статус возврата предопределенной процедуры не меняется.

Возвращаемое значение:
Число 1 — если статус возврата — Выполнить Действие;
Число 0 — если статус возврата — Отменить Действие.

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

Вот мы ей и воспользуемся.

Процедура ВводНового()
    Предупреждение("Документ создается только на основании другого ");
    СтатусВозврата(0);
КонецПроцедуры

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

161_1.gif (4691 b)

Появится табличка с информацией и документ не создастся. Что и нужно.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 162 - Откуда взялся бух учет

Шаг 162 - Откуда взялся бух учет

Интересно все-таки. Когда и что появилось на свет. Ведь самое интересное, что история, которую нам преподают в школе это история войны. Почитайте учебники, кто когда на кого нападал и с кем воевал. Конечно это все круто Александр Македонский, колесницы, варвары в Риме и так далее. Но есть другая история. История человеческого знания. Когда и что было придумано, как развивалось. Кстати я такой книги в глаза не видел. А было бы интересно узнать именно историю развития.

Итак, человека, который придумал учет и которому обязаны сейчас бухгалтера своими рабочими местами, а 1C своими прибылями звали Луки Пачоли. В 1493 году он пишет книгу "Сумма арифметики, геометрии. Учения о пропорциях и отношениях". В ее составе была глава - трактат XI "О счетах и записях". Это было первое описание бухгалтерии - основы деятельности предприятия. Я процитирую всего один его постулат - сумма дебетовых оборотов всегда тождественна сумме кредитовых оборотов той же системы счетов.

Вот так в 1493 году уже было понятие дебетового и кредитового сальдо. Тут мне на ум приходит шаг "Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C".

Прошло 509 лет.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 163 - Изучаем документ – Проверяем основание

Шаг 163 - Изучаем документ – Проверяем основание

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

Вид
Название вида документа.

Синтаксис:

Вид()

Англоязычный синоним:

Kind

Возвращаемое значение:
Строковое значение, содержащее название вида документа, как он задан в конфигураторе.

Описание:
Метод Вид возвращает название вида документа, как он задан в конфигураторе.

Пробуем ?

Процедура ВводНаОсновании(ДокОсн)
    Если ДокОсн.Вид() = "Док1" Тогда
    Иначе
        Предупреждение("Вы пытаетесь использовать неправильное основание ");
        СтатусВозврата(0);
    КонецЕсли;
КонецПроцедуры

Попробуем с другим основанием.

163_1.gif (5019 b)

И документ опять не будет создан.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 164 - Изучаем документ – Получаем данные от основания

Шаг 164 - Изучаем документ – Получаем данные от основания

Теперь и данные можно получить. Попробуем на дате. Созданный документ должен иметь дату основания.

Процедура ВводНаОсновании(ДокОсн)
    Если ДокОсн.Вид() = "Док1" Тогда
        ДатаДок=ДокОсн.ДатаДок;
    Иначе
        Предупреждение("Вы пытаетесь использовать неправильное основание ");
        СтатусВозврата(0);
    КонецЕсли;
КонецПроцедуры

И теперь созданный документ имеет туже дату. Вывод, от основания можно получать данные.

164_1.gif (8125 b)

У нас осталась еще одна проблема, как контролировать ввод на основании. То есть как запретит создавать два документа на основе одного основания.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 165 - Изучаем документ – Готовимся к контролю

Шаг 165 - Изучаем документ – Готовимся к контролю

Мне нужно запретить использовать основание более одного раза. Как быть в этой ситуации. Способов много, попробую предложить свой. Нам в шапке документа нужно завести флаг использования. Заведем.

165_1.gif (6982 b)

При создании нового документа будем его устанавливать в ноль.

Процедура ВводНового()
    ВыпискаОснования=0;
КонецПроцедуры

Теперь нам нужно в документе, который будет создан на основании этого документа проверит этот флаг.

Процедура ВводНаОсновании(ДокОсн)
    Если ДокОсн.Вид() = "Док1" Тогда
        Если ДокОсн.ВыпискаОснования = 0 Тогда
            ДатаДок=ДокОсн.ДатаДок;
        Иначе
            Предупреждение("Вы этот документ уже использовали ");
            СтатусВозврата(0);
        КонецЕсли;
    Иначе
        Предупреждение("Вы пытаетесь использовать неправильное основание ");
        СтатусВозврата(0);
    КонецЕсли;
КонецПроцедуры

Отлично. Но пока мы просто проверяем, а этот флаг нужно еще и устаналивать.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 166 - Изучаем документ – Ищем по номеру

Шаг 166 - Изучаем документ – Ищем по номеру

Нам нужно будет создать документ, изменить флаг выписки документа. У нас есть документ основание. Вот по его номеру мы и создадим объект. Есть функция поиска по номеру.

НайтиПоНомеру
Найти документ по номеру.

Синтаксис:

НайтиПоНомеру(<Номер>, <Дата>, <ИдентВида>)

Англоязычный синоним:

FindByNum

Параметры:
<Номер> Строковое выражение, содержащее значение номера искомого документа.
<Дата> Выражение типа «дата».
<ИдентВида> Необязательный параметр. Строковое выражение, содержащее идентификатор вида документа или идентификатор Нумератора.

Возвращаемое значение:
Число 1 — если действие выполнено (документ найден);
Число 0 — если действие не выполнено.

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

Ищем. Кстати я на ошибку поиска не проверяю. Ведь документ создается на основании и значит он есть. Но вы можете проверять, мало ли что бывает.

Процедура ВводНаОсновании(ДокОсн)
    ......
    Если ДокОсн.ВыпискаОснования = 0 Тогда
        Док = СоздатьОбъект("Документ.Док1");
        Док.НайтиПоНомеру(ДокОсн.НомерДок,Дата(0));
        Док.ВыпискаОснования=1;
        ДатаДок=ДокОсн.ДатаДок;
    Иначе
    .......
КонецПроцедуры

Но пока мы просто нашли документ и изменили его шапку. А нужно документ еще и записать. Читаем дальше.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 167 - Изучаем документ – Записываем

Шаг 167 - Изучаем документ – Записываем

Все остался последний шаг, это записать измененный документ.

Записать
Записать документ.

Синтаксис:

Записать()

Англоязычный синоним:

Write

Описание:
Метод Записать выполняет запись в базу данных текущего нового или измененного документа.
Замечание. Если этот метод применяется в Модуле формы документа непосредственно к документу локального контекста, то данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой "#Записать".

Пишем.

.......
Если ДокОсн.ВыпискаОснования = 0 Тогда
    Док = СоздатьОбъект("Документ.Док1");
    Док.НайтиПоНомеру(ДокОсн.НомерДок,Дата(0));
    Док.ВыпискаОснования=1;
    Док.Записать();
    ДатаДок=ДокОсн.ДатаДок;
Иначе
.......

И теперь Вы сможете только один раз выписать документ на основании, при повторной попытке Вы получите сообщение.

167_1.gif (4437 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 168 - Изучаем документ – При записи

Шаг 168 - Изучаем документ – При записи

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

ПриЗаписи
Предопределенная процедура при записи документа.

Синтаксис: ПриЗаписи()

Англоязычный синоним:

OnWrite

Описание:
Вызов предопределенной процедуры ПриЗаписи производится в системе 1С:Предприятие при интерактивной записи документа. Если в данной предопределенной процедуре установить статус возврата — 0 (например, если данному пользователю нельзя изменять реквизиты документа), запись документа не будет выполнена.
Данная предопределенная процедура может располагаться в Модулях формы документов.

Вот здесь и место для сохранения пометки в документе основании. Только опять придется хитрить. Первое это нужно же сохранить номер документа основания. А поэтому нужно в шапке создать атрибут для сохранения.

168_1.gif (3468 b)

И в момент создания документа сохранить этот номер.

.......
Если ДокОсн.ВыпискаОснования = 0 Тогда
    НомерДокОснования=ДокОсн.НомерДок;
    ДатаДок=ДокОсн.НомерДок;
Иначе
    Предупреждение("Вы этот документ уже использовали ");
    СтатусВозврата(0);
КонецЕсли;
.......

А вот теперь при записи использовать этот номер для модификации документа.

Процедура ПриЗаписи()
    Док = СоздатьОбъект("Документ.Док1");
    Док.НайтиПоНомеру(НомерДокОснования,Дата(0));
    Док.ВыпискаОснования=1;
    Док.Записать();
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 169 - Учет – бухгалтерский и оперативный – еще одна ошибка внедрения 1С

Шаг 169 - Учет – бухгалтерский и оперативный – еще одна ошибка внедрения 1С

Смотрим историю ошибок:

  • "Шаг 30 - Распространенная ошибка внедрения 1С"
  • "Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C"
  • "Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase"
  • "Шаг 124 - Четвертая ошибка внедрения 1С – с чего начинать"

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

Оперативный.
Бухгалтерский.

Я тут поискал в интернете всякие там статьи, чтобы четко понять разницу. Вот что получилось. Бухгалтерский учет на всех предприятиях одинаковый. Действительно это так. Ведь правила бух учета устанавливает государство, чтобы собирать налоги. Например, есть книга покупок и книга продаж. Они должны быть на каждом предприятии. По этим книгам налоговая проверяет начисление НДС. И на любом предприятии эти книги есть. Все одинаково. Правильно, это бухгалтерский учет. Но работа двух предприятий можем очень сильно отличаться в плане первичных документов и отчетов по первичным документам. И на многих рабочих местах людям не нужно знать, что такое проводка и кредит и дебит. Они просто заполняют первичные документы и просто получают отчеты по этим документам. Например, менеджер выписывает счет фактуры за услуги. Зачем ему знать что-то там про проводки и счета с НДС. Незачем. Но в реальности каждый счет это проводка в бухгалтерии. Каждый менеджер отчитывается о количествах продаж, а бухгалтерия о начислении НДС. Так вот она суть проблемы и самая главная ошибка. В 1C бухгалтерский учет уже настроен. Можно просто проводить проводки руками, а потом получать баланс. Все нормально и голову ломать не надо. Но в нашей жизненной реальности очень часть происходит смещение понятий. Например, на предприятии где я работаю вообще нет понятия менеджер. Есть плановый отдел и бухгалтерия. Вот они и выписывают счета. Они ведут учет состояния складов. То есть смешиваются понятия бухгалтерского и оперативного учета. Бухгалтерский учет у всех определен законом. Оперативный учет зависит от предприятия и особенно от его руководства. Оперативный учет на всех предприятиях разный. Разные принципы. Например, транспортные затраты на товары, они могут включаться в стоимость, а могут идти отдельной строкой. Могут быть разные модели ценообразования. А вот теперь еще раз прочитайте шаг "Шаг 103 - Как найти общий язык с бухгалтерией – или вторая ошибка внедрения 1C".

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 170 - Как ведут оперативный учет, некоторые рассуждения

Шаг 170 - Как ведут оперативный учет, некоторые рассуждения

Сама программа 1C развивалась как программа именно бухгалтерского учета. Кто видел первые версии 1C хорошо это знает. По мере массового использования пользователи начали требовать всякие там аналитики и документы. То есть начали требовать оперативный учет. Оно и понятно оперативный учет и бухгалтерский учет вещи на предприятии взаимосвязанные. Вопрос в том как этот оперативный учет вести. Можно этот учет вести на основе документов. То есть всю необходимую информацию помещать в документы. Потом анализируя документы за определенный период можно эту информацию извлекать. Очень часто оперативный учет настолько сложен, что бухгалтерские счета не могут быть местом хранения всей необходимой информации. Да и не должны кстати. Деньги просто ходят между счетами обезличенные в чистой бухгалтерии. К этим деньгам конечно есть целые папки расшифровок. Так вот эти расшифровки можно получать, анализируя документы. Кстати это реально и происходит при работе бухгалтера. Вроде модель нормальная. Нужны расшифровки – передрать все документы определенного типа. Нормальная, но до некоторой степени. Если документов очень много, то процесс может быть долгим. И чем больше документов, тем дольше. Логичнее в момент проведения документа складывать информация в определенное место. Тогда анализ будет заключаться в получении информации из этого места минуя отбор документов. Вот скорее всего для этого в 1C:Предприятии было введено понятие регистров. Регистры нужно использовать для оперативного учета, бухгалтерские счета для бухгалтерского и не путать эти понятия. Я конечно могу ошибаться в чем-то, но кажется идея такая. Оперативный учет нужно вести на регистрах. Можно использовать анализ документов до того момента пока все это не станет страшно тормозить. Но все равно это не тоже самое, что счет, в котором 25 субконто.

Кстати в версии 7.5 я не нашел понятие регистра, может его не было? В версии 7.7 регистр есть.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 171 - Пример оперативного учета с использованием документов

Шаг 171 - Пример оперативного учета с использованием документов

Вопрос стал этот вот по какой причине. Предприятие оказывает посреднические услуги по доставке топлива. Нет, оно занимается огромным количеством дел, но в том числе и посредническими услугами по доставке топлива. При этом за доставку топлива оно ничего не берет. Просто перекладывает расходы копейка в копейку на заказчика. Смысл в этом есть. Данная организация конечно не в убытке. Она делает торговую наценку по определенному виду деятельности и все. Все остальное просто транзит через нее. Зачем. Понятно за чем. Она выступает в роли заказчика топлива с большими оборотами. Получает за это скидку. За объем. А так как топливо идет через него транзитом без наценок, то конкретному клиенту этого предприятия получается дешевле. Но и не только стоимость топлива, но и стоимость перевозки. И таких видов прямого транзита много. Зато за услуги по доставки материалов она берет 3% как наценку. Так вот, если посчитать общий баланс, то получается, что работать с ним клиенту в общей сумме выгоднее. Количество скидок превышает эти 3% при работе по многим позициям и голова не болит. Заказал что нужно и получил. Ни тебе командировок, ни тебе договоров и всякой там мути. Я немного отвлекся, просто модель красивая. Так вот за перевозку топлива выставляются ТТН. То есть товарно-транспортные накладные. Эти накладные в течении месяца приходят на предприятия с указанием большого количества параметров.

171_1.gif (8914 b)

Обратите внимание, что есть перевозчик, он может быть разный. Есть получатель, он тоже может быть разным. А еще номера ТТН, вес, расстояние, тариф и так далее. В конце месяца множество этих ТТН суммируется и выставляется счет. Так вот этот счет в бух учете составляет всего несколько проводок. Но к этому счету нужны расшифровки. Чтобы доказать когда и сколько перевезли и сколько в сумме это стоило. Да и НДС нужно выделить. В течении месяца может потребоваться информация в разных разрезах. Вот это все оперативный учет. Решить задачу получения информации в течении какого-то периода можно извлечением и анализом документов. Примерно вот так.

....
Пока Док.ПолучитьДокумент() < 0  Цикл
    Если Перевозчик.Выбран()=1 Тогда
        Если Перевозчик =  Док.Поставщик Тогда
            Если Получатель.Выбран()=1 Тогда
                Если Получатель=Док.АдресПеревозки Тогда
                    ПечатьТТН();
                КонецЕсли;
            Иначе
                ПечатьТТН();
            КонецЕсли;
        КонецЕсли;
    Иначе
        Если Получатель.Выбран()=1 Тогда
            Если Получатель=Док.АдресПеревозки Тогда
                ПечатьТТН();
            КонецЕсли;
        Иначе
            ПечатьТТН();
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
....

И отчет построить.

171_2.gif (4350 b)

В разных разрезах. Я сделал так. Но анализ книги покупок в перспективе дело долгое из-за большого количества документов. Нужно попробовать все это организовать с использованием регистров. Попробуем ?


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 172 - Создаем регистр

Шаг 172 - Создаем регистр

Теория она хорошо, но на практике все это нужно попробовать. Вдруг я не прав. Просмотрите дерево метаданных. Там Вы сможете найти регистры.

172_1.gif (3203 b)

Создать регистр просто. Вызываете контекстное меню и говорите новый.

172_2.gif (2694 b)

Тут у Вас появится окно свойств регистра.

172_3.gif (10043 b)

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

172_4.gif (1631 b)

Не все так просто. Тут нужно получить несколько понятий и посмотреть, что к чему. Создали регистр и все. Дальше в следующем шаге.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 173 - Что такое измерение в регистрах

Шаг 173 - Что такое измерение в регистрах

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

173_1.gif (9517 b)

Как его понимать. Чего-то в книгах мутно написано про многомерность всякую. Давайте попроще. Если есть измерение, то по нему можно получать итог. Вот так, например.

Регистр.Перевозки.Итог(Перевозчик_ИзСправочника,"Расстояние")

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 174 - Что такое ресурс

Шаг 174 - Что такое ресурс

Ресурс - это второй тип необходимых параметров. Кстати он может быть только числовой.

174_1.gif (9175 b)

Ресурсов может быть много. Можно его воспринимать как тип необходимой информации, который связан с измерением. В данном случае расстояние. А значит, в итоге мы можем получить расстояние по перевозчику.

Регистр.Перевозки.Итог(Перевозчик_ИзСправочника,"Расстояние")

Будет ресурс объем, получим перевезенный объем. Хотим знать общую цену, нужно создать и такой ресурс.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 175 - Что такое реквизит

Шаг 175 - Что такое реквизит

Это третий параметр, который можно указывать.

175_1.gif (3516 b)

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

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

Перевоз = СоздатьОбъект("Регистр.Перевозки");
Перевоз.ВременныйРасчет();

Перевоз.ВыбратьДвижения("01.08.2002","30.08.2002");
Пока  Перевоз.ПолучитьДвижение() > 0 Цикл
    Т.ВывестиСекцию("Секция_1");
КонецЦикла;

Т.ТолькоПросмотр(1);
Т.Показать();

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

А вот сам отчет.

175_2.gif (2029 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 176 - Что нужно для изменения состояния регистра

Шаг 176 - Что нужно для изменения состояния регистра

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

176_1.gif (3036 b)

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

ДвижениеПриходВыполнить
Выполнить запись прихода в регистр по атрибутам.

Синтаксис:

ДвижениеПриходВыполнить()

Англоязычный синоним:

DoActIncome

Описание:
Метод ДвижениеПриходВыполнить выполняет запись прихода в регистр для текущего документа. Значения измерений регистра, по которым записывается приход, а также величины приращений приходуемых ресурсов регистра определяются текущими значениями атрибутов регистра.
Данный метод доступен только в контексте Модуля документа в предопределенной процедуре ОбработкаПроведения.
Данный метод используется только для регистров остатков.

Вот так можно было изменять регистр для ТМЦ.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 177 - Получаем состояние оборотного регистра

Шаг 177 - Получаем состояние оборотного регистра

Тут есть одна тонкость. Регистры бывают двух типов.

177_1.gif (1450 b)

В зависимости от типа регистра Вы и получите результат. Какой тип регистра Вы применяете, зависит от типа операций. Например, по складу можно применять регистр остатки, чтобы иметь состояние склада. А вот по ТТН лучше применять регистр обороты, как мне кажется в контексте задачи. Каждый месяц на основе накопленных ТТН выписывается счет. То есть нас интересует оборот. Сколько их было выписано. Именно в данном контексте, а не сколько их осталось. Хотя такая постановка вопроса тоже правомерна. Но она ведет к необходимости списания состояний регистра после проведения по счетам. Хотя и в том варианте и в другом разбирая движение регистров можно получить любые вариации. Вопрос в том какие данные нужнее чаще. Итак, есть функция получении получения результирующих остатков. Они зависят от типа регистра.

Итог
Возвратить итог одного ресурса оборотного регистра.

Синтаксис:

Итог(<Измерен1>, <Измерен2>..., <ИмяРесурса>)

Англоязычный синоним:

Total

Параметры:
<Измерен1>, <Измерен2>... Выражения со значениями измерений регистра.
<ИмяРесурса> Строковое выражение, содержащее название требуемого ресурса регистра, как оно названо в конфигураторе.

Возвращаемое значение:
Численное значение итога заданного ресурса регистра.

Описание:
Метод Итог возвращает итог по ранее установленному периоду ресурса <ИмяРесурса> оборотного регистра.
Данный метод используется только для оборотных регистров.

Вот так можно получить общее расстояние.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Перевоз = СоздатьОбъект("Регистр.Перевозки");
    Перевоз.ИтогиПолучить();
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

В секции мы используем Итог.

177_2.gif (3036 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 178 - Получаем состояние регистра остатков

Шаг 178 - Получаем состояние регистра остатков

А у регистра остатков другая функция.

Остаток
Возвратить остаток одного ресурса регистра.

Синтаксис:

Остаток(<Измерен1>, <Измерен2>..., <ИмяРесурса>)

Англоязычный синоним:

Rest

Параметры:
<Измерен1>, <Измерен2>... Выражения со значениями измерений регистра.
<ИмяРесурса> Строковое выражение, содержащее название требуемого ресурса регистра, как оно задано в конфигураторе.

Возвращаемое значение:
Численное значение остатка заданного ресурса регистра.

Описание:
Метод Остаток возвращает остаток ресурса <ИмяРесурса> по регистру. Данный метод используется только для регистров остатков.

Вот теперь в конфигураторе поменяем тип регистра и попробуем получить остаток. Меняет функцию получения остатков.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Перевоз = СоздатьОбъект("Регистр.Перевозки");
    Перевоз.ОстаткиПолучить();
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Ну, и в таблице конечно.

178_1.gif (3194 b)

Кстати переделка типа регистра у меня прошла безболезненно. Но не надо думать, что так будет дальше. Тип регистра будет отражаться в отчетах. А значит изменения типа повлечет изменение всех отчетов. НУ ЧТО МЕШАЛО 1С СДЕЛАТЬ ОДИНАКОВЫЕ НАЗВАНИЕ ФУНКЦИЙ ? Конечно, нужно производить пересчет всех данных в момент изменения типа регистра, но ведь и мы не каждый день меняем его тип. Наверно какая та логика есть.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 179 - Чем еще могут помочь регистры

Шаг 179 - Чем еще могут помочь регистры

Быстрота получения результатов по регистрам может служить решением многих задач. Например, многие наверно видели отрицательные суммы по 41 счету (склад), то есть фактически товар отпускался не оприходованным на склад. Все это хорошо когда за всем может уследить 1 бухгалтер. Он знает, что товар получен и есть на складе, просто в компьютер не занесен. А вот если нет. Тут возникает необходимость ответа на простой вопрос, а есть ли этот товар на складе. Ведь потом придется выписать счет, а если его на складе не будет. Тут есть два варианта решения. Первый использовать субконто номенклатура по счету 41. Тогда можно запросить СКД и посмотреть, что там с этим наименованием. Но поддержка этого СКД требует при оприходовании вносить номенклатуры на 41. Ну, а что делать, если товаров много, а информации нужно больше чем наименование. Один из способов делать связанные справочники в конечном итоге детализируя информацию по номенклатуре до необходимого объема. Близкий пример был в шаге "Шаг 119 - Изучаем Справочники – типизация реквизитов". Но если сделать каждую номенклатуру типизированной по каждой мелочи, то получение ответа на вопрос сколько и чего есть данного типа становиться проблемным. То есть, если представить компьютеры, то например узнать наличие конкретного компьютера легко, а вот получить ответ на вопрос вообще какие есть компьютеры становится проблематично. Конечно можно сделать субконто группа. Или номенклатуру помещать в группу. Но при работе с клиентом вопросы могут появляться в совершенно разных срезах. Например, какие компьютеры есть от IBM. А конкретно PIII от IBM. А сколько он стоит. И так далее. Так вот использование субконто не позволяет строить вопросы в разных срезах. Субконто подразумевает только один – пять срезов и все. В тоже время регистры позволяют, как никогда, сделать эти вопросы совершенно простыми. Да и если посмотреть на логику, то зачем на 41 все так детализировать. Знает главный бухгалтер сумму товаров на складе 41 да и достаточно. Все остальное это оперативный учет.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 180 - Изучаем регистр – ВыбратьДвижения

Шаг 180 - Изучаем регистр – ВыбратьДвижения

В шаге "Шаг 175 - Что такое реквизит" мы уже использовали эту функцию для получения движения. То есть простым языком расшифровывали как регистр достиг данного состояния. Давайте посмотрим описание этой функции.

ВыбратьДвижения
Выбрать все движения регистра по датам.

Синтаксис:

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

Англоязычный синоним:

SelectActs

Параметры:
<НачалоВыборки> Выражение типа дата, документ или позиция документа, задающее начало временного интервала выбора движений регистра.
<КонецВыборки> Выражение типа дата, документ или позиция документа задающее конец временного интервала выбора движений регистра.
<ГрафаОтбора> Необязательный параметр. Строковое выражение — идентификатор графы отбора, как он задан в конфигураторе. Данный параметр устанавливает режим использования определенной графы отбора. "*" — автоматический выбор графы отбора. Пустая строка — не использовать графу отбора. По умолчанию устанавливается автоматический выбор графы отбора.

Описание:
Метод

ВыбратьДвижения инициирует выбор всех движений регистра в указанном интервале дат. До вызова данной процедуры может быть установлен фильтр (см. УстановитьФильтр), ограничивающий выборку значений из регистра. Если <КонецВыборки> не указан или равен 0, то концом временного интервала выбора движений регистра считается ТА.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 181 - Изучаем регистр – более глубокая расшифровка

Шаг 181 - Изучаем регистр – более глубокая расшифровка

Получение движения это еще не все. Мы можем получить и документ, который вызвал это движение.

ТекущийДокумент
Возвратить значение документа, выполнившего движение регистра.

Синтаксис:

ТекущийДокумент()

Англоязычный синоним:

CurrentDocument

Возвращаемое значение:
Значение документа, который задал движение регистра.
Описание:
Метод ТекущийДокумент возвращает значение документа, который задал движение регистра. Метод используется после получения очередного движения регистра (см. методы ПолучитьДвижение и ПолучитьИтог).

Давайте за основу возьмем шаг "Шаг 175 - Что такое реквизит" и доберемся до документа.

181_1.gif (4298 b)

Теперь посмотрим отчет.

181_2.gif (2608 b)

А теперь журнал документов.

181_3.gif (4567 b)

Из документа при желании можно извлечь все, что не попало в документ.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 182 - Интеграция 1С в мир (как делать свои расширения)

Шаг 182 - Интеграция 1С в мир (как делать свои расширения)

Этот шаг перекрывает проблему поднятую в "Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase".

То есть если данные в DBF формате, то все нормально, а вот если в другом, то использование данной технологии позволяет избежать серии конвертаций. Кроме того, есть всякие устройства типа кассовых аппаратов, бензоколонок и так далее. Много много оборудования, которые используются для работы в местах продаж, да и вообще в работе предприятия. Встает вопрос о том, как все это интегрировать, чтобы не переколачивать с бумаги. Да и вообще можно сделать многое, например модуль, который по интернету будет забирать курс доллара с сервера Центрального банка России. А все совсем просто. 1С может использовать ActiveX DLL. Создавать их можно откуда угодно VB, VC и так далее. Все, что необходимо есть на сайте. Если опыт программирования у Вас маленький, то могу посоветовать использовать VB. В разделе VB на нашем сайте есть информация по этому поводу:

  • "Шаг 1 - Создание COM DLL"
  • "Шаг 2 - Свойства (Property) класса"
  • "Шаг 3 - Определяем свойства и создаем COM DLL"
  • "Шаг 4 - Тестируем DLL"
  • "Шаг 5 - Имя проекта"
  • "Шаг 5 - Имя проекта"

Так же можете посетить раздел VC++ и там то же есть информация. Итак, Вам нужно как-то создать ActiveX DLL. Я сделал его на VB.

182_1.gif (6696 b)

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

Процедура Сформировать()
    МояDLL = СоздатьОбъект("DLL1C.Test1C");
    МояDLL.Test();
КонецПроцедуры

Мелочь одна. При создании объекта используется формат:

имя_dll имя_класса

А теперь запустим.

182_2.gif (4814 b)

Все тривиально как никогда. Вы можете использовать системные ActiveX и практически делать все, что может VB вплоть до использования интернета для связи офисов. И Вы можете создавать свои компоненты для решения специфических задач.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 183 - Что такое глобальный модуль

Шаг 183 - Что такое глобальный модуль

В 1C есть модуль, который вызывается каждый раз при старте конфигурации. Добраться до него можно из конфигуратора.

183_1.gif (7510 b)

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

ПриНачалеРаботыСистемы
Предопределенная процедура при начале работы задачи.

Синтаксис:

ПриНачалеРаботыСистемы()

Англоязычный синоним:

OnStartSystem

Описание:
Вызов предопределенной процедуры ПриНачалеРаботыСистемы производится системой 1C:Предприятие неявно при начале работы с программой. Если в данной предопределенной процедуре установить статус возврата — 0 (например, если время доступа данного пользователя к системе истекло), то пользователь не сможет войти в программу.
Данная предопределенная процедура может располагаться только в глобальном программном модуле.

Одним из применений может быть установка ряда параметров. Например, можно завести переменную с именем счета.

Перем СчетПриходНДС экспорт;

Процедура ПриНачалеРаботыСистемы()
    СчетПриходНДС="19.3";
КонецПроцедуры

И теперь в любом модуле можно использовать эту переменную. Например, вот так:

Процедура ОбработкаПроведения()
    Операция.Содержание = "Пол. Сч. Фк. Тр. Топливо";
    ........
    Операция.Дебет.Счет=СчетПоКоду(СчетПриходНДС);
    ........
КонецПроцедуры

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 184 - Много вариантов? А может один

Шаг 184 - Много вариантов? А может один

Одна из проблем, с которой я лично столкнулся - это желание бухгалтеров показать сложность учета. Постоянные разговоры о том, что у них то так, то сяк. Самое интересное, что в большинстве случаев все сводиться к нескольким вариантам. Ну, например, счета фактуры. Каких только сказок не рассказывают о миллионе вариантов проводок. На самом деле их глобально две. Проводка по материалам и проводка по услугам. Но, если взять выписку счета фактуры, например, за услуги, то окажется, что Вариантов опять много. Предприятия дробятся на типы. И в соответствии с типом дебетовый счет разный. Как я поступил. Я сделал один счет фактуры. Создал справочник типов предприятий.

184_1.gif (5320 b)

А на счет фактуру поместил выбор типа предприятия.

184_2.gif (10127 b)

Теперь при проведении документа мы просто подставим счет дебита из справочника.

.......
Операция.НоваяПроводка();
Операция.Дебет.Счет=СчетПоКоду(ТипОрганизации.СчетДебитаДляФактур);
Операция.Дебет.Контрагенты=КомуПоставляем;
Операция.Кредит.Счет = СчетПоКоду("90.1.3");
Операция.Сумма = СуммаИтоговая;
.......

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

Самое интересно, что счет фактуру вообще можно было сделать одну на все варианты.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 185 - Журнал Документов – как отображать много

Шаг 185 - Журнал Документов – как отображать много

Журнал документов удобная вещь. Документы в соответствии с типами операций помещаются в него. Например, Журнал продаж или книга продаж. Мы можем поместить в него все счета фактуры. Но они могут быть разных типов. Например, Вы могли сделать счет фактуры на материалы, гсм, услуги. Даже если сделать одну счет фактуру, то все равно есть проблемы. Например, получение товаров под зарплату. Это совсем другой вид проводок. Думаю суть проблемы ясна. Но во всех этих документах есть общая часть. Как минимум сумма в итоге и покупатель. Можно сделать графы в журнале.

185_1.gif (1735 b)

Потом указать чему будет этот реквизит соответствовать.

185_2.gif (5911 b)

Я сделал в документе так, чтобы реквизиты имели одинаковое имя. Это не только красиво и понятно, но и правильно. Это Вы поймете из следующего шага. Журнал позволяет делать отображение разных реквизитов разных документов при настройке реквизита журнала. Но лучше все делать с одинаковым именем.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 186 - Почему реквизиты должны иметь одинаковые имена

Шаг 186 - Почему реквизиты должны иметь одинаковые имена

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

Процедура Сформировать()
    Перем ОбщаяИтог;
    Перем ОбщаяСумма;
    Перем ОбщаяНДС;
    ОбщаяСумма=0;
    ОбщаяИтог=0;
    ОбщаяНДС=0;
    Т = СоздатьОбъект("Таблица");
    Док = СоздатьОбъект("Документ");
    Док.ИспользоватьЖурнал("КнигаПродаж");
    Т.ВывестиСекцию("Секция_1");
    Док.ВыбратьДокументы(ДатаНач,ДатаКон);

    Пока Док.ПолучитьДокумент() > 0  Цикл
        ОбщаяИтог = ОбщаяИтог + Док.СуммаИтоговая;
        ОбщаяСумма = ОбщаяСумма + Док.СуммаОбщая;
        ОбщаяНДС = ОбщаяНДС + Док.НДССумма;
        Т.ВывестиСекцию("Секция_2");
    КонецЦикла;

    Т.ВывестиСекцию("Секция_3");
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

А в отчете выводить стандартные поля.

186_1.gif (10446 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 187 - Глобальный модуль и конфигурация, меньше кода, меньше ошибок

Шаг 187 - Глобальный модуль и конфигурация, меньше кода, меньше ошибок

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

187_1.gif (8307 b)

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

Процедура Проводка(Опер,СчетДебета,СчетКредита,Сумма) export
    Опер.НоваяПроводка();
    Опер.Дебет.Счет = СчетПоКоду(СчетДебета);
    Опер.Кредит.Счет = СчетПоКоду(СчетКредита);
    Опер.Сумма = Сумма;
КонецПроцедуры;

И использовать. Ну разве это не лаконичная и красивая запись.

Процедура ОбработкаПроведения()
    //__________________________________
    Операция.Содержание = "Счет Факт топл";
    Операция.СуммаОперации = СуммаИтоговая;
    Проводка(Операция,"90.3.3","68.1",НДССумма);
    Проводка("90.2.3","10.30",СуммаТЗР);
    Операция.Кредит.Контрагенты=КомуПоставляем;
    Проводка(ТипОрганизации.СчетДебитаДляФактур,"90.1.3", СуммаИтоговая);
    Операция.Дебет.Контрагенты=КомуПоставляем;
    ..........
КонецПроцедуры

При желании в параметры можно передать и субконто дебета и кредита. И тогда вообще все будет понятно. Один документ много операций. Но каждая операция это строка. Все можно охватить одним взглядом.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 188 - Всякое украшательство конфигурации

Шаг 188 - Всякое украшательство конфигурации

Одной из неприятных вещей открытого кода является его использование. Вы можете убить год на создание конфигурации, которую просто возьмут и передерут. Хорошо, если ее переработают и вложат свой труд. А могут и просто сказать, что сами сделали. Вот тут 1C хоть немного позаботилась об авторах конфигураций. Первое - это заставка. 1C запускается в два этапа. Первый этап это сам логотип 1C.

188_1.gif (42783 b)

Дальше он медленно перетекает в другой логотип. Часть этого момента Вы можете видеть на экране.

188_2.gif (39152 b)

А вот на этом месте Вы можете заявить о себе как об авторе конфигурации. Идете в конфигурацию и открываете свойства.

188_3.gif (3720 b)

Появится диалоговое окно, в котором можно настроить картинку на заставке.

188_4.gif (17932 b)

Запускаем и смотрим.

188_5.gif (37797 b)

Кстати все это можно поставить под пароль. На это место можно поместить любую информацию об авторстве и так далее. За основу лучше взять готовый файл Slice.bmp, который можно найти по пути.

Диск:\Program Files\1Cv77\BIN


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 189 - Изучаем справочник – периодический реквизит

Шаг 189 - Изучаем справочник – периодический реквизит

Все течет все меняется. Директора приходят и уходят, курс валют туда, а скорее всего сюда. В реку нельзя войти дважды, только конфигуратор и мы всегда в одном состоянии. Справочники дело хорошее, но много параметров в справочнике бывает периодических. Например, курс валют. Так вот реквизит можно сделать периодическим, то есть зависимым от времени.

189_1.gif (11855 b)

Данные реквизиты легко увидеть в конфигураторе. Они сделаны объемными.

189_2.gif (2052 b)

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

189_3.gif (5871 b)

Хотя обратиться можно к любой дате.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 190 - Изучаем константы – Они тоже бывают периодические

Шаг 190 - Изучаем константы – Они тоже бывают периодические

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

190_1.gif (4414 b)

И выглядит она так же периодически (объемно).

190_2.gif (1779 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 191 - Изучаем периодическую константу

Шаг 191 - Изучаем периодическую константу

Для начала нам нужно сделать модель периодической константы. То есть имитацию реальной работы. Мы можем это сделать используя пункт меню Сервис - Параметры для установки рабочей даты. Именно по рабочей дате будет произведена запись в справочник.

191_1.gif (3443 b)

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

191_2.gif (3576 b)

Но всегда можно вызывать историю.

191_3.gif (3563 b)

И Вам покажут как менялся кассир с течением времени.

191_4.gif (4974 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 192 - Изучаем константы – Получить

Шаг 192 - Изучаем константы – Получить

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

Получить
Получить значение периодической константы на дату.

Синтаксис:

Получить(<Дата>)

Англоязычный синоним:

GetValue

Параметры:
<Дата> Выражение со значением требуемой даты.

Возвращаемое значение:
Значение константы на заданную дату.

Описание:
Метод Получить возвращает значение константы на определенную дату. Данный метод можно использовать только для периодических констант.

Давайте сделаем простой отчет с датой.

192_1.gif (4964 b)

По кнопке будем показывать кассира.

Процедура Получить()
    Предупреждение(Константа.Кассир.Получить(ДатаД));
КонецПроцедуры

Итак, смотрим на сегодняшнее число.

192_2.gif (3127 b)

А позже?

192_3.gif (3010 b)

И все это называется константой. Вообще-то константа что-то незыблемое, как число PI например. А тут, то Иванов, то Петров. Вобщем периодическая она.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 193 - Установка константы – Установить

Шаг 193 - Установка константы – Установить

Мы устанавливали константу руками. Это не правильно. Все должно быть на основе документов. Если это касается кассира, то должен быть приказ. Примерно такой – в связи с уходом в отпуск Иванова на время его отсутствия назначить Сидорова. Как Вы догадываетесь, документ должен быть создан в 1C, распечатан, подписан и записан. Вот момент записи как раз тот момент, чтобы поменять кассира. Тогда можно будет узнать на каком основании произведено изменение константы. Из документа можно пользоваться специальной функцией.

Установить
Установить значение периодической константы на дату.

Синтаксис:

Установить(<Дата>, <3начение>)

Англоязычный синоним:

SetValue

Параметры:
<Дата> Выражение со значением требуемой даты.
<3начение> Новое значение константы.

Описание:
Метод Установить устанавливает значение константы на определенную дату. Данный метод можно использовать только для периодических констант.

Создадим документ – назначение кассира.

193_1.gif (5277 b)

Ну и код.

Процедура Назначить()
    Константа.Кассир.Установить(ДатаДок,Кассир);
КонецПроцедуры

Запускаем документ.

193_2.gif (3732 b)

Назначаем, и ... смотрим константы.

193_3.gif (3175 b)

Вот. Конечно можно было сделать таблицу и все красиво напечатать. Но главное сейчас суть.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 194 - В чем хранится информация в 1C

Шаг 194 - В чем хранится информация в 1C

В DBF формате она хранится. Вы можете просмотреть каталог с конфигурацией и найдете DBF файлы.

194_1.gif (8155 b)

Здесь хранится только информация о том, что ввел пользователь, операции, справочники и так далее. Давайте найдем файл 1SCONST.DBF. Это файл с константами. Открыть его можно, например из Visual FoxPro.

194_2.gif (8896 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 195 - Где хранится конфигурация

Шаг 195 - Где хранится конфигурация

Конфигурация храниться в файле 1Cv7.MD, сам этот файл структурированное хранилище. О работе с ним из VC++ Вы можете почитать на шаги и раздела ActiveX начиная с шага "Шаг 58 - Структурированное хранилище" до шага "Шаг 76 - Транзакции в хранилищах".

О том, как его просмотреть в шаге "Шаг 64 - Утилита просмотра хранилищ - DocFile Viewer". Вот так все это выглядит:

195_1.gif (6616 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 196 - Передача параметров в процедуры

Шаг 196 - Передача параметров в процедуры

В моделях встречается некоторое количество одинаковых процедур. Например, прямой и обратный расчет. То есть к имеющейся сумме накрутить налоги или наоборот из суммы налоги извлечь, получив начальную. Решение данной задачи мы обсуждали в шаге "Шаг 187 - Глобальный модуль и конфигурация, меньше кода, меньше ошибок". Одну проблему нужно нам просмотреть. Как передаются параметры, по ссылке или по значению. То есть можем ли мы передать в процедуру переменную, а потом вернуть ее измененное значение. Создадим в глобальном модуле проверочную процедуру.

Процедура ОбратныйРасчет(Нач,Кон)  export
    Кон=Нач/2;
КонецПроцедуры

И потом попробуем передать параметр.

Процедура  НажалиКнопку()
    Перем к;
    ОбратныйРасчет(50,к);
    Предупреждение(к);
КонецПроцедуры

Запускаем:

196_1.gif (3299 b)

Срабатывает, значит можно.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 197 - Решаем задачу обратного расчета

Шаг 197 - Решаем задачу обратного расчета

Задача обратного расчета сводится к получению:

Суммы НДС
Суммы налога с продаж
Начальной Суммы

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

197_1.gif (2310 b)

Есть сумма, на нее накручивают НДС, потом складывают сумму + НДС и на это все накручивают налог с продаж. Потом складывают сумма+НДС+налог с продаж и получают сумму итоговую. Прямой расчет понятен. Идем о обратную сторону. Нам нужно сначала получить без налога с продаж. Бухгалтера делают так. Берут сумму и делят на 1.003 (3%). В Excel это выглядит так.

197_2.gif (2925 b)

Теперь сумма без НДС, подход такой же. Делим на 1,2 (20%).

197_3.gif (2701 b)

Все суммы мы получили. Теперь сами налоги. Налог с продаж будет разницей между итоговой суммой и суммой без налога с продаж.

197_4.gif (3032 b)

А сумма НДС это разница между суммой с НДС и без НДС.

197_5.gif (2969 b)

А теперь проверим. Нужно все просуммировать.

197_6.gif (3886 b)

Отлично. Можно писать процедуры.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 198 - Процедуры и функции обратного хода

Шаг 198 - Процедуры и функции обратного хода

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

Функция ПроцентКоэффициент(Процент) export
    ПроцентКоэффициент=1+(Процент/100);
    Возврат ПроцентКоэффициент;
КонецФункции

Функциями мы не пользовались, так что смотрите. Теперь создадим нашу процедуру.

Процедура ОбратныйХод(СуммаИтоговая,ПроцентНПродаж,ПроцентНДС,СуммаНалогаСПР,СуммаНДС,СуммаНачальная) export
    СуммаБезНалогаСПродаж =  СуммаИтоговая/ПроцентКоэффициент(ПроцентНПродаж);
    СуммаНачальная=СуммаБезНалогаСПродаж/ПроцентКоэффициент(ПроцентНДС);
    СуммаНалогаСПР=СуммаИтоговая-СуммаБезНалогаСПродаж;
    СуммаНДС=СуммаБезНалогаСПродаж-СуммаНачальная;
КонецПроцедуры

Опробуем ?

198_1.gif (9001 b)

А теперь при вводе итоговой суммы делаем расчет.

Процедура Считать()
    ОбратныйХод(СуммаИтоговая,НалогСПродаж,НДС,СуммаНалогаСПродаж,НДССумма,СуммаОбщая);
КонецПроцедуры

Смотрим результат.

198_2.gif (8048 b)

Вроде как получилось.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 199 - Когда происходят события

Шаг 199 - Когда происходят события

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

199_1.gif (10095 b)

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

Процедура Считать()
    Предупреждение("Выбор")
КонецПроцедуры

Процедура ПриВыборе()
    Предупреждение("Выбор")
КонецПроцедуры

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 200 - Доступность элемента из процедуры

Шаг 200 - Доступность элемента из процедуры

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

Доступность
Установка режима редактирования.

Синтаксис:

Доступность(<Режим>)

Англоязычный синоним:

Enable

Параметры:
<Режим> Необязательный параметр. Числовое выражение: 1 — разрешено редактирование элемента формы; 0 — запрещено редактирование.

Возвращаемое значение:
Текущее числовое значение режима редактирования элемента формы (на момент до исполнения метода).

Описание:
Метод Доступность позволяет установить режим редактирования выбранного элемента формы.
Доступ к данному методу возможен только в контексте Модуля формы.

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

Процедура ВводНового()
    Форма.СуммаНачальная.Доступность(0);
КонецПроцедуры

Теперь запустим. Доступа не будет.

200_1.gif (2833 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 201 - Пара слов о синтаксисе помощника

Шаг 201 - Пара слов о синтаксисе помощника

Есть такой помощник в конфигураторе.

201_1.gif (2760 b)

После его вызова справа будет список объектов и процедур к ним.

201_2.gif (6976 b)

Прелесть в том, что, например, выбрав процедуру Вы можете очень быстро создать ее болванку. Выберем ПриОткрытии:

201_3.gif (6102 b)

При выборе пункта меню процедура появится в коде.

201_4.gif (5876 b)

Хоть немного времени сэкономили.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 202 - Чем хороша лицензионная версия, как убедить директора

Шаг 202 - Чем хороша лицензионная версия, как убедить директора

Если Вы только начали заниматься автоматизацией учета на предприятии, то наверно уговаривать директора на трату 30-60 тыс. руб тяжело. Исходим из того, что обычно директора не очень хорошо во всем этом понимают. Придти и сказать, что давайте, потратим кучу денег на 1C может вызвать неожиданную реакцию. А зачем? А что можно на ней сделать? А вы лично сами сможете настроить? Ведь в этом и сама 1C виновата. Крутила бы она рекламу так же часто и разнообразно, как это делают производители стирального порошка или фэйри все было бы по другому. Надо просто показать, что может 1C. А значит найти нелегальную версию. Попробовать что-то автоматизировать. Потом показать руководству. А вот потом сказать, что ребята, на нелегальной версии я много не могу сделать (дело фантазии). Давайте купим. Если покупать не захотят, то я бы вообще ничего делать не стал. На все остальное деньги есть, а на лицензионное ПО нет? Только в начале нужно что-то реальное сделать. Один участок работы например, и убедиться, что Вам это по силам. 1C для этого сразу покупать не нужно. А вот, если Вы уверены, что все будет в порядке и через 10-50 шагов на сайте Вас не начнет тошнить, то покупать нужно.

Что Вам даст легальное ПО? Ну, во-первых, теоретическая возможность консультаций. Я ни разу не звонил, но можно. А во-вторых, что мне больше всего нравиться, каждый месяц сопроводительный диск.

202_1.gif (29955 b)

Там есть очень много чего. Например, справочник типовых хозяйственных операций, который очень может помочь и Вам и Вашей бухгалтерии. Кстати со ссылками на законы и все такое.

202_2.gif (23040 b)

Сами Вы все это не соберете. С диска Вы можете и должны все очень тщательно изучить. Есть шанс, что найдете ошибки в Вашем бух. учете. Там есть и всякое законодательство по бух Учету. Конечно, можно пользоваться Гарантом, только он стоит столько же примерно, сколько и 1C.

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

202_3.gif (7761 b)

И вообще мужики. Это наша русская фирма. Много ли ПО у нас русского? Ведь на предприятии мы же не за свои деньги покупаем. Мой личный опыт показывает, что организации, которые покупают лицензионное ПО больше платят специалистам, так как компьютерные технологии выходят за рамки баловства.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 203 - Отладка, вариант первый

Шаг 203 - Отладка, вариант первый

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

Функция ПроцентКоэффициент(Процент) export
    ПроцентКоэффициент=1+(Процент/100);
    Предупреждение(ПроцентКоэффициент);
    Возврат ПроцентКоэффициент;
КонецФункции

А теперь запустим документ, который ее использует.

203_1.gif (2788 b)

В момент расчета мы получили сообщение, которое отражает содержание переменной.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 204 - Отладка, вариант второй

Шаг 204 - Отладка, вариант второй

Второй вариант использования окна сообщений для вывода информации. Для этого есть специальная функция.

Сообщить
Вывести строку в окно сообщений.

Синтаксис:

Сообщить(<Текст_сообщения>, <ИмиджМаркера>)

Англоязычный синоним:

Message

Параметры:
<Текст_сообщения> Строковое выражение.
<ИмиджМаркера> Необязательный параметр. Строковое выражение, которое задает тип пиктограммы выводимой перед сообщением. Возможные значения:"I", "!", "!!", "!!!", "." — обычное сообщение, " " — без маркера.

Описание:
Процедура Сообщить выводит <Текст_сообщения> в окно сообщений. Перед сообщениями можно отображать специальные пиктограммы, которыми можно помечать сообщения различной важности.

Давайте заменим предупреждение на сообщение.

Функция ПроцентКоэффициент(Процент) export
    ПроцентКоэффициент=1+(Процент/100);
    Сообщить(ПроцентКоэффициент,"!!!");
    Возврат ПроцентКоэффициент;
КонецФункции

И посмотрим.

204_1.gif (4898 b)

Таким образом можно вести протокол работы системы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 205 - Второй вариант отладки – только в монопольном режиме

Шаг 205 - Второй вариант отладки – только в монопольном режиме

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

МонопольныйРежим
Определение режима работы программы.

Синтаксис:

МонопольныйРежим()

Англоязычный синоним: ExclusiveMode

Возвращаемое значение:
Число 1 — если программа запущена в монопольном режиме;
Число 0 — если программа запущена в сетевом режиме.

Описание:
Функция МонопольныйРежим возвращает число 1 — если программа запущена в монопольном режиме и 0 если нет.

Создаем свою процедуру.

Процедура ОтладочноеСообщение(Сооб) export
    Если МонопольныйРежим()>0 Тогда
    Сообщить(сооб,"!!!");
    КонецЕсли
КонецПроцедуры

И теперь при обращении только в монопольном режиме Вы будете видеть эти сообщения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 206 - Отладка – использование отладчика

Шаг 206 - Отладка – использование отладчика

Ну, и конечно родной отладчик 1C. Запустить его можно из конфигуратора.

206_1.gif (2487 b)

Запустится отладчик. В нем нужно найти нужную модель, строку и установить точку остановки. Кстати учтите, я никак привыкнуть не мог по началу, для открытия дерева модулей нужен один щелчок, а не два как обычно.

206_2.gif (10789 b)

Вот так она будет выглядеть.

206_3.gif (1352 b)

А теперь опять немного не привычно. Вы запускаете программу 1C из конфигуратора. Не из среды отладчика, а из конфигуратора. Отладчик как бы работает параллельно и ждет когда вызовется строка из модуля. Запускаем 1C из конфигуратора и вызываем документ, который обращается к функции. Просмотр переменной называется "вычислить выражение".

206_4.gif (7529 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 207 - Все ли элементы можно сохранить в документе

Шаг 207 - Все ли элементы можно сохранить в документе

После создания нескольких документов у Вас явно вырабатывается стиль. Если еще не выработался, то выглядит это так.

Помещаем в шапочную часть
Помешаем на форму
При необходимости добавляем расчеты.

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

207_1.gif (3356 b)

Вот его нет в типе переменных в шапке документа.

207_2.gif (3744 b)

Вот так. Просто нет. А нужно запоминать выбранные переключатели или еще что-то. Для того, чтобы добиться успеха нужно будет завести переменную. Я, например, завел в шапке число с длинной 1.

207_3.gif (4858 b)

Теперь при событии смены переключателя.

207_4.gif (3944 b)

Я сразу и меняю эту переменную.

Процедура ПриВыборе()
    ТипРасчета=ВыборРасчета;
    ......
КонецПроцедуры

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 208 - Так что же делать с переключателем

Шаг 208 - Так что же делать с переключателем

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

Процедура ВводНового()
    ......
    ТипРасчета=1;
    ВыборРасчета=ТипРасчета;
КонецПроцедуры

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

Процедура ПриОткрытии()
    ВыборРасчета=ТипРасчета;
    ......
КонецПроцедуры

При изменении тут же менять переменную.

Процедура ПриВыборе()
    ТипРасчета=ВыборРасчета;
    Если ТипРасчета=1 Тогда
        ......
    Иначе
        ......
    КонецЕсли
КонецПроцедуры

Остается еще ввод на основании. То есть вызовется ли ВводНового при ВводНаОсновании. Нет не вызовется. Но никто Вам не мешает сделать так.

Процедура ВводНового()
    Предупреждение(ДатаДок);
КонецПроцедуры

Процедура ВводНаОсновании(ДокОсн)
    ВводНового();
КонецПроцедуры

А вот, если Вы внутри ВводНового сделали запрет на введение документа без основания, как в шаге "Шаг 161 - Изучаем документ – Запрещаем создавать новый", то нужно описать инициализацию переменной и флага в ВводНаОсновании.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 209 - 1С против калькулятора – округление

Шаг 209 - 1С против калькулятора – округление

По началу бухгалтера будут все, что можно пересчитывать на калькуляторе. Делая сложные расчеты они будут проводить округления. Самое интересное, что в рамках даже одного предприятия число 1.25 два разных бухгалтера могут воспринять как 1.2 и как 1.3. Число 5 это пограничное число при округлении и в какую сторону его производить обычно отдается на откуп исполнителю. Хотя данное мероприятие должно быть описано в политике учета предприятия. Так как компьютерные системы сами по себе требуют дисплины и такой ход теперь не пройдет. Все будет одинаково. Для того, чтобы нам все упорядочить нам нужны свойства задачи где мы можем установить округление в соответствии с учетной политикой предприятия.

209_1.gif (10309 b)

Вот теперь все ясно и установлены строгие правила.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 210 - Как сделать разные типы журналов

Шаг 210 - Как сделать разные типы журналов

Ситуация, когда один и тот же документ должен быть в разных журналах встречается на каждом шагу. Например, приходный ордер должен фигурировать, как в журнале продаж, так и в кассовой книге. Мы создавали общий журнал. В свойствах документа мы указали, какой журнал использовать. Там только один выбор. Решить ситуацию, когда документ может фигурировать в разных журналах можно путем создания дополнительного журнала.

210_1.gif (6492 b)

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

210_2.gif (7897 b)

Запустим посмотрим.

210_3.gif (8950 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 211 - Что такое cторнирование

Шаг 211 - Что такое cторнирование

Вот как описано в одном из словарей:

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

В правилах бух учета написано - Ошибки исправляются в период их обнаружения. Вот цитата:

Приказ Минфина РФ от 29 июля 1998 г. N 34 н
"Об утверждении Положения по ведению бухгалтерского учета и
бухгалтерской отчетности в Российской Федерации"
(с изменениями от 30 декабря 1999 г., 24 марта 2000 г.)

     39.   Изменения   в  бухгалтерской  отчетности,  относящиеся  как  к
отчетному году, так и к предшествовавшим периодам (после ее утверждения),
производятся  в  отчетности,  составляемой  за отчетный период, в котором
были обнаружены искажения ее данных.

Тут есть два варианта. Первый вариант, когда сумма была меньше, а второй вариант когда сумма была больше. Так вот, если сумма была меньше, то делается дополнительная проводка. А если сумма была больше, то cторнирование, то есть запись с отрицательной суммой.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 212 - Удаление данных из 1C, что реально происходит

Шаг 212 - Удаление данных из 1C, что реально происходит

В 1C предусмотрена пометка на удаление и непосредственное удаление объектов. Но на самом деле из файла ничего не удаляется. Вы можете провести эксперимент. Запомните один из элементов справочника. Потом пометьте его на удаление и удалите. Он пропадет. Но в файле этот элемент все равно будет храниться. Богатырева я удалил и открыл DBF файл справочника.

212_1.gif (3071 b)

Тут он как миленький и ни куда не хочет деваться. Это говорит о том, что в результате проводимой работы данные, даже удаленные, будут храниться в файлах и файлы будут расти. Вообще это стандартная проблема при использовании DBF формата. Во всех версиях FoxPro существовал механизм под названием – сжатие базы данных. Именно в этот момент производилось физическое удаление записей из базы данных.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 213 - Стандартные отчеты в нашу конфигурацию – какие будут проблемы

Шаг 213 - Стандартные отчеты в нашу конфигурацию – какие будут проблемы

Проблемы будут. Давайте скопируем в нашу конфигурацию отчет анализ счета по субконто.

213_1.gif (2892 b)

А теперь попробуем запустить этот отчет. Будет очень много ошибок.

213_2.gif (5956 b)

Это связано в тем, что большое количество переменных и функций определено в глобальном модуле стандартной конфигурации. Смотрите на ошибку, например глРасшифровка не определена. А в стандартной конфигурации она в глобальном модуле.

213_3.gif (4139 b)

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

//////////////////////////////////////////////////////////////
// Инициализация переменных необходимых для стандартных отчетов
глФлагРасшифровки = 0;
глОбновить = 0;
БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 214 - Короткое Если или чем может помочь знак вопроса

Шаг 214 - Короткое Если или чем может помочь знак вопроса

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

Процедура Считать()
Если ТипРасчета = 1 Тогда
    .......
Иначе
    .......
КонецЕсли
КонецПроцедуры

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

? (вычислить выражение по условию)
Вычислить выражение по условию.

Синтаксис:
?(<Логич_выраж>, <Выраж1>, <Выраж2>)
Англоязычный синоним:
?

Параметры:
<Логич_выраж> Логическое выражение.
<Выраж1> Выражение.
<Выраж2> Выражение.

Возвращаемое значение:
Результирующее значение.

Описание:
Функция ? вычисляет значение <Логич_выраж> и если его значение — истина, то возвращает вычисленное значение <Выраж1>. Если значение <Логич_выраж> — ложь, то возвращает вычисленное значение <Выраж2>.

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

214_1.gif (3422 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 215 - Что такое перечисление

Шаг 215 - Что такое перечисление

Перечисление это еще один элемент конфигурации. Только этот элемент уже будет на доступен пользователю в отличии от констант и справочников. То есть это внутренний элемент конфигурации. В типовой конфигурации используется довольно часто.

215_1.gif (13172 b)

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

215_2.gif (9672 b)

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

Иначе
    Если Товар.СтавкаНДС = 20 Тогда
        ВариантРеализации = Перечисление.ВариантыРеализации.Реализация20;
    ИначеЕсли Товар.СтавкаНДС = 10 Тогда
        ВариантРеализации = Перечисление.ВариантыРеализации.Реализация10;
    Иначе
        ВариантРеализации = Перечисление.ВариантыРеализации.Реализация0;
    КонецЕсли;
КонецЕсли;

Операция.Дебет.Счет = СчетПоКоду("46");
Операция.Дебет.ВариантыРеализации = ВариантРеализации;

Естественно, что вариант реализации можно поместить на форму.

215_3.gif (8312 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 216 - Боремся с удаленными записями – первый способ

Шаг 216 - Боремся с удаленными записями – первый способ

Итак, открываем справочник и помечает один элемент на удаление.

216_1.gif (2642 b)

Удаляем его.

216_2.gif (1942 b)

Смотрим DBF файл, запись все равно есть. Подробнее в "Шаг 212 - Удаление данных из 1C, что реально происходит". А вот теперь сделаем выгрузку данных.

216_3.gif (3525 b)

Теперь этой записи не будет.

216_4.gif (5036 b)

Вывод, выгрузка и загрузка данных позволит ликвидировать удаленные записи. Но только перед этой операцией лучше сделать резервное копирование - "Шаг 26 - Резервные копии". Несмотря на то, что эти операции похожи есть одна разница. При резервном копировании файлы физически складываются в архив. А вот при выгрузке производится анализ данных на ошибки. Так вот, если ошибки были в результате повреждения файлов, то эти ошибки будут устранены. То есть при восстановлении Вы можете потерять информацию.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 217 - Боремся с удаленными записями – второй способ

Шаг 217 - Боремся с удаленными записями – второй способ

Второй способ заключается в использовании какой-нибудь сторонний утилиты. Например, можно использовать Visual FoxPro.

217_1.gif (8147 b)

Можно в Интернет поискать, можно самому написать. Вся идея в том, что Вы сторонними средствами сжимаете базу данных. Кстати 1C в это момент нужно закрыть, чтобы не было блокировок, иначе файл Вы не откроете. Можно в Интернет поискать, можно самому написать. Вся идея в том, что Вы сторонними средствами сжимаете базу данных. Кстати 1C в это момент нужно закрыть, чтобы не было блокировок, иначе файл Вы не откроете. Обычно этот способ по скорости намного быстрее, чем описанный в предыдущем шаге.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 218 - От перебора документов к запросу

Шаг 218 - От перебора документов к запросу

Мы с Вами уже рассматривали вопрос о том, что документы можно перебирать и получать необходимую информацию из документов. Но это приводит к написанию подобных циклов.

Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы(ДатаНач, ДатаКон);

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

КонецЦикла;

Внутри цикла можно проводить суммирование и группировку необходимых параметров. Но намного проще использовать запрос. Особенно есть воспользоваться мастером запросов. Давайте попробуем этот создать любой простой запрос. У меня в базе есть информация о введенных TTH. Документ называется перевозка топлива.

218_1.gif (8441 b)

Мы хотим создать отчет по Перевозчику (Поставщик услуг в данном контексте), то есть по полю поставщик и знать кто на какую сумму нам перевез. Создаем новый отчет.

218_2.gif (5885 b)

Теперь нам нужно запустить синтаксис помощник и найти там маcтера. Подробнее о синтаксис помощнике читайте "Шаг 201 - Пара слов о синтаксисе помощника". Находим мастера запросов.

218_3.gif (5217 b)

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

218_4.gif (3935 b)

Дальше нам нужно будет указать период.

218_5.gif (4404 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 219 - От перебора документов к запросу дальше

Шаг 219 - От перебора документов к запросу дальше

Дальше мы находим документ.

219_1.gif (4356 b)

Мы выбираем те его реквизиты или табличную часть, по которой хотим получать информацию. Обратите внимание, что, если реквизит это субконто или справочник, то Вы можете указать и реквизиты субконто.

219_2.gif (2520 b)

Мы выберем поставщика и итоговую сумму.

219_3.gif (7631 b)

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

219_4.gif (5419 b)

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

219_5.gif (8506 b)

Условия мы пропустим и увидим код запроса.

219_6.gif (7893 b)

Будет сформирован как сам запрос так и все необходимое для его вывода на экран.

219_7.gif (5013 b)

Вот и все. Осталось только его немного оформить по лучше и все готово. Практически ничего руками делать не надо. А пришлось бы писать что-то типа этого.

219_8.gif (5235 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 220 - Таблица для печати – обратим внимание на шаблон

Шаг 220 - Таблица для печати – обратим внимание на шаблон

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

220_1.gif (7747 b)

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

текст [объект] текст [объект] .......

Что же нам мешает использовать соседние ячейки. Вобщем-то ничего, но вот, если подставляемый текст будет большой, то есть вероятность наползания текста друг на друга. Допустим был директор Петров. Все нормально рассчитано. А тут вдруг директор стал какой-нибудь Мирошниченко и есть вероятность, что он наползет на другие надписи.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 221 - Использование запроса для перебора

Шаг 221 - Использование запроса для перебора

Мы про запрос с Вами говорили в шагах "Шаг 218 - От перебора документов к запросу" и "Шаг 219 - От перебора документов к запросу дальше".

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

ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Поставщик = Документ.ПеревозкаТоплива.Поставщик;
    |СуммаОбщая = Документ.ПеревозкаТоплива.СуммаОбщая;
    |Группировка Поставщик;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
       Пока Запрос.Группировка("Поставщик") = 1 Цикл
                Таб.ВывестиСекцию("Секция_1");
       КонецЦикла;

В данном случае мы получим суммы по поставщику.

221_1.gif (1810 b)

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

ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Поставщик = Документ.ПеревозкаТоплива.Поставщик;
|СуммаОбщая = Документ.ПеревозкаТоплива.СуммаОбщая;
|Группировка СуммаОбщая;
|"//}}ЗАПРОС
;
........
Пока Запрос.Группировка("СуммаОбщая") = 1 Цикл
    Таб.ВывестиСекцию("Секция_1");
КонецЦикла;

Смотрим.

221_2.gif (2348 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 222 - Как узнать в каком файле DBF хранятся данные

Шаг 222 - Как узнать в каком файле DBF хранятся данные

Самый простой способ это изучить файл 1Cv7.DD, он лежит в каталоге базы.

222_1.gif (2149 b)

Это обычный текстовый файл, в котором описана конфигурация. Там Вы можете найти описание, например, документов и какой DBF файл с ним связан.

222_2.gif (2583 b)

Или, например, справочник.

222_3.gif (2233 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 223 - Боремся с удаленными записями – третий способ (правильный)

Шаг 223 - Боремся с удаленными записями – третий способ (правильный)

Два способа мы рассмотрели в "Шаг 216 - Боремся с удаленными записями – первый способ" и "Шаг 217 - Боремся с удаленными записями – второй способ".

Но есть еще один наиболее правильный на мой взгляд. В меню Администрирования есть исправление и тестирование ИБ.

223_1.gif (5006 b)

При его выборе появится диалоговое окно с вариантами тестирования. Дело это хорошее. Можно проверить на наличие ошибок и все такое. Вот тут-то и есть вариант упаковки таблиц.

223_2.gif (5079 b)

Упаковка должна привести к физическому удалению записей помеченных на удаление.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 224 - Чем может помочь монитор пользователей

Шаг 224 - Чем может помочь монитор пользователей

Рано или поздно, но Вы услышите вот такую фразу.

Я этого не делала.

Совершенно не обязательно, что человек нагло врет. Просто может забыл. Вот при решении этих задач может помочь монитор пользователей. Он очень быстро оживит память.

224_1.gif (3658 b)

После его запуска, если у Вас установлены пользователи, то Вас спросят пароль. Нас интересует журнал регистраций.

224_2.gif (2786 b)

Вот в этом журнале и находится информация кто когда регистрировался. А самое главное кто и что делал.

224_3.gif (5533 b)

Обратите внимание, что есть информация об имени компьютера, с которого происходило подключение. Вот тут-то Вы и сможете найти ответы на многие подобные вопросы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 225 - Изучаем справочники – Запрет ручного исправления

Шаг 225 - Изучаем справочники – Запрет ручного исправления

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

225_1.gif (1968 b)

Мы конечно можем вызвать справочник из 1C и его править. Но мне кажется делать этого не нужно. Править нужно только на основе документа. Нам нужно запретить вообще что-нибудь делать со справочником. Вот при загрузке формы и запретим.

Процедура ПриОткрытии()
    Форма.ТолькоПросмотр(1)
КонецПроцедуры

Теперь, если кто-то справочник отроет он не сможет внести исправления.

225_2.gif (4968 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 226 - Что такое ОКУД

Шаг 226 - Что такое ОКУД

Этот код Вы могли встречать на бланках документации.

226_1.gif (3896 b)

ОКУД расшифровывается как Общероссийский классификатор управленческой документации. Вообще на любые бланки документации есть стандарт. Как и в каком виде они должны оформляться. Это все описано в ГОСТ Р 6.30-97, в соответствии с которым все и должно быть оформлено. Данный код предназначался для автоматизированной обработки документации и позволял быстро извлекать информацию о типе документа из этого кода. Например, первые две цифры говорят о типе документа.

01 - плановой;
02 - организационно-распорядительной;
03 - первичной учетной;
04 - расчетно-денежной;
05 - финансовой, первичной и отчетной бухгалтерской документации бюджетных учреждений и организаций;
06 - отчетно-статистической;
07 - резерв;
08 - по материально-техническому снабжению и сбыту;
09 - по торговле;
10 - по внешней торговле;
11 - проектной документации по капитальному строительству;
12 - единой системы конструкторской документации;
13 - единой системы технологической документации;
14 - по изобретениям и открытиям;

В вот теперь смотрим наш код 03, то есть первичная учетная документная. А вот, например, сопроводительный реестр.

226_2.gif (6096 b)

Имеет код ОКУД 0903014, то есть по торговле.

Вообщем смысл этого кода думаю понятен. И зачем сделано тоже понятно. Чтобы в рамках всей России можно было вести учет документов. В любом случае, когда документо-оборот становится очень большим проще пользоваться этими кодами для поиска документов определенного типа.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 227 - Что такое ОКПО

Шаг 227 - Что такое ОКПО

Еще один код. Расшифровывается как Общероссийский классификатор предприятий и организаций – ОКПО. Этот код имеется на каждом предприятии. Он присваивается в момент регистрации юридического лица и отражает виды деятельности, которым предприятие занимается. То есть скорее всего он может совпадать для нескольких предприятий, которые занимаются одинаковой деятельностью. Данный код введен Постановлением Госстандарта России от 30.12.93 № 297. Меняется он только в том случае, если производится расширение деятельности предприятия. Но это все не так просто и нужно производить перерегистрацию устава предприятия. Нас он интересует постольку поскольку. Просто указывается в ряде документов. Для всего предприятия он один и обычно указывается в константах конфигурации.

227_1.gif (3067 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 228 - Анализ по субконто – изучаем

Шаг 228 - Анализ по субконто – изучаем

Что такое субконто мы знаем. Кто забыл читайте шаги:

  • "Шаг 21 - Виды субконто"
  • "Шаг 55 - Указываем виды субконто для счета"
  • "Шаг 56 - Изучаем Счета - КоличествоСубконто"
  • "Шаг 57 - Изучаем Счета – Выводим виды субконто - ВидСубконто"
  • "Шаг 58 - Субконто + Проводка = Одна тонкость"

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

228_1.gif (6048 b)

Вот смотрите 41 склад. Есть два субконто. О чем этот говорит ? Говорит это о том, что:

Во-первых, мы можем получить сумму по счету без аналитики.
Во-вторых, мы можем получить сумму по контрактной номенклатуре (товар)
В-третьих, мы можем получить сумму по месту хранения.

Тут нужно понимать, что место хранения, например, это разные склады. Можно получить сумму по складу в общем. Конечно, можно и расшифровать потом. Но пока нас интересует именно сумма общая. А вот с номенклатурой не так очевидно. Просто представьте, что гвозди периодически привозят на склад. Тогда уместен вопрос, а сколько их то гвоздей? Сразу скажу, что субконто не решит всех ваших проблем. Вот пример неправильного применения субконто. Нужно знать поставщика товара. При приходовании товара для счета 41 указывается субконто. Да, ответ на вопрос, сколько товара и какого поставщика на складе получить можно. Но только пока он на складе. А ведь товар может и уйти в подотчет на 10 счет. Как нам узнать от какого поставщика этот товар? Конечно путем извратов с оборотами можно. Но это для мазахистов. Все сводится к тому, что поставщик это свойство товара, как и цена, и должен указываться в справочнике. Ответ на вопрос, сколько на складе товара данного поставщика немного осложнится и тут потребуется либо перебор субконто, либо запрос - "Шаг 221 - Использование запроса для перебора". Но вопрос решаем, где бы этот товар не лежал.

Вывод в том, что субконто это признак счета. Не надо путать его с признаком товара или еще чего-то.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 229 - Анализ счета по субконто – АнализСчетаПоСубконто

Шаг 229 - Анализ счета по субконто – АнализСчетаПоСубконто

Это стандартный отчет, который поставляется в типовой конфигурации. Покупая 1C вы оплачиваете и этот отчет. Значит вроде, если Вы не стали использовать типовую конфигурацию, а создавать свою, то использовать Вы его можете. Я не юрист, но логика вроде правильная. Итак, анализ счета по субконто есть в типовой конфигурации и Вы можете его перенести в свою - "Шаг 213 - Стандартные отчеты в нашу конфигурацию – какие будут проблемы". Запускаем. Первое, что нужно сделать это выбрать счет:

229_1.gif (4407 b)

После выбора счета Вам станут доступны настройки субконто. Для начала просто ничего не устанавливая сформируем отчет.

229_2.gif (4316 b)

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

229_3.gif (2468 b)

Теперь построим отчет.

229_4.gif (5967 b)

Мы имеет состояние именно по этому складу (субконто). Давайте разберемся с брюками. Уберем субконто по складу и выберем брюки мужские черные.

229_5.gif (3161 b)

И теперь мы видим, что у нас эти брюки на общем складе.

229_6.gif (5057 b)

Итак, анализ счета по субконто позволяет нам получать ответы на вопрос на примере 41 счета по двум субконто:

1.	Что есть на этом счете.
2.	Где это хранится.
3.	Что есть на складе.

Вообщем, все вопросы. Нужно только бухгалтеров научить пользоваться.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 230 - Сетевая версия

Шаг 230 - Сетевая версия

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

230_1.gif (5591 b)

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

230_2.gif (1417 b)

А запустив 1C:Предприятие на компьютере клиента найти эту папку.

230_3.gif (8307 b)

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

230_4.gif (5494 b)

Вот это сообщение говорит о том, что кто-то уже работает с документом в данном случае.

Кстати учтите такой момент. В данной ситуации при наличии каталога в сети очень осторожно нужно подойти к вопросам защиты. Если папка будет общим ресурсом без пароля, то до нее можно будет добраться даже из интернета. Подробнее читайте "Шаг 3 - IP и ресурсы". Это становится еще актуальнее, если у Вас выделенный канал. В общем нужно штудировать ресурсы Windows NT без остановки. Нет, нет, не надо про Win 98 даже заикаться.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 231 - Чем хороша Административная установка

Шаг 231 - Чем хороша Административная установка

Хороша она тем, что CD с дистрибутивом вечно куда-то девается. То в одном отделе его видели, то в другом. При административной установке в каталоге программы создается папочка со всем необходимым для установки у клиентов.

231_1.gif (9029 b)

Сделав ее доступной по сети Вы можете производить установку клиентов прямо из этой папочки. Сам CD не нужен, а значит его можно сдать в архив куда-нибудь от греха подальше. При цене в 30 000 руб это практически основные средства.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 232 - Отчет по регистрам, где взять

Шаг 232 - Отчет по регистрам, где взять

Ответ простой, на диске сопровождения. Его нет в типовой конфигурации. Можно написать и самому, а можно и взять.

232_1.gif (15191 b)

Вам нужно будет выбрать в какую базу копировать.

232_2.gif (9095 b)

Дальше нужно вставить внешний отчет.

232_3.gif (4687 b)

Вот так он выглядит.

232_4.gif (11941 b)

Вообще любой вариант, который Вы хотите.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 233 - Универсальные отчеты – первый шаг

Шаг 233 - Универсальные отчеты – первый шаг

Давайте на примере справочника. Мы с Вами обладаем достаточными знаниями, чтобы написать обработку справочника и вывести его содержимое в виде отчета. Кто забыл - "Шаг 93 - Изучаем справочник - ПолучитьЭлемент". Но это одного справочника. А нам бы хотелось, чтобы любого. Вся трудность в том, что мы не можем сделать выбор справочника. Конечно можно указать тип в поле для ввода, что это справочник.

233_1.gif (4732 b)

Но вот при вводе все равно придется выбирать элемент справочника. А не сам справочник.

233_2.gif (4727 b)

Плохо. Значит только ручками. Помещаем поле со списком и устанавливаем идентификатор.

233_3.gif (4898 b)

Теперь мы можем при открытии его заполнить.

Процедура ПриОткрытии()
    Для Номер=1 По Метаданные.Справочник() Цикл
        КакойСправочник.ДобавитьЗначение(Метаданные.Справочник(Номер).Представление());
    КонецЦикла;
КонецПроцедуры

Запустим, посмотрим.

233_4.gif (3883 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 234 - Как работают с метаданными

Шаг 234 - Как работают с метаданными

Основная модель работы с метаданными это перебор элементов. Для этого есть глобальный атрибут Метаданные. Вот через него, указав тип объекта, можно организовать цикл перебора – справочников, документов или еще чего-нибудь. Цикл выглядит так:

Для Номер = 1 По Метаданные.Документ() Цикл
    .......
КонецЦикла;

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

234_1.gif (4847 b)

Вызвав его вы получите описание конфигурации, которое можно сохранить во внешнем файле.

234_2.gif (5549 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 235 - Код – Полный код

Шаг 235 - Код – Полный код

О коде мы с Вами уже говорили - "Шаг 86 - Изучаем справочники – Код", но есть еще и полный код.

ПолныйКод
Определить полный код элемента справочника.

Синтаксис:

ПолныйКод()

Англоязычный синоним:

FullCode

Возвращаемое значение:
Строковое значение, содержащее полный код выбранного элемента справочника.

Описание:
Метод ПолныйКод возвращает строку, содержащую полный код выбранного элемента справочника (с кодами групп всех вышестоящих уровней, разделенными символом "/").

Необходимость его использования возникла вот по какой причине. Мне нужно было изменить данные в справочнике исходя из того, что выбрал человек. После того как элемент справочника выбран можно, получить либо код, либо полный код. Если есть группы, то нужен именно полный код. Лучше тогда всегда пользоваться полным кодом. Так вот теперь, имея полный код, можно получить этот элемент справочника и произвести изменения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 236 - Изучаем справочники – ищем по коду

Шаг 236 - Изучаем справочники – ищем по коду

Имея код можно получить элемент справочника. Для этого есть функция.

НайтиПоКоду
Найти элемент справочника по коду.

Синтаксис:

НайтиПоКоду(<Код>, <ФлагПоиска>)

Англоязычный синоним:

FindByCode

Параметры:
<Код> Выражение со значением искомого кода.
<ФлагПоиска> Необязательный параметр. Числовое выражение — флаг поиска: 0 — поиск во всем справочнике вне зависимости от родителя; 1 — поиск внутри установленного подчинения (родителя); 2 — поиск по полному коду.Значение по умолчанию: 0 — для справочников, у которых код уникален во всем справочнике; 2 — для справочников, у которых код уникален в группе.

Возвращаемое значение:
Число 1 — если действие выполнено;
Число 0 — если действие не выполнено (элемент не найден).

Описание:
Метод НайтиПоКоду выполняет поиск элемента справочника по значению кода, заданному параметром <Код>, и позиционирует объект справочник на этом элементе. Если справочник многоуровневый, то полный код выбираемого элемента можно задавать, разделяя коды уровней символом "/".

Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.

Вот теперь мы можем установив флаг поиска в 2 получить элемент справочника. Но один момент. Флаг поиска нужно устанавливать в соответствии с настройками справочника.

236_1.gif (2358 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 237 - Обзор архитектуры 1C

Шаг 237 - Обзор архитектуры 1C

Я надеюсь, что к этому шагу у Вас сложится понимание основных механизмов работы с 1C. Итак, основа основ счет "Шаг 31 - Изучаем Счета – Создаем". В бухгалтерии счет используют для того, чтобы отслеживать движения денег. Но нужно по этому движению еще и проводить анализ. Самый первый уровень дробления денег для анализа это создание субсчетов.

237_1.gif (1847 b)

В данном случае мы можем получить информацию как вообще по 10 счету, которая будет включать субсчета, так и отдельно по субсчетам. Соответственно можно получать обороты между субсчетами. Вроде кажется, что можно субсчетами решить любые задачи по анализу. В принципе наверно да. Но вот какое дело. Конечно можно вводить субсчет на каждую номенклатуру или подотчетное лицо на предприятии. Но это привет к постоянному созданию субсчетов. А счет по своей сути вещь постоянная. План счетов оформляется один раз на большой период. Тут важно принять решение, что нужно выделять в отдельный субсчет, а что нет.

Второй уровень анализа заключается в создании субконто к счету "Шаг 21 - Виды субконто". Соответвенно у нас появляется возможность анализировать счет или субсчет по установленным субконто "Шаг 228 - Анализ по субконто – изучаем". Субконто строится на основе справочника. Субконто дает более динамические возможности к анализу, так как элементы справочника можно создавать. Короче субконто делит деньги по признаку. Но тут есть одна опасность. Если Ваши бухгалтера по какой-то причине внесут, скажем, два раза одно и тоже предприятие, то вся аналитика разрушится. Два разных элемента справочника это разные элементы даже, если название совпадает.

Третий уровень анализа заключается в анализе документов. Использование счетов, субконто не даст полной необходимой картины. Во-первых, в первичных документах много информации, которая не может храниться на счете в виде субконто. Например, переводной коэффициент тонна-литр. Кто сталкивался с учетом топлива знает этот очень уж тонкий момент. Объем топлива очень сильно зависит от температуры. Вот у нас заправляются топливом в Магадане, а везут за 1000 км. Разница температуры достигает 20 градусов зимой. В любом случае данный коэффициент нужно где-то хранить. А хранить его можно в документе, потом при необходимости извлекать "Шаг 171 - Пример оперативного учета с использованием документов".

Третий уровень второй вариант. Идея таже. Хранить дополнительную информацию, только вот получать быстрее. В этом Вам помогут регистры "Шаг 179 - Чем еще могут помочь регистры".

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 238 - Один неприятный психологический момент работы в 1C

Шаг 238 - Один неприятный психологический момент работы в 1C

Самое неприятное ощущение это недоступность счета. Перед использованием 1C многие бухгалтера работали в Excel. Там очень удобно все править, удалил строк, добавил строку и подбил сумму. В 1C счет как закрытая коробка. Так иногда хочется удалить что-то как в Excel. Ну, ошиблись с занесением номенклатуры. Ну, почему ее просто не удалить. Самое интересное, что данное желание результат компьютеризации. Прочитайте "Шаг 211 - Что такое cторнирование". Так вот, если была ошибка в операции, то исправить ее можно только другой операцией. Нет не удалением напрямую, как в Excel и не затиранием резинкой и новой записью, а именно другой операцией. Так требуется при бухгалтерском учете. Вот 1C и не позволяет делать неправильно. Если у Ваших бухгалтеров это вызывает недовольство, то есть над чем задуматься. Они просто не правильно ведут бух. учет.

Но для разработчика на этапе тестирования данная возможность была бы очень кстати. Может все-таки сделают ее?


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 239 - Несколько документов – как сделать общую нумерацию

Шаг 239 - Несколько документов – как сделать общую нумерацию

Вот такая задача стала. Как в нескольких типах документов сделать общую нумерацию. Для этого есть объект нумератор.

239_1.gif (5054 b)

У него нужно дать имя и настроить периодичность.

239_2.gif (5382 b)

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

239_3.gif (5154 b)

Указать один нумератор можно для нескольких документов.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 240 - Открывает отчет из кода

Шаг 240 - Открывает отчет из кода

Вот какая стала дилема. Толи писать универсальные отчеты, то ли частные. Например, состояние склада можно получить путем анализа счета по субконто. А можно и свой отчет написать, который будет просто выводить наличие материалов на складе в данный момент. Но ведь этот отчет является просто частным случаем стандартного отчета. Вот тут я и задумался. А как сделать так, чтобы был универсальный и частный отчет. Первое, что нужно выяснить можно ли запускать один отчет из другого. Можно.

ОткрытьФорму
Выполняет открытие формы из встроенного языка.

Синтаксис:

ОткрытьФорму (<Параметр1>, <КонтекстФормы>, <Параметр 3>...)

Англоязычный синоним:

OpenForm

Параметры:
<Параметр1> В зависимости от типа открываемой формы используется различные значения данного параметра.Для журналов, отчетов, списков в конце строки описателя формы может быть указан символ "#" с некоторым идентификатором: "#LLLL". Это используется для того, чтобы данная форма открылась в новом окне, а не активизировала существующее окно этой формы, если оно открыто. Где, LLLL — идентификатор, который позволяет открыть новое окно или активизировать уже открытое с этим идентификатором. Если идентификатор не задан, то обязательно открывается новое окно.
<КонтекстФормы> Необязательный параметр. Имя переменной, куда можно задать значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр.После исполнения данного метода система вернет в данную переменную контекст открытой формы (см. Передача контекста в качестве параметра). С помощью значения этого контекста можно затем произвольно манипулировать открытой формой, пока она открыта. Пока форма открыта, тип значения данного параметра равен 100 (см. ТипЗначения), если закрыта — 0.
<Параметр3>... В зависимости от типа открываемой формы используется различный состав и значения остальных параметров.

Возвращаемое значение:
Число 1 — если действие выполнено;
Число 0 — если действие не выполнено.

Описание:
Функция ОткрытьФорму позволяет открыть форму документа, справочника, журнала документов, и других форм используемых в системе 1C:Предприятие.

Описание не полное, но я и не ставлю задачу повторить документацию 1C. Здесь нет примечаний. Итак, делаем новый отчет и кнопку на него. Кнопке вызов процедуры.

240_1.gif (5503 b)

Код:

Процедура НажалиКнопку()
    ОткрытьФорму("Отчет.КнигаПродаж");
КонецПроцедуры

Тестируем.

240_2.gif (4654 b)

Работает. Теперь нужно научиться передавать параметры.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 241 - Передача параметров в форму – способ первый

Шаг 241 - Передача параметров в форму – способ первый

Самый простой способ использовать глобальные переменные в глобальном модуле. Подробнее:

  • "Шаг 196 - Передача параметров в процедуры"
  • "Шаг 187 - Глобальный модуль и конфигурация, меньше кода, меньше ошибок"
  • "Шаг 213 - Стандартные отчеты в нашу конфигурацию – какие будут проблемы"

Заведем в глобальном модуле переменную ДатаНачалаГлобально:

........
Перем ДатаНачалаГлобально Экспорт;
........

А в конце глобального модуля ее инициализируем:

........
ДатаНачалаГлобально="";
........

Теперь перед запуском отчета ее устанавливаем:

Процедура НажалиКнопку()
    ДатаНачалаГлобально="01.01.2002";
    ОткрытьФорму("Отчет.КнигаПродаж");
КонецПроцедуры

А в момент открытия отчета проверяем установлена она или нет. Если установлена, то присваиваем значение нужному элементу и сбрасываем ее, чтобы в следующий раз, если запустят универсальный отчет, она не болталась.

Процедура ПриОткрытии()
    Если  ДатаНачалаГлобально<>"" Тогда
        ДатаНач= ДатаНачалаГлобально;
        ДатаНачалаГлобально="";
    КонецЕсли;
КонецПроцедуры

Посмотрим.

241_1.gif (3431 b)

Отлично сработало.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 242 - Как удалять документы, которые управляют справочниками

Шаг 242 - Как удалять документы, которые управляют справочниками

Я уже заикался об этом в шаге "Шаг 225 - Изучаем справочники – Запрет ручного исправления". Ну, мол есть целый ряд задач именно по управлению справочниками. Все хорошо, но вот такая ситуация. Есть документ, который создает элемент справочника. Добавляется он в момент проведения. А вот когда Вы делаете документ не проведенным элемент справочника должен удалиться. Вот этот процесс отмены проведения нам и нужно контролировать.

ОбработкаУдаленияПроведения
Предопределенная процедура обработки удаления проведения документа.

Синтаксис:

ОбработкаУдаленияПроведения()

Англоязычный синоним:

UnPostingProcess

Описание:
Процедура ОбработкаУдаленияПроведения — предопределенная процедура. Она не является встроенной процедурой языка. Для нее определено только название и синтаксис. Тело процедуры должно быть написано разработчиком конфигурации в Модуле документа (см. <Виды программных модулей>). Вызов процедуры ОбработкаУдаленияПроведения производится в системе 1C:Предприятие неявно при отмене проведения документа или при удалении проведенных документов в любом режиме — интерактивно или программно. (см. СделатьНеПроведенным, Удалить).

Замечание. В предопределенных процедурах ОбработкаПроведения и ОбработкаУдаленияПроведения система 1C:Предприятие сама выполняет все действия через транзакцию (см. <Процедуры работы с транзакциями>), поэтому никаких специальных действий по обработке транзакций в этих предопределенных процедурах предпринимать не нужно.

Если в данной предопределенной процедуре установить статус возврата — 0 (например, если данному пользователю нельзя отменять проведение документа), то отмена проведения документа не будет выполнена и будет отменена системная транзакция.

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 243 - Самый быстрый способ поиска элемента справочника при выборе на форме

Шаг 243 - Самый быстрый способ поиска элемента справочника при выборе на форме

Мы уже рассмотрели много вариантов поиска элементов справочника:

  • "Шаг 121 - Изучаем Справочник – запись по наименованию"
  • "Шаг 236 - Изучаем справочники – ищем по коду"

Давайте рассмотрим, как добраться до справочника, если выбор его есть на форме.

243_1.gif (3079 b)

Есть функция НайтиЭлемент.

НайтиЭлемент
Найти элемент справочника по значению.

Синтаксис:

НайтиЭлемент(<Элемент>)

Англоязычный синоним:

Findltem

Параметры:
<Элемент> Выражение со значением элемента справочника.

Возвращаемое значение:
Число 1 — если действие выполнено;
Число 0 — если действие не выполнено (элемент не найден).

Описание:
Метод НайтиЭлемент выполняет поиск элемента справочника по значению, заданному параметром <Элемент>, и позиционирует объект справочник на этом элементе.
Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.

Ну вот теперь, если на форме элемент выбран, то мы можем найти именно тот элемент в справочнике. Я обращаю внимание, что НайтиПоИмени не гарантирует нахождение выбранного элемента, так как имя может совпадать. Добавим на форму кнопку, по которой будем находить элемент.

Процедура НажалиКнопку()
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Если Спр.НайтиЭлемент(КонтрАгенты) = 1 Тогда
        Предупреждение(Спр.ИНН);
    КонецЕсли;
КонецПроцедуры

И попробуем.

243_2.gif (3931 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 244 - Чем могут помочь обработки

Шаг 244 - Чем могут помочь обработки

Обработка очень похожа на документ. Вроде как на основе документа можно сделать все. Конечно, но часто возникает необходимость, например, перекинуть или закачать справочник. Или операции с удаленного компьютера. Конечно можно это делать на основе документа. Ну, а как поступать, если операция разовая. Создадим один документ и будет он болтаться, а не дай бог удалят. Вот тут-то нам и помогут обработки. Создаем новую.

244_1.gif (7853 b)

Если ее открыть, то она очень похожа на документ.

244_2.gif (6775 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 245 - Обзор архитектуры 1C со стороны ввода информации

Шаг 245 - Обзор архитектуры 1C со стороны ввода информации

Мы уже рассматривали архитектуру решений в плане аналитики "Шаг 237 - Обзор архитектуры 1C".

Теперь пора рассмотреть как эту аналитику реализовать. Конечно можно использовать ручные проводки. Но это имеет ряд недостатков - "Шаг 59 - Разборки с корректностью проводок". Вообще о проводках можно прочитать в "Шаг 60 - Объектная модель проводок". На основе чего же можно формировать проводки? На основе документов конечно. Посмотрите шаг "Шаг 16 - Проводка ТМЦ", а так же "Шаг 132 - Операция результат проведения документа". О том, что в типовой конфигурации обычно не хватает документов и они могут быть не адаптированы читайте в "Шаг 169 - Учет – бухгалтерский и оперативный – еще одна ошибка внедрения 1С". Но создать проводки можно и с помощью обработок "Шаг 244 - Чем могут помочь обработки". Итак, сам счет непосредственно менять нельзя "Шаг 238 - Один неприятный психологический момент работы в 1C". Но его можно изменить используя проводки. Проводки можно создать используя следующие возможности.

  • Ручной ввод.
  • Ввод на основе документов
  • Ввод из обработок
  • Можно и из отчета ( если это не явное извращение)

Если информация хранится в регистрах "Шаг 179 - Чем еще могут помочь регистры", то изменить их состояние можно только из документов. Так вроде написано в документации.

Кстати и справочники можно менять точно так же. Только, если информация в справочники вводится на основе документов нужно обратить внимание на обработку удаления - "Шаг 242 - Как удалять документы, которые управляют справочниками".

В данном контексте искусство конфигурирования заключается в том, что необходимо правильно распределить задачи ввода. Что на основе документов, что на основе обработок, а что-то типа справочника можно и разрешить вводить в вручную. И еще есть тип данных перечисление, вводить который может только администратор. Ну, тут Вы сами, подробнее - "Шаг 215 - Что такое перечисление".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 246 - Обзор архитектуры 1C со стороны хранения информации

Шаг 246 - Обзор архитектуры 1C со стороны хранения информации

Любая система многогранна. Вот еще одна грань. Где в 1C можно хранить данные. Данные можно хранить в:

  • Счетах
  • Регистрах
  • Справочниках
  • Константах
  • Документах

Есть правда еще возможность делать дополнительную информацию для операций.

246_1.gif (2248 b)

А так же для проводок.

246_2.gif (1854 b)

И для журналов документов.

246_3.gif (1586 b)

Вот практически и все, если я чего-то не упустил.

В данном контексте умение конфигурировать заключается в правильном выборе места хранения информации. Часть информации хранится на счетах. Но работа со счетами медленнее чем с регистрами, кроме того, на счетах нет возможности хранить всю оперативную информацию. Для этого можно использовать либо документы, либо регистры. С регистрами быстрее, так как не требуется перебирать информацию. Часть информации хранится в справочника. Как статическая, так и периодическая. Наличие периодических справочников "Шаг 189 - Изучаем справочник – периодический реквизит" делает их местом хранения для решения специфических задач. Например, можно помещать в них итоговую информацию из отчетов. Ну, и последнее это константы, они тоже могут быть периодическими "Шаг 191 - Изучаем периодическую константу". Тут все понятно константа она и есть константа. Выводы отсюда, 1C обеспечивает хранение информации в разных местах, но любое место хранения обеспечивает временную привязку. То есть информация хранится привязанной к конкретному промежутку времени.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 247 - Предприятие одним взглядом

Шаг 247 - Предприятие одним взглядом

Итак, любая система учета строится вот из таких блоков:

247_1.gif (4590 b)

Все стоит практически на 4 китах. В 1C хранится информация – "Шаг 246 - Обзор архитектуры 1C со стороны хранения информации". С течением времени состояние меняется "Шаг 245 - Обзор архитектуры 1C со стороны ввода информации". И само место хранения и процесс изменения информации подвергается анализу "Шаг 237 - Обзор архитектуры 1C". Результат анализа отображается в отчетах. Вот такая картина, это и есть конфигурация. Задача конфигурирования адаптировать все эти механизмы под требование методики хранения, учета и анализа предприятия.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 248 - Устанавливаем фильтр на движения регистра

Шаг 248 - Устанавливаем фильтр на движения регистра

Как получить движения регистра мы с Вами смотрели в "Шаг 180 - Изучаем регистр – ВыбратьДвижения". Если движения нужны определенного типа, то мы можем установить фильтр и отбирать движения по реквизиту. Функция есть для этого специальная.

УстановитьФильтр
Назначить фильтр для оптимизации действий с регистром.

Синтаксис:

УстановитьФильтр(<Измер1>, <Измер2>..., <Рекв1>, <Рекв2>, ...)

Англоязычный синоним:

SetFilter

Параметры:
<Измер1 >, <Измер2> Выражения со значениями измерений регистра.
<Рекв1>, <рекв2> Необязательные параметры. Выражения со значениями реквизитов регистра. Заданные значения реквизитов будут влиять только на отбор движений регистра.

Описание:
Метод УстановитьФильтр назначает фильтр для оптимизации действий с регистром (временные расчеты, выбор движений и итогов).

В качестве фильтра задаются конкретные значения измерений и реквизитов регистра. Могут быть заданы не все значения, а только несколько, но обязательно в правильной последовательности, соответствующей структуре выбранного регистра, как она задана в конфигураторе. Измерения и реквизиты могут задаваться с пропусками (неуказанное значение — просто запятая), фиксируются только указанные значения.

Тут есть одна тонкость. Заключается она в последовательности параметров. Смотрим реквизиты регистра.

248_1.gif (2458 b)

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

Рег1.УстановитьФильтр(Предприятие,,,,ТипТребования);

Я убил минут 30 пока дошло, что ненужные измерения просто пропускаються.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 249 - Калькулятор к числу

Шаг 249 - Калькулятор к числу

Отучить пользоваться калькулятором бухгалтеров очень тяжело. Да и не всегда этого можно избежать. Например, есть ТЗР в счет фактуре на материалы. Этот ТЗР состоит из двух частей. Сама транспортировка и тара. Мы решили ТЗР хранить на отдельном субсчете. Вариантов может быть много. Например, ТЗР проводить отдельным документом. Или завести элемент справочника TЗР, который будет использоваться для этих целей. То есть при проведении можно проводить анализ наименования и, если это ТЗР, тогда на отдельный субсчет. Но вроде как по ТЗР аналитика не нужна. Можно и одним числом провести. Только вот суммировать его придется. А значит бухгалтер схватится за калькулятор. Вот это и не хорошо. Калькулятор нужно изжить со стола. Выход в том, что к числу можно этот калькулятор на форму приделать.

249_1.gif (6014 b)

И теперь в момент работы с документом этот калькулятор можно вызывать.

249_2.gif (2955 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 250 - Синтаксис помощник и шаблоны

Шаг 250 - Синтаксис помощник и шаблоны

Мы уже начали разговор о том, как уменьшить затраты труда на написание конфигурации в "Шаг 201 - Пара слов о синтаксисе помощника".

Делая третий, четвертый, пятый документ Вы рано или поздно поймете, что делаете практически одни и теже действия. Например, получаете строки таблицы и пробегаетесь по ним. Вот тут-то нам и могут помочь шаблоны. Мы пока рассмотрим их как аналог некоторого склада стандартных кусков. Итак, найти шаблоны можно в синтаксис помощнике. А правой кнопкой можно вызвать настройку.

250_1.gif (2197 b)

Появится окно, в котором можно создать новый шаблон.

250_2.gif (3178 b)

Внутри пишем нужный код.

250_3.gif (1824 b)

Теперь, если нам понадобиться пробежаться по таблице, то нет проблем. Выбираем шаблон и вставляем нужный кусок кода.

250_4.gif (3209 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 251 - Как реализован вызов одного отчета из другого

Шаг 251 - Как реализован вызов одного отчета из другого

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

251_1.gif (6451 b)

В тоже время перенос отчета в нашу конфигурацию приводит вот к таким эффектам.

251_2.gif (4441 b)

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

251_3.gif (4154 b)

Нужно ее перенести в наш модель, но это еще не все. По мере обращения к ячейкам если необходимый стандартный отчет отсутствует Вы будет получать вот такие сообщения.

251_4.gif (3465 b)

Ну тут понятно, нужно просто перенести отчет на в нашу конфигурацию подробнее - "Шаг 29 - Передача отчета из одной конфигурации в другую". И все станет на свои места.

Кстати это является реализацией темы общий отчет – частный, которую мы затрагивали в шагах - "Шаг 240 - Открывает отчет из кода", сама проблема описана в шаге - "Шаг 213 - Стандартные отчеты в нашу конфигурацию – какие будут проблемы".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 252 - Подробнее о ОбработкаЯчейкиТаблицы

Шаг 252 - Подробнее о ОбработкаЯчейкиТаблицы

Конечно тут же становится интересно, что это за такая обработка. Это системная предопределенная процедура.

ОбработкаЯчейкиТаблицы
Предопределенная процедура обработки ячейки таблицы.

Описание:

ОбработкаЯчейкиТаблицы(<Значение>, <ФлагСтандартнойОбработки> , <КонтекстТаблицы>,<Адрес>)

Англоязычный синоним:

SheetCellProcessing

Параметры:
<Значение> Здесь в процедуру передается вычисленное значение ячейки (задается в конфигураторе: <<Свойства>> ячейки, <<Текст>>, <<Значение>>).
<ФлагСтандартнойОбработки> Флаг, установка которого в теле процедуры в 1 приведет к выполнению стандартной обработки значения ячейки (открытию документа, элемента справочника и т. п.).
<КонтекстТаблицы> Необязательный параметр. Имя переменной, куда система передаст контекст всей таблицы (см. Передача контекста в качестве параметра). С помощью значения этого контекста можно произвольно манипулировать данной таблицей пока она открыта, например, вывести туда дополнительные секции или очистить и заполнить всю таблицу заново. Пока данный объект <<Таблица>> существует, тип значения данного параметра равен 100 (см. ТипЗначения), если закрыта — 0.
<Адрес> Необязательный параметр. Имя переменной, куда система передаст адрес ячейки/объекта в формате <<R1C1:R2C2>>.

Описание:
Вызов процедуры ОбработкаЯчейкиТаблицы на исполнение производится в системе 1C:Предприятие по двойному щелчку мыши или по нажатию клавиши <<Enter>> в табличном документе на выбранной ячейке.

Замечание. ОбработкаЯчейкиТаблицы — предопределенная процедура. Она не является встроенной процедурой языка. Для нее определено только название и синтаксис. Тело процедуры должно быть написано пользователем, осуществляющим конфигурирование, в программном модуле формы, из которой сформирован табличный документ или в глобальном модуле.

Замечание Объект типа <<СписокЗначений>> может записываться в поле <<значение>> ячейки таблицы и использоваться затем процедурой ОбработкаЯчейкиТаблицы.

Важно! Если процедура описана в модуле формы, то вызывается она, иначе система запускает одноименную процедуру из глобального модуля.

Внимание! Данная предопределенная процедура не вызывается при выборе ячейки таблицы в режиме ввода данных. Для этого случая вызывается предопределенная процедура ПриВыбореЯчейкиТаблицы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 253 - Как капризы рушат типовую конфигурацию

Шаг 253 - Как капризы рушат типовую конфигурацию

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

1.	типовой конфигурацией пользуются уже около 6 месяцев.
2.	бухгалтеров посылали на курсы
3.	официальная документация есть
4.	книга Д. В. Чистов Хозяйственные операции в Комп. Бух. 7.7 есть.
5.	Страница 362-363 на месте (проверил)

Задаю вопрос – как в типовой конфигурации реализуется учет ТЗР? А ответ в том, что там они ни как не учитываются. Вот так. Слов нет. Это и есть проблема. В большинстве случаев проблема в бухгалтерах, которые не хотят учиться, хотят чтобы по их капризу ТЗР было отдельной строкой (ни кто не может объяснить почему). Ни кто не может объяснить почему нельзя вести учет затрат в цене. Вот и тратит предприятие деньги, время и все остальное не понятно почему. И не понятно почему ругают 1С.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 254 - Ошибки в проводках и перепроведение документов

Шаг 254 - Ошибки в проводках и перепроведение документов

Итак, ошибки, ошибки. Рано или поздно ошибки Вы найдете. Например, проводки проводились не правильно или еще что-то. И встанет задача перепровести кучу документов. Я сам лично видел как решается эта проблема. Садится девочка и начинает открывать и перепроводить эти документы. Открывает один за одним... Честное слово. Но есть хороший пункт меню в операциях. Как раз для этих задач.

254_1.gif (4638 b)

После выбра этого пункта меню появится диалоговое окно.

254_2.gif (11110 b)

Смотрите, Вы можете выбрать дату, потом документы и нажать кнопку выполнить и все.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 255 - Еще одно ускорение – поиск ссылок на объект

Шаг 255 - Еще одно ускорение – поиск ссылок на объект

Очень часто Вы не можете что-то удалить из справочника. Где-то на этот объект есть ссылка. Такая ситуация возникает когда случайно было занесено в справочник два элемента, а выяснилось это потом. Вот теперь и нужно найти ссылки на этот элемент, чтобы исправить. Нам нужно меню "разное". И там как раз этот поиск.

255_1.gif (2385 b)

Появится диалоговое окно поиска.

255_2.gif (8657 b)

Здесь нужно выбрать справочник, потом его элемент и нажать кнопку "найти". Вот и выпадет список в каких документах и где фигурирует этот элемент.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 256 - Программно пишем документ

Шаг 256 - Программно пишем документ

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

Записать
Записать документ.

Синтаксис:

Записать()

Англоязычный синоним:

Write

Описание:
Метод Записать выполняет запись в базу данных текущего нового или измененного документа.

Замечание. Если этот метод применяется в Модуле формы документа непосредственно к документу локального контекста, то данный метод отрабатывает теже действия, как интерактивное нажатие пользователем кнопки с формулой "#Записать".

Применим ее перед запросом.

Записать();
Т=СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Секция_1");
Т.ВывестиСекцию("Секция_2");
Запрос = СоздатьОбъект("Запрос");

Вот сначала пишем документ, потом организуем к нему запрос.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 257 - Что делать, если нужно получить сгруппированные данные

Шаг 257 - Что делать, если нужно получить сгруппированные данные

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

257_1.gif (5453 b)

Обратите внимание на ту гадость, что нам в начале нужно получить сводные данные. То есть даже, если все делать руками, то придется два раза проходить по таблице. Но и сам язык 1C совсем не C++ для таких операций. Ведь счетов может быть много и они могут быть совершенно разные. Выход в такой ситуации в использовании запроса к самому себе.

Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с (ТекущийДокумент()) по (ТекущийДокумент());
    |ОбрабатыватьДокументы все;
    |КоррСчет = Документ.АвансовыйОтчет.СчетДляАванса.Счет;
    |НДС = Документ.АвансовыйОтчет.СуммаНДС;
    |Сумма = Документ.АвансовыйОтчет.СуммаСНДС;
    |Функция ИтогоПоСчету = Сумма(Сумма);
    |Функция НДСПоСчету = Сумма(НДС);
    |Группировка КоррСчет;
    |"//}}ЗАПРОС

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

Пока Запрос.Группировка("КоррСчет") = 1 Цикл
    Т.ВывестиСекцию("Секция_9");
КонецЦикла;

И выводить. Но при таком подходе документ должен быть записан. Читайте "Шаг 256 - Программно пишем документ".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 258 - Понимание запроса

Шаг 258 - Понимание запроса

Условно запрос можно разделить на 4 части. Первая часть это период и общие настройки.

258_1.gif (3801 b)

Вторая часть это создание переменных запроса. То есть мы связываем какую-то внутреннею переменную с конкретным реквизитом документа.

258_2.gif (3992 b)

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

258_3.gif (4037 b)

Ну, и наконец группировка внутренних данных.

258_4.gif (3739 b)

Итак:

1. Период и общие параметры
2. Создание переменных запроса
3. Создание математических функций
4. Группировка результатов.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 259 - Регистр и сложная фильтрация

Шаг 259 - Регистр и сложная фильтрация

В шаге "Шаг 248 - Устанавливаем фильтр на движения регистра" мы обсуждали установку фильтра. Но теперь нам нужно бы сделать сложную фильтрацию по условиям. Вот, например, такая форма регистра.

259_1.gif (3690 b)

У нас есть 5 позиций, по которым можно сделать фильтрацию. Конечно пользователь может захотеть посмотреть ЧерезКого было требование, может посмотреть и КомуПоставляем. А может захотеть и отфильтровать по двум вариантам сразу. Ну не писать же каждый раз сложные Если. Конечно нет. Вот, например, есть форма.

259_2.gif (3248 b)

Здесь можно установить КомуПоставляем и Тип ТМЦ. Заведем две переменные.

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

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

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

Рег1 = СоздатьОбъект("Регистр.Требования");
Т = СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Секция_1");

Если Предприятие.Выбран()=1 Тогда
    Пр=Предприятие;
КонецЕсли;

Если ТипТребования.Выбран()=1 Тогда
    ТипТр= ТипТребования;
КонецЕсли;

.......

А как только это будет сделано установим сам фильтр.

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

    Рег1 = СоздатьОбъект("Регистр.Требования");
    Т = СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Секция_1");

    Если Предприятие.Выбран()=1 Тогда
        Пр=Предприятие;
    КонецЕсли;

    Если ТипТребования.Выбран()=1 Тогда
        ТипТр= ТипТребования;
    КонецЕсли;

    Рег1.УстановитьФильтр(Пр,,,,ТипТр);

    Рег1.ВыбратьДвижения(ДатаНач,ДатаКон);
    Пока Рег1.ПолучитьДвижение() > 0 Цикл
        Т.ВывестиСекцию("Секция_2");
        Пр=Пр+Рег1.Сумма;
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.ВывестиСекцию("Секция_3");
    Т.Показать()

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

Теперь мы можем проводить фильтрацию с очень сложным условиям.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 260 - Как не выдавать то, чего нет на складе

Шаг 260 - Как не выдавать то, чего нет на складе

Формируя отчет по складу Вы наверно сталкивались с ситуацией когда выписывается товар, который не оприходован. Это в корне не правильно. Никаких минусов на складе быть не может. Получается при выписывании счет фактуры нужно проверять наличие товара. В шаге "Шаг 15 - Номенклатура товара" товара было рассказано, как связать событие выбора из номенклатуры с некоторым действием. Получается, что нам просто нужно посмотреть СКД период, и если оно больше нуля, то все нормально (подробнее о СКД "Шаг 43 - Изучаем бухгалтерские итоги – СКД"). Вот примерно такой код:

Процедура Считаем()
    Перем состоян;
    БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
    состоян=БухИтоги.СКД("41.4","С",,Номенклатура);

    Если состоян>0 Тогда
        Цена= Номенклатура.Цена;
        Сумма=Цена*Количество;
        СуммаНДС=(Сумма/100)*НДС;
        СуммаСНДС=Сумма+СуммаНДС;
    Иначе
        Предупреждение("Товара нет на складе");
    КонецЕсли;

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

И теперь при попытке выбора номенклатуры, которой нет на складе мы получим сообщение.

260_1.gif (13332 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 261 - Изучаем движение субконто

Шаг 261 - Изучаем движение субконто

В ряде шагов ранее мы с Вами уже изучали стандартные отчеты:

  • "Шаг 229 - Анализ счета по субконто – АнализСчетаПоСубконто"
  • "Шаг 232 - Отчет по регистрам, где взять"

Умение владеть стандартными отчетами очень полезно. Мы с Вами посмотрим стандартный отчет Карточка субконто. Его можно использовать как в Вашей конфигурации, так и в стандартной. Вопросы переноса с нашу конфигурацию были рассмотрены в "Шаг 213 - Стандартные отчеты в нашу конфигурацию – какие будут проблемы". Итак выбираем:

261_1.gif (3522 b)

Смысл этого отчета в получении информации о движение по конкретному субконто. Лучше всего понять смысл этого отчета на материалах. Выберем субконто и конкретное его наименование.

261_2.gif (7125 b)

Сформировав отчет мы увидим жизнь этого наименования. Смотрите.

261_3.gif (8812 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 262 - Как увидеть обороты между счетами

Шаг 262 - Как увидеть обороты между счетами

Тут нам поможет стандартный отчет – Главная книга:

262_1.gif (2104 b)

Обратите внимание, что можно указывать и разбивку по субсчетам.

262_2.gif (7012 b)

В результате мы сможет не только видеть суммы оборота.

262_3.gif (6323 b)

Оказывается был возврат с подотчета.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 263 - Запуск 1C и параметры запуска

Шаг 263 - Запуск 1C и параметры запуска

В шагах , "Шаг 25 - Проверяем пользователей" я рассказывал о том, как создавать пользователей. Но рано или поздно пользователей станет много, а бухгалтера будут постоянно что-то путать. К счастью в 1С в параметрах запуска можно указывать как каталог информационной базы, так и пользователя, пароль. Для того, чтобы добраться до параметров запуска нужно выбрать свойства запускного файла 1С. Добраться до него можно через меню Пуск.

263_1.gif (3066 b)

В результате Вы увидите свойства ярлыка.

263_2.gif (3289 b)

Вот здесь в командной строку и можно указывать параметры. Давайте укажем информационную базу, чтобы нас не спрашивали. Для этого есть ключ /U. Данный ключ позволяет установить каталог пользователя. Самого пользователя можно указать через ключ /N, а пароль /P. Итак, смотрим все вместе. Вот пример.

"C:\Program Files\1Cv75\BIN\1cv7.exe"  enterprise /Uc:\Base  /NAdministrator /P1f3fg

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 264 - Посреднические услуги

Шаг 264 - Посреднические услуги

Данный шаг является введением для следующих нескольких шагов. Итак, организация занимается посреднической деятельностью. Это не совсем так плохо как кажется. В России сформировалось устойчивое негативное отношение к данному роду деятельности. Хотя непонятно, почему. Давайте возьмем условную организацию, которая обеспечивает получение кредита для других организаций, добывающих золото, например. Если артель добывает 50-100 кг, то она может получить кредит в размере 25% от добычи прошлого года. Процент за кредит будет в размере 20-25 процентов (зависит от банка и кредитной истории). Что отсюда видно. Видно, что процент большой. Но это не самое главное. Самое главное, что нет возможности получить кредит на развитие. Ну, например, вы добыли 50 кг в этом году. Вот вы и получите кредит на 10-15 кг. Но вам нужен кредит на 30 кг, так как именно столько стоит новый бульдозер Komatsu 270. Купив его Вы сможете намыть 70-80 кг. Но Вам такую сумму не дадут. Вот и получается замкнутый круг. С другой стороны другая артель сработала очень хорошо и на этот год она не планирует покупку техники. Соответственно и кредит в полном размере брать не будет. А теперь представьте посредника, который аккумулирует потребности в кредите и этот кредит получает. Во-первых, он выступает как корпоративный клиент и соответственно, так как сумма кредита очень значительная, он договаривается о меньшем проценте. Скажем о 16-18%. Естественно, что каждый участник выигрывает. Кроме того не нужно проводить кучу работы по его получению. Каждый новый его клиент наследует кредитную историю этого посредника, даже если он работает первый год. Есть и возможность дать кредит побольше тому, кто в этом году нуждается в покупке технике, так как другие не будут брать кредит больше чем необходимо. В связи с этим такая посредническая организация просто перераспределяет услуги через себя своим клиентам. Касается данная модель чего угодно, аффинажа, услуг спутниковой связи и так далее. Посредник накручивает просто небольшой процент. Получается нам просто нужно сделать систему перераспределения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 265 - Ведем оперативный учет

Шаг 265 - Ведем оперативный учет

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

265_1.gif (1724 b)

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

265_2.gif (6978 b)

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

Процедура Сформировать()
    Перем Пр;
    Пр=0;
    Т=СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Рег1 = СоздатьОбъект("Регистр.УслугиАфинажа");

    Если Кому.Выбран()=1 Тогда
        Рег1.УстановитьФильтр(Кому);
    КонецЕсли;

    Рег1.ВыбратьДвижения(ДатаНач,ДатаКон);

    Пока Рег1.ПолучитьДвижение() > 0 Цикл
        Т.ВывестиСекцию("Секция_2");
        Пр=Пр+Рег1.Сумма;
    КонецЦикла;
    Т.ВывестиСекцию("Секция_3");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 266 - Автоматически получаем сумму в счет фактуру

Шаг 266 - Автоматически получаем сумму в счет фактуру

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

266_1.gif (5919 b)

Конечно в зависимости от услуги нужно использовать разные регистры. Как поступать? Я сделал просто, ID услуги в справочнике.

266_2.gif (5355 b)

И если выбрана услуга по аффинажу, то выбираю движение по регистру.

Процедура ПриВыбореУслуги()
    Перем пр;
    пр=0;
    Если Услуга.ID=1 Тогда
        Если КомуПоставляем.Выбран()=0 Тогда
            Предупреждение("Вы не выбрали контрагента, выберите и попробуйте снова");
        Иначе
            Рег1 = СоздатьОбъект("Регистр.УслугиАфинажа");
            Рег1.УстановитьФильтр(КомуПоставляем);
            Рег1.ВыбратьДвижения(НачМесяца(ДатаДок),КонМесяца(ДатаДок));
            Пока Рег1.ПолучитьДвижение() > 0 Цикл
                Пр=Пр+Рег1.Сумма;
            КонецЦикла;
            Сумма=Пр;
            СчитаемСумму();
        КонецЕсли;
    Конецесли;

И теперь стоит выбрать услугу аффинажа, как тут же будет проанализирован регистр и сумму помещена в поле сумма. Все, ни какой дополнительной работы. Правда тут я использовал пока две не описанные ранее функции. Смотрите следующие шаги.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 267 - Работаем с датами - НачМесяца

Шаг 267 - Работаем с датами - НачМесяца

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

Рег1.ВыбратьДвижения(НачМесяца(ДатаДок),КонМесяца(ДатаДок));

Смотрим описание функции.

НачМесяца
Определить дату начала месяца.

Синтаксис:

НачМесяца(<Дата>)

Англоязычный синоним:

BegOfMonth

Параметры:
<Дата> Выражение со значением типа <дата>.

Возвращаемое значение:
Результирующая дата.

Описание:
Функция НачМесяца определяет дату начала месяца для указанной даты.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 268 - Работаем с датами - КонМесяца

Шаг 268 - Работаем с датами - КонМесяца

И вторая функция.

КонМесяца
Определить дату конца месяца.

Синтаксис:

КонМесяца(<Дата>)

Англоязычный синоним:

EndOfMonth

Параметры:
<Дата> Выражение со значением типа <дата>.

Возвращаемое значение:
Результирующая дата.

Описание:
Функция КонМесяца определяет дату конца месяца для указанной даты.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 269 - Маленькие замечания по выборке из регистра за период

Шаг 269 - Маленькие замечания по выборке из регистра за период

Все бы было хорошо, только вот живем мы в несовершенном мире. За услугу, которая была потреблена в январе можно получить счет в феврале или мае. Как тут быть. Все просто. При реализации указанной схемы автоматического выбора необходимо заносить документ с датой получения. То есть в тот день, в который мы его получили. В таком варианте все логично. Выставить услугу мы можем только когда она получена. Разница между выписыванием счета и получением его может составлять несколько месяцев. Тут нужно четко понимать механизм. Если допустим мы получим счет в октябре, а занесем его сентябрем, то при попытке автоматического выбора за октябрь мы его не увидим. Это все естественно, если Вы понимаете. Тут важна политика учета. В данном случае по фактически полученным датам. Конечно возникает желание сделать так. Вы получили счет в 2 октября, а сентябрь еще не закрыт. Вам захочется, чтобы этот счет прошел в сентябре. В таком случае его нужно заносить сентябрем. Можно и так построить политику учета. Единственное, что эта политика должна быть одна. Всегда одинаково. Иначе просто забудете, перепутаете и услышите примерно вот такие слова.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 270 - Знакомимся с диаграммой

Шаг 270 - Знакомимся с диаграммой

Цифры, цифрами, но смотреть на колонки цифр очень утомительно. Гораздо лучше смотреть на диаграмму. Тут все понятно. Одна колонка Выше, другая колонка ниже. В таблицу отчет можно встроить диаграмму. Создаем новый отчет. Вот код.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
      Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Теперь нужно поместить саму диаграмму на таблицу.

270_1.gif (17059 b)

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

270_2.gif (6166 b)

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

//*******************************************
Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Процедура   ПостроитьДиаграмму(Диаграмма)
    Диаграмма.КоличествоСерий(1);
КонецПроцедуры

Запустим, посмотрим.

270_3.gif (2628 b)

Вроде как толку никакого. На самом деле толк есть. Видно, что процедура сработала. Иначе Вы увидели бы что-то в таком роде.

270_4.gif (6428 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 271 - Что это за количество серий

Шаг 271 - Что это за количество серий

Мы с Вами в прошлом шаге использовали функцию КоличествоСерий. Вот ее описание.

КоличествоСерий
Явно устанавливает количество серий диаграммы.

Синтаксис:

КоличествоСерий(<Количество>)
Англоязычный синоним:
SeriesCount

Параметры:
<Количество> Числовое выражение, которое задает количество серий диаграммы.

Возвращаемое значение:
Текущее значение количества серий (до исполнения метода).

Описание:
Метод КоличествоСерий явно устанавливает количество серий диаграммы. Количество серий может быть изменено и в режиме визуальной настройки. Альтернативой использования этого метода является неявное изменение количества серий: в случае если в метод, одним из параметров, использующий номер серии, передается значение превышающее количество серий, количество серий будет неявно увеличено.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 272 - Добавляем количество точек

Шаг 272 - Добавляем количество точек

Следующим шагом будет добавление количества точек. Для этого есть метод специальный.

КоличествоТочек
Явно устанавливает количество точек диаграммы.

Синтаксис:

КоличествоТочек(<Количество>)
Англоязычный синоним:
PointsCount

Параметры:
<Количество> Числовое выражение, которое задает количество точек диаграммы.

Возвращаемое значение:
Текущее значение количества точек (до исполнения метода).

Описание:
Метод КоличествоТочек явно устанавливает количество точек диаграммы. Количество точек может быть изменено и в режиме визуальной настройки. Альтернативой использования этого метода является неявное изменение количества точек: в случае если в метод, одним из параметров, использующий номер точек, передается значение превышающее количество точек, количество точек будет неявно увеличено.

Пробуем.

Процедура ПостроитьДиаграмму(Диаграмма)
    Диаграмма.КоличествоСерий(1);
    Диаграмма.КоличествоТочек(5);
КонецПроцедуры

И результат.

272_1.gif (2747 b)

Уже появились точки. Но пока мы им не присвоили значения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 273 - Устанавливаем значения

Шаг 273 - Устанавливаем значения

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

УстановитьЗначение
Установка значения в заданной точке и серии.

Синтаксис:

УстановитьЗначение(<НомерТочки>, <НомерСерии>, <Значен>, <Расшифровка>)

Англоязычный синоним:

SetValue

Параметры:

<НомерТочки>	Числовое выражение, которое задает номер точки, для которой устанавливается значение.
<НомерСерии>	Числовое выражение, которое задает номер серии, для которой устанавливается значение.
<3начен>		Числовое значение — задаваемое значение диаграммы.
<Расшифровка>	Необязательный параметр. Значение любого типа, используемое для расшифровки диаграммы
            при помощи предопределенной процедуры ОбработкаЯчейкиТаблицы.

Описание:
Метод УстановитьЗначение устанавливает значение серии <НомерСерии> в точке <НомерТочки> равным <Значен> с возможностью его последующей расшифровки.
Расшифровка может быть реализована при помощи предопределенной процедуры ОбработкаЯчейкиТаблицы. Вызов предопределенной процедуры ОбработкаЯчейкиТаблицы на исполнение производится в системе 1С:Предприятие по двойному щелчку мыши в табличном документе на выбранной точке диаграммы. При этом значение расшифровки <Расшифровка> этой точки диаграммы автоматически передается в качестве первого параметра в вызове предопределенной процедуры.

Добавляем к нашем отчету.

Процедура ПостроитьДиаграмму(Диаграмма)
    Диаграмма.КоличествоСерий(1);
    Диаграмма.КоличествоТочек(5);
    Диаграмма.УстановитьЗначение(1,1,5);
    Диаграмма.УстановитьЗначение(2,1,10);
КонецПроцедуры

Смотрим результат.

273_1.gif (3389 b)

Отлично. Теперь Ваше начальство в динамике может наблюдать за тем как падет объем продаж, растут кредиторские и дебиторские задолжности, уменьшается прибыль и все остальные жизненно важные параметры.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 274 - Что такое – основные средства

Шаг 274 - Что такое – основные средства

Если просто, то это материальные ценности большой стоимости и длительным сроком эксплуатации. Особенно важен срок эксплуатации. Все эти параметры устанавливаются законодательными актами. То есть, что данная материальная ценность может быть отнесена в основному средству. Примером основного средства может быть автомобиль, здание, компьютер. В бух учете основные средства должны храниться на счете 01.

274_1.gif (2066 b)

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

274_2.gif (1565 b)

В тот момент когда сумма амортизации станет равна сумме начальной стоимости основное средство может быть списано. Операции с основными средствами описаны в положении по бухгалтерскому учету "УЧЕТ ОСНОВНЫХ СРЕДСТВ" ПБУ 6/01. Данное положение утверждено приказом Министерства финансов Российской Федерации от 30.03.2001 N 26н. В дальнейших шагах Вы сможете прочитать эти правила.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 275 - ПБУ 6/01 Общие положения

Шаг 275 - ПБУ 6/01 Общие положения

1. Настоящее Положение устанавливает правила формирования в бухгалтерском учете информации об основных средствах организации. Под организацией в дальнейшем понимается юридическое лицо по законодательству Российской Федерации (за исключением кредитных организаций и бюджетных учреждений).

2. Настоящее Положение применяется также в отношении доходных вложений в материальные ценности.

3. Настоящее Положение не применяется в отношении:

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

О применении Положения по бухгалтерскому учету "Учет основных средств" (ПБУ 6/01) см. письмо МНС РФ от 19 июля 2001 г. N ВГ-6-02/559

4. Для целей настоящего Положения при принятии к бухгалтерскому учету активов в качестве основных средств необходимо единовременное выполнение следующих условий:
а) использование в производстве продукции при выполнении работ или оказании услуг либо для управленческих нужд организации;
б) использование в течение длительного времени, т.е. срока полезного использования, продолжительностью свыше 12 месяцев или обычного операционного цикла, если он превышает 12 месяцев;
в) организацией не предполагается последующая перепродажа данных активов;
г) способность приносить организации экономические выгоды (доход) в будущем.
Сроком полезного использования является период, в течение которого использование объекта основных средств приносит доход организации. Для отдельных групп основных средств срок полезного использования определяется исходя из количества продукции (объема работ в натуральном выражении), ожидаемого к получению в результате использования этого объекта.

5. К основным средствам относятся: здания, сооружения, рабочие и силовые машины и оборудование, измерительные и регулирующие приборы и устройства, вычислительная техника, транспортные средства, инструмент, производственный и хозяйственный инвентарь и принадлежности, рабочий, продуктивный и племенной скот, многолетние насаждения, внутрихозяйственные дороги и прочие соответствующие объекты.
В составе основных средств учитываются также: капитальные вложения на коренное улучшение земель (осушительные, оросительные и другие мелиоративные работы); капитальные вложения в арендованные объекты основных средств; земельные участки, объекты природопользования (вода, недра и другие природные ресурсы).

6. Единицей бухгалтерского учета основных средств является инвентарный объект. Инвентарным объектом основных средств признается объект со всеми приспособлениями и принадлежностями или отдельный конструктивно обособленный предмет, предназначенный для выполнения определенных самостоятельных функций, или же обособленный комплекс конструктивно сочлененных предметов, представляющих собой единое целое и предназначенный для выполнения определенной работы. Комплекс конструктивно сочлененных предметов - это один или несколько предметов одного или разного назначения, имеющих общие приспособления и принадлежности, общее управление, смонтированные на одном фундаменте, в результате чего каждый входящий в комплекс предмет может выполнять свои функции только в составе комплекса, а не самостоятельно.
В случае наличия у одного объекта нескольких частей, имеющих разный срок полезного использования, каждая такая часть учитывается как самостоятельный инвентарный объект.
Объект основных средств, находящийся в собственности двух или нескольких организаций, отражается каждой организацией в составе основных средств соразмерно ее доле в общей собственности.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 276 - ПБУ 6/01 Оценка основных средств

Шаг 276 - ПБУ 6/01 Оценка основных средств

7. Основные средства принимаются к бухгалтерскому учету по первоначальной стоимости.

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

9. Первоначальной стоимостью основных средств, внесенных в счет вклада в уставный (складочный) капитал организации, признается их денежная оценка, согласованная учредителями (участниками) организации, если иное не предусмотрено законодательством Российской Федерации.

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

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

12. В первоначальную стоимость объектов основных средств, определяемую в соответствии с пунктами 8, 9, 10 и 11 настоящего Положения, включаются также фактические затраты организации на доставку объектов и приведение их в состояние, пригодное для использования.

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

14. Стоимость основных средств, в которой они приняты к бухгалтерскому учету, не подлежит изменению, кроме случаев, установленных законодательством Российской Федерации и настоящим Положением.
Изменение первоначальной стоимости основных средств, в которой они приняты к бухгалтерскому учету, допускается в случаях достройки, дооборудования, реконструкции, частичной ликвидации и переоценки объектов основных средств.

15. Коммерческая организация может не чаще одного раза в год (на начало отчетного года) переоценивать группы однородных объектов основных средств по текущей (восстановительной) стоимости путем индексации или прямого пересчета по документально подтвержденным рыночным ценам.
При принятии решения о переоценке по таким основным средствам следует учитывать, что в последующем они переоцениваются регулярно, чтобы стоимость основных средств, по которой они отражаются в бухгалтерском учете и отчетности, существенно не отличалась от текущей (восстановительной) стоимости.
Сумма дооценки объекта основных средств в результате переоценки зачисляется в добавочный капитал организации. Сумма дооценки объекта основных средств, равная сумме уценки его, проведенной в предыдущие отчетные периоды и отнесенной на счет прибылей и убытков в качестве операционных расходов, относится на счет прибылей и убытков отчетного периода в качестве дохода.
Сумма уценки объекта основных средств в результате переоценки относится на счет прибылей и убытков в качестве расходов. Сумма уценки объекта основных средств относится в уменьшение добавочного капитала организации, образованного за счет сумм дооценки этого объекта, проведенной в предыдущие отчетные периоды. Превышение суммы уценки объекта над суммой дооценки его, зачисленной в добавочный капитал организации в результате переоценки, проведенной в предыдущие отчетные периоды, относится на счет прибылей и убытков в качестве операционного расхода.
При выбытии объекта основных средств сумма его дооценки переносится с добавочного капитала организации в нераспределенную прибыль организации.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 277 - ПБУ 6/01 Амортизация основных средств

Шаг 277 - ПБУ 6/01 Амортизация основных средств

17. Стоимость объектов основных средств погашается посредством начисления амортизации, если иное не установлено настоящим Положением.
По объектам жилищного фонда (жилые дома, общежития, квартиры и др.), объектам внешнего благоустройства и другим аналогичным объектам (лесного хозяйства, дорожного хозяйства, специализированным сооружениям судоходной обстановки и т.п.), а также продуктивному скоту, буйволам, волам и оленям, многолетним насаждениям, не достигшим эксплуатационного возраста, стоимость не погашается, т.е. амортизация не начисляется. По указанным объектам основных средств и объектам основных средств некоммерческих организаций производится начисление износа в конце отчетного года по установленным нормам амортизационных отчислений. Движение сумм износа по указанным объектам учитывается на отдельном забалансовом счете.
Не подлежат амортизации объекты основных средств, потребительские свойства которых с течением времени не изменяются (земельные участки и объекты природопользования).

18. Начисление амортизации объектов основных средств производится одним из следующих способов:
линейный способ;
способ уменьшаемого остатка;
способ списания стоимости по сумме чисел лет срока полезного использования;
способ списания стоимости пропорционально объему продукции (работ).
Применение одного из способов начисления амортизации по группе однородных объектов основных средств производится в течение всего срока полезного использования объектов, входящих в эту группу.
См. Классификацию основных средств, включаемых в амортизационные группы, утвержденную постановлением Правительства РФ от 1 января 2002 г. N 1. Указанная Классификация может использоваться для целей бухгалтерского учета
Объекты основных средств стоимостью не более 2000 рублей за единицу, а также приобретенные книги, брошюры и т.п. издания разрешается списывать на затраты на производство (расходы на продажу) по мере отпуска их в производство или эксплуатацию. В целях обеспечения сохранности этих объектов в производстве или при эксплуатации в организации должен быть организован надлежащий контроль за их движением.
О применении Положения по бухгалтерскому учету "Учет основных средств" (ПБУ 6/01) для целей налогообложения см. письмо МНС РФ от 19 июля 2001 г. N ВГ-6-02/559

19. Годовая сумма амортизационных отчислений определяется:
при линейном способе - исходя из первоначальной стоимости или (текущей (восстановительной) стоимости (в случае проведения переоценки) объекта основных средств и нормы амортизации, исчисленной исходя из срока полезного использования этого объекта;
при способе уменьшаемого остатка - исходя из остаточной стоимости объекта основных средств на начало отчетного года и нормы амортизации, исчисленной исходя из срока полезного использования этого объекта и коэффициента ускорения, установленного в соответствии с законодательством Российской Федерации;
при способе списания стоимости по сумме чисел лет срока полезного использования - исходя из первоначальной стоимости или (текущей (восстановительной) стоимости (в случае проведения переоценки) объекта основных средств и соотношения, в числителе которого число лет, остающихся до конца срока полезного использования объекта, а в знаменателе - сумма чисел лет срока полезного использования объекта.
В течение отчетного года амортизационные отчисления по объектам основных средств начисляются ежемесячно независимо от применяемого способа начисления в размере 1/12 годовой суммы.
По основным средствам, используемым в организациях с сезонным характером производства, годовая сумма амортизационных отчислений по основным средствам начисляется равномерно в течение периода работы организации в отчетном году.
При способе списания стоимости пропорционально объему продукции (работ) начисление амортизационных отчислений производится исходя из натурального показателя объема продукции (работ) в отчетном периоде и соотношения первоначальной стоимости объекта основных средств и предполагаемого объема продукции (работ) за весь срок полезного использования объекта основных средств.

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

21. Начисление амортизационных отчислений по объекту основных средств начинается с первого числа месяца, следующего за месяцем принятия этого объекта к бухгалтерскому учету, и производится до полного погашения стоимости этого объекта либо списания этого объекта с бухгалтерского учета.

22. Начисление амортизационных отчислений по объекту основных средств прекращается с первого числа месяца, следующего за месяцем полного погашения стоимости этого объекта либо списания этого объекта с бухгалтерского учета.

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

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 278 - ПБУ 6/01 Восстановление основных средств

Шаг 278 - ПБУ 6/01 Восстановление основных средств

26. Восстановление объекта основных средств может осуществляться посредством ремонта, модернизации и реконструкции.

27. Затраты на восстановление объекта основных средств отражаются в бухгалтерском учете отчетного периода, к которому они относятся. При этом затраты на модернизацию и реконструкцию объекта основных средств после их окончания могут увеличивать первоначальную стоимость такого объекта, если в результате модернизации и реконструкции улучшаются (повышаются) первоначально принятые нормативные показатели функционирования (срок полезного использования, мощность, качество применения и т.п.) объекта основных средств.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 279 - ПБУ 6/01 Выбытие основных средств

Шаг 279 - ПБУ 6/01 Выбытие основных средств

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

30. Если списание объекта основных средств производится в результате его продажи, то выручка от продажи принимается к бухгалтерскому учету в сумме, согласованной сторонами в договоре.

31. Доходы и расходы от списания с бухгалтерского учета объектов основных средств отражаются в бухгалтерском учете в отчетном периоде, к которому они относятся. Доходы и расходы от списания объектов основных средств с бухгалтерского учета подлежат зачислению на счет прибылей и убытков в качестве операционных доходов и расходов.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 280 - ПБУ 6/01 Раскрытие информации в бухгалтерской отчетности

Шаг 280 - ПБУ 6/01 Раскрытие информации в бухгалтерской отчетности

32. В бухгалтерской отчетности подлежит раскрытию с учетом существенности как минимум следующая информация:

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 281 - Как организован учет основных средств в 1C

Шаг 281 - Как организован учет основных средств в 1C

Первый элемент, который необходим для организации основных средств это справочник ОсновныеСредства.

281_1.gif (1484 b)

Даже, если Вы создаете свою конфигурацию, лучше эту часть взять из стандартной конфигурации. Но не все так просто. Справочник ОсновныеCредства довольно сложный в плане того, что он ссылается на другие справочники и переселения. Другие справочники ссылаются опять на перечисления.

281_2.gif (12546 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 282 - Налоговый кодекс - Статья 258 - Амортизационные группы

Шаг 282 - Налоговый кодекс - Статья 258 - Амортизационные группы

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

1. Амортизируемое имущество распределяется по амортизационным группам в соответствии со сроками его полезного использования. Сроком полезного использования признается период, в течение которого объект основных средств и (или) объект нематериальных активов служат для выполнения целей деятельности налогоплательщика. Срок полезного использования определяется налогоплательщиком самостоятельно на дату ввода в эксплуатацию данного объекта амортизируемого имущества в соответствии с положениями настоящей статьи и на основании классификации основных средств, определяемой Правительством Российской Федерации.

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

3. Амортизируемое имущество объединяется в следующие амортизационные группы:

  • первая группа - все недолговечное имущество со сроком полезного использования от 1 года до 2 лет включительно;
  • вторая группа - имущество со сроком полезного использования свыше 2 лет до 3 лет включительно;
  • третья группа - имущество со сроком полезного использования свыше 3 лет до 5 лет включительно;
  • четвертая группа - имущество со сроком полезного использования свыше 5 лет до 7 лет включительно;
  • пятая группа - имущество со сроком полезного использования свыше 7 лет до 10 лет включительно;
  • шестая группа - имущество со сроком полезного использования свыше 10 лет до 15 лет включительно;
  • седьмая группа - имущество со сроком полезного использования свыше 15 лет до 20 лет включительно;
  • восьмая группа - имущество со сроком полезного использования свыше 20 лет до 25 лет включительно;
  • девятая группа - имущество со сроком полезного использования свыше 25 лет до 30 лет включительно;
  • десятая группа - имущество со сроком полезного использования свыше 30 лет.

4. Классификация основных средств, включаемых в амортизационные группы, определяется Правительством Российской Федерации.

5. Для тех видов основных средств, которые не указаны в амортизационных группах, срок полезного использования устанавливается налогоплательщиком в соответствии с техническими условиями и рекомендациями организаций-изготовителей.

6. В целях настоящей главы амортизируемое имущество принимается на учет по первоначальной (восстановительной) стоимости, определяемой в соответствии со статьей 257 настоящего Кодекса и пунктом 10 настоящей статьи.

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

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

9. Основные средства и (или) нематериальные активы включаются в состав амортизируемого имущества с 1-го числа месяца, следующего за месяцем, в котором они были введены в эксплуатацию (переданы в производство).

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 283 - Методы начисления амортизации

Шаг 283 - Методы начисления амортизации

Методов начисления амортизации много.

Линейный метод начисления амортизации
Равномерное списывание основного капитала
Straight-line depreciation
Линейный метод начисления амортизации - систематическое списание равных по величине сумм в течение срока существования определенного актива. Обычно списание связано с амортизацией и возмещением стоимости материальных активов.

Метод двойного уменьшения остатка
Double declining balance method
Метод двойного уменьшения остатка - метод начисления амортизации с темпом в два раза бОльшим по сравнению с линейным методом амортизации. При этом начисление амортизации применяется не к первоначальной стоимости, а к ее остатку после списаний, проведенных в предыдущие годы.

Метод суммы чисел
Sun-of-the year's digits method
Метод суммы чисел - в широком смысле - метод систематического списания некоторой суммы в течение T лет с использованием множителя, который вычисляется как отношение числа лет до окончания периода к сумме 1+2+...+T.
Метод суммы чисел - в узком смысле - метод ускоренной амортизации.

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

Принцип половины года
Half-year convention
Принцип половины года - метод начисления амортизации, согласно которому износ по всем активам, купленным в течение года, рассчитывается, как если бы они были куплены в середине года.

Ускоренная амортизация
Accelerated depreciation
Ускоренная амортизация - методы начисления амортизации, при которых стоимость актива списывается более быстрыми темпами по сравнению с линейным методом амортизации. Обычно такие методы используются при расчете налогооблагаемой прибыли.

А что нам предлагает 1C?

283_1.gif (3217 b)

Если Вам нужен другой, то придется реализовывать самим.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 284 - Как делал я

Шаг 284 - Как делал я

Самое первое я перенес все перечисления. Потом перенес справочники и их наполнение. Потом перенес справочник основные средства остатками на 31.12.2001. Если Вы в данный момент пытаетесь ввести основные средства, то я очень рекомендую повторить все за 2002 год. Это связано с налоговым учетом. Ну, да ладно это потом. Итак ввели остатки. Остатки по счету 01.1 – то есть первоначальная стоимость и 02.1 начисленная амортизация.

284_1.gif (20896 b)

Дальше пришлось добавить в глобальный модуль функции необходимые для работы со справочниками. Мы их посмотрим. Но вот на что я потратил очень много времени это на поиск таблицы отчета ОС-6. Вся фишка в том, что в конфигурации есть общие таблицы.

284_2.gif (6525 b)

Тут спрятано много стандартных отчетов.

284_3.gif (10090 b)

Их по мере необходимости нужно перенести в Вашу конфигурацию. Но в данный момент как минимум ОС-6.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 285 - Изучаем справочник основные средства

Шаг 285 - Изучаем справочник основные средства

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

285_1.gif (12768 b)

Какие-либо цифры при построении этой карточки Вы увидите только, если у Вас занесены остатки на счета 01.1 и 02.1 ("Шаг 274 - Что такое – основные средства", "Шаг 284 - Как делал я"). В результате нажатия на кнопку построится вот такой отчет.

285_2.gif (11760 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 286 - Что происходит при нажатии на кнопку инвентарной карточки?

Шаг 286 - Что происходит при нажатии на кнопку инвентарной карточки?

Посмотреть это можно в конфигураторе. Открываем справочник и переходим на основную форму списка.

286_1.gif (1777 b)

Здесь мы увидим форму справочника, которую видим при открытии. Можно выяснить какая функция вызывается при нажатии на эту кнопку.

286_2.gif (4990 b)

Ага, функция Печать. Попробуем ее найти.

286_3.gif (8687 b)

Есть такая. Итак, давайте будем ее разбирать как она работает. Первое с чем мы встретимся это с функций Текущий элемент.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 287 - Изучаем справочники ТекущийЭлемент

Шаг 287 - Изучаем справочники ТекущийЭлемент

Итак, мы посмотрели, что в прошлом шаге первым идет вызов функции Текущий элемент. Вот ее описание.

ТекущийЭлемент
Получить значение элемента справочника.

Синтаксис:

ТекущийЭлемент()

Англоязычный синоним:

Currentltem

Возвращаемое значение:
Значение элемента справочника.

Описание:
Метод ТекущийЭлемент возвращает значение элемента справочника в целом, как объекта. Данный метод применяется, например, если нужно элемент справочника передать как параметр в вызове какого-либо метода или присвоить какому-либо реквизиту.

Отлично. Данный метод получает элемент справочника.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 288 - Изучаем справочник- Это Группа

Шаг 288 - Изучаем справочник- Это Группа

Вторым действием производится проверка на группу. Карточку нельзя сформировать по группе.

ЭтоГруппа
Проверить принадлежность к группам.

Синтаксис:

ЭтоГруппа()

Англоязычный синоним:

IsGroup

Возвращаемое значение:
Числовое значение: 1 — если выбранный элемент справочника является группой , 0 — если выбранный элемент справочника обычный элемент.

Описание:
Метод ЭтоГруппа возвращает числовое значение 1 — если выбранный элемент справочника является группой , 0 — если выбранный элемент справочника обычный элемент.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 289 - А теперь все вместе

Шаг 289 - А теперь все вместе

Смотрим начальные проверки отчета ОС-6:

Процедура Печать()
     Если ТекущийЭлемент().Выбран() = 0 Тогда
         Предупреждение("Нельзя сформировать инвентарную карточку, не указав Основное средство.
                              |Введите Основное средство.");
     ИначеЕсли ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
         Предупреждение("Нельзя сформировать инвентарную карточку для группы Основных средств.
                              |Выберите конкретное Основное средство.");
     Иначе
        Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ОС-6");
    ......

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

ИсходнаяТаблица
Переназначить исходную таблицу.

Синтаксис:

ИсходнаяТаблица(<Строка>)

Англоязычный синоним:

SourceTable

Параметры:
<Строка> Строковое выражение, содержащее имя исходной таблицы формы, определенное в конфигураторе, или имя файла, содержащего таблицу.

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

В данном случае таблица ОС-6, которая находится в глобальных таблицах (подробнее "Шаг 284 - Как делал я").


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 290 - Объект работы с периодическими реквизитами

Шаг 290 - Объект работы с периодическими реквизитами

Мы уже знакомились с реализацией периодических реквизитов:

  • "Шаг 189 - Изучаем справочник – периодический реквизит"
  • "Шаг 190 - Изучаем константы – Они тоже бывают периодические"
  • "Шаг 191 - Изучаем периодическую константу"

Но пока не смотрели как осуществляется программная работа с периодическими реквизитами за исключением констант.

  • "Шаг 192 - Изучаем константы – Получить"
  • "Шаг 193 - Установка константы – Установить"

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

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

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

Так как многие реквизиты справочника ОсновныеСредства периодические создается объект для работы с этими реквизитами.

Процедура Печать()
    Если ТекущийЭлемент().Выбран() = 0 Тогда
        Предупреждение("Нельзя сформировать инвентарную карточку, не указав Основное средство.
                        |Введите Основное средство.");
    ИначеЕсли ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
        Предупреждение("Нельзя сформировать инвентарную карточку для группы Основных средств.
                        |Выберите конкретное Основное средство.");
     Иначе
        Таб = СоздатьОбъект("Таблица");
        Таб.ИсходнаяТаблица("ОС-6");
        ИсторияИзмененияСостояний = СоздатьОбъект("Периодический");
    ........


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 292 - Изучаем периодический - Выбираем значения

Шаг 292 - Изучаем периодический - Выбираем значения

Получаем значения периодического реквизита:

......
ИсторияИзмененияСостояний = СоздатьОбъект("Периодический");
    ИсторияИзмененияСостояний.ИспользоватьОбъект("Состояние", ТекущийЭлемент());
    ИсторияИзмененияСостояний.ВыбратьЗначения();
......

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

ВыбратьЗначения
Открыть выборку периодических значений по датам.

Синтаксис:

ВыбратьЗначения(<ДатаНачала>, <ДатаКонца>)

Англоязычный синоним:

Selectltems

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

Возвращаемое значение:
Число: 1 — если вызов метода закончился успешно, 0 — если нет.

Описание:
Метод ВыбратьЗначения предоставляет возможность (открывает выборку) выбирать периодические значения при помощи метода ПолучитьЗначение.
Дальнейшая выборка при помощи метода ПолучитьЗначение будет происходить среди периодических значений текущего объекта применения, заданного методом ИспользоватьОбъект.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 294 - Изучаем периодический реквизит – ПолучитьЗначение

Шаг 294 - Изучаем периодический реквизит – ПолучитьЗначение

История жизни Основного средства эта история изменения реквизита периодический. Мы должны получить все его значения.

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

Для этого используется функция ПолучитьЗначение.

ПолучитьЗначение
Получить из выборки следующее периодическое значение.

Синтаксис:

ПолучитьЗначение()

Англоязычный синоним:

GetValue

Возвращаемое значение:
Число: 1 — если элемент выбран успешно, 0 — если элемент не выбран (отсутствует).

Описание:
Метод ПолучитьЗначение выбирает периодическое значение в последовательности выборки, открытой перед этим при помощи метода ВыбратьЗначения или ВыбратьПоДокументу. Само полученное значение следует считывать из атрибута Значение. Дату этого значения можно считать из атрибута ДатаЗнач. Если значение периодического реквизита установлено документом, то этот документ можно получить при помощи метода ТекущийДокумент. Метод ТекущийОбъект позволит определить значение текущего элемента справочника, а метод ТекущийРеквизит — определить наименование текущего реквизита справочника.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 295 - Изучаем периодический – ТекущийДокумент

Шаг 295 - Изучаем периодический – ТекущийДокумент

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

295_1.gif (3813 b)

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

ТекущийДокумент
Возвращает документ, который установил значение периодического реквизита справочника.

Синтаксис:

ТекущийДокумент()

Англоязычный синоним:

Current Document

Возвращаемое значение:
Документа, который задал значение периодического реквизита справочника.

Описание:
Метод ТекущийДокумент возвращает документ, который задал значение периодического реквизита справочника. Метод используется после получения очередного значения из выборки (см. метод ПолучитьЗначение).

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 296 - А действительно документ был выбран?

Шаг 296 - А действительно документ был выбран?

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

Выбран
Возвратить флаг выбора документа.

Синтаксис:

Выбран()

Англоязычный синоним:

Selected

Возвращаемое значение:
Числовое значение: 1 — если документ выбран, 0 — если документ не выбран.

Описание:
Метод Выбран позволяет проверить сам факт позиционирования объекта типа документ.
Вот мы и проверяем был ли выбран документ функцией ТекущийДокумент.

Пока ИсторияИзмененияСостояний.ПолучитьЗначение() = 1 Цикл
ИстДок = ИсторияИзмененияСостояний.ТекущийДокумент();
Если ИстДок.Выбран() = 1 Тогда


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 297 - Получаем ссылки на основные документы или все вместе

Шаг 297 - Получаем ссылки на основные документы или все вместе

Теперь настало время посмотреть весь код вместе:

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

Здесь практически все понятно. Создаем объект периодический реквизит. Выбираем состояние основного средства. Бежим по состояниям. Смотрим, какой документ был связан с изменением состояния основного средства. И если есть документы изменения состояния, то запоминаем их в отдельные переменные для дальнейшего использования. Например в отчете ОС-6.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 298 - Дальше и дальше

Шаг 298 - Дальше и дальше

Дальше производятся практически одинаковые действия.

........
Если ТипЗначенияСтр(ДокументПоступления) = "Документ" Тогда
    ДокументаПоступленияДата = ДокументПоступления.ДатаДок;
    ДокументаПоступленияНомер = ДокументПоступления.НомерДок;
Иначе
    ДокументаПоступленияДата = "";
    ДокументаПоступленияНомер = "";
КонецЕсли;
Если ТипЗначенияСтр(ДокументВводаВЭксплуатацию) = "Документ" Тогда
    ДокументВводаВЭксплуатациюДата = ДокументВводаВЭксплуатацию.ДатаДок;
    ДокументВводаВЭксплуатациюНомер = ДокументВводаВЭксплуатацию.НомерДок;
Иначе
    Если ПустоеЗначение(ДатаВводаВЭксплуатацию) = 0 Тогда
        ДокументВводаВЭксплуатациюДата = ДатаВводаВЭксплуатацию;
    Иначе
        ДокументВводаВЭксплуатациюДата = "";
    КонецЕсли;
    ДокументВводаВЭксплуатациюНомер = "";
КонецЕсли;
Если ТипЗначенияСтр(ДокументВыбытия) = "Документ" Тогда
    ДокументВыбытияДата = ДокументВыбытия.ДатаДок;
    ДокументВыбытияНомер = ДокументВыбытия.НомерДок;
Иначе
    ДокументВыбытияДата = "";
    ДокументВыбытияНомер = "";
КонецЕсли;
.......

Мы получаем даты этих документов, но сначала проверяем, что получена именно ссылка на документ при помощи функции ТипЗначенияСтр.

ТипЗначенияСтр
Получить строковое обозначение типа данных.

Синтаксис:

ТипЗначенияСтр(<3начение>)

Англоязычный синоним:

ValueTypeStr

Параметры:
<3начение> Выражение, тип данныхзначения которого надо определить.

Возвращаемоезначение:
Функция возвращает строковое значение в русскоязычном или в англоязычном написании — в зависимости от текущей установки основного языка конфигурации:

Русскоязычное		Англоязычное		Описание
Неизвестный Объект		UnknownObject		неопределенный типданных;
Число			Number			числовой тип данных;
Строка			String			строковый тип данных;
Дата			Date			тип данных — дата;
Перечисление		Enum			агрегатный тип данных Перечисление;
Справочник		Reference			агрегатный тип данных Справочник;
Документ			Document			агрегатный тип данных Документ;
Регистр			Register			агрегатный тип данных Регистр;
Календарь			Calendar			агрегатный тип данных <Календарь>;
ВидРасчета		Calculation		агрегатный тип данных <ВидРасчета>;
ЖурналРасчетов		CalcJournal		агрегатный тип данных <ЖурналРасчетов>;
ПланСчетов		ChartOfAccounts		агрегатный тип данных <ПланСчетов>;
Счет			Account			агрегатный тип данных <Счет»,
Операция			Operation			агрегатный тип данных <Операция>;
КорректныеПроводки		CorrectEntries		агрегатный тип данных <КорректныеПроводки>;
БухгалтерскиеИтоги		BookkeepingTotals		агрегатный тип данных <БухгалтерскиеИтоги>;
Таблица			Table			агрегатный тип данных <Таблица>;
Текст			Text			агрегатный тип данных <Текст>;
Запрос			Query			агрегатный тип данных <Запрос>;
СписокЗначений		ValueList			агрегатный тип данных <СписокЗначений>;
ТаблицаЗначений		ValueTable		агрегатный тип данных <ТаблицаЗначений>;
Периодический		Рег1odic			агрегатный тип данных <Периодический>;
Картинка			Picture			агрегатный тип данных <Картинка>;
ГрупповойКонтекст		GroupContext		локальный контекст программногомодуля, передаваемый при помощи ключевого слова
                        Контекстили возвращаемый методомОткрытьПодбор;
OLE			OLE			OLE-объект;

Описание:
Функция ТипЗначенияСтр определяет, к какому типу данных принадлежит переданный параметр <3начение> и возвращает соответствующе строковое значение. Название агрегатного типа данных передается либо в русском либо в английском написании — в зависимости от текущей установки основного языка конфигурации.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 299 - Производим расчет бух итогов

Шаг 299 - Производим расчет бух итогов

Дальше нам нужно получить бух итоги на рабочею дату.

......
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.Рассчитать(, РабочаяДата(), "01.1, 03.1, 03.2, 03.3, 03.4, 02.1, 02.2, 001, 010, 011",,,);
......

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

РабочаяДата
Установить/получить текущую рабочую дату.

Синтаксис:

РабочаяДата(<Дата>,<РежимСменыРабДаты>)

Англоязычный синоним:

WorkingDate

Параметры:
<Дата> Необязательный параметр. Выражение типа дата.
<РежимСменыРабДаты> Необязательный параметр. Режима втоматической смены рабочей даты в полночь: 0 — не менять; 1 — менять с предупреждением; 2 — менять автоматически без предупреждения. Если параметр неуказан, то режим не меняется и действует установка, выбранная в параметрахсистемы.

Возвращаемое значение:
Значение текущей рабочей даты (на момент до выполнения функции).

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

299_1.gif (6160 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 300 - Объект список значений

Шаг 300 - Объект список значений

Дальше используется объект список значений.

СписокСчетов = СоздатьОбъект("СписокЗначений");
    СписокСчетов.ДобавитьЗначение("01.1");
    СписокСчетов.ДобавитьЗначение("03.1");
    СписокСчетов.ДобавитьЗначение("03.2");
    СписокСчетов.ДобавитьЗначение("03.3");
    СписокСчетов.ДобавитьЗначение("03.4");
    СписокСчетов.ДобавитьЗначение("001");
    СписокСчетов.ДобавитьЗначение("011");

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

Чтобы вызвать метод объекта, имя метода (с указанием необходимых параметров) пишется через точку после имени объекта.

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

Если не умничать это массив. В массив добавляются значения.

ДобавитьЗначение
Добавить значение в список.

Синтаксис:

ДобавитьЗначение(<Значение>, <Строка>)

Англоязычный синоним:

AddValue

Параметры:
<Значение>
Выражение со значением, которое добавляется в список.
<Строка>
Необязательный параметр. Строковое выражение, содержащее задаваемое символьное представление добавляемого значения. По умолчанию принимает стандартное в системе 1С:Предприятие символьное представление объекта.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 301 - Изучаем СписокЗначений – получаем размер

Шаг 301 - Изучаем СписокЗначений – получаем размер

Для организации цикла по списку нам нужно как-то знать его размер. Получить его можно с помощью специальной функции.

РазмерСписка
Определить размер списка.

Синтаксис:

РазмерСписка()

Англоязычный синоним:

GetListSize

Возвращаемое значение:
Числовое значение — количество элементов в списке.

Описание:
Метод РазмерСписка позволяет определить общее количество элементов в списке.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 302 - Изучаем список – получаем значение по индексу

Шаг 302 - Изучаем список – получаем значение по индексу

Но получить размер это еще не получить значение. Смотрим как получается значение.

ПолучитьЗначение
Получить значение элемента по номеру в списке.

Синтаксис:

ПолучитьЗначение(<Позиция>, <Перем>)

Англоязычный синоним:

GetValue

Параметры:
<Позиция>
Числовое выражение — номер элемента в списке, значение которого будет возвращено. Номер позиции может быть от 1 до количества элементов в списке.
<Перем>
Идентификатор переменной, в которую будет возвращено строковое выражение, содержащее символьное представление получаемого значения.

Возвращаемое значение:
Полученное значение из списка.

Описание:
С помощью метода ПолучитьЗначение можно получить значение элемента, находящегося в указанной позиции списка.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 303 - Как получают балансовую стоимость основного средства

Шаг 303 - Как получают балансовую стоимость основного средства

Смотрим код в стандартной конфигурации.

.....
БалансоваяСтоимость = 0;
Индекс = 1;
Пока (Индекс <= СписокСчетов.РазмерСписка()) и (БалансоваяСтоимость = 0) Цикл
    СубСчет = СписокСчетов.ПолучитьЗначение(Индекс);
    БалансоваяСтоимость = Ит.СКД(СубСчет, "С",, ТекущийЭлемент());
    Индекс = Индекс + 1;
КонецЦикла;
Если БалансоваяСтоимость = 0 Тогда
    СубСчет = "";
КонецЕсли;
........

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 304 - Как получается амортизация

Шаг 304 - Как получается амортизация

Следующими строками извлекается амортизация.

......
Если (СубСчет = "01.1") или (Лев(СубСчет, 2) = "03") Тогда
    Если ТекущийЭлемент().Группа = Перечисление.ГруппыОС.ЗемельныеУчастки Тогда
        НачисленнаяАмортизация = "";
        //ИначеЕсли ТекущийЭлемент().Группа = Перечисление.ГруппыОС.ЖилищныйФонд Тогда
        //     НачисленнаяАмортизация = Ит.СКД("010", "С",, ТекущийЭлемент());
    ИначеЕсли ТекущийЭлемент().Группа = Перечисление.ГруппыОС.ОбъектыПриродопользования Тогда
        НачисленнаяАмортизация = "";
    Иначе
        НачисленнаяАмортизация = Ит.СКК("02.1", "С",, ТекущийЭлемент());
    КонецЕсли;
Иначе
    НачисленнаяАмортизация = "";
КонецЕсли;

Если ТекущийЭлемент().СпособНачисленияАмортизации = Перечисление.СпособыНачисленияАмортизацииОС.Линейный Тогда
    НормаАмортизации = ТекущийЭлемент().КоэффициентАмортизации.Получить(КонМесяца());
Иначе
    НормаАмортизации = "";
КонецЕсли;
.......

Итак, если счет 01.1 счет относится к группе 03, то получается амортизация по счету 02.1, иначе ее просто нет. Для линейного способа можно получить коэффициент амортизации. Тут используется функция Лев. Вот она.

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

Синтаксис:

Лев(<Строка>,<Число>)

Англоязычныйсиноним:

Left

Параметры:
<Строка> Строковое выражение.
<Число> Числовое выражение.

Возвращаемоезначение:
Строковое значение.

Описание:
Функция Лев получает в качестве параметра строку, выбирает первые слева символы строки, числом равные<Число>,и возвращает в качестве значения результирующую строку.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 305 - Что такое шифр по Шифр По ЕНАОФ

Шаг 305 - Что такое шифр по Шифр По ЕНАОФ

Это специальный справочник, в котором проставлены нормы амортизации по амортизационным группам. В типовой конфигурации есть справочник по этому поводу.

305_1.gif (4255 b)

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

305_2.gif (8862 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 306 - Что в конце процедуры печати ОС-6

Шаг 306 - Что в конце процедуры печати ОС-6

Дальше получаются все необходимые дополнительные сведения:

......
    Если ТекущийЭлемент().ШифрПоЕНАОФ.Выбран() = 1 Тогда
        КодНормы = ТекущийЭлемент().ШифрПоЕНАОФ.Код;
    Иначе
        КодНормы = "";
    КонецЕсли;

    Если ТекущийЭлемент().СчетЗатрат.Получить(РабочаяДата()).Выбран() = 1 Тогда
        КодСчетаЗатрат = ТекущийЭлемент().СчетЗатрат.Получить(РабочаяДата()).Код;
    Иначе
        КодСчетаЗатрат = "";
    КонецЕсли;

    Таб.Вывести();
    Таб.ТолькоПросмотр(1);
    Таб.ПараметрыСтраницы(2,,,,,,,,,,,);
    Таб.Опции(0,0,0,0,"ОпцииПечатиОС6","ОкноОС6");
    Таб.Показать("Инвентарная карточка");
КонецЕсли;
КонецПроцедуры  //Печать
......

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

306_1.gif (8592 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 307 - Как вводятся в эксплуатацию основные средства

Шаг 307 - Как вводятся в эксплуатацию основные средства

Основные средства попадают на счет 01 не сразу. В бухгалтерии есть счет для временной передержки основного средства до ввода его в эксплуатацию – 08.4.

307_1.gif (1946 b)

То есть после оплаты с расчетного счета или на основе авансового отчета денежные средства переводятся на этот счет. А вот дальше на основе акта о вводе в эксплуатацию они поступают на счет 01. В типовой конфигурации есть документ ВводВЭксплуатациюОС.

307_2.gif (1898 b)

Данный документ как раз и позволяет перевести основное средство с 08.4 на 01, и тем самым сделать доступным для начисления амортизации. Добраться до него можно из журнала учета ОС.

307_3.gif (7574 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 308 - Изучаем ввод в эксплуатацию - кредит

Шаг 308 - Изучаем ввод в эксплуатацию - кредит

Первое, что мы увидим на форме Вид вложений.

308_1.gif (9519 b)

На форме это выпадающий список.

308_2.gif (4644 b)

Этот список заполняется при открытии формы.

Процедура ПриОткрытии()
.........
СписокВидовВложений.ДобавитьЗначение(Сч08_1,Сч08_1.Код+" ("+Сч08_1.ПолнНаименование+")");
СписокВидовВложений.ДобавитьЗначение(Сч08_2,Сч08_2.Код+" ("+Сч08_2.ПолнНаименование+")");
СписокВидовВложений.ДобавитьЗначение(Сч08_3,Сч08_3.Код+" ("+Сч08_3.ПолнНаименование+")");
СписокВидовВложений.ДобавитьЗначение(Сч08_4,Сч08_4.Код+" ("+Сч08_4.ПолнНаименование+")");
.........
КонецПроцедуры //ПриОткрытии()

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

308_3.gif (1413 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 309 - Как организовать реквизит полное наименование в плане счетов

Шаг 309 - Как организовать реквизит полное наименование в плане счетов

В плане счетов в типовой конфигурации есть реквизит полное наименование. Этот реквизит был использован в прошлом шаге для заполнения списка для ввода основного средства в эксплуатацию. Итак, мы добавим реквизит.

309_1.gif (1451 b)

Несмотря на его появление при редактировании плана счетов в конфигураторе мы его не увидим.

309_2.gif (10064 b)

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

309_3.gif (16056 b)

В форме списка добавить необходимые поля.

309_4.gif (8934 b)

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

309_5.gif (5025 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 310 - Что происходит при открытии ВводВЭксплуатациюОС

Шаг 310 - Что происходит при открытии ВводВЭксплуатациюОС

Смотрим код:

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

    ПриЗаписиПерепроводить(1);
.......

Тут же и нам неизвестная функция.

ПриЗаписиПерепроводить
Установить режим обязательного перепроведения документа при записи.

Синтаксис:

ПриЗаписиПерепроводить(<Режтл>)

Англоязычный синоним:

ReMakeActionsWhenWrite

Параметры:
<Режим> Числовое выражение: 1 — устанавливает флаг обязательного перепроведения при записи уже проведенного документа; 0 — снимает флаг обязательного перепроведения при записи уже проведенного документа.

Описание:
Метод ПриЗаписиПерепроводить устанавливает режим обязательного перепроведения при записи ранее проведенного документа (интерактивный отказ от проведения документа или ошибка модуля приведет к отмене записи отредактированного документа).

Данный метод доступен только в контексте Модуле формы документа (см. Виды программных модулей). Действие данного метода относится только к текущему документу, который доступен в локальном контексте Модуля формы.

Все ясно, созданный и сохраненный документ должен быть обязательно проведен.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 311 - Что происходит при открытии ВводВЭксплуатациюОС – Дальше

Шаг 311 - Что происходит при открытии ВводВЭксплуатациюОС – Дальше

Смотрим дальше:

Процедура ПриОткрытии()
    ПриЗаписиПерепроводить(1);
    глПроверкаРазрешенияРедактирования(Контекст);
    ....

Дальше вызывается функция глобального модуля. Вот она:

Процедура глПроверкаРазрешенияРедактирования(Конт) Экспорт
    Если Конт.Выбран() = 1 Тогда
        Если (Конт.ДатаДок <= Константа.ДатаЗапретаРедактирования) и (Конт.Форма.ТолькоПросмотр() = 0) Тогда
            Конт.Форма.ТолькоПросмотр(1);
            Предупреждение("Разрешен только просмотр документа!", 4);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Здесь идет проверка на разрешение редактирования документа. Для учета по какой дате документ можно редактировать в типовой конфигурации заведена константа ДатаЗапретаРедактирования:

311_1.gif (2114 b)

Если дата документа меньше этой константы, то редактировать документ нельзя. Только смотреть.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 312 - Что происходит при открытии ВводВЭксплуатациюОС – Все вместе

Шаг 312 - Что происходит при открытии ВводВЭксплуатациюОС – Все вместе

Смотрим весь код:

Процедура ПриОткрытии()
    ПриЗаписиПерепроводить(1);
    глПроверкаРазрешенияРедактирования(Контекст);
    Если Форма.ТолькоПросмотр() = 1 Тогда
        Форма.КнопкаЗаписать.Доступность(0);
        Форма.КнопкаОК.Доступность(0);
        Форма.КнопкаОбъемаВложений.Доступность(0);
    КонецЕсли;

    НачальнаяДатаДокумента = ДатаДок;

    Сч08_1 = СчетПоКоду("08.1");
    Сч08_2 = СчетПоКоду("08.2");
    Сч08_3 = СчетПоКоду("08.3");
    Сч08_4 = СчетПоКоду("08.4");
    СписокВидовВложений.ДобавитьЗначение(Сч08_1,Сч08_1.Код+" ("+Сч08_1.ПолнНаименование+")");
    СписокВидовВложений.ДобавитьЗначение(Сч08_2,Сч08_2.Код+" ("+Сч08_2.ПолнНаименование+")");
    СписокВидовВложений.ДобавитьЗначение(Сч08_3,Сч08_3.Код+" ("+Сч08_3.ПолнНаименование+")");
    СписокВидовВложений.ДобавитьЗначение(Сч08_4,Сч08_4.Код+" ("+Сч08_4.ПолнНаименование+")");
    СписокВидовВложений.ТекущаяСтрока(ВидВложений);

    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение("Основные средства");
    Форма.Закладки.ДобавитьЗначение("Общие сведения");
    Форма.Закладки.ДобавитьЗначение("Бухгалтерский учет");
    Форма.Закладки.ДобавитьЗначение("Налоговый учет");
    ПриВыбореЗакладки(, "Основные средства");

КонецПроцедуры //ПриОткрытии()

Итак, запретили сохранять без проведения. Проверили разрешение на редактирование документа. Заполнили выпадающий список кредитовыми счетами. Дальше настроили закладки. Вот практически и все, что делается при открытии формы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 313 - Что происходит при выборе вида вложений

Шаг 313 - Что происходит при выборе вида вложений

При выборе из выпадающего списка вида вложений вызывается процедура ПриВыбореВидаВложений:

313_1.gif (11604 b)

Вот она:

Процедура ПриВыбореВидаВложений()
    ВидВложений = СписокВидовВложений.ТекущаяСтрока();
КонецПроцедуры //ПриВыбореВидаВложений()

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

313_2.gif (13818 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 314 - Что такое объект внеоборотных активов

Шаг 314 - Что такое объект внеоборотных активов

Давайте рассмотрим смысл объекта внеоборотных активов.

314_1.gif (4212 b)

Это субконто счета 08.4. Создавать этот объект нужно при заполнении документа поступления ОС.

314_2.gif (13106 b)

В результате данный объект появляется на 08.4

314_3.gif (9046 b)

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

314_4.gif (9647 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 315 - Осторожно – основные средства и периодические реквизиты

Шаг 315 - Осторожно – основные средства и периодические реквизиты

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

315_1.gif (3152 b)

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

315_2.gif (4553 b)

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

315_3.gif (7574 b)

А не на текущую. Изменяя справочник основных средств нужно постоянно помнить об этом. Какая дата изменений и на какую дату будут изменения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 316 - А что, если уже сделали ?

Шаг 316 - А что, если уже сделали ?

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

ТекущаяДата
Возвратить текущую дату.

Синтаксис:

ТекущаяДата()

Англоязычный синоним:

CurDate

Возвращаемое значение:
Результирующая дата.

Описание:
Функция ТекущаяДата возвращает текущую (системную) дату. Возвращаемое значение — результирующая дата.

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

Процедура ПриОткрытии()
    ДатаПолучения=ТекущаяДата();
КонецПроцедуры

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 317 - Изучаем периодический – Значение на дату

Шаг 317 - Изучаем периодический – Значение на дату

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

ЗначениеНаДату
Получить актуальное значение на заданную дату.

Синтаксис:

ЗначениеНаДату(<Дата>)

Англоязычный синоним:

ValueOnDate

Параметры:
<Дата> Выражение, задающее значение даты, на которую требуется получить периодический реквизит справочника или периодическую константу.

Возвращаемое значение:
Полученное актуальное значение на заданную дату.

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

Я написал функцию, которая получает значение периодического:

Процедура ПолучениеЗначенияПереодического(ИмяРеквизита)
    ПереодическийЭлемент=СоздатьОбъект("Периодический");
    ПереодическийЭлемент.ИспользоватьОбъект(ИмяРеквизита, Спр.ТекущийЭлемент());
    ЗначениеРеквизита=ПереодическийЭлемент.ЗначениеНаДату(ДатаПолучения);
КонецПроцедуры

Эта функция заполняет переменные модуля.

Перем ПереодическийЭлемент;
Перем Спр;
Перем ЗначениеРеквизита;

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

Процедура Выполнить()
    Перем Т;
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");

    Спр =СоздатьОбъект("Справочник.ОсновныеСредства");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()>0 Цикл
        ПолучениеЗначенияПереодического("МОЛ");
        МолТек=ЗначениеРеквизита;
        ЛиквидацияОшибкиПереодического(МолТек);

        ПолучениеЗначенияПереодического("Подразделение");
        ПодразделениеТек= ЗначениеРеквизита;
        ЛиквидацияОшибкиПереодического(ПодразделениеТек);

        ПолучениеЗначенияПереодического("Состояние");
        СостояниеТек= ЗначениеРеквизита;
        ЛиквидацияОшибкиПереодического( СостояниеТек);

        ПолучениеЗначенияПереодического("СчетЗатрат");
        СчетЗатратТек= ЗначениеРеквизита;
        ЛиквидацияОшибкиПереодического(СчетЗатратТек);

        ПолучениеЗначенияПереодического("СрокПолезногоИспользования");
        СрокПолезногоИспользованияТек= ЗначениеРеквизита;
        ЛиквидацияОшибкиПереодического( СрокПолезногоИспользованияТек);

        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 318 - Ликвидируем ошибку

Шаг 318 - Ликвидируем ошибку

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

Процедура ЛиквидацияОшибкиПереодического(Значение)
    ПереодическийЭлемент.ВыбратьЗначения();
    Пока ПереодическийЭлемент.ПолучитьЗначение() = 1 Цикл
        ПереодическийЭлемент.Удалить();
    КонецЦикла;
    ......
КонецПроцедуры

Здесь нам только функция удалить не известна.

Удалить
Удалить периодическое значение.

Синтаксис:

Удалить()

Англоязычный синоним:

Delete

Возвращаемое значение:
Число: 1 — если вызов метода закончился успешно, 0 — если нет.

Описание:
Метод Удалить удаляет периодическое значение на заданную дату. До вызова данного метода атрибут ДатаЗнач должен содержать дату удаляемого периодического значения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 319 - Сохраняем переодический

Шаг 319 - Сохраняем переодический

После удаления нам осталось только записать периодический реквизит заново. Смотрим весь код функции ликвидации ошибки.

Процедура ЛиквидацияОшибкиПереодического(  Значение)
    ПереодическийЭлемент.ВыбратьЗначения();
    Пока  ПереодическийЭлемент.ПолучитьЗначение() = 1 Цикл
        ПереодическийЭлемент.Удалить();
    КонецЦикла;
    ПереодическийЭлемент.Значение=Значение;
    ПереодическийЭлемент.ДатаЗнач=ДатаУстановки;
    ПереодическийЭлемент.Записать();
КонецПроцедуры

Заполняем значение, на какую дату и записываем.

Записать
Записать (обновить) периодическое значение.

Синтаксис:

Записать()

Англоязычный синоним:

Write

Возвращаемое значение:
Число: 1 — если вызов метода закончился успешно, 0 — если нет.

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 320 - Как проводится ввод в эксплуатацию

Шаг 320 - Как проводится ввод в эксплуатацию

Итак, смотрим первые строки:

Процедура ОбработкаПроведения(РежимПроведения=0)
    Если РежимПроведения = 1 Тогда
        ОчиститьДвижения("Справочник");
    Иначе
        глКомментарийПроведения("Начало", Контекст);
        ОчиститьДвижения();
......

Мы видим функцию очистить движения. Вот ее описание:

ОчиститьДвижения
Удалить движения документа.

Синтаксис:

ОчиститьДвижения(<ВидыДвижений>)

Англоязычный синоним:

ClearActions

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

  • "Регистр.ХХХХХХ" — движение конкретного регистра, где ХХХХХХ — конкретный вид регистра;
  • "Операция" — бухгалтерская операция;
  • "Справочник" — все изменения периодических реквизитов справочников;
  • "ЖурналРасчетов" — все измененияв журналах расчетов.

Если данный параметр не задан, то производится полная очистка всех движений.

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

Использование данного метода позволяет:

  • допроводить документ, т. е. доделывать движения в добавок к уже существующим;
  • делать движения, анализируя ранее сделанные и уже существующие;
  • выполнять распроведение документа, анализируя существующие движения;
  • не очищать существующие движения при перепроведении, если это не нужно.

Замечание. Данный метод доступен только при отключенном в конфигурации флаге "Автоматическое удаление движений".

Замечание. Данный метод доступен только в контексте Модуле формы документа (см. Виды программных модулей). Действие данного метода относится только к текущему документу, который доступен в локальном контексте Модуля формы документа.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 321 - Как проводится ввод в эксплуатацию, дальше

Шаг 321 - Как проводится ввод в эксплуатацию, дальше

Дальше идет стандартная проверка на ошибки.

Если БалансоваяСтоимость = 0 Тогда
    Сообщение = "Не указана первоначальная стоимость основного средства.";
    глОшибкаПроведения(Контекст, Сообщение);
    СтатусВозврата(0); Возврат;
ИначеЕсли ПустоеЗначение(ОбъектВнеоборотныхАктивов) = 1 Тогда
    Сообщение = "Не указан объект внеоборотных активов.";
    глОшибкаПроведения(Контекст, Сообщение);
    СтатусВозврата(0); Возврат;
ИначеЕсли КоличествоСтрок() = 0 Тогда
    Сообщение = "Не указаны основные средства, вводимые в эксплуатацию.";
    глОшибкаПроведения(Контекст, Сообщение);
    СтатусВозврата(0); Возврат;
КонецЕсли;

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

Процедура глОшибкаПроведения(Конт, Сообщение, НомСтроки=0) Экспорт
    Перем Стр;

    Стр = "";
    Если НомСтроки <> 0 Тогда
        Стр = ", строка № " + НомСтроки;
    ИначеЕсли Конт.НомерСтроки  <> 0 Тогда
        Стр = ", строка № " + Конт.НомерСтроки;
    КонецЕсли;

    НеКомментировать = ВосстановитьЗначение("НеКомментироватьПроведениеДокументов");
    Если НеКомментировать = 1 Тогда
        Сообщить("________________________________________________________________________________");
        Сообщить("Документ "+Конт.ТекущийДокумент()+": проведение документа ("+РабочаяДата()+"/"+ТекущееВремя()+")", "I");
    КонецЕсли;

    Сообщить(Сообщение, "!");
    Сообщить("Документ "+Конт.ТекущийДокумент()+ " не будет проведен.","!");
КонецПроцедуры //глОшибкаПроведения

Как видите эта функция просто формирует строку вывода.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 322 - Как проводится ввод в эксплуатацию, еще дальше

Шаг 322 - Как проводится ввод в эксплуатацию, еще дальше

Дальше формируются номера счетов:

.....
Сч01_1 = СчетПоКоду("01.1");
Сч08 = СчетПоКоду("08." + Строка(ВидВложений));
......

Тут же нам попалась функция строка:

Строка
Преобразовать параметр в строку.

Синтаксис:

Строка(<Параметр>)

Англоязычный синоним:

String

Параметры:
<Параметр> - Выражение.

Возвращаемоезначение:
Строковое значение.

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

Откуда взялся этот вид вложений ? Читайте шаг "Шаг 313 - Что происходит при выборе вида вложений". То есть это номер выбранной строки. Соответственно формируются счета:

08.1
08.2

и так далее.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 323 - Перед проведением сохраняем реквизиты

Шаг 323 - Перед проведением сохраняем реквизиты

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

.........
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Если РежимПроведения <> 1 Тогда
            СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства");
            Если СпрОС.НайтиЭлемент(ОсновноеСредство) = 0 Тогда
                Сообщение = "В стороке №" + НомерСтроки + " не задано основное средство.";
                глОшибкаПроведения(Контекст, Сообщение);
                СтатусВозврата(0);
                Возврат;
            КонецЕсли;

            СпрОС.Группа = Группа;
            СпрОС.ПодлежитАмортизации = ПодлежитАмортизации;
            СпрОС.СпособНачисленияАмортизации = СпособНачисленияАмортизации;
            СпрОС.ОбщийОбъемПродукцииРабот = ОбщийОбъемПродукцииРабот;
            СпрОС.ШифрПоЕНАОФ = ШифрПоЕНАОФ;
            СпрОС.МетодНачисленияАмортизации = МетодНачисленияАмортизации;
            СпрОС.ПервоначальнаяСтоимость = БалансоваяСтоимость;
            СпрОС.ДатаВводаВЭксплуатацию = ДатаДок;
            СпрОС.АмортизационнаяГруппа = АмортизационнаяГруппа;
            СпрОС.ПервоначальнаяСтоимостьН = ПервоначальнаяСтоимостьН;

            Если ПустоеЗначение(СпрОС.ПрочиеСведения) = 1 Тогда
                СпрОС.ПрочиеСведения = ПрочиеСведения;
            КонецЕсли;
            СпрОС.Записать();
        КонецЕсли;

        УстановитьРеквизитСправочника(ОсновноеСредство, "Подразделение", Подразделение, ДатаДок);
        УстановитьРеквизитСправочника(ОсновноеСредство, "МОЛ", МОЛ, ДатаДок);
        УстановитьРеквизитСправочника(ОсновноеСредство, "НачислятьАмортизацию", НачислятьАмортизацию, ДатаДок);
        УстановитьРеквизитСправочника(ОсновноеСредство, "КоэффициентАмортизации", КоэффициентАмортизации, ДатаДок);
        УстановитьРеквизитСправочника(ОсновноеСредство, "СрокПолезногоИспользования", СрокПолезногоИспользования, ДатаДок);
        УстановитьРеквизитСправочника(ОсновноеСредство, "Состояние", Перечисление.СостоянияОС.В_Эксплуатации, ДатаДок);

        Если СписатьНаЗатраты = 0 Тогда
            УстановитьРеквизитСправочника(ОсновноеСредство, "СчетЗатрат", СчетЗатрат, ДатаДок);
            УстановитьРеквизитСправочника(ОсновноеСредство, "Субконто1", Субконто1, ДатаДок, СчетЗатрат.ВидСубконто(1));
            УстановитьРеквизитСправочника(ОсновноеСредство, "Субконто2", Субконто2, ДатаДок, СчетЗатрат.ВидСубконто(2));
            УстановитьРеквизитСправочника(ОсновноеСредство, "Субконто3", Субконто3, ДатаДок, СчетЗатрат.ВидСубконто(3));
        КонецЕсли;

        Если ПринятьК_НалоговомуУчету < 3 Тогда
            УстановитьРеквизитСправочника(ОсновноеСредство, "СрокПолезногоИспользованияН", СрокПолезногоИспользованияН, ДатаДок);
            УстановитьРеквизитСправочника(ОсновноеСредство, "СпециальныйКоэффициент", СпециальныйКоэффициент, ДатаДок);
            УстановитьРеквизитСправочника(ОсновноеСредство, "СчетЗатратН", СчетЗатратН, ДатаДок);
            УстановитьРеквизитСправочника(ОсновноеСредство, "СубконтоН1", СубконтоН1, ДатаДок, СчетЗатратН.ВидСубконто(1));
            УстановитьРеквизитСправочника(ОсновноеСредство, "СубконтоН2", СубконтоН2, ДатаДок, СчетЗатратН.ВидСубконто(2));
            УстановитьРеквизитСправочника(ОсновноеСредство, "СубконтоН3", СубконтоН3, ДатаДок, СчетЗатратН.ВидСубконто(3));
        КонецЕсли;
......

Основа установки реквизитов функция:

УстановитьРеквизитСправочника
Записать значение периодического реквизита справочника с привязкой к документу.

Синтаксис:

УстановитьРеквизитСправочника(<ЭлементСправочника>, <НазваниеРеквизита>,
    <3начение>, <ДатаУстановки>, <ИмяТипа>, <Длина>, <Точность>)

Англоязычный синоним:

SetRefField

Параметры:
<ЭлементСправочника> - Выражение, задающее элемент справочника, в котором требуется записать новое значение периодического реквизита.
<НазваниеРеквизита> - Строковое выражение — название периодического реквизита справочника (как он назван в конфигураторе) в котором требуется записать новое значение периодического реквизита.
<3начение> - Новое значение периодического реквизита.
<ДатаУстановки> - Выражение типа дата, на которую требуется установить новое значение периодического реквизита. Этот параметр имеет смысл только для не оперативных документов и позволяет установить значение на другую дату чем дата документа, но тогда с пустым временем.
<ИмяТипа> - Необязательный параметр. Строковое выражение — название типа данных (или Вид субконто).
<Длина> - Необязательный параметр. Число — длина числового или строкового значения.
<Точность> - Необязательный параметр. Число знаков после десятичной точки для числового значения.

Описание:
Метод УстановитьРеквизитСправочника записывает новое значение периодического реквизита справочника с привязкой к документу. Использование Данного метода позволяет вносить изменения в справочники с привязкой к проведению документа. Это значит, что при удалении или редактировании или отказе от проведения документа все сделанные им изменения в справочнике будут корректно отменены. Средства языка позволяют выбирать такие движеиия справочника по документу или определять документ, который произвел изменения в справочнике (см. Работа с объектом Периодический).

Параметры <ИмяТипа>, <Длина> и <Точность> следует указывать при установке значения периодического реквизита справочника имеющего неопределенный тип.

Данный метод доступен только в контексте Модуля документа в предопределенной процедуре ОбработкаПроведения (см. Гл. Системные предопределенные процедуры).

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 324 - Откуда взялся налоговый учет

Шаг 324 - Откуда взялся налоговый учет

Принципиальное отличие было внесено законом - Федеральный закон от 29 мая 2002 г. №57-ФЗ "О внесении изменений и дополнений в часть вторую Налогового кодекса РФ и в отдельные законодательные акты РФ". Принципиальность заключается в том, что теперь бухгалтерский учет и налоговый учет видится по разным правилам. Например, начисление амортизации по налоговому учету и бухгалтерскому учету могут и будут различаться. С чем это связано наверно понятно. Бухгалтерский учет не позволяет выжать максимум налогов и наверно частично является препятствием для налоговой политики. В течении последнего времени интенсивно проводилось внедрение в бух. Учет налоговых процедур, пример книга продаж – книга покупок. Наверно посмотрев на результаты этих попыток, было принято решение о разделении этих учетов. В любом случае формирование налоговых регистров производится путем повторения бухгалтерский операций только на налоговых счетах. На рисунке ниже приведен пример.

324_1.gif (16007 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 325 - Как организован налоговый учет в 1C

Шаг 325 - Как организован налоговый учет в 1C

Налоговый учет в 1C организован на забалансовых счетах.

325_1.gif (12246 b)

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

Операция.НоваяПроводка();
Операция.НомерЖурнала = "ОС";
Операция.Кредит.Счет = СчетПоКоду("Н01.01");
Операция.Кредит.ОбъектыСтроительства = ОбъектВнеоборотныхАктивов;
Операция.Сумма = ПервоначальнаяСтоимостьН;

Но прежде чем производить операции эти счета нужно создать в плане счетов. А потом ввести начальные остатки. Посмотрите новые конфигурации на сопроводительных дисках и вы найдете обработку Формирование и контроль начальных остатков по налоговым регистрам.

325_2.gif (7081 b)

Эта обработка позволит Вам, например, для основных средств используя сальдовки на счетах 01.1 и 02.1 сформировать сальдовки налоговых регистров Н05.1 и Н05.2.

325_3.gif (6410 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 326 - Удаление проводок, документов, элементов справочников

Шаг 326 - Удаление проводок, документов, элементов справочников

В 1С данное действие производится в два этапа. Сначала устанавливается пометка на удаление.

326_1.gif (5099 b)

В результате элемент помечается на удаление.

326_2.gif (1417 b)

А вот дальше нужно удалить физически. Для этого обязательно нужен монопольный режим. В монопольном режиме нужно выбрать удаление помеченных объектов.

326_3.gif (5201 b)

Появится диалоговое окно. В данном окне будут показаны ссылки на помеченные объекты. Если они есть, то удалить данный элемент нельзя.

326_4.gif (9910 b)

Удалить можно только то, на что нет ссылок.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 327 - Как самим найти ссылки

Шаг 327 - Как самим найти ссылки

Для того, чтобы Вы могли сами находить ссылки есть функция.

НайтиСсылки
Находит ссылки на объекты, переданные в списке значений.

Синтаксис:

НайтиСсылки(<Объекты>,<Ссылки>)

Англоязычный синоним:

FindReferences

Параметры:
<Объекты> - Конкретное значение объекта илиобъект типа СписокЗначений, в котором данной процедуре передаются объекты, по которым надо найти ссылки.
<Ссылки> - Идентификатор объекта типа ТаблицаЗначений, в который данная процедура помещает найденные ссылки на объекты. Таблица значений состоит из 3 колонок: 1. Объект — объект, на который ссылаются; 2. Ссылка — объект, который содержит ссылку; 3. Комментарий — комментарий кссылке.

Описание:
Процедура НайтиСсылки находит ссылки на переданные в списке объекты, и помещает их в таблицу значений.

Поместим в отчет элемент управления выбор номенклатуры:

326_1.gif (5099 b)

И код по формированию отчета:

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");

    Ссылки=СоздатьОбъект("ТаблицаЗначений");
    НайтиСсылки(Товар,Ссылки);
    ........

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 328 - Выбираем строки из таблицы значений

Шаг 328 - Выбираем строки из таблицы значений

Все по накатанной дорожке. Выбираем все записи, потом по одной получаем, привычный нам уже подход. Сначала выбираем все строки.

ВыбратьСтроки
Открывает выборку строк таблицы значений.

Синтаксис:

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

Англоязычный синоним:

SelectLines

Описание:
Метод ВыбратьСтроки предоставляет возможность перебирать строки таблицы значений(открывает выборку). Дальнейшая выборка осуществляется при помощи метода ПолучитьСтроку.

А вот так это выглядит у нас.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Ссылки=СоздатьОбъект("ТаблицаЗначений");
    НайтиСсылки(Товар,Ссылки);
    Ссылки.ВыбратьСтроки();
    .........


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 329 - Получаем строку из таблицы значений

Шаг 329 - Получаем строку из таблицы значений

Так как результат запроса ссылок находится в строках, нам нужно получить каждую строку.

//*******************************************
Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");

    Ссылки=СоздатьОбъект("ТаблицаЗначений");
    НайтиСсылки(Товар,Ссылки);
    Ссылки.ВыбратьСтроки();

    Пока Ссылки.ПолучитьСтроку() = 1 Цикл
        .....
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

Смотрим функцию ПолучитьСтроку.

ПолучитьСтроку
Получить из выборки следующую строку таблицы значений.

Синтаксис:

ПолучитьСтроку()

Англоязычный синоним:

GetLine

Возвращаемое значение:
Число: 1 — если строка выбрана успешно, 0 — если строка невыбрана (выборка закончилась).

Описание:
Метод ПолучитьСтроку выбирает следующую строку таблицы значений в последовательности выборки, открытой перед этим при помощи метода ВыбратьСтроки.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 330 - А вообще, что такое таблица значений ?

Шаг 330 - А вообще, что такое таблица значений ?

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

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 331 - Получаем значения

Шаг 331 - Получаем значения

Нам осталось совсем немного, чтобы получить ссылки. А точнее вывести данные из таблицы значений. Смотрим код:

//*******************************************
Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Ссылки=СоздатьОбъект("ТаблицаЗначений");
    НайтиСсылки(Товар,Ссылки);
    Ссылки.ВыбратьСтроки();

    Пока Ссылки.ВыбратьСтроки() = 1 Цикл
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

Табличная часть.

331_1.gif (3277 b)

Результат по конкретной номенклатуре.

331_2.gif (3471 b)

Осталось только посмотреть описание функции.

ПолучитьЗначение
Получить значение конкретной колонки в данной строке таблицы значений.

Синтаксис:

ПолучитьЗначение(<Строкаgt;,<Колонка>)

Англоязычный синоним:

GetValue

Параметры:
<Строка> Номер строки.
<Колонка> Номер или идентификатор колонки.

Возвращаемое значение:
Значение конкретной колонки в данной строке.

Описание:
Метод ПолучитьЗначение получает значение конкретной колонки в данной строке таблицы значений.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 332 - Много пользователей и администратор

Шаг 332 - Много пользователей и администратор

Представляете ситуацию, когда много пользователей на разных этажах здания, а Вам срочно нужно произвести изменения в конфигурации? Бежать и предупреждать каждого слишком долго. Да и не дело это. Администраторы мы или нет, в конце концов? Стандартного способа вроде в конфигурации нет. Выход только один добавить что-то в конфигурацию для того, чтобы по некоторому событию стало понятно, что 1C нужно прекратить работу. Итак, нам нужно что-то типа таймера. И таймер есть, только называется функция по другому.

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

Синтаксис:

ОбработкаОжидания([<ИмяПроцедуры>],[<ИнтервалВызова>])

Англоязычный синоним:

IdleProcessing
Параметры:
<ИмяПроцедуры> - Необязательный параметр. Строковое выражение — имя процедуры глобального модуля, которая будет вызываться периодически с интервалом времени <ИнтервалВызова>. Тело процедуры <ИмяПроцедуры> должно быть написано разработчиком конфигурации в глобальном программном модуле. Если в качестве параметра передается <пустая строка>, то ранее запущенный процесс прекращается. Если параметр опущен, то данная процедура ОбработкаОжидания просто возвращает имя процедуры глобального модуля, которая назначена для периодического запуска в текущий момент.
<ИнтервалВызова> - Необязательный параметр. Числовое выражение — интервал времени в секундах, с которым периодически будет вызываться процедура глобального модуля <ИмяПроцедуры>. Если в качестве параметра передается0 (ноль), то ранее запущенный процесс прекращается. Если параметр опущен, то данная процедура ОбработкаОжидания просто возвращает имя процедуры глобального модуля, которая назначена для периодического запуска в текущий момент.

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

Описание:
Функция ОбработкаОжидания инициирует периодический вызов процедуры глобального модуля <ИмяПроцедуры> с интервалом времени <ИнтервалВызова>.

Давайте попробуем. Пишем в глобальном модуле:

Процедура Проверка()
    Сообщить("Сработал Таймер");
КонецПроцедуры

ОбработкаОжидания("Проверка",1);

И смотрим, что будет происходить.

332_1.gif (2835 b)

Отлично таймер у нас есть.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 333 - Как прекратить работу системы

Шаг 333 - Как прекратить работу системы

Для прекращения работы системы тоже есть специальная функция. Эта функция прекращает работу конкретной системы.

ЗавершитьРаботуСистемы

Синтаксис:

ЗавершитьРаботуСистемы(<ФлагСохранения>)

Англоязычный синоним:

ExitSystem

Параметры:
<ФлагСохранения> - Необязательный параметр. Флагзапроса сохранения открытых объектов. Если 0, то не запрашивается сохранениене записанных документов, элементов справочников и т. п. Если 1, то сохранение запрашивается. Значение по умолчанию 1.

Описание:
Процедура ЗавершитьРаботуСистемы вызывает завершение работы системы.

Проверить ее работу очень легко. Привязать код к кнопке отчета.

333_1.gif (7115 b)

Запустите конфигурацию, вызовите этот отчет и нажмите на кнопку. 1С выйдет из системы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 334 - А теперь все вместе – Выгоняем пользователей

Шаг 334 - А теперь все вместе – Выгоняем пользователей

Нас осталось только связать вместе шаги:

  • "Шаг 332 - Много пользователей и администратор"
  • "Шаг 333 - Как прекратить работу системы"

Нужно завести какой-то флажок, который будет проверяться и, если он установлен, то произойдет выход из системы. Может реализовать константу НеобходимостьВыхода как числовое значение.

334_1.gif (8658 b)

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

Процедура Проверка()
    Если Константа.НеобходимостьВыхода=1 Тогда
        ЗавершитьРаботуСистемы();
    Конецесли;
КонецПроцедуры

ОбработкаОжидания("Проверка",10);

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 335 - Как работать с метаданными

Шаг 335 - Как работать с метаданными

1С предусматривает объект Метаданные. Это глобальный объект и его нет необходимости создавать. Давайте посмотрим как с этим объектом можно работать. Простой отчет и кнопка сформировать. Допустим получим список справочников

Процедура Сформировать()
    Для Инд = 1 По Метаданные.Справочник() Цикл
        Сообщить(Метаданные.Справочник(Инд));
    КонецЦикла;
КонецПроцедуры

Вот результат:

335_1.gif (1485 b)

Или документы:

Процедура Сформировать()
    Для Инд = 1 По Метаданные.Документ() Цикл
        Сообщить(Метаданные.Документ(Инд));
    КонецЦикла;
КонецПроцедуры

Вот документы:

335_2.gif (1334 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 336 - Журнал и справочник тоже форма

Шаг 336 - Журнал и справочник тоже форма

В стандартной конфигурации Вы можете увидеть разные кнопки в журналах:

336_1.gif (8739 b)

Так же и в справочниках:

336_2.gif (7272 b)

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

336_3.gif (1882 b)

А дальше все как с обычной формой, обработка кнопок, стандартные процедуры. Например, при открытии.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 337 - Делаем закладки в журнале

Шаг 337 - Делаем закладки в журнале

Журнал документов может содержать разные документы. Соответственно довольно красиво когда он поделен на закладки, да еще и удобно. Давайте попробуем. У меня есть книга продаж, в ней много типов документов.

337_1.gif (5009 b)

Я хочу в журнале "книга продаж" сделать закладки по типам. Открываю форму списка:

337_2.gif (1466 b)

Перехватываем процедуру при открытии. Здесь нам нужно сделать закладки. Мы уже их делали, смотрите "Шаг 77 - Изучаем форму – создаем закладки – ИспользоватьЗакладки".

Пишем код:

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1, "Все");
    Форма.Закладки.ДобавитьЗначение(2, "СчФактураВыдачаМатериал");
КонецПроцедуры

Запускаем, смотрим:

337_3.gif (6968 b)

Все нормально только пока не фильтруется. Но с этим разберемся.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 338 - Устанавливаем отбор

Шаг 338 - Устанавливаем отбор

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

УстановитьОтбор
Установить отбор журнала.

Синтаксис:

УстановитьОтбор(<ИмяОтбора>, <3начение0тбора>)

Англоязычный синоним:

SetSelection

Параметры:
<ИмяОтбора> Строковое выражение — имя отбора. Если это значение пустое, то отбор отключается.
<3начениеОтбора> Значение отбора.

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

УстановитьОтбор(<ВедДокумента>)

Параметры:
<ВидДокумента> Строковое выражение — вид документа отбора.

Нам осталось только обработку переключения закладок.

Процедура ПриОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение( "");
    Форма.Закладки.ДобавитьЗначение( "СчФактураВыдачаМатериал");
КонецПроцедуры

Процедура ПриВыбореЗакладки(Ном,Значен)
    УстановитьОтбор(Значен);
КонецПроцедуры

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 339 - Как сделать кнопку выбора периода

Шаг 339 - Как сделать кнопку выбора периода

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

339_1.gif (2080 b)

Основывается эта возможность на процедуре ввести период.

339_2.gif (3407 b)

Вот ее описание:

ВвестиПериод
Ввод периода в виде диалога.

Синтаксис:

ВвестиПериод(<НачалоПериода>,<КонецПериода>,<Подсказка>)

Англоязычный синоним:

InputРеriod

Параметры:
<НачалоПериода> Идентификатор переменной, в которую функция возвращает дату начала периода.
<КонецПериода> Идентификатор переменной, в которую функция возвращает дату конца периода.
<Подсказка> Необязательный параметр. Строковое выражение, содержащее строку, которая будет выводиться в заголовке окна диалога. Если не указано — стандартная подсказка.

Возвращаемое значение:
Числовое значение: 1 — выбор осуществлен , 0 — выбор не осуществлен (пользователем нажата кнопка <Отмена>, клавиша Esc или закрыто окно диалога).

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

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 340 - Первый шаг к своей расшифровке в таблице

Шаг 340 - Первый шаг к своей расшифровке в таблице

В свойствах ячейки таблицы есть понятие расшифровка:

340_1.gif (7416 b)

Здесь указывается функция, которая будет вызываться при запуске таблицы. Давайте создадим ее в модуле формы.

//*******************************************
Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Функция ПроверкаВызова()
    Сообщить("Я вызвана");
КонецФункции

Запустим и посмотрим. Я сделал ссылку на эту функцию в двух ячейках. Во-первых, при загрузке таблицы эта функция будет вызвана, в данном случае две ячейки два раза.

340_2.gif (877 b)

Во-вторых, при подведении к ячейки курсор будет принимать форму, по которой выдается расшифровка.

340_3.gif (1374 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 341 - Подозрение, что 1C пользуется другим конфигуратором

Шаг 341 - Подозрение, что 1C пользуется другим конфигуратором

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

341_1.gif (11869 b)

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

341_2.gif (8184 b)

В тоже время, если создать самим отчет, то форма свойств будет немного другая.

341_3.gif (5015 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 342 - Первый пункт подозрения не оправдался

Шаг 342 - Первый пункт подозрения не оправдался

Привет!

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

С уважением, Роман.

342_1.gif (4576 b)

Идем в вставку текста.

342_2.gif (3732 b)

И щелкаем внутри таблицы.

342_3.gif (3211 b)

У нас появилась новая колонка.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 343 - Что такое ALS файл

Шаг 343 - Что такое ALS файл

Это файл синтаксис помощника. По мере накопления опыта работы с конфигурацией Вы выработаете некоторые навыки, которые неплохо бы иметь под рукой. Можно делать по разному, но можно в формате 1С. Я кстати не совсем понимаю почему 1С не пользуется стандартными технологиями типа HTMLHelp или другими. Но это их право. Файлы справки находятся в каталоге:

Диск:\Program Files\1Cv77\BIN

343_1.gif (2557 b)

Соответственно любой файл ALS, который будет положен сюда станет доступен из синтаксис-помощника. Вот так это будет выглядеть. Не помню уже откуда, но ко мне попал als файл Моисеннко П.П.. Я его положил в каталог и он добавился в список тем синтаксис помощника.

343_2.gif (1812 b)

Сам als - это обычный текстовый фай. Попробуйте его посмотреть в блокноте.

343_3.gif (4650 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 344 - Полное рассеивание подозрений

Шаг 344 - Полное рассеивание подозрений

Кстати, на второй вопрос ответ нашелся так-же быстро.
Открой таблицу любого отчета, теперь меню "Действия" ->
"Свойства формы". Тут выбери "Для ввода данных" и все!
Терерь смотри свойства ячейки...

С уважением, Роман.

Добрый день, Артем!
В балансе отчет используется в виде "таблица в режиме ввода данных".
Увидеть это можно открыв диалог формы и потом Меню->Действия->Свойства
формы. Это помесь диалога и отчета, очень удобно для всяких регламентных
отчетов или скажем когда форму журнала нестандартную хочется сделать.
Правда картинка задается в конфигураторе и добавлять строки динамически уже
нельзя.
С уважением, Градобоев Алексей

Спасибо всем, кто практически моментально среагировал. Мои подозрения были не верны и я правда в данной ситуации просто не разобрался. Открываем таблицу отчета. Выбираем действия – свойства формы.

344_1.gif (7659 b)

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

344_2.gif (7388 b)

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

344_3.gif (5305 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 345 - Что делать когда реквизит не известен

Шаг 345 - Что делать когда реквизит не известен

Много задач сводится к тем, которые нельзя формализовать. Ну, например, ввод остатков. Субконто могут быть разные. Кроме того, если речь заходит о универсальных документах, например авансовый отчет, то в нем могут быть совершенно разные корреспонденции счетов, а у счетов могут быть разные субконто. Как тут поступать? Можно сделать неопределенный реквизит.

345_1.gif (7660 b)

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

НазначитьТип
Назначить тип для реквизита неопределенного вида.

Синтаксис:

НазначитьТип(<ИмяРеквизита>, <ИмяТипа>, <Длина>, <Точность>)

Англоязычный синоним:

SetType

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

Описание:
Метод НазначитьТип позволяет назначить тип для реквизита, которому в конфигураторе назначен тип <Неопределенный>.

Пишем код:

Процедура Изменить()
    Форма.Субконто.НазначитьТип("Справочник.Номенклатура");
КонецПроцедуры

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

345_2.gif (5821 b)

После установки типа субконто уже можно будет выбрать.

345_3.gif (13462 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 346 - А сохранится ли тип в документе

Шаг 346 - А сохранится ли тип в документе

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

346_1.gif (4600 b)

Откроем заново:

346_2.gif (4936 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 347 - Типы субконто в соответствии со счетом

Шаг 347 - Типы субконто в соответствии со счетом

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

347_1.gif (6010 b)

При выборе счета будем устанавливать субконто. Для начала нам нужно получить количество субконто.

КоличествоСубконто
Определяет количество субконто у текущего счета.

Синтаксис:

КоличествоСубконто()

Англоязычный синоним:

SubcontoCount

Возвращаемое значение:
Число — количество видов субконто у текущего счета.

Описание:
Максимальное количество видов субконто, которое можно <прикрепить> к счету, устанавливается в конфигураторе при редактировании свойств планов счетов. Количество субконто, которое реально прикреплено к счету, не может превышать установленного максимального количества.
Метод КоличествоСубконто служит для определения количества видов субконто, прикрепленных к текущему счету в плане счетов.
Необходимо обратить внимание, что все виды субконто, прикрепленные к счету в плане счетов, имеют порядковые номера. Эти номера выдаются в названиях колонок видов субконто в окне редактирования плана счетов; Субконто1, Субконто2 ... Субконто6.
При задании видов субконто для счета их обязательно выстраивать по порядку один за другим: например, к счету могут быть прикреплены субконто таким образом, что их порядковые номера будут 1 и 2. Метод КоличествоСубконто возвращает общее количество видов субконто, прикрепленное к счету (в данном примере — 2), а не максимальное количество возможных видов субконто у счета.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 348 - Получаем вид субконто

Шаг 348 - Получаем вид субконто

Зная сколько у нас субконто мы можем получить вид субконто каждого счета.

ВидСубконто
Устанавливает/возвращает вид субконто счета.

Синтаксис:

ВидСубконто(<НомерСубконто>, <ВидСубконто>, <ТолькоОбороты>)

Англоязычный синоним:

SubcontoKind

Параметры:
<НомерСубконто> Числовое выражение — порядковый номер субконто счета.
<ВидСубконто> Необязательный параметр. Значение типа «Вид субконто», которое должно быть установлено.
<ТолькоОбороты> Необязательный параметр. Числовое значение: 1 или 0. Данный параметр снимает или устанавливает флаг Только обороты для данного субконто счета. Если параметр не используется, то флаг <ТолькоОбороты> не меняется.

Возвращаемое значение:
Значение типа Вид субконто.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 349 - Устанавливаем вид реквизита по счету

Шаг 349 - Устанавливаем вид реквизита по счету

Теперь пора объединить все наши знания. Вот код установки реквизитов:

Процедура ПриВыбореСчета()
Перем х;
х=ВыбранныйСчет.КоличествоСубконто();
Если х>0 тогда
    Форма.Субконто1.НазначитьТип(ВыбранныйСчет.ВидСубконто(1));
КонецЕсли;
Если х>1 тогда
    Форма.Субконто2.НазначитьТип(ВыбранныйСчет.ВидСубконто(2));
КонецЕсли;
Если х>2 тогда
    Форма.Субконто3.НазначитьТип(ВыбранныйСчет.ВидСубконто(3));
КонецЕсли;

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

При работе следует обратить внимание, что виды субконто устаналиваются именно для одной строки, а не для всей таблицы. Это легко проверить. Введите несколько строк.

349_1.gif (7269 b)

Потом выберите счет.

349_2.gif (3952 b)

И теперь в данной строке Вы сможете выбрать субконто сотвествующее данному счету.

349_3.gif (2877 b)

Но только для данной строки. Это не плохо, для ряда задач даже очень хорошо. Если нужно установить для всех строк, то по ним можно и пробежаться.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 350 - Как учитывается уставной капитал

Шаг 350 - Как учитывается уставной капитал

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

350_1.gif (2191 b)

Обратите внимание, что в типовой конфигурации здесь указаны только контрагенты. Но, например, в моем случае вклады в уставной капитал делали и работники предприятия. Мне пришлось добавить субконто сотрудники и создать свою форму для работы с уставным капиталом. В 3 форме бухгалтерского баланса отражается состояние уставного капитала.

350_2.gif (10205 b)

Сформировав остатки счет 80 и обороты по нему Вы можете получить первую строку 3 формы баланса в не зависимости от конфигурации.

350_3.gif (9751 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 351 - Бухгалтерия и статистика

Шаг 351 - Бухгалтерия и статистика

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

351_1.gif (13414 b)

Если кому нужна, то могу посоветовать сайт статистики www.gks.ru.

351_2.gif (19282 b)

Здесь есть все необходимые формы в формате WORD почему-то. Одной из новостей явилось отмена кода ОКОНХ (Общероссийский классификатор отраслей народного хозяйства) и введение кода ОКВЭД (Общероссийский классификатор видов экономической деятельности). ОКВЭД вводится в действие на территории Российской Федерации с 1.01.2003 года. А при чем тут бухгалтерия. Да все при том. Смотрим первые строки кода.

351_3.gif (3861 b)

Как вы поняли наверно уже СКД(“01.1”), если основные фонды только материальные активы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 352 - БухИтоги – изучаем дальше

Шаг 352 - БухИтоги – изучаем дальше

Мы уже с Вами много раз заводили разговор про бух. итоги. Мы вернемся снова к их рассмотрению, но сначала вспомним, что мы уже умеем:

  • "Шаг 18 - Управление бухгалтерскими итогами"
  • "Шаг 19 - Получаем бухгалтерские итоги"
  • "Шаг 48 - Почему проводка может не отражаться в состоянии предприятия"
  • "Шаг 49 - Изучаем бухгалтерские итоги - КонПериода"
  • "Шаг 50 - Изучаем бухгалтерские итоги – НачПериода"
  • "Шаг 141 - Изучаем бухгалтерские итоги – на любой момент"
  • "Шаг 142 - Изучаем бухгалтерские итоги – запрос"
  • "Шаг 143 - Бухгалтерские итоги – предварительный обзор"
  • "Шаг 145 - Изучаем бухгалтерские итоги – обороты"
  • "Шаг 299 - Производим расчет бух итогов"

Один интересный момент был в шаге "Шаг 299 - Производим расчет бух итогов". Там был приведен вот такой код:

Ит.Рассчитать(, РабочаяДата(), "01.1, 03.1, 03.2, 03.3, 03.4, 02.1, 02.2, 001, 010, 011",,,);

То есть итоги рассчитывали сразу по нескольким счетам. Вот давайте на этом и акцентируем внимание. В шаге "Шаг 43 - Изучаем бухгалтерские итоги – СКД" мы разговаривали про сальдо конечное дебетовое. Как в данном случае будет получено это сальдо. Я создал пустую конфигурацию "Шаг 2 - Создание каталога для данных".

352_1.gif (2609 b)

Сделал ручную проводку с одного счета на другой.

352_2.gif (5649 b)

Проверил установку бух. итогов. (см. "Шаг 18 - Управление бухгалтерскими итогами"), чтобы они попали в диапазон операций и простой отчет с начальной и конечной датой. И, конечно, получил сальдо.

352_3.gif (4567 b)

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ВыполнитьЗапрос(ДатаНач, ДатаКон, "100, 200");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

В результате получения CKД оказалось 0.

352_4.gif (4027 b)

То есть 0 по этим двум счетам. А как же получить по отдельности? Каждый раз создавать новый объект? Нет конечно. Но это очень интересный факт, так как получение совместных итогов позволяет отказаться от процедур суммирования. Например, совместные итоги по счетам основных средств позволят получить общую картину основных средств. В следующем шаге смотрите как расшифровать эти суммы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 353 - Расшифровываем сложные итоги - ВыбратьСчета

Шаг 353 - Расшифровываем сложные итоги - ВыбратьСчета

В прошлом шаге мы с Вами получили общую сумму для того, чтобы получить итоги. Но нам нужно ее расшифровать. Для начала нужно выбрать счета.

ВыбратьСчета
Открывает выборку счетов, для которых были получены итоги методом ВыполнитьЗапрос.

Синтаксис:

ВыбратьСчета(<ФлагВсе>,<ФлагДК>,<Номер>,<РазвСальдо>)

Англоязычный синоним:

SelеctAccounts

Параметры:
<ФлагВсе> Необязательный параметр. 0 — отбирать те счета, которые имели итоги на этом уровне обхода итогов запроса; 1 — включить в выборку все счета, которые имели итоги в данном запросе; -1, -2 ... — включить в выборку счета, которые имели итоги в группировке n-го вышестоящего уровня.По умолчанию — 0.
<ФлагДК> Необязательный параметр. 1 — включать в выборку счета только с дебетовыми оборотами; 2 — включать в выборку счета только с кредитовыми оборотами. 0 — включать в выборку счета вне зависимости от дебетовых/кредитовых оборотов.По умолчанию 0.
<Номер> Необязательный параметр. Положительное целое число — номер выборки. Если параметр не указан, выборке присваивается номер 0.
<РазвСальдо> Необязательный параметр. Признак необходимости рассчитывать развернутое сальдо по субконто. Используется только если в запросе участвуют субконто.1 — рассчитывать развернутое сальдо. 0 — не рассчитать развернутое сальдо; По умолчанию0.

Возвращаемое значение:
Число: 1 — если действие выполнено и в выборке есть хотя бы один счет;
0 — если действие не выполнено или в выборке нет ни одного счета.

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

Добавляем в наш код.

Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ВыполнитьЗапрос(ДатаНач, ДатаКон, "100, 200");
    Ит.ВыбратьСчета();
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 354 - Получаем счет

Шаг 354 - Получаем счет

Выбрав счета мы можем этот счет получить.

ПолучитьСчет
Получить из выборки следующий счет. Выборка должна быть предварительно открыта при помощи метода ВыбратьСчета.

Синтаксис:

ПолучитьСчет(<Номер>,<Счет>)

Англоязычный синоним:

GetAccount

Параметры:
<Номер> Необязательный параметр. Положительное целое число — номер выборки.
<Счет> Необязательный параметр. Конкретное значение счета, которое нужно получить из выборки.

Возвращаемое значение:
Число: 1 — следующий счет выбран успешно; 0 — следующий счет не выбран (отсутствует).

Описание:
Метод ПолучитьСчет выбирает очередной счет из выборки, содержащей счета из плана счетов. Перед применением метода ПолучитьСчет выборка должна быть открыта при помощи метода ВыбратьСчета. Счета извлекаются в порядке возрастания кода счета.
Метод ПолучитьСчет позволяет также обращаться к результатам выборки по номеру выборки, если предварительно было открыто несколько выборок. Номер выборки передается методу в качестве параметра <Номер>.
Следует иметь в виду, что, в отличие от аналогичного параметра метода ВыбратьСчета, параметр <Номер>метода ПолучитьСчет используется только для обращения к конкретной выборке.
Метод ПолучитьСчет позволяет также обращаться к конкретному значению результат выборки. Значение счета выборки передается методу в качестве параметра<Счет>.
Если параметр <Счет> не задан, то метод ПолучитьСчет может использоваться для организации цикла по счетам. Условием цикла может служить равенство 1 возвращаемого значения метода: цикл выполняется, пока метод ПолучитьСчет возвращает 1.
Метод возвращает 0, когда очередной счет не выбран. Это происходит, если при предыдущем применении метода был выбран последний счет выборки.

Вот и воспользуемся им для получения значения по счетам.

Процедура Сформировать()
    Перем счет100;
    Перем счет200;
    Перем вместе;
    Т = СоздатьОбъект("Таблица");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ВыполнитьЗапрос(ДатаНач, ДатаКон, "100, 200");
    вместе=Ит.СКД();
    Ит.ВыбратьСчета();
    Ит.ПолучитьСчет(СчетПоКоду("100"));
    счет100=Ит.СКД();
    Ит.ПолучитьСчет(СчетПоКоду("200"));
    счет200=Ит.СКД();
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

А теперь таблица.

354_1.gif (2624 b)

Смотрим в подтверждение, что СКД без расшифровки выдается вместе.

354_2.gif (1433 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 355 - 1C и ошибки – опасно как никогда

Шаг 355 - 1C и ошибки – опасно как никогда

Язык 1С очень устойчив к ошибкам. Настолько, что ее и заметить не так легко. Если Вы имеете опыт программирования на Pascal или С++ вы будете надеяться, что среда разработки проконтролирует многие ошибки. В данном случае это не так. Посмотрите шаг "Шаг 354 - Получаем счет". В нем ошибка. Вместо

Ит.ПолучитьСчет(СчетПоКоду("100"));

Нужно написать:

Ит.ПолучитьСчет(,СчетПоКоду("100"));

Так как первый параметр это номер, а второй счет. Несмотря на это мы получаем правдоподобные результаты. И даже, если будем пытаться обработать ошибку при неправильном написании мы будем получать правильный результат. Смотрите ошибка есть, но она не фиксируется.

Перем ОшибкаВПрограмме;

Процедура ПолучитьСчетИзИтога(Итог,СчетДляПолучения)
    Если (Итог.ПолучитьСчет(СчетДляПолучения)=0) Тогда
        ОшибкаВПрограмме=1;
    КонецЕсли;
КонецПроцедуры

Процедура Сформировать()
    Перем счет100;
    Перем счет200;
    ОшибкаВПрограмме=0;
    Т = СоздатьОбъект("Таблица");

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

    Если ОшибкаВПрограмме=1 Тогда
        Предупреждение("Ошибка счета, Программиста к начальнику");
        Возврат;
    КонецЕсли;

    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать()

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

Самое прикольное, что результат правильный. И все хорошо, но только стоит запросить еще один счет и Вы получите ошибку.

.........
ПолучитьСчетИзИтога(Ит,"100");
счет100=Ит.СКД();
ПолучитьСчетИзИтога(Ит,"300");
счет200=Ит.СКД();
ПолучитьСчетИзИтога(Ит,"200");
.........

355_1.gif (6171 b)

Конечно, это легко исправляется.

Ит.ПолучитьСчет(,СчетПоКоду("100"));

Волнует меня только одно. Не слишком ли это. Ведь мы с Вами бухгалтерию ведем. Отчетность всякую делаем и сдаем в налоговую, а при более серьезном использовании и бизнес как таковой завязан на 1С. Так не слишком ли мало контроля? Ведь есть же в C++ сообщения об ошибках. Что мешает сделать в 1C тоже самое. Уважаемые господа из 1С, может я и заблуждаюсь, но такая среда разработки очень и очень опасна, если организации вкатают штраф в пару лимонов за вот такой казус это уже другой разговор.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 357 - Создаем колонки в таблице значений

Шаг 357 - Создаем колонки в таблице значений

Создаем пустой отчет и в нем код.

//*******************************************
Процедура Сформировать()
    Результат = СоздатьОбъект("ТаблицаЗначений");
    Результат.НоваяКолонка("ГруппыОС","Перечисление.ГруппыОС");
    Результат.НоваяКолонка("начБаланс");
КонецПроцедуры

Мы создаем объект таблица значений и добавляем две колонки. В первой колонке будет группа ОС. Ее я типизировал на основе перечисления. Второй колонкой будет начальная балансовая стоимость. Типизировать не стал. Вот описание этой функции.

НоваяКолонка
Добавить в конец таблицы значений новую колонку.

Синтаксис:

НоваяКолонка(<Идентификатор>, <Тип>, <Длина>, <Точность>, <3аголовок>, <Ширина>, <Формат>, <Положение>)

Англоязычный синоним:

NewColumn

Параметры:
<Идентификатор> Необязательный параметр. Идентификатор колонки, если не указан обращение к колонке возможно только по номеру.
<Тип> Необязательный параметр. Строка или вид субкон-то, задающий тип колонки. Если не указан, то можно хранить любой тип.
<Длина> Необязательный параметр. Длина для числовой или строковой колонки.
<Точность> Необязательный параметр. Точность (длина дробной части) для числовой колонки.
<3аголовок> Необязательный параметр. Строковое выражение содержащее заголовок колонки в элементе диалога типа «ТаблицаЗначений».
<Ширина> Необязательный параметр. Числовое выражение, содержащее ширину колонки (в символах) для представления колонки в элементе диалога типа «ТаблицаЗначений».
<Формат> Необязательный параметр. Строковое выражение, содержащее форматную строку, которая будет использована при визуальном отображении значений данной колонки.
<Положение> Необязательный параметр. Определяет вариант выравнивания при визуальном отображении значений данной колонки. Число: 1 — слева; 2 — справа.

Возвращаемое значение:
номер новой колонки.

Описание:
Метод НоваяКолонка добавляет в конец таблицы значений новую колонку

Мы создали две колонки. Соответственно первая будет – 1, а вторая - 2. Сначала я долго сомневался помня, что массивы начинаются с 0. Но здесь вроде все в порядке первая - это первая.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 358 - Заполняем таблицу значений

Шаг 358 - Заполняем таблицу значений

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

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

    Результат = СоздатьОбъект("ТаблицаЗначений");
    Результат.НоваяКолонка("ГруппыОС","Перечисление.ГруппыОС");
    Результат.НоваяКолонка("начБаланс");

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

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

    Пока БИ.ПолучитьСубконто() = 1 Цикл
        Результат.НоваяСтрока();
        Результат.ГруппыОС = БИ.Субконто().Группа;
        Результат.начБаланс=БИ.СНД();
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Здесь все должно быть знакомо кроме НоваяСтрока. Она создает новую строку в таблице значений, а заполнить ее можно сославшись на имена колонок. Смотрим описание.

НоваяСтрока
Добавляет новую строку в таблицу значений.

Синтаксис:

НоваяСтрока(<НомерСтроки>)

Англоязычный синоним:

NewLine

Параметры:
<НомерСтроки> - Необязательный параметр. Числовое выражение, содержащее позицию, в которую следует вставить новую строку.

Возвращаемое значение:
Номер новой строки.

Описание:
Метод НоваяСтрока вставляет новую строку в таблицу значений в указанную позицию.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 359 - Вот оно, группировка в таблице значений

Шаг 359 - Вот оно, группировка в таблице значений

Ради чего мы все поместили в таблицу значений ? Ради того, чтобы одним заходом сгруппировать по полю ГруппыОС, что нам и нужно было.

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

    Результат = СоздатьОбъект("ТаблицаЗначений");
    Результат.НоваяКолонка("ГруппыОС","Перечисление.ГруппыОС");
    Результат.НоваяКолонка("начБаланс");

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

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

    Пока БИ.ПолучитьСубконто() = 1 Цикл
        Результат.НоваяСтрока();
        Результат.ГруппыОС = БИ.Субконто().Группа;
        Результат.начБаланс=БИ.СНД();
    КонецЦикла;

    Результат.Свернуть("1","2");

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

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

Свернуть
Свернуть таблицу значений но соответствующим значениям колонок.

Синтаксис:

Свернуть(<ГруппКолонки>,<СуммКолонки>)

Англоязычный синоним:

GroupBy

Параметры:
<ГруппКолонки> - Группировочные колонки (номера или идентификаторы колонок через запятую), по которым группировать данные.
<СуммКолонки> - Суммируемые колонки (номера или идентификаторы колонок через запятую), по которым суммировать данные.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 360 - Осталось определить количество строк

Шаг 360 - Осталось определить количество строк

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

КоличествоСтрок
Устанавливает/возвращает количество строк в таблице значений,

Синтаксис:

КоличествоСтрок(<НовоеКоличествоСтрок>)

Англоязычный синоним:

LinesCnt

Параметры:
<НовоеКоличествоСтрок> - Необязательный параметр. Новое количество строк в таблице значений.

Возвращаемое значение:
Числовое значение — количество строк в таблице значений до вызова метода.

Описание:
Метод Количество Строк устанавливает/возвращает количество строк в таблице значений.

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

//*******************************************
Процедура Сформировать()
    Перем х;
    Перем стр;
    Перем сумма;

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

    Результат.НоваяКолонка("ГруппыОС","Перечисление.ГруппыОС");
    Результат.НоваяКолонка("начБаланс");

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

    Результат.Свернуть("1","2");
    у = Результат.КоличествоСтрок();
    Для x=1 По у Цикл
        стр=Результат.ПолучитьЗначение(x,1);
        сумма=Результат.ПолучитьЗначение(x,2);
        Т.ВывестиСекцию("Секция_1");
    КонецЦикла;

    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

Таблица.

360_1.gif (1191 b)

Результат.

360_2.gif (2891 b)

Таким способом можно формировать отчетность по любому атрибуту справочника на основе которого создается субконто (Для тех кто подзабыл "Шаг 21 - Виды субконто").


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 361 - Форматирование таблицы по умолчанию

Шаг 361 - Форматирование таблицы по умолчанию

О таблице было уже много сказано:

  • "Шаг 6 - Первый отчет, дальше"
  • "Шаг 7 - Первый отчет, переменные"
  • "Шаг 147 - Изучаем таблицу – Создаем"
  • "Шаг 148 - Изучаем таблицы – Что делать, если нужно две - ИсходнаяТаблица"
  • "Шаг 149 - Изучаем таблицу – показываем"
  • "Шаг 150 - Изучаем таблицу – как она вообще формируется"
  • "Шаг 151 - Изучаем таблицу – Выводим секцию"
  • "Шаг 152 - Изучаем таблицу – запрещаем редактирование и делаем похожей на документ"
  • "Шаг 153 - Изучаем таблицы - Оформление таблицы"
  • "Шаг 154 - Изучаем таблицу - выводим много секций"
  • "Шаг 155 - Изучаем таблицы – повторение шапки на другой странице"
  • "Шаг 251 - Как реализован вызов одного отчета из другого"
  • "Шаг 252 - Подробнее о ОбработкаЯчейкиТаблицы"
  • "Шаг 284 - Как делал я"
  • "Шаг 340 - Первый шаг к своей расшифровке в таблице"
  • "Шаг 344 - Полное рассеивание подозрений"

Но все-таки наши отчеты немного отличаются по оформлению от стандартных. Конечно длинные цифры не очень удобно читать. Для того, чтобы поменять формат глобально и больше о нем не думать, в каждой ячейки можно воспользовался функцией ИспользоватьФормат, которая установит формат по умолчанию.

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

Синтаксис:

Использоватьформат(<СтрокаФормата>)

Англоязычный синоним:

DefaultFormat

Параметры:
<СтрокаФормата> - Необязательный параметр. Строковое выражение, содержащее форматную строку (см. Формат).

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

Описание:
Метод ИспользоватьФормат устанавливает стандартный формат по умолчанию для вывода всех выражений выводимых секций таблицы. В ячейках таблицы, при выводе которых требуется формат, отличный от установленного методом ИспользоватьФормат, должен быть установлен формат явным образом. Форматная строка записывается через символ "#" после выражения, заданного для ячейки. Если выражение, заданное для ячейки просто завершается символом "#", то будет использоваться системный формат по умолчанию.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 362 - Как хранится информация из монитора пользователя

Шаг 362 - Как хранится информация из монитора пользователя

Мы с Вами уже знаем из шага "Шаг 224 - Чем может помочь монитор пользователей", что монитор пользователей позволяет нам отследить все действия пользователей. А что, если мы хотим эту информацию, например, распечатать. Нет проблем. Информация для монитора пользователя хранится в каталоге SysLog, имя файла - 1cv7.mlg. Этот файл можно просмотреть, он текстовый.

362_1.gif (6003 b)

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

362_2.gif (3184 b)

В результате файл очищается, а в каталоге появляется архив.

362_3.gif (815 b)

Тут же станет вопрос будет ли этот файл сохранен при резервном копировании. Подробнее о резервном копировании - "Шаг 26 - Резервные копии". Ответ отрицательный. Нужно сделать маску.

362_4.gif (5884 b)

Теперь он будет помещен в архив.

362_5.gif (10859 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 363 - Запуск внешней программы

Шаг 363 - Запуск внешней программы

Я уже как-то заикался про стыковку других приложений и 1С. Вот можно почитать и вспомнить:

  • "Шаг 114 - Перенос справочников из одной конфигурации в другую через XBase – в DBF"
  • "Шаг 115 - Перенос справочников из одной конфигурации в другую через Xbase – из DBF"
  • "Шаг 116 - Третья ошибка внедрения 1С - чем может помочь XBase"
  • "Шаг 182 - Интеграция 1С в мир (как делать свои расширения)"

Идея сводится к тому, что часть решений пока невозможно перенести в среду 1С по тем или иным причинам. Классический пример системы клиент-банк. И тут пока два варианта. Если информация хранится в DBF, то мы можем напрямую ее прочитать. Если в другом формате, то мы можем создать модуль ActiveX. Но создание данного модуля может потребовать некоторой компетенции. Есть и другой ход. Можно запустить какую-нибудь программу, которая переведет формат в DBF, а потом прочитать. Все это хорошо, но хочется чтобы это можно было сделать прямо не выходя из 1С. Бухгалтера часто такие бывают. Ну, вы понимаете :-) Для запуска внешних приложений есть процедура.

ЗапуститьПриложение
Выполняет запуск внешнего приложения.

Синтаксис:

ЗапуститьПриложение(<СтрокаКоманды>)

Англоязычный синоним:

RunApp

Параметры:
<СтрокаКоманды> Строковое выражение, содержащее строку команды запуска внешнего приложения или имя файла, чтобы открыть его с помощью ассоциированного для данного вида файлов приложения.

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

  1. текущий системный каталог;
  2. каталог Windows;
  3. системный каталог Windows;
  4. все каталоги, указанные в переменной PATH;

Мы особенно пока извращаться не будем, а просто запустим, например, игру в карты.

Процедура ПриНажатии()
    ЗапуститьПриложение("SOL.EXE");
КонецПроцедуры

А вот результат.

363_1.gif (8298 b)

Запускать можно и BAT файлы, создавая некоторые решения без использования компилятора подробнее про BAT файлы "Шаг 1 - Что такое Bat файлы". Или еще более мощными возможностями используя скрипты VBS.

363_2.gif (4106 b)

Код скрипта.

MsgBox "Hello"

Запускаем.

Процедура ПриНажатии()
    ЗапуститьПриложение ("c:\vbs\1.vbs");
КонецПроцедуры

Результат:

363_3.gif (1779 b)

Почитать о создании скриптов для ознакомления на данный момент можно в шагах:

  • "Шаг 1 - Что есть JavaScript ?"
  • "Шаг 105 - Что такое VBScript Control"
  • "Шаг 106 - Запускаем скрипт из файла"
  • "Шаг 107 - Более сложный пример VBScript"
  • "Шаг 24 - Что такое Windows Scripting Host (WSH) ?"


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 364 - Экспорт отчетов в Excel

Шаг 364 - Экспорт отчетов в Excel

Конечно, 1С позволяет делать много всяких и разным отчетов. Только вот есть ряд работников, особенно из высшего руководящего состава, которым просто так не живется. И это им надо сделать и то, и так пересчитать и эдак. Ну, не делать же ради утреннего бзика новый отчет. Выход в том, чтобы передать данные из стандартного отчета в Excel и забыть об этом. Итак, если отчет сформирован, то можно выбрать пункт меню "Сохранить Как".

364_1.gif (3286 b)

А дальше тип файла Excel.

364_2.gif (9217 b)

Переносится вполне прилично.

364_3.gif (4853 b)

Только точку нужно поменять на запятую. Точка заменяется на запятую одним заходом.

364_4.gif (5159 b)

Вот и считайте себе так или сяк и не мучайте меня разовыми отчетами.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 365 - Как скопировать конфигурацию

Шаг 365 - Как скопировать конфигурацию

Как там в одной из реклам – Вы растете, работаете, растите детей и делаете конфигурацию. Люди с этой конфигурацией работают. Они общаются и рассказывают как у них все хорошо. Рано или поздно Вашим творением заинтересуются другие предприятия. И тут станет вопрос. Как Вашу конфигурацию перенести на их предприятие. Только конфигурацию и ничего больше. Есть ряд предприятий где за вынос данных могут в прямом смысле пристрелить. Первый способ создать пустую и туда перенести все документы, справочники и так далее.

Можно попробовать удалить все данные. Но если люди работают долго, то это сложно. Есть более простой способ. Мы уже изучали где хранится конфигурация:

  • "Шаг 195 - Где хранится конфигурация"
  • "Шаг 222 - Как узнать в каком файле DBF хранятся данные"

Так все, что нужно сделать - это скопировать эти два файла, можно и 1Cv7.CFG. Вот и все.

365_1.gif (683 b)

Дальше Вы создаете якобы новый каталог ("Шаг 2 - Создание каталога для данных") и запускаете конфигурацию. При запуске 1С на основе Ваших данных будут созданы все необходимые DBF файлы.

365_2.gif (9064 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 366 - Изучаем объединение конфигураций

Шаг 366 - Изучаем объединение конфигураций

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

366_1.gif (4540 b)

Но этот пункт меню ни о чем не говорит. Есть он такой и есть. А что стоит за этим, как это реально происходит вот главный вопрос. Давайте попробуем сравнить две одинаковые конфигурации. При выборе этого пункта меню Вам нужно будет указать файл конфигурации.

366_2.gif (4278 b)

Дальше пойдет сравнение. Результат как ни странно правильный.

366_3.gif (2629 b)

Это когда одинаковые. Для проверки я создам два каталога conf1 и conf2, так как нужно этот вопрос изучить внимательнее.

366_4.gif (1310 b)

И помещу туда две одинаковые конфигурации как описано в шаге "Шаг 365 - Как скопировать конфигурацию". Папка conf1 будет рабочей, а conf2 для изменений. Вопрос не праздный, иначе Вы либо будете работать по ночам, либо предприятие будет стоять.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 367 - Изучаем объединения конфигураций – новый справочник

Шаг 367 - Изучаем объединения конфигураций – новый справочник

Не забываем, что conf2 для изменений. Создадим в ней новый справочник.

367_1.gif (4633 b)

И попробуем объединить с conf1:

367_2.gif (6043 b)

Мы увидим окно объединения конфигурации, в котором будут показаны различия. В данном случае новый справочник.

367_3.gif (9904 b)

Не в даваясь в подробности пока нажмем ОК.

367_4.gif (5888 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 368 - Изучаем объединения конфигураций – новый реквизит

Шаг 368 - Изучаем объединения конфигураций – новый реквизит

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

368_1.gif (1801 b)

Объединяем и смотрим, что нам скажут.

368_2.gif (6918 b)

Вопрос ясен. Все новое, если его нет, по крайней мере в плане реквизитов, и элементов добавляется.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 369 - А что, если в новой конфигурации этого элемента нет

Шаг 369 - А что, если в новой конфигурации этого элемента нет

Вот и посмотрим, удаляем.

369_1.gif (3409 b)

И пробуем объединить.

369_2.gif (7275 b)

Нас предупредили, что элемент удален. Посмотрим, что будет при замещении объекта.

369_3.gif (3302 b)

Элемент справочника пропал, но есть режим объединения. Испытаем его (если вы сами делаете все, что читаете, то не сохраняйте изменения).

369_4.gif (1349 b)

Элемент справочника останется.

369_5.gif (1486 b)

Вывод, если Вы добавляли данные в конфигурацию, то нужно делать объединение !!!


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 370 - Как скопировать конфигурацию – второй вариант

Шаг 370 - Как скопировать конфигурацию – второй вариант

О первом варианте рассказано в шаге . Но полученные уже знания позволят скопировать конфигурацию путем объединения. Для начала нужно создать пустой каталог с данными - "Шаг 2 - Создание каталога для данных". Создадим. Будет совершенно пустая конфигурация.

370_1.gif (5506 b)

Объединим с нашей любой конфигурацией, например типовой.

370_2.gif (4353 b)

И смотрим. Процесс может быть длительный. В результате получим конфигурацию.

370_3.gif (10329 b)

Но без данных, как и нужно. Какой лучше? На мой взгляд первый способ лучше. Быстрее однозначно. Объединение конфигураций может занять две-пять минут. Скопировать файл быстрее. Во-вторых, будет создан словарь данных.

370_4.gif (10798 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 371 - Объединение конфигураций – код

Шаг 371 - Объединение конфигураций – код

Продолжаем тему поднятую в шагах:

  • "Шаг 366 - Изучаем объединение конфигураций"
  • "Шаг 367 - Изучаем объединения конфигураций – новый справочник"
  • "Шаг 368 - Изучаем объединения конфигураций – новый реквизит"
  • "Шаг 369 - А что, если в новой конфигурации этого элемента нет"

Вопрос, который меня волнует это код. Что будет с кодом. Вот и попробуем. Создадим в глобальном модуле функцию из шага "Шаг 183 - Что такое глобальный модуль".

371_1.gif (3016 b)

И попробуем объединить.

371_2.gif (5602 b)

Ничего не произошло кроме того как был добавлен глобальный модуль. Но нам-то интересно, что будет, если поменять код. Давайте добавим еще одну процедуру из шага "Шаг 187 - Глобальный модуль и конфигурация, меньше кода, меньше ошибок" и изменим счет на 19.3.1.

371_3.gif (6556 b)

Смотрим, что будет при объединении.

371_4.gif (8953 b)

Отлично мы видим, что изменен текст и стала доступна кнопка сравнения. Нажмем ее.

371_5.gif (12377 b)

Ну не чудеса ли. Нам показаны различия. Давайте объединим и посмотрим глобальный модуль.

371_6.gif (8067 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 372 - Объединение конфигураций, как поведут себя элементы на форме

Шаг 372 - Объединение конфигураций, как поведут себя элементы на форме

В шаге "Шаг 336 - Журнал и справочник тоже форма" мы говорили, что даже справочник это форма. Теперь нас интересует вопрос, как будет отражаться при объединении изменение формы и положения элементов. Я поставил редактирование в диалоге и создал диалог для редактирования.

372_1.gif (5449 b)

Теперь попробую объединить.

372_2.gif (1548 b)

Видим, что произошло добавление объекта, хорошо объединим. А теперь переставим местами:

372_3.gif (4383 b)

И опять объединим. Мы увидим просто, что объект был изменен.

372_4.gif (5008 b)

А как бы хотелось прямо здесь посмотреть новый и старый вариант. Но все равно хорошо хоть показывает, что есть изменения.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 373 - Выводы о объединения конфигурации

Шаг 373 - Выводы о объединения конфигурации

Вполне прилично - вот вывод. Для того, чтобы избежать удаления наших данных нужно пользоваться объединением конфигураций, подробнее - "Шаг 369 - А что, если в новой конфигурации этого элемента нет". Изменения кода документируются, подробнее - "Шаг 371 - Объединение конфигураций – код". Изменения на формах тоже фиксируются, подробнее - "Шаг 372 - Объединение конфигураций, как поведут себя элементы на форме". Все нормально и вполне прилично. Данным способом легко проводить обновления типовой конфигурации, эти обновления периодически появляются на диске сопровождения. Делать практически ничего не нужно. Просто объединяете и все. Если же вы делали свою конфигурацию и использовали элементы типовой, подробнее - "Шаг 285 - Изучаем справочник основные средства", то тут сложнее. Ваши документы могут называться точно так же как и стандартные. А обновить нужно только те, которые переносили. Но выход есть, просто при объединении конфигураций нужно указать те элементы, которые вы внедрили в свою конфигурацию.

373_1.gif (7454 b)

А все остальное просто не изменять.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 374 - Субсчета и типовая (или шестая ошибка)

Шаг 374 - Субсчета и типовая (или шестая ошибка)

Одна из проблем ручной работы при переходе на 1C это субсчета. Ну, например, взять банковский счет, он в бухгалтерии отражен на счет 51. Бухгалтера с большим удовольствием заводят субсчета. Это же удобно.

51.1 первый счет
51.2 второй счет

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

374_1.gif (1991 b)

Как же узнать на каком счете сколько денег. Да просто. Есть же субконто банковские счета. Можно из карточки счета, отобрав по данном счету.

374_2.gif (3078 b)

И спокойно смотрите операции и остатки именно по этому счету.

374_3.gif (3700 b)

Кроме того всегда можно посмотреть остатки при формировании выписки.

374_4.gif (3534 b)

Проблем особых-то нет только план счетов поменять немного. Я бы очень настойчиво рекомендовал это сделать. Касается данный вопрос не только банковского счета, но и многих других счетов, например складов (41.1).

374_5.gif (3184 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 375 - А если очень хочется субсчет (на примере выписки)

Шаг 375 - А если очень хочется субсчет (на примере выписки)

Давайте посмотрим на примере банковского счета. Конечно, это изврат, но клиент он всегда говорят прав. Итак, нам нужно два субсчета и чтобы банковская выписка работала. Да простит меня минфин с их типовым планом, правим план счетов и делаем два субсчета.

375_1.gif (4007 b)

Но если сейчас попробовать делать банковскую выписку Вы получите сообщение об ошибках. Нам нужно где-то хранить информацию на каком счете находится субсчет. Лучше всего наверно в справочнике "банковские счета". Делаем новый реквизит в справочнике банковские счета.

375_2.gif (7366 b)

И помещаем на форму для заполнения.

375_3.gif (3974 b)

Теперь нужно запустить 1C и заполнить этот реквизит (вообще масло масленное получится, если вдуматься, ну да ладно).

375_4.gif (6384 b)

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

Перем Новый;
Перем СписокДействий;
Перем  ВыбрБанковскийСчет;

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

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

Процедура ПриВыбореБанковскогоСчета()
    ВыбрБанковскийСчет = СоздатьОбъект("Справочник.БанковскиеСчета");
    ВыбрБанковскийСчет.НайтиЭлемент(БанковскийСчет);
    Если ВыбрБанковскийСчет.Выбрать("Укажите расчетный счет","ДляВыбора") = 1 Тогда
        БанковскийСчет = ВыбрБанковскийСчет.ТекущийЭлемент();
    КонецЕсли;
    Сч51=ВыбрБанковскийСчет.Сч;
    УстановитьТипВыписки();
КонецПроцедуры

И все. Теперь можно проводить выписку и операции будут распределены по субсчетам.

375_5.gif (12990 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 376 - А если очень хочется субсчет (на примере акта выполнения услуг)

Шаг 376 - А если очень хочется субсчет (на примере акта выполнения услуг)

Песня у нас таже, проблемы две. Первая - это счет 62. Любят делать что-то такое.

62.1 расчеты с покупателями
62.2 расчеты с покупателями золота
62.3 расчеты с покупателями серебра

Или что-то в этом духе. Если мы попробуем заполнить акт оказания услуг, то получим ошибку. А хочется, очень нужно. Ну, прям слов нет. Значит нужно делать. Открываем документ ОказаниеУслуг. В реквизиты шапки добавляем новый реквизит, в котором будет счет.

376_1.gif (12650 b)

Помещаем его на форму, чтобы можно было выбирать.

376_2.gif (8002 b)

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

//********************************
// Предопределенная процедура
//

Процедура ОбработкаПроведения()
    глКомментарийПроведения("Начало", Контекст);
    Сч62_1 = СчетДебета;
............

Все, можно выбирать.

376_3.gif (4660 b)

И проводить.

376_4.gif (4343 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 377 - А если очень хочется субсчет - продолжение (на примере акта выполнения услуг)

Шаг 377 - А если очень хочется субсчет - продолжение (на примере акта выполнения услуг)

А еще может безумно хочется, несмотря на все доводы, услуги раскидывать по субсчетам. Наше дело поросячье – сказали сделал. Так как в одном акте может быть много типов услуг, которые конечно хоть раз в год должны разделяться по разным субсчетам. Добавляем.

377_1.gif (4626 b)

И на форму.

377_2.gif (3681 b)

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

............
ТаблицаРеализации = СоздатьОбъект("ТаблицаЗначений");
ТаблицаРеализации.НоваяКолонка("ВидНоменклатуры");
ТаблицаРеализации.НоваяКолонка("СтавкаНДС");
ТаблицаРеализации.НоваяКолонка("СтавкаНП");
ТаблицаРеализации.НоваяКолонка("Всего");
ТаблицаРеализации.НоваяКолонка("НП");
ТаблицаРеализации.НоваяКолонка("СчетКредита");
............

Потом не забыть заполнять при выборе:

............
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
    ТаблицаРеализации.НоваяСтрока();
    ТаблицаРеализации.ВидНоменклатуры = Услуга.ВидНоменклатуры;
    ТаблицаРеализации.СтавкаНДС = глСтавкаНалога(Контекст, "НДС");
    ТаблицаРеализации.СтавкаНП = глСтавкаНалога(Контекст, "НП");
    ТаблицаРеализации.Всего = Всего;
    ТаблицаРеализации.НП = НП;
    ТаблицаРеализации.СчетКредита=СчетКредита;
КонецЦикла;
............

Таблица будет свернута и это нужно учесть.

............
ТаблицаРеализации.Свернуть("ВидНоменклатуры, СтавкаНДС, СтавкаНП,СчетКредита","Всего, НП");
............

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

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

Можно заполнять документ.

377_3.gif (8537 b)

Смотрим проведение.

377_4.gif (10871 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 378 - Организация валютного учета

Шаг 378 - Организация валютного учета

Если Вы создаете свою конфигурацию, то по умолчанию валютного учета у Вас нет.

378_1.gif (4202 b)

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

378_2.gif (829 b)

Здесь есть свойства валютного учета.

378_3.gif (1978 b)

Справочник валют лучше всего взять из типовой конфигурации. После этого заполняете свойства.

378_4.gif (2268 b)

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

378_5.gif (2679 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 379 - Забалансовые счета

Шаг 379 - Забалансовые счета

Забалансовые счета используются для хранения дополнительной информации. В 1С на забансовых счетах организован налоговый учет (подробнее - "Шаг 325 - Как организован налоговый учет в 1C"). Самый главный вопрос - это чем отличается обычный счет от забалансового. Отличаются они требованиями к проведению. Для забалансовых счетов не нужна корреспонденция счетов. Создадим для проверки забалансовый счет.

379_1.gif (1638 b)

Обратите внимание, что его имя должно начинаться с буквы. И документ новый. В обработке проведения напишем операцию проведения.

// ********************
//
Процедура ОбработкаПроведения()
    Операция.НоваяПроводка();
    Операция.Дебет.Счет=СчетПоКоду("К10");
    Операция.Сумма=Сумма;
    Операция.Записать();
КонецПроцедуры

Теперь можно посмотреть карточку счета и увидеть, что операции проводятся.

379_2.gif (3384 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 380 - Русский и английский

Шаг 380 - Русский и английский

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

................
DATE: September 30 2002
Дата: 30 сентября 2002 г.
……………

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

ДатаМесяц
Определить месяц указанной даты.

Синтаксис:

ДатаМесяц(<Дата>)

Англоязычный синоним:

GetMonth

Параметры:
<Дата> Выражение со значением типа дата.

Возвращаемое значение:
Число со значением номера месяца года.

Описание:
Функция ДатаМесяц определяет месяц указанной даты.

Если попробовать посмотреть в отчете.

380_1.gif (2049 b)

То Вы увидите, что показывается число.

380_2.gif (2814 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 381 - Создаем функцию перевода месяца на английский

Шаг 381 - Создаем функцию перевода месяца на английский

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

1		январь		January
2		февраль		February
3		март		March
4		апрель		April
5		май		May
6		июнь		June
7		июль		July
8		август		August
9		сентябрь		September
10		октябрь		October
11		ноябрь		November
12 		декабрь		December

Вот и создадим глобальную функцию.

Функция ДатаПоАнглийски(ДатаПеревода) export
    ЗначениеМесяца = ДатаМесяц(ДатаПеревода);
    Если ЗначениеМесяца=1  Тогда Возврат "January"  КонецЕсли;
    Если ЗначениеМесяца=2  Тогда Возврат "February" КонецЕсли;
    Если ЗначениеМесяца=3  Тогда Возврат "March" КонецЕсли;
    Если ЗначениеМесяца=4  Тогда Возврат "April"  КонецЕсли;
    Если ЗначениеМесяца=5  Тогда Возврат "May"   КонецЕсли;
    Если ЗначениеМесяца=6  Тогда Возврат "June"  КонецЕсли;
    Если ЗначениеМесяца=7  Тогда Возврат "July"   КонецЕсли;
    Если ЗначениеМесяца=8  Тогда Возврат "August"  КонецЕсли;
    Если ЗначениеМесяца=9  Тогда Возврат "September" КонецЕсли;
    Если ЗначениеМесяца=10  Тогда Возврат "October"  КонецЕсли;
    Если ЗначениеМесяца=11  Тогда Возврат "November" КонецЕсли;
    Если ЗначениеМесяца=12  Тогда Возврат "December" КонецЕсли;
КонецФункции

А теперь вызовем ее.

//*******************************************
Процедура Сформировать()
    Перем пр;
    пр= ДатаПоАнглийски(РабочаяДата());
    Т = СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Т.ТолькоПросмотр(1);
    Т.Показать();
КонецПроцедуры

И смотрим результат.

381_1.gif (2689 b)

Все правильно, сейчас декабрь (вы можете читать эти шаги в другое время кстати :).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 382 - Извлекаем день

Шаг 382 - Извлекаем день

Но это еще не все. Нам нужен день. Его тоже можно извлечь из даты.

ДатаЧисло
Определить день месяца указанной даты.

Синтаксис:

ДатаЧисло(<Дата>)

Англоязычный синоним:

GetDay

Параметры:
<Дата> - Выражение со значением типа <дата>.

Возвращаемое значение:
Число со значением определенного дня месяца.

Описание:
Функция ДатаЧисло определяет день месяца указанной даты.

Вот и добавляем в код.

Функция ДатаПоАнглийски(ДатаПеревода) export
    ЗначениеМесяца = ДатаМесяц(ДатаПеревода);
    День = ДатаЧисло(ДатаПеревода);
    Если ЗначениеМесяца=1  Тогда Возврат День + " January"  КонецЕсли;
    Если ЗначениеМесяца=2  Тогда Возврат  День + "February" КонецЕсли;
    .......

Смотрим результат.

382_1.gif (2922 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 383 - А год

Шаг 383 - А год

Его то-же можно извлечь.

ДатаГод
Определить год указанной даты.

Синтаксис:

ДатаГод(<Дата>)

Англоязычный синоним:

GetYear

Параметры:
<Дата> - Выражение со значением типа <дата>.

Возвращаемое значение:
Число со значением определенного года.

Описание:
Функция ДатаГод определяет год указанной даты.

Добавим:

Функция ДатаПоАнглийски(ДатаПеревода) export
    ЗначениеМесяца = ДатаМесяц(ДатаПеревода);
    День = ДатаЧисло(ДатаПеревода);
    Год=ДатаГод(ДатаПеревода);
    Если ЗначениеМесяца=1 Тогда Возврат Строка(День) + " January " + Строка(Год) КонецЕсли;
    Если ЗначениеМесяца=2 Тогда Возврат Строка(День) + " February " + Строка(Год) КонецЕсли;
    ........

Смотрим результат, то что надо.

383_1.gif (5183 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 384 - Фокусы шахматки

Шаг 384 - Фокусы шахматки

Фокус в том, что в ней отображаются в том числе и забалансовые счета.

384_1.gif (8082 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 385 - Разделитель учета

Шаг 385 - Разделитель учета

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

385_1.gif (13149 b)

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

Операция.разделитель_учета = значение

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 386 - Объект файловой системы

Шаг 386 - Объект файловой системы

Мы много говорили про DBF формат и про получения от туда данных:

  • "Шаг 110 - Изучаем XBase - Открываем файл"
  • "Шаг 111 - Изучаем XBase – Переходим на первую запись"
  • "Шаг 112 - Изучаем XBase – Получаем следующую"
  • "Шаг 113 - Изучаем XBase – определяем конец файла"

Это хорошо когда файл один, а если нужно, чтобы пользователь каждый раз выбирал новую запись? Вот тут-то нам и поможет объект файловой системы. Его не нужно создавать используя функцию СоздатьОбъект. Называется объект ФС.

386_1.gif (2569 b)

Обратите внимание, что сразу после написания он становится красным. Системный все-таки. Этот объект умеет много чего. Но нас интересует выбор файла.

ВыбратьФайл
Открывает окно диалога выбора/сохранения файла.

Синтаксис:

ВыбратьФайл(<ТипДиалога>, <ИмяФайла>, <ИмяНачКаталога>, <3аголовокОкна>, <Фильтр>, <Расширение>, <Таймаут>)

Англоязычный синоним:

SelectFile

Параметры:
<TипДиaлoгa> - Числовое выражение, значение которого определяет тип открываемого диалога. Допустимые значения: 0 — диалог типа <открыть>, 1 — диалог типа <сохранить>.
<ИмяФайла> - Имя переменной, содержащей строковое значение с именем файла. В эту же переменную система возвращает имя выбранного файла.
<ИмяНачКаталога> - Имя переменной, содержащей строковое значение с именем начального каталога. В эту же переменную система возвращает имя выбранного каталога.
<ЗаголовокОкна> - Строковое выражение, с помощью которого можно задать заголовок открываемого окна.
<Фильтр> - Строковое выражение, с помощью которого можно задать список фильтров отбора файлов. Фильтр состоит из двух частей, разделенных сиволом "" (вертикальная черта): строки представления, которая отображается в окне выбора файла, и непосредственно строки маски. В строке маски можно использовать символ "*", что означает наличие любого числа произвольных символов. Символ "?" в строке маски означает наличие одного произвольного символа. Одновременно можно задавать несколько фильтров в виде списка, в качестве разделителей используется символ "|" (вертикальная черта). Например, список из двух фильтров: "Текст(*.txt)|*.txt| Таблицы(*.mxl)|*.mxl"
<Расширение> - Строковое выражение, с помощью которого можно задать расширение файла по умолчанию, которое используется системой при записи файла.
<Таймаут> - Необязательный параметр. Числовое выражение, значение которого задает время ожидания системы (в секундах) на отклик пользователя.

Возвращаемое значение:
Число: 0 — если в окне диалога нажата кнопка "Отмена", 1 — если в окне диалога нажата кнопка "ОК", при этом в переменную <ИмяФайла> возвращается выбранное имя файла, а в переменную <ИмяНачКаталога> возвращается имя выбранного каталога; -1 (минус единица) — закончилось время <Таймаут> ожидания отклика пользователя.

Описание:
Метод ВыбратьФайл открывает окно диалога выбора/сохранения файла

Попробуем ?

Процедура ПриОткрытии()
    Перем ИмяФайла;
    Перем ИмяПути;
    ФС.ВыбратьФайл(0, ИмяФайла, ИмяПути, "Выберите файл", "Все файлы (*.dbf)!*.dbf", , );
КонецПроцедуры

Появится стандартное окно выбора файла:

386_2.gif (7385 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 387 - Изучаем документ – Сами заполняем таблицу

Шаг 387 - Изучаем документ – Сами заполняем таблицу

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

НоваяСтрока
Добавить новую строку в документ.

Синтаксис:

НоваяСтрока()

Англоязычный синоним:

NewLine

Описание:
Метод НоваяСтрока добавляет новую строку с очередным порядковым номером в многострочную часть документа.

Попробуем на пустом документе.

387_1.gif (5265 b)

На форму кнопку:

387_2.gif (7891 b)

К ней код.

Процедура ПриНажатии()
    НоваяСтрока();
    Имя=”Hello”;
КонецПроцедуры

Смотрим результат.

387_3.gif (7989 b)

При нажатии на кнопку строки добавляются.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 388 - Отбор по нескольким субконто

Шаг 388 - Отбор по нескольким субконто

Мы с Вами много говорили про субконто:

  • "Шаг 54 - Зачем нужны субконто"
  • "Шаг 55 - Указываем виды субконто для счета"
  • "Шаг 56 - Изучаем Счета - КоличествоСубконто"
  • "Шаг 57 - Изучаем Счета – Выводим виды субконто - ВидСубконто"

А так же об объекте бухгалтерские итоги "Шаг 143 - Бухгалтерские итоги – предварительный обзор".
И даже получали остатки по складу в разрезе одного субконто "Шаг 144 - Два варианта получения остатков по складу".
Основу получения аналитических данных составляет использовать функцию ИспользоватьСубконто.

ИспользоватьСубконто
Устанавливает режим получения итогов методом ВыполнитьЗапрос в разрезе субконто.

Синтаксис:

ИспользоватьСубконто(<ВидСубконтоgt;,<Субконто>,<ТипФильтра>,<ПоГруппам>)

Англоязычный синоним:

UseSubconto

Параметры:
<ВидСубконто> Значение типа <Вид Субконто> — расчет временных итогов будет выполнен только для субконто указанного вида. Задается значением типа «Вид Субконто» или строкой содержащей имя идентификатора вида субконто, как он назван в конфигураторе.
<Субконто> Необязательный параметр. Здесь можетбыть задано или одно конкретное значение субконто, по которому будут отобраны итоги по аналитике или объект типа «Список значений», где можно задать несколько значений субконто. Если параметр не задан — то считается пустым значением субконто.
<ТипФильтра> Необязательный параметр. Число — тип фильтра по субконто. Может принимать следующие значения: 1 — разворачивать по данному субконто, 2 — отбирать по данному субконто, 3 — не учитывать это субконто вообще.По умолчанию1.
<ПоГруппам> Необязательный параметр. Число —группировка др итогов по субконто. Параметр <ПоГруппам> имеет смысл, если параметр <ТипФильтра> равен 1, а вид субконто, заданный параметром <ВидСубконто> ,имеет тип значения «Справочник». Параметр может принимать значения: 0 — не показывать итоги по группам справочника;1 — показывать итоги по группам справочника. По умолчанию 0.

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 389 - Отбор по нескольким субконто – дальше

Шаг 389 - Отбор по нескольким субконто – дальше

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

389_1.gif (4015 b)

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

389_2.gif (2882 b)

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

//*******************************************
Процедура Сформировать()
    Т = СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("Таблица");
    Т.ВывестиСекцию("Секция_1");
    Итог = СоздатьОбъект("БухгалтерскиеИтоги");
    Итог.ИспользоватьСубконто(ВидыСубконто.Материалы, , 1);
    Итог.ИспользоватьСубконто(ВидыСубконто.МестаХранения, , 1);
    Итог.ВыполнитьЗапрос(ДатаНач,ДатаНач,ВыбранныйСчет);
    Итог.ВыбратьСубконто(1);
    Пока Итог.ПолучитьСубконто(1) = 1 цикл
        Если  МестоХранения.Выбран()=1 Тогда
            Если Итог.Субконто(2)= МестоХранения Тогда
                Т.ВывестиСекцию("Секция_2");
            КонецЕсли;
        Иначе
            Т.ВывестиСекцию("Секция_2");
        КонецЕсли;
    КонецЦикла;
    Т.ТолькоПросмотр(1);
    Т.Показать()
КонецПроцедуры

Мы два раза вызывали ИспользоватьСубконто а дальше при ВыбратьСубконто, ПолучитьСубконто, Субконто указываем его номер. Все просто.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 390 - Табло счетов как средство слежения за макропараметрами

Шаг 390 - Табло счетов как средство слежения за макропараметрами

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

390_1.gif (3784 b)

Здесь можно добавлять те счета, за которыми мы хотим следить.

390_2.gif (6227 b)

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

390_3.gif (6836 b)

Очень удобно и совсем не обязательно строить отчет. Добавив, например, счет 10 мы можем вообще видеть товарно - материальные запасы.

390_4.gif (1987 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 391 - Справочник неопределенного типа в таблице

Шаг 391 - Справочник неопределенного типа в таблице

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

391_1.gif (8334 b)

Теперь при заполнении таблицы нас будут спрашивать сначала о типе справочника.

391_2.gif (9298 b)

А потом о конкретном его элементе.

391_3.gif (17617 b)

Что позволяет в одной таблице смешивать элементы из разных справочников.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 392 - Как разобраться с неопределенным справочником при проведении ?

Шаг 392 - Как разобраться с неопределенным справочником при проведении ?

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

Вид
Определить вид справочника.

Синтаксис:

Вид(<Название>)

Англоязычный синоним:

Kind

Параметры:
<Название> - Необязательный параметр. Строковое выражение с названием вида справочника.

Возвращаемое значение:
Строковое значение, содержащее текущее название вида справочника (на момент до исполнения метода).

Описание:
Метод Вид позволяет установить или получить текущее название вида справочника. В тексте программы метод Вид можно использовать как процедуру или как функцию. Если при вызове метода параметр <Название> задан явно, то вид справочника устанавливается в соответствии с этим параметром. Метод возвращает строку, содержащую текущий (на момент до исполнения метода) идентификатор вида справочника, как он задан в конфигураторе.

Соответственно при проведении документа реагировать на вид по разному строя корреспонденцию счетов.

// ********************
//
Процедура ОбработкаПроведения()
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Сообщить(Наименование.Вид());
    КонецЦикла;
КонецПроцедуры

Вот результат.

392_1.gif (7691 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 393 - Другой вариант

Шаг 393 - Другой вариант

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

393_1.gif (7465 b)

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

393_2.gif (11175 b)

Кстати такая технология применена во многих документах типовой конфигурации со сложной корреспонденцией счетов. Для примера посмотрите "Шаг 9 - Покупка ОС на наличные", "Шаг 22 - Учитываем услуги сторонних организаций". Теперь при проведении можно направлять элементы на разные счета.

// ********************
//
Процедура ОбработкаПроведения()
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Сообщить(Счет);
    КонецЦикла;
КонецПроцедуры

Вот результат.

393_3.gif (7276 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 394 - И еще один вариант

Шаг 394 - И еще один вариант

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

394_1.gif (8885 b)

И соответственно его заполнять при внесении элементов в справочнике.

394_2.gif (2199 b)

Тогда им можно будет воспользоваться при проведении.

Процедура ОбработкаПроведения()
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Сообщить(Наименование.Счет);
    КонецЦикла;
КонецПроцедуры

Смотрим результат.

394_3.gif (7594 b)

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

  • "Шаг 345 - Что делать когда реквизит не известен"
  • "Шаг 346 - А сохранится ли тип в документе"
  • "Шаг 347 - Типы субконто в соответствии со счетом"
  • "Шаг 348 - Получаем вид субконто"
  • "Шаг 349 - Устанавливаем вид реквизита по счету"


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 395 - Какие проблемы при проведении неопределенного элемента ?

Шаг 395 - Какие проблемы при проведении неопределенного элемента ?

Проблема будет в том, что нам не известен заранее счет, а значит написать что-то типа

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

хоть и можно, но потребует большого количества Если, если счет такой, то один вариант, если другой, то второй вариант и так далее. Но можно написать использую функцию Субконто.

Субконто
Обращение к субконто дебета/кредита проводки (корреспонденции) операции.

Синтаксис:

Субконто(<ПорядковыйНомерСубконто> | <ВидСубконто>, <Субконто>)

Англоязычный синоним:

Subconto

Параметры:
<ПорядковыйНомерСубконто> - Необязательный параметр. Числовое выражение — порядковый номер субконто. По умолчанию 1.
<ВидСубконто> - Значение типа <Вид субконто>.
<Су6конто> Необязательный параметр. Значение субконто. Если параметр не задан — значение не изменяется.

Возвращаемое значение:
Если указан порядковый номер вида субконто или вид субконто, метод возвращает значение субконто.

Описание:
К любому счету или субсчету в плане счетов может быть "прикреплено" до 5 видов субконто. Максимальное количество видов субконто, которое можно "прикрепить" к счету, устанавливается в конфигураторе при редактировании свойств планов счетов. Количество субконто, которое реально прикреплено к счету, не превышает установленного максимального количества.

Все виды субконто, прикрепленные к счету в плане счетов, имеют порядковые номера. Эти номера выдаются в названии колонок для видов субконто в окне редактирования плана счетов; "Субконто1", "Субконто2" ... "Субконто5".

Метод Субконто дебета/кредита проводки служит для получения и установки значения субконто по его номеру или виду соотвественно в дебете или в кредите проводки (коррепспонденции) операции.

Возможность использования субконто конкретного вида или номера определяется счетом дебета/кредита проводки.

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

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

Соответственно мы можем написать.

Операция.Дебет.Субконто(1,Наименование);

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 396 - Когда автоматическое формирование налоговых регистров не сработает

Шаг 396 - Когда автоматическое формирование налоговых регистров не сработает

Несмотря на то, что 1C предусмотрело автоматическое формирование налоговых регистров по данным бух учета (подробнее - "Шаг 325 - Как организован налоговый учет в 1C") воспользоваться этим методов не всегда возможно. Причина в том, что имущество может быть переоценено.

Согласно абзацу четыре и пять пункта 1 статьи 257 НК РФ восстановительная стоимость амортизируемых основных средств, приобретенных (созданных) до вступления в силу 25 главы, определяется как их первоначальная стоимость с учетом проведенных переоценок до даты вступления настоящей главы в силу. При определении восстановительной стоимости амортизируемых основных средств в целях 25 главы учитывается переоценка основных средств, осуществленная по решению налогоплательщика по состоянию на 1 января 2002 года и отраженная в бухгалтерском учете налогоплательщика после 1 января 2002 года. Указанная переоценка принимается в целях налогообложения в размере, не превышающем 30 процентов от восстановительной стоимости соответствующих объектов основных средств, отраженных в бухгалтерском учете налогоплательщика по состоянию на 1 января 2001 года (с учетом переоценки по состоянию на 1 января 2001 года, произведенной по решению налогоплательщика и отраженной в бухгалтерском учете в 2001 году). При этом величина переоценки (уценки) по состоянию на 1 января 2002 года, отраженной налогоплательщиком в 2002 году, не признается доходом (расходом) налогоплательщика в целях налогообложения. В аналогичном порядке принимается в целях налогообложения соответствующая переоценка сумм амортизации.

Если переоценка была, то Вам придется самим писать документ либо для ввода начальных остатков по налоговым регистрам либо производить расчет. Все, что нужно для этого вы знаете и как документ сформировать и как получить сальдовку и обороты по счетам. Так как налоговые регистры забалансовые счета, то операция не будет требовать счет в кредите подробнее - "Шаг 379 - Забалансовые счета".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 397 - Проблемы конфигуратора 1C

Шаг 397 - Проблемы конфигуратора 1C

Одна из проблем заключается в том, что я например не нашел экспорта текста в текстовый файл. Конечно, выделить текст и скопировать в буфер обмена, а потом вставить в блокнот или Word, но этот метод хорошо работает в Windows 98, а вот например в Windows 2000 в связи с пользованием им UNICODE, а не ANSI могут возникать проблемы. Вот, например что происходит при копировании у меня.

397_1.gif (10996 b)

Непонятно, что мешало сделать экспорт текста в файл, хоть убей не пойму. Как с этим бороться. Бороться можно альтернативным конфигуратором. Один из таких конфигураторов носит имя Visual MD Editor. Взять его можно у нас из проекта (извините авторы, но сайты очень часто меняют места или пропадают в небытие) или с сайта авторов. Но как раз к этому моменту сайт авторов недоступен.

397_2.gif (10039 b)

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 398 - Текст в текстовый модуль

Шаг 398 - Текст в текстовый модуль

Для этого воспользуемся конфигуратором описанным в прошлом шаге раз уж 1C этого не предусмотрело. Запускаем и выбираем конфигурацию.

398_1.gif (9403 b)

Дальше в модуле выбираем объект, для которого мы хотим посмотреть текст.

398_2.gif (5274 b)

И наконец долгожданный пункт меню.

398_3.gif (8713 b)

В данном случае текст будет полностью экспортирован и самое главное нормально в Windows 2000.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 399 - Зачем экспортировать текст

Шаг 399 - Зачем экспортировать текст

Во-первых, чтобы писать материалы на сайт. Шутка конечно, но перенос текста очень удобен, чтобы не нести всю конфигурацию из-за изменения кода в модулях. Но есть и другая интересная возможность. Чаще больше всего времени тратится на отладку кода, а не на создания структуры. Но при каждом изменении происходит сохранение данных в конфигурации, а значит монопольный режим, а значит никто не может работать. Но в 1C есть возможность использовать текстовый файл, в котором будет код и соответственно решить все эти проблемы.

#ЗагрузитьИзФайла
Переключение загрузки программного модуля на загрузку из текстового файла.

Синтаксис:

#ЗагрузитьИзФайла <ИмяФайла>

Англоязычный синоним:

ftLoadFromFile

Параметры:
<ИмяФайла> - Имя файла, содержащего исходный текст программного модуля (записывается без кавычек и скобок).

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 400 - Программно создаем группу

Шаг 400 - Программно создаем группу

Разговаривая о переносе справочников мы с Вами как-то про группы забыли:

  • "Шаг 108 - Изучаем справочник – добавляем элемент"
  • "Шаг 109 - Изучаем справочник – Записать"
  • "Шаг 110 - Изучаем XBase - Открываем файл"
  • "Шаг 111 - Изучаем XBase – Переходим на первую запись"
  • "Шаг 112 - Изучаем XBase – Получаем следующую"
  • "Шаг 113 - Изучаем XBase – определяем конец файла"
  • "Шаг 114 - Перенос справочников из одной конфигурации в другую через XBase – в DBF"
  • "Шаг 115 - Перенос справочников из одной конфигурации в другую через Xbase – из DBF"

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

НоваяГруппа.

Синтаксис:

НоваяГруппа

Англоязычный синоним:

NewGroup

Описание:
Метод НоваяГруппа добавляет пустую запись новой группы в справочник. Данный метод может использоваться только для объектов, созданной функцией СоздатьОбъект.

Будем пробовать. Создадим пустой справочник для проверки. И документ который будет добавлять элементы в справочник.

Процедура  Добавить()
    Спр = СоздатьОбъект("Справочник.Проверка");
    Спр.НоваяГруппа();
    Спр.Наименование="Проверка";
    Спр.Записать();
КонецПроцедуры

Смотрим результат.

400_1.gif (9041 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 401 - Добавляем элемент в группу

Шаг 401 - Добавляем элемент в группу

Второй задачей не рассмотренной нами может быть добавление элемента в группу. Для этого нужно использовать атрибут родитель.

Родитель
Значение родительской группы элемента справочника.

Синтаксис:

Родитель

Англоязычный синоним:

Parent

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

Код для использования этого атрибута.

Процедура НовыйЭлемент()
    Спр = СоздатьОбъект("Справочник.Проверка");
    Спр.НайтиПоНаименованию("Проверка");
    Если Спр.Выбран() > 0 Тогда
        Элемент = Спр.ТекущийЭлемент();
        Спр.Новый();
        Спр.Наименование="Новый Элемент";
        Спр.Родитель = Элемент;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры

И проверяем.

401_1.gif (9738 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 402 - Windows 2000 – копируем текст в блокнот

Шаг 402 - Windows 2000 – копируем текст в блокнот

Добрый День!

Уважаемый Артем!

Проблема рассмотренная в шаге 397 решается в Windows 2000 (XP)
следующим образом:
- Выделяется фрагмент.
- Проверяется на какой язык Вы переключены (нужен русский)
- Копируем в буфер
- Вставляем в нужное место.

Если при копирование из 1С был выбран не русский язык то
произойдет как раз то что вы описали в шаге 397.

С уважением Мирошниченко Александр.
mal@compunica.ru

Доверяй, но проверяй. Итак, в шаге "Шаг 397 - Проблемы конфигуратора 1C" я возмутился тем, что копирование текста производится неправильно. Проверим копирование при установленной английской раскладке.

402_1.gif (7814 b)

Абракадабра. Переключимся на русский внутри модуля и опять скопируем.

402_2.gif (7751 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 403 - Ключевое слово - далее

Шаг 403 - Ключевое слово - далее

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

Процедура Проверка1() экспорт далее
Процедура Проверка2() экспорт далее

Процедура Проверка1() экспорт
    Сообщить("Проверка1");
    Проверка2();
КонецПроцедуры

Процедура Проверка2()   экспорт
    Сообщить("Проверка2");
КонецПроцедуры ;

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

403_1.gif (5039 b)

Все в норме.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 404 - Оформление таблиц

Шаг 404 - Оформление таблиц

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

404_1.gif (13296 b)

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

404_2.gif (6317 b)

В результате появляется точно такое оформление.

404_3.gif (3115 b)

Все что нужно после выбора счета – назначить тип данной колонке (если разговор о субконто, то она без типа).

Процедура ПриВыбореСчетаДебета()
    НазначитьТип("СубД1", СчетДебета.ВидСубконто(1));
    НазначитьТип("СубД2", СчетДебета.ВидСубконто(2));
    НазначитьТип("СубД3", СчетДебета.ВидСубконто(3));
КонецПроцедуры

А при проведении документа использовать этот тип:

Операция.НоваяПроводка();
Операция.Дебет.Счет = СчетДебета;
Операция.Дебет.Субконто(1,СубД1);
Операция.Дебет.Субконто(2,СубД2);
Операция.Дебет.Субконто(3,СубД3);

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 405 - Абсолютно универсальный документ

Шаг 405 - Абсолютно универсальный документ

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

405_1.gif (8973 b)

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

405_2.gif (3187 b)

Вот и все. В форме определение субконто.

Процедура ПриВыбореСчетаДебета()
    НазначитьТип("СубД1", СчетДебета.ВидСубконто(1));
    НазначитьТип("СубД2", СчетДебета.ВидСубконто(2));
    НазначитьТип("СубД3", СчетДебета.ВидСубконто(3));
КонецПроцедуры

Процедура ПриВыбореСчетаКредита()
    НазначитьТип("СубК1", СчетКредита.ВидСубконто(1));
    НазначитьТип("СубК2", СчетКредита.ВидСубконто(2));
    НазначитьТип("СубК3", СчетКредита.ВидСубконто(3));
КонецПроцедуры

В проведение указание субконто.

Процедура ОбработкаПроведения()

    ВыбратьСтроки();
    Пока  ПолучитьСтроку()=1  Цикл
        Операция.НоваяПроводка();
        Операция.Дебет.Счет = СчетДебета;
        Операция.Дебет.Субконто(1,СубД1);
        Операция.Дебет.Субконто(2,СубД2);
        Операция.Дебет.Субконто(3,СубД3);
        Операция.Кредит.Счет = СчетКредита;
        Операция.Кредит.Субконто(1,СубК1);
        Операция.Кредит.Субконто(2,СубК2);
        Операция.Кредит.Субконто(3,СубК3);
        Операция.Сумма=Сумма;
    КонецЦикла;
    Операция.Записать();
КонецПроцедуры

Вот и все, да чуть не забыл. Счет может быть количественный. Тогда нужно сделаь колонку количество. Как определить, что счет количественный ? Читаем - "Шаг 41 - Изучаем Счета – Количественный". А еще может быть валютный. Про это пока не писал.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 406 - Определяем, что счет валютный

Шаг 406 - Определяем, что счет валютный

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

Валютный
Признак ведения валютного учета.

Синтаксис:

Валютный

Англоязычный синоним:

IsCurrency

Значение:

  • 1 — валютный учет ведется по данному счету;
  • 0 — валютный учет не ведется по данному счету;

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 407 - Отбор по нескольким субконто – очень не явная ошибка

Шаг 407 - Отбор по нескольким субконто – очень не явная ошибка

В продолжение шагов:

  • "Шаг 388 - Отбор по нескольким субконто"
  • "Шаг 389 - Отбор по нескольким субконто – дальше"

В данных шагах мы рассмотрели общие принципы выборки по нескольким субконто. Но в реализации шага есть одна не точность, а точнее ошибка. Она возникнет, если один и тот же материал (одно и то же субконто, один и тот же элемент справочника будет числиться у двух сотрудников). Уточню, как это может произойти. Вы купили два одинаковых телевизора и дали их по одному в подотчет двум сотрудникам. Так вот, если вы воспользуетесь кодом из шага "Шаг 389 - Отбор по нескольким субконто – дальше", то увидите только один телевизор у одного сотрудника, хотя на карточке счета все будет в порядке. Смотрите:

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

Пока Итог.ПолучитьСубконто(1) = 1 цикл
    Если  МестоХранения.Выбран()=1 Тогда
        Если Итог.Субконто(2)= МестоХранения Тогда
            Т.ВывестиСекцию("Секция_2");
        КонецЕсли;
    Иначе
        Т.ВывестиСекцию("Секция_2");
    КонецЕсли;
КонецЦикла;

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

Итог.ВыбратьСубконто(2);
Пока Итог.ПолучитьСубконто(2) = 1 цикл
    Если Сотрудник=Итог.Субконто(2) Тогда
        ПечатьСекции();
    КонецЕсли;
КонецЦикла;

Видите разницу? Нужно перебрать все субконто второго уровня. То есть общая схема такая.

407_1.gif (4027 b)

Выбирая субконто первого уровня мы можем пройти по конкретным именам. Получив конкретное субконто мы опять можем выбраться все субконто связанные с ним, но уже второго уровня. И опять нужно будет идти по ним. То есть: Связь между субконтами разного уровня – один ко многим.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 408 - Валютные счета

Шаг 408 - Валютные счета

Ох, хорошо же жить в Америке, бакс он и есть бакс. Сомневаюсь, что их компании ведут учет и в рублях и в баксах и евро. Хотя все может быть. Итак, есть факт, что Российская компания может иметь счет в любой валюте, в которой ее согласится держать банк. По правилам бух учета валютный счет 52. Для того, чтобы он в 1С стал валютный нужно установить признак валютного счета.

408_1.gif (1854 b)

Сразу для понимания, на одном валютном счете хранится как минимум информация в двух валютах – рубли и валюта. При этом эти цифры не имеют явного соответствия. Не верите ? Могу доказать, что только так и должно быть. Итак:

1 января 20XX  поступило 20 $ по курсу 3 р.
2 января 20XX поступило 20 $  по курсу 2 р.
3 января 20ХХ поступило 20 $ по курсу 1 р.

Сколько на счете у нас $? Конечно 60. А сколько рублей ? Всего 120 р. Но на 3 января их не 120, а всего 60. Значит нужно пересчитывать курсовую разницу. А чтобы ее пересчитать нужно общую сумму в долларах помножить на текущий курс и вычесть рублевый остаток сформированный в результате операций. В зависимости от того какая сумма получена это либо доход либо расход. Итак, нам постоянно нужно хранить сумму в долларах и рублевый эквивалент для расчета курсовой разницы. Конечно можно было бы считать это курсовую разницу каждый день и проблемм нет. А надо? Ну, лежит там какая-то сумма в течении полгода. Зачем ее каждый день пересчитывать. Раз в месяц как положено. Итак, нам нужна как валютная аналитика, так и аналитика в рублях. Вот поэтому на счете хранится как сумма в рублях, так и сумма в валюте. Расчет курсовой разницы приводит их соотношение в соответствие тому, что установил Центробанк РФ. Кроме того возникает некоторая особенность, когда вы проводите операцию в валюте, то рублевый эквивалент автоматически по курсу высчитывается. Но никто Вам не запрещает просто положить на счет рубли, чтобы компенсировать курсовую разницу.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 409 - Быстрое перемещение по процедурам

Шаг 409 - Быстрое перемещение по процедурам

Вам уже приходилось метаться в поисках нужной процедуры. Нет ничего проще. Открываете нужный модуль и идете в меню "действия", а дальше "процедуры и функции модуля".

409_1.gif (9144 b)

Выбираете этот пункт меню, появится список модулей.

409_2.gif (11781 b)

Выбираете нужный и переходите на него.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 410 - 1C и картинки

Шаг 410 - 1C и картинки

Вообще растровые изображения и 1С тема довольно сложная. Начнем с простого. Итак, в глобальном модуле у нас есть библиотека картинок.

410_1.gif (4760 b)

Выбираем ее.

410_2.gif (4737 b)

В библиотеку картинку нужно добавить.

410_3.gif (905 b)

Теперь указать файл.

410_4.gif (9613 b)

Обратите внимание на огромное количество поддерживаемых расширений. Находим и выбираем.

410_5.gif (5218 b)

Картинка добавлена, к ней можно сделать идентификатор.

410_6.gif (6602 b)

Все готово.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 411 - Картинка на форме

Шаг 411 - Картинка на форме

Если картинка есть в каталоге изображений, то ее можно поместить на форму. Для этого нужно в режиме редактирования формы выбрать элемент картинка.

411_1.gif (753 b)

И поместить ее на форму. В этот момент нужно будет указать свойства.

411_2.gif (4458 b)

Нажимаем на кнопку изменить картинку для выбора нужной.

411_3.gif (9270 b)

Выбираем и нажимаем OK. Картинка будет на форме.

411_4.gif (7676 b)

То же самое можно сделать и в таблице отчета.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 412 - Загрузка картинки из внешнего файла

Шаг 412 - Загрузка картинки из внешнего файла

Еще один способ связан с возможностью загрузки картинки из внешнего файла. Для этого у картинки, которая кстати объект, есть процедура загрузить. Итак, картинка уже у нас помещена. Создадим ее идентификатор и кнопку на форме для привязки кода.

412_1.gif (11114 b)

Посмотрим описание процедуры.

Загрузить
Загрузить из файла.

Синтаксис:

Загрузить(<ИмяФайла>)

Англоязычный синоним:

Load

Параметры:
<ИмяФaйлa> Строковое выражение, которое может задавать или идентификатор картинки в библиотеке картинок конфигурации или имя файла картинки.

Описание:
Метод Загрузить загружает картинку из файла с указанным именем <ИмяФайла> или берет по идентификатору картинку из библиотеки картинок конфигураци. Файл может быть следующих форматов:

.wmf	.emf	.ico	.bmp	.dib	.rle

Используем ее для загрузки картинки.

Процедура  Загрузить()
    Картинка.Загрузить("C:\WINDOWS\HELP.ICO");
КонецПроцедуры

В результате, если такая картинка у Вас есть, по нажатию на кнопку внешний вид изображения изменится.

412_2.gif (7281 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 413 - Опять опасности при выборе данных по субконто

Шаг 413 - Опять опасности при выборе данных по субконто

Продолжаем развивать тему начатую в:

  • "Шаг 388 - Отбор по нескольким субконто"
  • "Шаг 389 - Отбор по нескольким субконто – дальше"
  • "Шаг 407 - Отбор по нескольким субконто – очень не явная ошибка"

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

413_1.gif (3563 b)

То есть у счета 03 не стояло субконто материалы. При попытке построить отчет по данному виду субконто я не мог получить суммы, а только количество во всех стандартных и своих отчетах. Так что, если суммы не бьются попробуйте обратить внимание на наличие необходимых субконто у счета группы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 414 - Быстрое построение отчетов по субконто

Шаг 414 - Быстрое построение отчетов по субконто

Со всякими радостями мы уже были знакомы в шагах:

  • "Шаг 201 - Пара слов о синтаксисе помощника"
  • "Шаг 250 - Синтаксис помощник и шаблоны"

Теперь пора нам научиться быстро строить отчеты по субконто. Многие отчеты в типовой конфигурации бухгалтерам не привычны. Это не хорошо, они не очень хотят менять эти привычки. Итак, как можно быстро построить отчет. Создаем новый пустой отчет, вызываем синтаксис помощника и в нем находим "Конструктор – Бухгалтерский запрос".

414_1.gif (14006 b)

Запускам. Сначала нас просят имя процедуры.

414_2.gif (3626 b)

Ее можно оставить как есть. Следующий вопрос будет тип отчета, выберем "произвольный".

414_3.gif (7603 b)

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

414_4.gif (2973 b)

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

414_5.gif (6936 b)

Если нужна аналитика, то можно конкретно указать по какому субконто проводить отбор.

414_6.gif (9334 b)

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

414_7.gif (9596 b)

Соответственно, что если склад, то материал.

414_8.gif (5437 b)

В колонках можно добавить другой признак. Например, счет:

414_9.gif (2317 b)

И тогда будет отображены суммы операции по счетам, а можно и субконто другое указать, чтобы посмотреть обороты между складами. В конечной итоге Вы получите форму, в которой все настроено.

414_10.gif (7620 b)

Внимательно посмотрев процедуры Вы увидите, что она мало отличается от того, что мы изучали в шагах:

    "Шаг 388 - Отбор по нескольким субконто" "Шаг 389 - Отбор по нескольким субконто – дальше" "Шаг 407 - Отбор по нескольким субконто – очень не явная ошибка"

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

Предыдущий Шаг | Оглавление


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

Народная бухгалтерия

А ты подписался на рассылку ???
Новости сайта "ПЕРВЫЕ ШАГИ"
Шаг 1 - Описание проекта (22.08.2002 - 4.1 kb)
Шаг 2 - Предварительные замечания к структуре проекта (22.08.2002 - 4.6 kb)
Шаг 3 - Структура проекта (22.08.2002 - 4.4 kb)
Шаг 4 - Инструментарий (22.08.2002 - 3.0 kb)
Шаг 5 - Описание данных, с которыми работает Дизайнер (22.08.2002 - 13.8 kb)
Шаг 6 - Системная поддержка (22.08.2002 - 9.0 kb)
Шаг 7 - Описание данных, с которыми работает "Администратор Пользователей" (22.08.2002 - 34.0 kb)
Шаг 8 - А вот теперь о "бухгалтерском" в этой системе (05.09.2002 - 3.5 kb)
Шаг 9 - Описание структуры данных "бухгалтерии" (05.09.2002 - 23.0 kb)
Автор раздела: Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 1 - Описание проекта

Шаг 1 - Описание проекта

Хм... "народная бухгалтерия" - FolkBookkeeping(FB)... с чего же начать?

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

- а нужна ли?
- а какие задачи она должна решать?
- а на каких программных платформах это надо бы делать?
- а какая должна быть структура данных?

Нужна ли. Вот пожалуй самый сложный вопрос... а может просто уже надоело бороться с чужими ошибками, которые почему-то никто (авторы) не желают исправлять... а может пришло время, когда уже просто надо делать? да кто-ж - это знает... Да и вообще, почему люди начали "линух" ? (или что, меня мучает гордыня?) :-)) Хотя, на самом деле, я не знаю ответа...

Задачи. Что, "тривиальный" :-)) Б/У? :-)) так это уже есть... можно конечно, развиваться и в этом направлении... особенно если у нас большая система, и должна она "переваривать" действительно много документов... А может "управление производством" ? слышал тут слова MRP и MRP II, вот интересно было бы посмотреть, что получится от попытки реализации... :-) хотя, если говорить точнее, то промблем заключается в соответствии задач, которые ставит пред инструментом реализация принципов, заложенных в MRP и выразительных возможностей структуры данных (да и языка реализации)... Ну вот... снова "дележка" ? - или "Б/У" или "Управление производством" и что, двойной ввод данных? (по-меньшей мере) А может в итоге должно получится нечто грандиозно-целое? :-)) - все, и менеджеры и бухгалтера "крутятся" вокруг одних и тех же данных, а вот что попадает в налоговые отчеты ??? (нда... замахнулся я однако...) хотя, слово не воробей... - может общими усилиями и удастся объединить в одной базе, фактически, в едином учете все - и Управление и Б/У... (а может я просто изобретаю валасипед, а вся прогрессивная общественность уже знает ответ? :-)) - и, более того, даже может поделится идеями... Так давайте их, давайте сюда, и быстрее!

В общем, конкретизирую: нужны - список документов (название-и-Что-Делает) и наборы проводок по за балансовым счетам, которые должны совершать означенные документы, для реализации задуманного.

Вот, а это уже самое интересное. Да, на чем все должно работать? C/C++, VB, Java... для написания клиентов, и данные, которые в SQL, а какой фирмы? - они имеют отличия в синтаксисе. Каждая из платформ имеет свои положительности и отрицательноси, как водится. На чем же остановится? Что выбрать? А может и выбирать - то не надо? Может надо писать на том, на чем пишется, и всего лишь определить некую единую структуру данных? И придерживаться ее во всех реализациях?

И вот, (разминки ради) я предлагаю наш (личный) взгляд на нее. Пока данный взгляд описан на http://folkb.narod.ru со временем, новая версия будет выложена сюда, а пока же... все есть - как - есть...

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

Изложение материала... Это естественно, проблема... Система, которую я берусь описывать - "Клиент-Серверная"... Логика, естественно, размазана по обеим частям. Мы решили, что собственно описание построения бухгалтерии объединим с описанием данных (все это серверная часть изложения). А вот описание клиентских частей объединились с шагами, которые будут посвящены работе с продуктом фирмы Centura SQLWindows (CTD).

Эти шаги буду вести я, Голиброда Александр. А вот тему, о которой я взялся рассказывать, мы обдумывали и писали вместе с Сергеем Терещенко.

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

Ну все, хватит слов, пора переходить к описанию проекта FB.

Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 2 - Предварительные замечания к структуре проекта

Шаг 2 - Предварительные замечания к структуре проекта

Начну с принципов, на которых мы построили нашу систему. Сразу предположилась некоторая документо-ориентированность. Что это значит? Мы подумали, что в основе любых хозяйственных действий лежат документы (это могут быть счета, счета-фактуры, платежные документы, накладные... ) все эти документы имеют строго определенную форму и, главное, унифицированное содержание, а при попадании в центр учета (Ц.У.) приводят к строго определенным изменениям в бухгалтерских отчетностях.

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

Еще один важный аспект: в принципе, любая компьютерная и бухгалтерская система имеет 2 уровня работы - "информационный" - показывает когда, для какого клиента и по какому поводу были произведены те или иные хозяйственные действия (то, что вылилось в создании, редактировании и сохранении (проводке) того или иного документа), и "чисто бухгалтерский" - на какие счета пошли те суммы, о которых говорится...

И так, документы. Документы "возникают" в процессе жизнидеятельности предприятия, "бумажные" копии их "разлетаются" в разные стороны, а сами они "оседают" в БАЗЕ первичных документов ("информационная" часть). Между документами и записями в Бухгалтерских книгах есть некая операция, которая называется "разноска" (а может так ее назвали мы (я не знаю)). Важно, что документу в целом, или каждой строке документа соответствует некоторое количество строчек в книге бухгалтерских операций, причем, естественно, разные по типу документы порождают разные "наборы" строк. Когда происходит разноска? да, по-большому счету, когда угодно, можно, наверное, и в конце месяца разнести все документы, которые были созданы на предприятии, а можно это делать автоматически, в момент сохранения документа в базе.

Что еще? Что делать, если организация заказчика распределенная, т.е. работает несколько центров учета(Ц.У.), и данные, несколько раз в день должны передаваться в центр управления (а может и обратно....). Представим себе структуру состоящую из "конторы", которая получает заказы, и нескольких цехов, разбросанных... ну, допустим, по региону, которые эти заказы выполняет... документопоток из заявок (нарядов) и "актов выполненных работ" будет встречным.... Мы услышали замечательный термин - "репликация". Очень понравилась идея - возможность работать, изредка обмениваясь данными. Как раз то, что нужно было нам.

Как организовать систему? Решили, что приятнее всего для хранения данных использовать SQL сервер, который быстро обрабатывает данные, имеет встроенную систему распределения прав и много чего другого... Что же делать с клиентами? - тут есть несколько подходов: можно сделать нечто "глобальное", с встроенным языком, и потом на этом языке уже описывать систему (в неких "внутренних" скриптах). Но, разработка языка и "виртуальной машины" для исполнения собственно скриптов, путь, конечно, не плохой, но очень трудоемкий - разработать нормальный язык описания задачи, придумать к нему "виртуальную машину"... У нас для этого просто не было времени.

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

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

И, если уж мы заговорили о большой системе, так надо говорить и об администрировании Прав Пользователей... да и администрировать "Ц.У." тоже как - то надо...

Вот, вроде с "предварительными замечаниями" я закончил...

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 3 - Структура проекта

Шаг 3 - Структура проекта

Всякая структура определяется задачами... И какие же задачи имеет эта система?

  • вводить-редактировать-удалять данные (это можно делать с помощью набора пользовательских документов)
  • получать некие отчеты о данных (набор отчетных форм - возможно, первые пункты обьединятся...);

Это так сказать, "внешние проявления" - то, что видит конечный пользователь продукта, но ведь есть и еще кое-что...

Служебная "секция":

  • асистирование в разработке новых документов
  • администрирование прав пользователей
  • администрирование системы реплицырования

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

с чего начать? Ну, наверное, со "служебки"... Система должна развиваться... И, если уже было сказано, что каждый документ реализован в "екзешнике", а документов, как предполагается, будет много, то что сделать, что бы элементарно в этом хозяйстве не запутаться? :-)) Да, кроме того, документы, а вернее данные, которые редактируются документами, хранятся в табличках, а к табличкам надо присобачить всяких там индексов, да ключиков... как-то сразу подумалось, что процесс надо механизировать... что еще? А еще есть отчеты или просто бумажные копии документов, и их тоже надо редактировать...

В общем, так и определились требования к разработке:

  • возможность просмотра списка документов
  • редактирование параметров документа
  • запускать внешние модули для разработки "екзешника" и редактирования отчетов;
  • редактирование и создание таблиц, входящих в документ
  • издавать "екзешник"

А это еще что такое "издавать экзешник" ? Например, пользователю нужен тот набор документов, работать с которым ему разрешено. Хочу сказать сразу, пользователи, в наше время, чаще всего, объединены в локальные, а иногда, и не очень локальные сети... Как поставить новый "экзешник" на самую дальнюю машину в сети? Можно, конечно, бегать и устанавливать... удовольствие? Вряд ли... что предложить? Да пусть документы на пользовательские машины ставятся сами... :-)) конечно, чтобы продать что-то ненужное, надо иметь что-то ненужное... (так говорили в одном мультфильме)... для нашего случая картинка такова: На пользовательскую машинку ставится некое ядро, прописывается конфигурация, и, пользователь начинает работу... Запускается некий модуль ("Стартовалка"), который после авторизации проверяет, есть ли на текущей машине нужные (разрешенные) "И.М." документов, и, если нет, записывает их... откуда берутся "И.М." ? из базы естественно! :-)) А как назвать процесс внесения "И.М." в базу? Может "издание"? :-))

Что еще? ПРАВА! Да, пользователи... их много.... много и документов, а в документах много табличек.... уф! Что делать? В SQL, конечно есть команды - завести пользователя (или убрать). Дать право _чтото_там_делать_ с данными, (или забрать его) но, если всего много, так сразу хочется механизаций, так и возник "администратор прав"

Про то, что система должна быть большой и распределенной я уже обмолвился, и, получается, что данные каким-то образом должны перетекать между разными "Центрами Учета", а как это движение должно происходить? Вот именно организацией такого процесса (репликации) и должен заниматься "Репликатор-Менеджер" и, собственно процесс управляется "Репликатор-Агентом".

Теперь посмотрим, что нужно пользователям: Естественно, некое, неизвестное, и неразработанное количество документов (накладные, платежки, ...) что еще? Естественно, нужна возможность просмотреть список введенных документов и редактор проводок... следовательно, нам нужны соответствующие "екзешники". В любом хозяйстве есть некие "справочники" - и к ним тоже нужен доступ....

Ну вот, если понимать структуру проекта, как некий набор "екзешников", то мы определились, и остановились на вот таком списке:

  • Системная секция:
    • _Дизайнер
    • _Управл.Пользов.
    • _РеплиМанагер
    • _РеплиАгент
  • Пользовательская секция
    • _Стартовалка
    • _ПросмотрДокументов
    • _РедПРОВОДОК
    • _ПервСправочн
    • и еще много - много пользовательских документов...
Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 4 - Инструментарий

Шаг 4 - Инструментарий

Поскольку описываемый проект уже несколько реализован, и сейчас "просто" описывается, то естественно, все представлено на языках разработки - продуктах фирмы "Gupta (Centura)".

И где же их взять? (если Вам это чудо не досталось в наследство от Бабушки.... :-))

Естественно было бы сказать "купить", да по-идее, так и надо поступать... вот только цена "кусачая"... так что, естественно, стоит много раз подумать.... да и "попробовать". Естественно есть места, где можно взять версию и "Team Developer-а" и "SQLBase" дабы посмотреть.... и вот если уж понравилось, тогда и покупать можно...

И так, "закрома Родины":

Естественно, сайт фирмы-разработчика: http://www.centurasoft.com/tech/product_downloads.asp

Там табличка, и в ней можно найти вот такие слова: Team Developer 2.1 (Evaluation) и SQLBase (Evaluation).

Ну, что тут сказано, надеюсь, всему просвещенному человечеству и без моих объяснений понятно, и на что жать тоже...

Можно посмотреть и поближе:

На сайте Московской фирмы "Интерфейс" http://www.interface.ru/fset.asp?Url=/dl/dl.asp есть CTD 2.1 (Centura Team Developer 2.1) и Centura SQLBase 7.6 (server). Вот только хочу сразу предупредить: тянуть придется ДЕЙСТВИТЕЛЬНО МНОГО!

Что делать, если такой возможности нет? - тут можно попросить фирму "Интерфейс" прислать диск с "ознакомительными версиями" где оформить заказ, я не помню, посмотрите на их сайте, и, Да поможет Вам Бог! :-))- могу сказать сразу, мне ОН помог, и я, в свое время, "ознакомиться" сумел.. :-)

Хотя, если Вы студент, и у Вас есть знакомый преподаватель... Вам крупно повезло - на "Интерфейс-е" есть целая программа работы с учебными заведениями, и... в общем, пробуйте! :-))

Как ставить?

ctdХХХ.exe - интегрированная среда разработчика, именно то, с помощью чего мы будем писать, компилить, отлаживать, делать "екзешники".

deployХХХ.exe - набор дилллелек, с помощью которого работают готовые "екзешники" на машинах, где нет "ctd".

sbserver.exe или что-то подобное - инсталлятор SQL-сервера.

А вот описывать процесс инсталляции??? Запустить " екзешники" с инсталляциями, ответить (правильно) на вопросы... Фирма постаралась, и в момент инсталляции лично у меня проблем не было... Да, на всякий случай, ctdbooks.exe (или что-то вроде этого) - замечательный набор документации! - ОЧЕНЬ полезно! (хотя и МНОГО "весит"!).

А вот конфигурирование сервера... вот, наверное, что может поначалу вызвать трудности... Хотя, и тут надо отдать производителям должное, первоначально все работает, а вот желание все поставить не так, как думали разработчики, а так, как нравится Вам, приходит позже, и тогда... да, у Вас, я надеюсь, уже возникнет опыт, и проблем тоже не будет.

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 5 - Описание данных, с которыми работает Дизайнер

Шаг 5 - Описание данных, с которыми работает Дизайнер

Скажу сразу, что описание данных я буду давать в синтаксисе SQLBase. А теперь рассмотрим, как задачи, которые помогает решать Дизайнер повлияли на структуру данных...

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

Список числовых констант:

CREATE TABLE SYSADM.CONSTNUMB (
    ID VARCHAR(18) NOT NULL,
    IDENVIR DOUBLE PRECISION,
    NAMECONST VARCHAR(50),
    SENSE DOUBLE PRECISION
)
/

ID - что тут сказать? Константы нужны, и выбор будет происходить именно по идентификатору. Особенность в том, что эти ID символьные (почему именно, я расскажу чуть позже), а пока же, давайте просто примем - идентификаторы у нас символьные.

IDENVIR - для удобства редактирования (представления) данных для пользователя мы разделили их на разделы по тематическим областям, и сразу, регион под номером "-1" - список системных констант.

NAMECONST - название константы

SENSE - значение

Список строковых констант:

CREATE TABLE SYSADM.CONSTCHAR (
    ID VARCHAR(18) NOT NULL,
    IDENVIR DOUBLE PRECISION,
    NAMECONST VARCHAR(50),
    SENSE VARCHAR(253)
)
/

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

Теперь можно начать разговор о дизайнере. Начинаем со списка заготовок документов: Понятно, что каждый документ должен быть как-то описан... естественно, название, некий "тип"...

CREATE TABLE SYSADM.LISTPATTERN (
    ID VARCHAR(18) NOT NULL,
    DOCNAME VARCHAR(20) NOT NULL,
    DOCABOUT LONG VARCHAR,
    IDDOCTYPE VARCHAR(18),
    IDSOUAPP VARCHAR(18),
    IDSOUWIZ VARCHAR(18),
    IDBDAPP VARCHAR(18),
    IDBDWIZ VARCHAR(18)
)
/

ID - каждый документ имеет свой, уникальный Идентификатор.

DOCNAME - название, а как же без названия? :-)

DOCABOUT - описание документа.

IDDOCTYPE - тип документа - Идентификатор строки из таблицы CONSTNUMB.

IDSOUAPP - Идентификатор исходника приложения

IDSOUWIZ - Идентификатор исходника волшебника

IDBDAPP - Идентификатор "экзешника" приложения

IDBDWIZ - Идентификатор "экзешника" волшебника

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

Ограничения:

ALTER TABLE SYSADM.LISTPATTERN FOREIGN KEY LIPAT001 (
IDDOCTYPE) REFERENCES SYSADM.CONSTNUMB
/

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

ALTER TABLE SYSADM.LISTPATTERN FOREIGN KEY LIPAT002 (
IDSOUAPP ) REFERENCES SYSADM.LISTBODY
/

ALTER TABLE SYSADM.LISTPATTERN FOREIGN KEY LIPAT003 (
IDSOUWIZ ) REFERENCES SYSADM.LISTBODY
/

ALTER TABLE SYSADM.LISTPATTERN FOREIGN KEY LIPAT004 (
IDBDAPP ) REFERENCES SYSADM.LISTBODY
/

ALTER TABLE SYSADM.LISTPATTERN FOREIGN KEY LIPAT005 (
IDBDWIZ ) REFERENCES SYSADM.LISTBODY
/

Да, уважительное отношение с "телам" :-)) - по идее, очень правильно.

Документ, как некая экранная форма, состоит из полей (числовых, символьных и т.д.) и табличек. Данные документа хранятся в базе данных в неких табличках, список полей - в одной, (наверное) каждая из таблиц в другой. Вот их - то и надо определить, создать, и не просто создать, а навесить достаточно много ограничений целостности. Как все это автоматизировать? Почти никак, ну, разве что, можно (и нужно) позволить разработчику придумать структуру таблицы, а вот слово CREATE можно поручить компьютеру, да и вдобавок, структуру таблицы придумали в одном месте, а создать ее надо на сервере, который находится... (очень далеко) вот... И что делать?

Мы подумали и решили, что с документами в этой системе будет связан список подчиненных табличек...

CREATE TABLE SYSADM.LPATTABLES (
    ID VARCHAR(18) NOT NULL,
    IDDOC VARCHAR(18),
    TABNAME VARCHAR(18) NOT NULL,
    TABLEABOUT LONG VARCHAR,
    FLAG CHAR(1),
    IDTABDERIVE VARCHAR(18)
)
/

ID - уникальный Идентификатор описываемой таблицы

IDDOC - Идентификатор документа, хозяина таблицы

TABNAME - имя таблицы

TABLEABOUT - описание таблицы

FLAG - флаг, идентификатор из таблицы

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

Ограничения:

ALTER TABLE SYSADM.LPATTABLES FOREIGN KEY LIPATTAB001 (
IDDOC) REFERENCES SYSADM.LISTPATTERN
/

Нам важно, чтобы было нельзя удалить описание документа, если еще существуют его таблицы.

Всякая таблица в любом SQL-сервере состоит из колонок... значит, нам нужно их описание...

CREATE TABLE SYSADM.LTABCOLUMNS (
    IDTAB VARCHAR(18) NOT NULL,
    NUMORD DOUBLE PRECISION NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    TYPECOL VARCHAR(20) NOT NULL,
    LENGTH DOUBLE PRECISION,
    "PRECISION" DOUBLE PRECISION,
    SETIND CHAR(1),
    OFDELRIVE CHAR(1)
)
/

IDTAB - идентификатор родительской таблицы

NUMORD - номер столбца, вообще говоря, ни к чему не обязывает, но, но просто приятно видеть столбцы в правильном порядке....

NAME - понятно, название

TYPECOL - тип данных, выбор из списка данных, с которыми работает сервер... правда, не все так просто - есть еще и наши типы, а вот с ними надо будет разбираться еже при описании "экзешника" - все там...

LENGTH - длина данных ("CHAR", "DECIMAL")

PRECISION - точность, для столбцов типа DECIMAL

SETIND - флажок индексируемости, если мы подозреваем, что нам надо индексировать текущий столбик, то...

OFDELRIVE - это показатель унаследованности :-), если табличка, вернее некоторая часть ее колонок точно такая же как и в некой иной таблице (той, что можно считать предком текущей...)

Ограничения:

ALTER TABLE SYSADM.LTABCOLUMNS FOREIGN KEY LTCOLUMNS001 (
IDTAB ) REFERENCES SYSADM.LPATTABLES
/

Нам важно, чтобы было нельзя удалить описание таблицы, если еще существуют ее колонки.

Ну вот, чем дальше в лес, тем толще помидоры... Про репликацию я уже говорил? Да, и про то, что надо иметь возможность каким-то образом создать таблицы, принадлежащие документу, на неком очень удаленном сервере... как? Возможно неким "экзешником", который будет вести процесс реплицирования. И, для работы этого процесса нам нужно подготовить список команд. И вот что получается: Дизайнер, анализирую состав таблиц LPATTABLES и LTABCOLUMNS генерирует набор SQL команд, при исполнении которых открываются необходимые SQL-объекты.

Таблица для хранения списка этих команд:

CREATE TABLE SYSADM.LISTCREATEOBJ (
    IDTABLES VARCHAR(18) NOT NULL,
    NUMORDER INTEGER NOT NULL,
    TEXT LONG VARCHAR
)
/

IDTABLES - Идентификатор таблицы, которой принадлежат команды.

NUMORDER - номер по порядку выполнения команд (известно ведь, что правильнее сначала открыть таблице, а потом открывать ее индексы)

TEXT - собственно, текст команды.

Ограничения:

ALTER TABLE SYSADM.LISTCREATEOBJ FOREIGN KEY LITABLE0621 (
IDTABLES) REFERENCES SYSADM.LPATTABLES
/

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

Следующий вопрос на повестке дня - отчеты... и, небольшое отступление: Мир не идеален, и поэтому во многих местах еще требуют "бумажки" :-) и, наша система (документы) их, по-идее, должна делать... причем, очень часто получается, что у одного документа должно быть несколько бумажных представлений. Их проще всего назвать "отчетами".

Что еще? Подготовку отчета к печати делает (во-всяком случае в нашей системе) сторонний модуль. Да и разработка внешнего вида тоже чего - то стоит... и этого нужны некие данные... вот их то мы и оформили в таблицу.

CREATE TABLE SYSADM.LISTREP (
    ID VARCHAR(18) NOT NULL,
    IDDOC VARCHAR(18),
    NAME VARCHAR(20),
    NAMESELECT VARCHAR(18),
    STRINTO LONG VARCHAR,
    STRWHERE LONG VARCHAR,
    STRITEM LONG VARCHAR,
    IDBODY VARCHAR(18)
)
/

ID - Идентификатор

IDDOC - Идентификатор документа-"хозяина"

NAME - имя отчета

NAMESELECT - название команды выбора данных (из списка хранимых команд)

STRINTO - строка с перечисленными полями "куда"

STRWHERE - строка параметров выбора данных

STRITEM - строка переменных отчета - в полном соответствии со строкой STRINTO

IDBODY - Идентификатор соответствующей строки из таблицы LISTBODY, в одном из столбцов которой находится "тело" отчета

Ограничения:

ALTER TABLE SYSADM.LISTREP FOREIGN KEY LISTREP001 (
IDDOC) REFERENCES SYSADM.LISTPATTERN
/

Естественно, не хотелось бы позволить удалить описание документа, если существуют описания отчетов.

ALTER TABLE SYSADM.LISTREP FOREIGN KEY LISTREP002 (
IDBODY) REFERENCES SYSADM.LISTBODY
/

Тело отчета... не хотелось бы позволить "шаловливым ручкам" удалить его из базы...

Вот и добрался я до уже несколько раз произносимого названия - LISTBODY. Документ это не только данные, но и "экзешники", "отчеты", а кроме этого есть еще и исходные тексты... что еще? А вдруг для нормальной работы "экзешнику" нужны еще и некие "dll"... И есть необходимость доставить все это хозяйство к пользователю... А ведь мы заранее не знаем, где будет работать некий документ (я имею ввиду географию расположения компьютеров, то ли это соседний кабинет, а может и за тридевять земель) и, мы не представляем, с каким сервером документ будет обмениваться данными, единственное, что точно известно, так то, что все сервера связаны друг с другом, и по неким правилам обмениваются данными. (Репликация же предполагается :-))

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

CREATE TABLE SYSADM.LISTBODY (
    ID VARCHAR(18) NOT NULL,
    IDDOC VARCHAR(18) NOT NULL,
    NAMEFILE VARCHAR(254),
    BODY LONG VARCHAR,
    SIZE DOUBLE PRECISION,
    BODYDATE TIMESTAMP,
    FLAG CHAR(1) NOT NULL
)
/

ID - Идентификатор

IDDOC - Идентификатор Документа, которому принадлежат "единицы хранения"

NAMEFILE - имя файла, хранимого в строке...

BODY - собственно хранимый объект

SIZE - размер объекта

BODYDATE - дата создания файла, который был залит в базу сделано для сверки версий файлов на клиентской машине и в базе. Если в базе соответствующий файл новее, то его можно перелить на клиентскую машину...

FLAG - "A" - исходник, "E" - "экзешник", "D" - DLL'ка - возможно, когда-нибудь понадобится... "R" - "отчет"

Ограничения:

ALTER TABLE SYSADM.LPATTABLES FOREIGN KEY L001 (
IDDOC) REFERENCES SYSADM.LISTPATTERN
/

Не хотелось бы позволить удалить описание документа, если существуют некие объекты, связанные с документом...

Так что, уже добрались до списка документов? :-)) хорошо...

Мы считаем, что все документы, с которыми будет работать система имеют некие общие параметры - в частности, номер, дату, и автора, а кроме того, некие комментарии, сумму и количество. Вот это мы и решили объединить одну таблицу.

CREATE TABLE SYSADM.LISTDOC (
    ID VARCHAR(18) NOT NULL,
    DOCNUM VARCHAR(20),
    DOCDATE DATE,
    IDDOC VARCHAR(18),
    IDUSER VARCHAR(18),
    STRCOMMENT VARCHAR(128),
    NCQUERY DECIMAL(15, 3),
    NCSUMM DECIMAL(15, 3)
)
/

ID - Идентификатор данных документа

DOCNUM - номер документа

DOCDATE - дата создание документа

IDDOC - Идентификатор Документа, на самом деле это ТИП документа. (Идентификатор строки, из таблицы LISTPATTERN)

IDUSER - Идентификатор пользователя (из списка пользователей) - об этом я еще много- чего расскажу, но, чуть - попозже...

STRCOMMENT - комментарии...

NCQUERY - иногда про документ хорошо знать некое количество...

NCSUMM - тоже самое можно сказать и про сумму...

Ограничения:

ALTER TABLE SYSADM.LPATTABLES FOREIGN KEY LDOC001 (
IDDOC ) REFERENCES SYSADM.LISTPATTERN
/

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

ALTER TABLE SYSADM.LPATTABLES FOREIGN KEY LDOC002 (
IDUSER ) REFERENCES SYSADM.LISTUSER
/

Аналогично, пользователи - создатели документов, ну не правильно же позволить удалить пользователя, если еще есть документы им созданные...

Интересный вопрос - а как (реально, как) удалить некий документ? - то есть, после создания документа, после полу- годовой работы с ним пользователей :-)) - мы (господа "криэйторы) вдруг обнаружили, что некий документ оказался лишним, и его надо удалить полностью ! Процесс "выкусывания" оказался несколько нетривиальным, и его обсуждение я решил вынести на повестку дня отдельно...

А пока мне осталось только добавить маленький кусочек - набор всех описанных табличек в одном SQL файле, который Вы можете взять из проекта.

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 6 - Системная поддержка

Шаг 6 - Системная поддержка

В этой разработке я пользуюсь продуктами "Gupta (Centura)", как и любые инструменты, они имеют некоторые особенности (и недостатки)... вот этому я и посвящу сегодняшний рассказ...

Неприятная проблема, с которой нам пришлось бороться это длина number - как мы обнаружили, сервер поддерживает только 15 разрядов, по жизни такая длина нормальна. Но, если говорить о длине индексных полей, и соответственно, объеме индексного пространства, то, оно мне показалось недостаточным. (Для примера, длина number в Oracle 35 разрядов.) А если мы говорили о распределенной (сетевой) системе учета, в основе которой лежат "центры учета" и между которыми, по определенной технологии, осуществляется репликация данных, самым главным свойством индексов есть их уникальность в системе, и, как обеспечить их в "сети"? Проще всего добавить поле с индексом сервера, и "закатать" двойной "примари индекс" но, что - то мне в "двойных индексах" не понравилось, я решил пойти "другим путем". Меня заинтересовал вопрос, а можно ли два индекса заменить одним? понятно же, что количество ункальных серверов данных будет невпример меньше, чем размер индекса... Можно же и выделить для каждого сервера "секвенс"- диапазоны. Как? Да выделяем каждому серверу двухразрядный номер ( если серверов в сети может быть не более 99) или трехразрядный, для 999, берем текущий секвенс умножаем его на 100 (или 1000) и складываем с номером сервера вот вам и уникальные Идентификаторы. Но, что останется от секвенса при умножении? Ведь у нас всего 15 разрядов (а у меня мания переполнения :-)). Я решил перейти на символьные Индексы - и сделал индексную арифметику - по основанию 232. Да, именно, столько - дело в том, что первых 32-х символов в таблице символов сервера нет, и... вот и пришлось несколько ограничить аппетиты. Но, и в этом случае строкой в 18 символов я смоделировал размеры "Ораклового" индексного пространства.

Теперь я расскажу, как это работает. Табличка, совершенно необходимая для процесса:

CREATE TABLE SYSADM.NUR (
    ID DOUBLE PRECISION
)
/

ID - просто номер... им активно пользуемся...

Теперь пора описать процесс создания индексов.

Вот текст процедуры, которая создает новых "членов" в индексной последовательности.

STORE SYSADM.GETMAXID Procedure: GetMaxID static
    Parameters
    String: name_Tbl ! Это некий параметр, - название таблицы
        - не используется в ЭТОЙ версии...
    Receive String: strSequense ! а вот тут мы получим
        ГОТОВЫЙ новый секвенс...
    Local variables
    Sql Handle: hSqlUp
    Number: nOk
    Number: FchOk
    Number: IDBase
    Number: codeCurrent ! код текущего символа
    String: chCurrent ! текущий символ
    String: chNext ! текущий символ, с прибавленной еденицей (символ
        следующий в таблице символов за текущим)
    Number: IsGetNext ! если ожидаем увеличение разрядности.
    Number: Lang
    Number: nRow
    String: lRowid
    String: strIDBase
Actions
    Call SqlConnect ( hSqlUp )
    Set strSequense = ''
    Set nRow = 0
    Set Lang = 100
    When SqlError
    Set nOk = SqlError (hSqlUp) !на всякий случай, надо и на
        ошибки проверять...
    Return FALSE

    ! нам нужно получить новый символьный индекс.
    Как Это сделать? - проще всего (для меня)
    оказалось получить текущий индекс, разложить его
    на "составляющие символы, получить их номера, к
    каждому прибавить по единице, и снова превратить
    в символы... говорил я эти слова долго, но, не все
    так страшно - все эти действия делает один
    селект, и вот результат его работы я и разбираю..

    Call SqlRetrieve(hSqlUp, 'sysadm.GetMaxIDCO', '', ':codeCurrent,
        :chCurrent, :chNext, :Lang, :lRowid, :strIDBase ' )
    Call SqlExecute(hSqlUp)
    While nRow < Lang
        Call SqlFetchRow(hSqlUp,nRow, nOk)
        ! выбрав очередной символ из
        последовательности проверяю
        If ( nRow = 0 ) OR ( IsGetNext = 1 )
            ! Если ЭТО начало, то, я могу "вместо
            здрасти" просто начать со "следующего" за
            текущим символа... или же, у нас "переход
            разряда"....

            Set strSequense = chNext || strSequense
            If ( codeCurrent = 255 )
                Set IsGetNext = 1
            Else
                Set IsGetNext = 0
        Else
        ! в противном случае, просто добавляем текущий
        символ....
        Set strSequense = chCurrent || strSequense
        Set IsGetNext = 0
        If ( IsGetNext = 1 ) AND ( nRow = Lang-1 )
        ! а вот если у нас "переход разряда" дошел
        до конца строки, то пора увеличить размер
        строки... (добавить разряд)
        Set strSequense = ' ' || strSequense
        Set nRow = nRow +1

        Call SqlRetrieve(hSqlUp, 'sysadm.SetMaxIDCO', ' :strSequense, :lRowid', '' )
        Call SqlExecute(hSqlUp)
        Set strSequense = strIDBase || strSequense
        Call SqlDisconnect ( hSqlUp )
/

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

Вот и основная команда:

SYSADM.GETMAXIDCO select
@code(@MID(a.SENSE, b.ID-1, 1)), @MID(a.SENSE, b.ID-1, 1),
@if(
@mod(@code(@MID(a.SENSE, b.ID-1, 1)), 255),
@char(@code(@MID(a.SENSE, b.ID-1, 1))+1), @char (32)),
@LENGTH ( a.SENSE), a.rowid, c.SENSE
from CONSTCHAR a, NUR b, CONSTCHAR c
where a.ID = ' z'
and b.ID <= @length ( a.SENSE)
and c.ID = ' 9'

Теперь и опишем, что мы получаем и с помощью чего:

  1. Текущее значение "секвенса" хранится в табличке CONSTCHAR, в строке с a.ID = 'z';
  2. Идентификатор текущей базы данных в системе - там же, в строке c.ID = '9'.
  3. Нам нужно ровно столько строк в выходной таблице, какова длина "секвенс последовательности". Вот это мы выполняем сравнивая b.ID <= @length(a.body).
  4. Мы отдаем пользователю коды каждого символа, коды, на единицу большие, чем текущие, и собственно, текущие и следующие "Char".

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

Его уже просто записываем в базу, на "старое" место.

SYSADM.SETMAXIDCO update CONSTCHAR set
SENSE = :1
where
rowid = :2

Добавляем к "секвенсу" идентификатор текущей базы данных, и все, новый "секвенс" создан, и готов к работе; вообще, тут подумалось, а может проще было бы написать на "С" маленькую "dll", подключить ее к серверу, и... все работает! - может, может именно так и надо сделать... но, подозреваю,чуть по- позже... Если это действительно будет нужно, и этот проект (в целом) станет чем-то большем, чем простая "разминка для мозгов"...

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

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

CREATE TABLE SYSADM.PRCLIST (
    NAME VARCHAR(30) NOT NULL,
    IDTABLES VARCHAR(18),
    STRWHERE LONG VARCHAR
    STRINTO LONG VARCHAR,
    TEXT LONG VARCHAR,
    ISDELLDOCS VARCHAR(1)
)
/

NAME - Имя команды.

IDTABLES - Идентификатор таблицы из списка таблиц

STRWHERE - Строка описание списка задающих параметров

STRINTO - Строка описания получаемых параметров

TEXT - Текст команды

ISDELLDOCS - идентификатор удаляемости, применяется для команд удаления данных в пользовательских документах, - нужны при больших удалениях - типа, удаления пользователя (со всеми его документами).

Ограничения:

ALTER TABLE SYSADM.PRCLIST FOREIGN KEY PRCLst220805 (
IDTABLES) REFERENCES SYSADM.LPATTABLES
/

Естественно, нам нужно отслеживать "взаимосвязь" со списком табличек...(наших)

И, на последок. Приложения (документы (екзешники)), которые мы разрабатываем, иногда "нуждаются" в изменениях своих размеров - тех, что на экране... важно, что размеры меняют пользователи, и им нравится, когда документы "помнят" свои предыдущие размеры (и положение на экране). Как это сделать? Мы решили, что интереснее всего размеры (да и положение) каждого окошка на экране хранить в табличке.

CREATE TABLE SYSADM.LISTDOCSIZE (
    ID_USER VARCHAR(18),
    NAMEFORM VARCHAR(38),
    NLEFTWIDTH DOUBLE PRECISION,
    NLEFTHEIGTH DOUBLE PRECISION,
    NSIZEWIDTH DOUBLE PRECISION,
    NSIZEHEIGTH DOUBLE PRECISION
)
/

ID_USER - Идентификатор пользователя из таблицы со списоком пользователей

NAMEFORM - Имя окна, важно, чтобы все окошки в системе имели уникальные названия окон

NLEFTWIDTH, NLEFTHEIGTH - Положение левого верхнего угла

NSIZEWIDTH, NSIZEHEIGTH - Размер по горизонтали и вертикали

Естественно, при окончании работы (закрытии окон) данные записываются, а при старте приложения считываются, и, естественно, окошки принимают необходимые размеры.

Ну вот... осталась только "добавочка" - набор всего описанного в одном SQL файле, который Вы можете взять из проекта.

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 7 - Описание данных, с которыми работает "Администратор Пользователей"

Шаг 7 - Описание данных, с которыми работает "Администратор Пользователей"

Ну вот, и до пользователей добрались... :-)) - что делать? Писать - то надо... :-))

И так, пользователи.... а для начала, еще раз напоминаю, что система планируется РАСПРЕДЕЛЕННОЙ (т.е. состоящей из множества территориально- разбросанных "площадок учета"). У каждой площадки есть свой набор пользователей, и, что главное для нашего разговора сейчас - на каждой площадке есть СВОЙ сервер данных.

Да, о чем это я? Ну.... да о пользователях, о них, родимых, и что? Пользователи... Считаем, что мы должны иметь возможность "централизовано" их администрировать. Что это значит? Мы должны иметь возможность:

  • создавать;
  • менять основные параметры (типа имени или пароля);
  • давать право работать с некими документами;
  • редактировать соответствующие права;
  • удалять, в том числе и право работы с каким-то из документов;

А теперь подробнее (или с начала). Итак, "создать" пользователя? - да все "просто"... "берем" SQLTalk, "коннектимся" к базе, говорим "grant ..." и, пользователь создан :-)) дать права на таблицы... еще раз говорим "grant ....". Но, проблемы... проблемы вот где: Серверов - то много, и они (сервера) разбросаны... КАК (физически) "прицепится" ко всем, да еще и с админовскими правами??... и, Вы думаете ЭТО все? :-) хи-хи... не... "приколы" только начинаются: Документы (а ВЫ помните, я говорил, что система "состоит" из документов?) хранят данные в таблицах... и надо определять права на доступ к данным... а потом права придется редактировать... и все ЭТО делать для несметного количества пользователей, и на НЕИЗВЕСТНОМ количестве серверов и документов, короче, почти не реально.

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

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

Чтобы хотелось видеть "на выходе"? Пользователя добавили в список. Далее, сказали, в какие группы он входит, в какой базе будет работать, и чтобы система сама выдала права пользователю, и, естественно, НА НУЖНОЙ базе (сервере)

Что для этого надо? Списки - пользователей, групп, баз данных, и собственно прав...

Когда? Что "когда"? Именно, раздача, когда ОНА должна происходить "раздача прав"? Вот достаточно интересный вопрос. По-идее, если мы говорим, что у нас будет некий "менеджер", то пусть он и раздает права... все правильно, вот только... Баз Данных - то у нас МНОГО, и каналы связи... а на самом деле, про репликацию я говорил? :-) - вроде "ДА", и я решил, что раздачу прав надо приурочить именно к этому процессу... :-) - появилась на "удаленной Базе" в списке пользователей новая запись (методом репликации данных), и тут же пользователю дали право "работать с базой"... а удалили строку из таблицы "прав" и... ну естественно, права, которого "не стало" в таблице, сразу лишили и пользователя... Мне показалось, что "круче всего" будет организовать ЭТОТ процесс, с использованием системы триггеров.

Начнем со списка баз данных, принадлежащих системе:

CREATE TABLE SYSADM.ListDBase (
    ID VARCHAR(18) NOT NULL,
    NAME VARCHAR(32) NOT NULL,
    DBNAME VARCHAR(8) NOT NULL,
    PARENS VARCHAR(18),
    DBPREFF VARCHAR(2),
    ABOUT LONG VARCHAR
)
/

ID - Идентификатор базы данных.

NAME - Логическое название базы - то, которое проще употреблять и запомнить.

DBNAME - имя базы (так, как она будет называться на компьютере...).

PARENS - Идентификатор "родительской" базы данных - той базы, с которой данная будет обмениваться данными в режиме "родитель-потомок".

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

ABOUT - Дополнительная информация о базе...

Теперь группы... зачем? Понятно, что так удобнее работать... но, (сервер (SQL) тот, для которого в настоящее время реализована вся система, "групп" не поддерживает)... вот, и пришлось их моделировать... - т.е. "группировка" существует, но "на бумаге", "процедура раздачи прав" :-)) "сообразуясь" со списком принадлежности, раздает собственно права на работу с документами и данными.... и получается, что права на работу с данными можно дать прямо группе, а всем пользователям, в том числе и будущим, права "раздадутся сами", как только пользователь "попадет в группу".

И так, список групп:

CREATE TABLE SYSADM.LISTGROUP (
    ID VARCHAR(18) NOT NULL,
    NAME VARCHAR(64) NOT NULL,
    ABOUT VARCHAR(254)
)
/

ID - Идентификатор группы.

NAME - Название группы.

ABOUT - описание группы.

А вот и список пользователей:

CREATE TABLE SYSADM.LISTUSER (
    ID VARCHAR(18) NOT NULL,
    Permit_LEVEL CHAR(1),
    NAME VARCHAR(64) NOT NULL,
    WRKPASS VARCHAR(254),
    ABOUT VARCHAR(254),
    ID_DB_LOCATE VARCHAR(18))
/

ID - Идентификатор.

Permit_LEVEL - Уровень доступа - пользователь может иметь право работать с базой, создавать новые объекты, администрировать... соответственно, нами были введены уровни доступа "C", "R", "D"... (или не нами, а разработчиками сервера, и называются они (уровни доступа) "connect", "resource", "dba"), а я просто сделал соответствие).

NAME - Имя пользователя.

WRKPASS - Пользовательский пароль.

ABOUT - Описание пользователя.

ID_DB_LOCATE - Идентификатор той базы банных, с которой будет работать пользователь... (из списка баз данных)

Ну, и естественно, ограничение:

ALTER TABLE SYSADM.LISTUSER FOREIGN KEY LUser001 (
ID_DB_LOCATE) REFERENCES SYSADM.ListDBase
/

Хорошо, ввели список пользователей, и список групп... ну и что? Нужна, на самом деле нужна некая табличка, в которой содержался бы список "перекрестных" ссылок, о том, кто из пользователей состоит в каких группах. Эта табличка очень активно используется при редактировании, да и при раздаче прав.

CREATE TABLE SYSADM.CROSSUSGROUP (
    IDUSER VARCHAR(18) NOT NULL,
    IDGROUP VARCHAR(18) NOT NULL)
/

IDUSER - Идентификатор пользователя.

IDGROUP - Идентификатор группы.

Ограничения:

ALTER TABLE SYSADM.CROSSUSGROUP FOREIGN KEY CrossUs001 (
IDUSER ) REFERENCES SYSADM.LISTUSER
/

ALTER TABLE SYSADM.CROSSUSGROUP FOREIGN KEY CrossUs002 (
IDGROUP ) REFERENCES SYSADM.LISTGROUP
/

Вот... а теперь уже интереснее: список прав на объекты базы... что ЭТО может быть? Документы... Таблицы... да, и еще... "ветки" на дереве "субконт" что ЭТО такое, я расскажу чуть позже, а пока, просто таблица:

CREATE TABLE SYSADM.LISTRIGTHUS (
    IDUSER VARCHAR(18),
    IDGROUP VARCHAR(18),
    IDDOC VARCHAR(18),
    IDTABLE VARCHAR(18),
    RIGTH DOUBLE PRECISION NOT NULL,
    IDSUBC VARCHAR(18)
)
/

IDUSER - Идентификатор пользователя.

IDGROUP - Идентификатор группы. Тут получается вот что: список прав, а права могут принадлежать или группе, или пользователю лично. Вот поэтому и пришлось сделать 2 колонки. Хотя, может я и не прав. Может, стоило бы заменить их на одну, не знаю...

IDDOC - Идентификатор документа.

IDTABLE - Идентификатор таблицы.

RIGTH - Права на различные действия. Мы решили их оформить в виде целых чисел каким образом? А вот: Список действий, которые может производить пользователь:

  • исполнить "экзешник" документа
  • сделать разноску документа (исполнить соответствующий "волшебник"); тут надо сказать, что право исполнения проверяется самими "экзешниками", а вот все остальное (работу с таблицами) можно переложить на плечи сервера БД
  • просматривать данные из таблицы (select)
  • добавлять данные в таблицу (insert)
  • изменять данные в таблице (update)
  • удалять данные из таблицы (delete)

Каждому действию соответствует соответствующий разряд, и, в итоге, получается некое число... вида 110000 (что дает право пользователю исполнять и разносить некий документ ) или, для таблицы 1100 (просматривать и добавлять данные)... или, допустим, 1111 - и можно делать все - и смотреть, и добавлять, и изменять, и удалять... (надеюсь я нормально рассказал о идее)

IDSUBC - Идентификатор "узла" на дереве субконт...(а вот об ЭТОМ поговорим позже...)

Ограничения, как же без них:

ALTER TABLE SYSADM.LISTRIGTHUS FOREIGN KEY RIGTHUS001 (
IDUSER ) REFERENCES SYSADM.LISTUSER
/

ALTER TABLE SYSADM.LISTRIGTHUS FOREIGN KEY RIGTHUS002 (
IDGROUP ) REFERENCES SYSADM.LISTGROUP
/

ALTER TABLE SYSADM.LISTRIGTHUS FOREIGN KEY RIGTHUS001 (
IDDOC ) REFERENCES SYSADM.LISTPATTERN
/

ALTER TABLE SYSADM.LISTRIGTHUS FOREIGN KEY RIGTHUS002 (
IDTABLE ) REFERENCES SYSADM.LPATTABLES
/

А вот ЭТО ограничение наложим позже.. - как только опишем табличку...

ALTER TABLE SYSADM.LISTRIGTHUS FOREIGN KEY RIGTHUS002 (
IDTABLE ) REFERENCES SYSADM.subconto
/

Ну, а теперь "прелюдия" завершилась, пора заняться правами. И, начинаем описание триггеров - наши "рабочие" таблицы:

"LISTUSER" - что происходит с данными в этой таблице? - Можно пользователя добавить, удалить, или подредактировать его параметры... соответственно, нам нужно три триггера прицепить к этой таблице... - на "добавить", "изменить", "удалить" строки...

"LISTGROUP" - группы... просто группы... и, никаких триггеров... они не нужны... :-)

"CROSSUSGROUP" - вот это как раз очень важная таблица, и с ней связывается пара триггеров - на добавление, и удаление строк...

"LISTRIGTHUS" для работы на эту таблицу сделаем 3 триггера.

В общем, получается "компашка" из 8-ми штук... :-) Но, для начала покажем процедуры для работы.

Процедура определения пользователя:

STORE SYSADM.SETGRUS Procedure: SetGrUs
    Parameters
        String: strUserName
        String: strUserPassv
        String: strLocAutori
    Local variables
        String: strCommand
        String: strUserAutoriLevel
    Actions
        On Procedure Execute
            Set strCommand = 'grant connect to ' || strUserName
            Set strCommand = strCommand || ' identified by ' || strUserPassv
            Call SqlImmediate ( strCommand )
! раздам права на исполнение процедур, которые нужны любому пользователю нашей системы.
            Set strCommand = ' grant execute on SYSADM.GetUsersID to ' || strUserName
            Call SqlImmediate ( strCommand )
            Set strCommand = 'grant execute on SYSADM.GETMAXID to ' || strUserName
            Call SqlImmediate ( strCommand )
! а вот дальше - проверка уровня аккредитации, и раздача слоников.
            If strLocAutori = 'R'
                Set strCommand = ' grant resource to ' || strUserName
                Call SqlImmediate ( strCommand )
            If strLocAutori = 'D'
                Set strUserAutoriLevel = 'dba'
                Set strCommand = ' grant dba to ' || strUserName
                Call SqlImmediate ( strCommand )
/

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

STORE SYSADM.GETLIRIGALL select c.name, b.TabName,
    @if (sum(@mod( @int( Rigth/1000 ), 10 )), 1, 0) AS Sel,
    @if (sum(@mod( @int( Rigth/100 ), 10 )), 1, 0) AS Ins,
    @if (sum(@mod( @int( Rigth/10 ), 10 )), 1, 0) AS Upd,
    @if (sum(@mod( @int( Rigth/1 ), 10 )), 1, 0) AS Del,
    @if ( @length( DELETEAUTH || INSERTAUTH || SELECTAUTH || UPDATEAUTH), 1, 0 )
from ListRigthUs a, LPatTables b, LISTUSER c, ListDBase d, SYSTABAUTH
where
    a.IDTABLE = b.ID
    and a.IDUSER = c.ID
    and c.ID = :1
    and c.IDSERVLOCATE = d.SR$ID
    and @scan (DBNAME, @upper ( :2 ) ) = 0
    and GRANTEE (+) = @upper ( c.name )
    and TTNAME (+) = @upper ( b.TabName )
group by 1, 2, 7
union
select c.name, b.TabName,
    @if (sum(@mod( @int( Rigth/1000 ), 10 )), 1, 0),
    @if (sum(@mod( @int( Rigth/100 ), 10 )), 1, 0),
    @if (sum(@mod( @int( Rigth/10 ), 10 )), 1, 0),
    @if (sum(@mod( @int( Rigth/1 ), 10 )), 1, 0),
    @if ( @length( DELETEAUTH || INSERTAUTH || SELECTAUTH || UPDATEAUTH), 1, 0 )
from ListRigthUs a, LPatTables b, LISTUSER c, CrossUsGroup d, ListDBase e, SYSTABAUTH
where
    a.IDTABLE = b.ID
    and a.IDGROUP = d.IDGroup
    and c.ID = d.IDUser
    and a.IDTABLE not in (select IDTABLE from ListRigthUs where IDUSER = d.IDUser )
    and c.ID = :1
    and c.IDSERVLOCATE = e.SR$ID
    and @scan (DBNAME, @upper ( :2 ) ) = 0
    and GRANTEE (+) = @upper ( c.name )
    and TTNAME (+) = @upper ( b.TabName )
group by 1,2, 7
union
select c.name, b.TabName, 0, 0, 0, 0,
@if ( @length( DELETEAUTH || INSERTAUTH || SELECTAUTH || UPDATEAUTH), 1, 0 )
from LPatTables b, LISTUSER c, CrossUsGroup d, ListDBase e, SYSTABAUTH
where
    c.ID = d.IDUser
    and c.ID = :1
    and c.IDSERVLOCATE = e.ID
    and @scan (DBNAME, @upper ( :2 ) ) = 0
    and GRANTEE = @upper ( c.name )
    and TTNAME = @upper ( b.TabName )
    and c.ID not in ( select a.IDUSER from ListRigthUs a where a.IDTABLE = b.ID )
    and c.ID not in ( select d.IDUSER from ListRigthUs a, CrossUsGroup d
where a.IDTABLE = b.ID and a.IDGROUP = d.IDGroup )
union
select c.name, b.TabName,
    @if (sum(@mod( @int( Rigth/1000 ), 10 )), 1, 0),
    @If (sum(@mod( @int( Rigth/100 ), 10 )), 1, 0),
    @If (sum(@mod( @int( Rigth/10 ), 10 )), 1, 0),
    @If (sum(@mod( @int( Rigth/1 ), 10 )), 1, 0),
    0
from ListRigthUs a, LPatTables b, LISTUSER c, ListDBase e
where
    a.IDTABLE = b.ID
    and ( a.IDUser = c.ID or a.IDGroup in (select q.IDGroup from CrossUsGroup q where q.IDUser = c.ID))
    and c.ID = :1
    and c.IDSERVLOCATE = e.ID
    and @upper (DBNAME ) = @upper ( :2 )
group by 1, 2
/

А теперь команда удаления прав пользователя...

STORE SYSADM.REVUSTABLERIGTH Procedure: RevUsTablRigth
Parameters
    String: strUserName
    String: strTableName
Local variables
    String: Grant1
    Actions
    On Procedure Execute
        Set Grant1 = ' revoke all on ' || strTableName || ' from ' || strUserName
        Call SqlImmediate ( Grant1 )
/

Присвоение прав пользователя на таблицу:

STORE SYSADM.SETUSTABLERIGTH Procedure: SetUsTableRigth
Parameters
    String: strUserName
    String: strTableName
    Number: nSel
    Number: nIns
    Number: nUpd
    Number: nDel
Local variables
    String: Grant3
    String: Grant2
Sql Handle: hsqlWWW
    Number: nOk
Actions
    On Procedure Execute
    Set Grant2 = ''
    If nSel = 1
    If Grant2 != ''
    Set Grant2 = Grant2 || ', '
    Set Grant2 = Grant2 || 'select'
    If nIns = 1
    If Grant2 != ''
    Set Grant2 = Grant2 || ', '
    Set Grant2 = Grant2 || 'insert'
    If nUpd = 1
    If Grant2 != ''
    Set Grant2 = Grant2 || ', '
    Set Grant2 = Grant2 || 'update'
    If nDel = 1
    If Grant2 != ''
    Set Grant2 = Grant2 || ', '
    Set Grant2 = Grant2 || 'delete'
    If Grant2 != ''
    Set Grant3 = ' grant ' || Grant2 || ' on ' || strTableName
    Set Grant3 = Grant3 || ' to ' || strUserName
    Call SqlImmediate ( Grant3 )
/

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

STORE SYSADM.SETUSERTRIGTH Procedure: SetUserTRigth static
Parameters
    String: strIDUser
Local variables
    Sql Handle: hsqlWWW
    Sql Handle: hsqlW01
    Number: nOk
    Number: numIi
    Number: nCount
    Number: nIsSet
    String: strBaseName
    String: strLocNameUser
    String: strTableName
    Boolean: bIsOk
    Number: nSel
    Number: nIns
    Number: nUpd
    Number: nDel
Actions
    On Procedure Startup
    Call SqlConnect ( hsqlWWW )
    Call SqlConnect ( hsqlW01 )
    On Procedure Execute
    When SqlError
        Set nOk = SqlError ( hsqlWWW )
        Set nOk = SqlError ( hsqlW01 )
    Return FALSE
        Set nCount = 0
! имя "рабочей базы"
    Call SqlGetParameterAll ( hsqlWWW, 2001, nOk, strBaseName, bIsOk )
! нужно получить список всех табличек, на
которые пользователь уже имеет права, и те права,
которые мы хотим дать...
    Call SqlRetrieve ( hsqlWWW, 'SYSADM.GetLiRigAll',
        ' :strIDUser, :strBaseName ',
        ':strLocNameUser,:strTableName, :nSel, :nIns, :nUpd, :nDel, :nIsSet ')
    Call SqlExecute( hsqlWWW )
    Call SqlGetResultSetCount ( hsqlWWW, nCount )
    Set numIi = 0
    Set nIsSet = 0
    If ( nCount > 0 )
        Loop
    Call SqlFetchNext ( hsqlWWW, nOk )
    If (nOk != FETCH_Ok ) OR (numIi > 1000 )
        Break
    Set numIi = numIi +1
! а вот теперь переберем все строчки, что мы
выбрали, и, если нужна "переустановка" прав,
то надо ЭТО сделать... и, для начала, удалить права
    If nIsSet = 1
    Call SqlRetrieve ( hsqlW01, 'SYSADM.RevUsTableRigth',
        ' :strLocNameUser, :strTableName ', '' )
    Call SqlExecute ( hsqlW01 )
! и, если есть что "раздать", то надо их
дать...
    If ( nSel + nIns + nUpd + nDel > 0 )
    Call SqlRetrieve ( hsqlW01, 'SYSADM.SetUsTableRigth',
        ' :strLocNameUser, :strTableName, :nSel, :nIns, :nUpd, :nDel ', '')
    Call SqlExecute ( hsqlW01 )
        On Procedure Close
    Call SqlDisconnect ( hsqlWWW )
    Call SqlDisconnect ( hsqlW01 )
/

Получение Идентификатора пользователя и базы...

STORE SYSADM.GETCURBASEID select b.ID, a.ID
from ListDBase b, listuser a
where
    @upper ( b.DBNAME ) = @upper ( :1 )
    and @upper ( a.Name ) = @upper ( :2 )
/

А вот теперь все описанное сведем "до кучи"... И получим действия, которые должны произойти после добавления пользователя:

STORE SYSADM.INSUS220402 Procedure: InsUs220402 static
Parameters
    String: strNameUser
    String: strPassUser
    String: strBaseID
    String: strIDUser
    String: strLocAutoriLevel
Local variables
    Sql Handle: hsqlWWW
    Number: nOk
    String: strBaseName
    String: strIDLocBase
    String: strIDName
    Boolean: bIsOk
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
    On Procedure Execute
        When SqlError
        Set nOk = SqlError ( hsqlWWW )
        Return FALSE
! получение имени текущей базы.
        Call SqlGetParameterAll ( hsqlWWW, 2001, nOk, strBaseName, bIsOk )
! проверим, имеет ли ЭТОТ пользователь "авторизацию" в текущей базе...
а заодно и идентификаторы и базы и пользователя.
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.GetCurBaseID',
        ' :strBaseName, :strNameUser ', ' :strIDLocBase, :strIDName ' )
        Call SqlExecute( hsqlWWW )
        Call SqlFetchNext ( hsqlWWW, nOk )
        If strIDLocBase = strBaseID
! а теперь проверим, и если совпадают
идентификатор текущей базы, и той, на которой
нужно авторизовать текущего пользователя, то
выполним ... и авторизуем его...
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.SetGrUs',
        ' :strNameUser, :strPassUser, :strLocAutoriLevel ', '')
        Call SqlExecute ( hsqlWWW )
! а вот теперь можно раздать права на работу с таблицами.
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.SetUserTRigth',
        ' :strIDUser ', '')
        Call SqlExecute ( hsqlWWW )

    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

Ну и вот, сам триггер... (на самом деле, я надеюсь, что синтаксис всего и так понятен)

CREATE TRIGGER SYSADM.INS_USLI220401 After Insert
ON SYSADM.LISTUSER
( Execute SYSADM.InsUs220402 ( LISTUSER.Name, LISTUSER.WrkPass, LISTUSER.IDSERVLOCATE,
LISTUSER.ID, LISTUSER.AutirLevel ) )
For Each Row
/

А вот что должно происходить, если произошли изменения в описании параметров пользователя. И для начала определение уровня "аккредитации" пользователя.

STORE SYSADM.GETUSRIGTH220403 select RESOURCEAUTH, DBAAUTH , 'C'
from SYSUSERAUTH
where
@upper ( name ) = @upper ( :1 )
/

Реальное удаление прав. Сначала посмотрим, ЧТО есть у пользователя:

STORE SYSADM.LISRREALRIGTH select TTNAME from SYSTABAUTH
where
@upper ( GRANTEE ) = @upper ( :1 )
/

А теперь уже собственно...

STORE SYSADM.USREVGRANTS Procedure: UsRevGrants
Parameters
    String: strUserName
Local variables
    String: strCSelect
    String: strSelWhere
    String: strSelInto
    Number: nOk
    Number: numIi
    String: strLockTabName
    Number: nCount
    String: Grant1
    String: Grant2
    String: Grant3
    Sql Handle: SqlW
    Number: NotCreate
    String: SetStatus
Actions
    On Procedure Startup
        When SqlError
            Set nOk = SqlError ( SqlW )
        Return FALSE
        Call SqlConnect ( SqlW )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( SqlW )
        Return FALSE
! получим список таблиц, права на которые есть у пользователя.
        Call SqlRetrieve ( SqlW, 'sysadm.LisrRealRigth',
            ' :strUserName ', ' :strLockTabName ' )
        Call SqlExecute( SqlW )
        Call SqlGetResultSetCount ( SqlW, nCount )
        Set numIi = 0
        Set Grant1 = ' revoke all on '
        Set Grant2 = ''
        If nCount > 0
            Set Grant2 = ''
        Loop
! если есть таблицы, на которые розданы права пользователю...
        Call SqlFetchNext ( SqlW, nOk )
        If (nOk != FETCH_Ok ) OR (numIi > 1000 )
            Break
        Set numIi = numIi +1
! переберем ВСЕ, и " сгенерим" команду, которую исполним...
        If Grant2 != ''
            Set Grant2 = Grant2 || ', '
            Set Grant2 = Grant2 || strLockTabName
        If Grant2 != ''
            Set Grant3 = Grant1 || Grant2
            Set Grant3 = Grant3 || ' from ' || strUserName
        Call SqlImmediate ( Grant3 )
    On Procedure Close
        Call SqlDisconnect ( SqlW )
/

А вот теперь уже просто удаление прав пользователя:

STORE SYSADM.REVGRUS Procedure: RevGrUs
Parameters
    String: strUserName
    String: strFlag
Local variables
    Number: nOk
    Number: numIi
    String: strLockTabName
    String: strCommand
    Sql Handle: SqlW
Actions
    On Procedure Startup
        Call SqlConnect ( SqlW )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( SqlW )
        Return FALSE
        Call SqlRetrieve ( SqlW, 'sysadm.UsRevGrants',
            ' :strUserName ', '' )
        Call SqlExecute( SqlW )
        If strFlag = 'D'
            Set strCommand = ' revoke DBA from ' || strUserName
        Call SqlImmediate ( strCommand )
        If strFlag = 'R'
            Set strCommand = ' revoke resource from ' || strUserName
        Call SqlImmediate ( strCommand )
            Set strCommand = ' revoke connect from ' || strUserName
        Call SqlImmediate ( strCommand )
/

Надо сменить "уровень доступа":

STORE SYSADM.CHANGEGRUS Procedure: ChangeGrUs
Parameters
    String: strUserName
    String: strOldFlag
    String: strNewFlag
Local variables
    String: strCommand
Actions
    On Procedure Execute
! Сначала Удалим... права...
    If strOldFlag = 'D'
        Set strCommand = ' revoke DBA from ' || strUserName
        Call SqlImmediate ( strCommand )

    If strOldFlag = 'R'
        Set strCommand = ' revoke resource from ' || strUserName
        Call SqlImmediate ( strCommand )

! потом добавим...
    If strNewFlag = 'R'
        Set strCommand = ' grant resource to ' || strUserName
        Call SqlImmediate ( strCommand )

    If strNewFlag = 'D'
        Set strCommand = ' grant dba to ' || strUserName
        Call SqlImmediate ( strCommand )
/

И вот, уже все составные части описаны, и можно показать триггерную процедуру:

STORE SYSADM.UPDUS220402 Procedure: UpdUs220402 static
Parameters
    String: strNameUser
    String: strOldPass
    String: strNewPass
    String: strOldBaseID
    String: strNewBaseID
    String: strOldAutoriLevel
    String: strNewAutoriLevel
Local variables
    String: strCommand
    String: strWhere

    String: strInto

    Sql Handle: hsqlWWW

    Number: nOk

    Number: nCount

    String: strBaseName

    String: strIDLocBase

    String: strRESOURCE

    String: strDBA

    String: strUserAutoriLevel

    String: strIDUsss

    Boolean: bIsOk

Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
            Return FALSE
!получим название текущей базы и Идентификаторы базы и пользователя
        Call SqlGetParameterAll ( hsqlWWW, 2001, nOk, strBaseName, bIsOk )
        Call SqlRetrieve ( hsqlWWW, 'GetCurBaseID',
            ' :strBaseName, :strNameUser ', ' :strIDLocBase, :strIDUsss ' )
        Call SqlExecute( hsqlWWW )
        Call SqlFetchNext ( hsqlWWW, nOk )
! и теперь можно получить и уровень "аккредитации"...
        Call SqlRetrieve ( hsqlWWW, 'sysadm.GetUsRigth220403',
            ' :strNameUser ', ' :strRESOURCE, :strDBA, :strUserAutoriLevel ' )
        Call SqlExecute( hsqlWWW )
        Call SqlGetResultSetCount ( hsqlWWW, nCount )
! если пользователя ТУТ не было, то его НАДО создать...
        If ( nCount = 0 )
        If ( ( strOldBaseID != strIDLocBase )
            and ( strNewBaseID = strIDLocBase ) )
        Call SqlRetrieve(hsqlWWW, 'SYSADM.SetGrUs',
            ' :strNameUser, :strNewPass, :strNewAutoriLevel ', '')
        Call SqlExecute ( hsqlWWW )
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.SetUserTRigth', ' :strIDUsss ', '')
        Call SqlExecute ( hsqlWWW )
! если что - то есть, то можно работать...
        If ( nCount > 0 )
! если изменился пароль, то что делать НЕ понятно.... :-((
        ! If strOldPass != strNewPass
        ! Set strCommand = ' alter password ' || strNameUser
        ! Call SqlImmediate ( strCommand )
! так, пользователь был (то есть, есть ПОКА), и его НАДО "убрать"...

        If ( ( strOldBaseID = strIDLocBase )
            and ( strNewBaseID != strIDLocBase ) )

        Call SqlRetrieve(hsqlWWW, 'SYSADM.RevGrUs',
            ' :strNameUser, :strOldAutoriLevel ', '')
        Call SqlExecute ( hsqlWWW )
        If ( strOldAutoriLevel != strNewAutoriLevel )
            and ( strOldBaseID = strNewBaseID )
! смена "уровня" доступа
        Call SqlRetrieve(hsqlWWW, 'SYSADM.ChangeGrUs',
            ' :strNameUser, :strOldAutoriLevel, :strNewAutoriLevel ', '')
        Call SqlExecute ( hsqlWWW )

    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

Вот, можно показать собственно триггер:

CREATE TRIGGER SYSADM.UPD_USLI220401 After Update
ON SYSADM.LISTUSER REFERENCING OLD oldTAble NEW NewTAble
( Execute sysadm.UpdUs220402 ( NewTAble.Name, oldTAble.WrkPass, NewTAble.WrkPass,
oldTAble.IDSERVLOCATE, NewTAble.IDSERVLOCATE, oldTAble.AutirLevel, NewTAble.AutirLevel ))
For Each Row
/

А вот теперь "позаботимся" о "выкусывании" прав пользователя, если закончились его "полномочия" в ЭТОЙ базе.

STORE SYSADM.DELUS220402 Procedure: DelUs220402 static
Parameters
    String: strNameUser
    String: strLocAutoriLevel
Local variables
    Boolean: bIsOk
    Number: nOk
    Number: nCount
    Sql Handle: hsqlWWW
    String: strBaseName
    String: strRESOURCE
    String: strDBA
    String: strUserAutoriLevel
Actions
    On Procedure Startup
            Call SqlConnect ( hsqlWWW )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
        Return FALSE
! получение имени текущей базы.
        Call SqlGetParameterAll ( hsqlWWW, 2001, nOk, strBaseName, bIsOk )
! проверим, имеет ли ЭТОТ пользователь "авторизацию" в текущей базе...
        Call SqlRetrieve ( hsqlWWW, 'sysadm.GetUsRigth220403',
            ' :strNameUser ', ' :strRESOURCE, :strDBA, :strUserAutoriLevel ' )
        Call SqlExecute( hsqlWWW )
        Call SqlGetResultSetCount ( hsqlWWW, nCount )
        If nCount > 0
! если есть, то, вместо "здрасти" удалим его в доступе...
            Call SqlRetrieve ( hsqlWWW, 'SYSADM.RevGrUs',
            ' :strNameUser, :strLocAutoriLevel ', '' )
            Call SqlExecute ( hsqlWWW )
    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

CREATE TRIGGER SYSADM.DEL_USLI220401 Before Delete
ON SYSADM.LISTUSER
( Execute SYSADM.DelUs220402 ( LISTUSER.Name, LISTUSER.AutirLevel ) )
For Each Row
/

Ну вот, с первой "тройкой" разобрались... надеюсь, я все рассказал хорошо... и, продолжим.

Теперь поглядим, что у нас получается с "кроссами":

CREATE TRIGGER SYSADM.INS_CROSS220429 After Insert
ON SYSADM.CrossUsGroup
( Execute SYSADM.SetUserTRigth ( CrossUsGroup.IDUSER ) )
For Each Row
/

Что происходит при добавлении пользователя в группу я сказал, а вот что произойдет, если его убирать подозреваю, что все, что можно, пользователю УЖЕ выдали, :-)) и сейчас надо "только" что - то забрать...

STORE SYSADM.REVUSERTRIGTH Procedure: RevUserTRigth static
Parameters
    String: strIDUser
    String: strIDGroup
Local variables
    Sql Handle: hsqlWWW
    Sql Handle: hsqlW01
    Number: nOk
    Number: numIi
    Number: nCount
    Number: nIsSet
    String: strBaseName
    String: strLocNameUser
    String: strTableName
    Boolean: bIsOk
    String: strPrCName
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
        Call SqlConnect ( hsqlW01 )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
            Set nOk = SqlError ( hsqlW01 )
            Return FALSE
        Set nCount = 0
! получим имя текущей базы:
        Call SqlGetParameterAll ( hsqlWWW, 2001, nOk, strBaseName, bIsOk )
! полный перечень прав: (кстати, с учетом "групповых предпочтений")
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.GetLiR220506',
            ' :strBaseName, :strIDUser, :strIDGroup ',
            ' :strLocNameUser, :strTableName ' )
        Call SqlExecute( hsqlWWW )
        Call SqlGetResultSetCount ( hsqlWWW, nCount )
        Set numIi = 0
        Set nIsSet = 0
        If nCount > 0
            Loop
        Call SqlFetchNext ( hsqlWWW, nOk )
        If (nOk != FETCH_Ok ) OR (numIi > 1000 )
            Break
        Set numIi = numIi +1
! собственно, выкусим:
        Call SqlRetrieve ( hsqlW01, 'SYSADM.RevUsTableRigth',
            ' :strLocNameUser, :strTableName ', '' )
        Call SqlExecute ( hsqlW01 )

    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
        Call SqlDisconnect ( hsqlW01 )
/

CREATE TRIGGER SYSADM.DEL_CROSS220429 Before Delete
ON SYSADM.CrossUsGroup
( Execute SYSADM.RevUserTRigth ( CrossUsGroup.IDUSER, CrossUsGroup.IDGroup ) )
For Each Row
/

А вот что происходит, когда мы работаем собственно с правами:

STORE SYSADM.SELGRUS220506 select a.IDUser
from CrossUsGroup a
where
    a.IDGroup = :1
/

STORE SYSADM.INSTABRIG220415 Procedure: InsTabRig220415 static
Parameters
    String: strIDUser
    String: strIDGroup
Local variables
    Sql Handle: hsqlWWW
    Sql Handle: hsqlW00
    Number: nOk
    Number: numIi
    Number: nCount
    String: strLocIDUser
    Boolean: bIsOk
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
        Call SqlConnect ( hsqlW00 )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
            Set nOk = SqlError ( hsqlW00 )
        Return FALSE
        If strIDUser != ''
! установим права для одного пользователя
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.SetUserTRigth',
            ' :strIDUser ', '' )
        Call SqlExecute( hsqlWWW )
        If strIDGroup != ''
! мы работали с групповыми правами, и теперь
! надо их (права) отредактировать ВСЕМ членам
! группы... :-))
        Set nCount = 0
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.SelGrUs220506',
            ' :strIDGroup ', ' :strLocIDUser ' )
        Call SqlExecute( hsqlWWW )
        Call SqlGetResultSetCount ( hsqlWWW, nCount )
        If ( nCount > 0 )
            Set numIi = 0
        If nCount > 0
            Loop
! и мы просто переберем всех членов, и...
        Call SqlFetchNext ( hsqlWWW, nOk )
        If (nOk != FETCH_Ok ) OR (numIi > 1000 )
            Break
        Set numIi = numIi +1
! с каждым поступим, так же, как и с "единственным"...
        Call SqlRetrieve ( hsqlW00, 'SYSADM.SetUserTRigth',
            ' :strLocIDUser ', '' )
        Call SqlExecute( hsqlW00 )
    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
        Call SqlDisconnect ( hsqlW00 )
/

CREATE TRIGGER SYSADM.INS_USRIGH220415 After Insert
ON SYSADM.ListRigthUs
( Execute SYSADM.InsTabRig220415 ( ListRigthUs.IDUSER, ListRigthUs.IDGROUP ) )
For Each Row
/

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

CREATE TRIGGER SYSADM.UPD_TABRIG220424 After Update
ON SYSADM.ListRigthUs
( Execute SYSADM.InsTabRig220415 ( ListRigthUs.IDUSER, ListRigthUs.IDGROUP ) )
For Each Row
/

А теперь посмотрим, что происходит при удалении права...

STORE SYSADM.GETCURRUSTABLE select a.Name, b.TABNAME
from LISTUSER a, LPATTABLES b, SYSTABAUTH d
where
    a.ID = :1
    and b.ID = :2
    and GRANTEE = @upper ( a.Name )
    and TTNAME = @upper ( b.TABNAME)
/

STORE SYSADM.SELGRUSTT220508 select a.Name, b.TABNAME
from LISTUSER a, LPATTABLES b, SYSTABAUTH d, CrossUsGroup c
where
    c.IDGroup = :1
    and a.ID = c.IDUser
    and b.ID = :2
    and GRANTEE = @upper ( a.Name )
    and TTNAME = @upper ( b.TABNAME)
/

STORE SYSADM.RUSTARIG220504 Procedure: RUsTaRig220504
Parameters
    String: strUserName
    String: strTabNAme
Local variables
    String: strCommand
Actions
    On Procedure Execute
        Set strCommand = ' revoke all on ' || strTabNAme
            || ' from ' || strUserName
        Call SqlImmediate ( strCommand )
/

STORE SYSADM.DELTABRIG220415 Procedure: DelTabRig220415 static
Parameters
    String: strIDUser
    String: strIDGroup
    String: strIDTable
Local variables
    Sql Handle: hsqlWWW
    Sql Handle: hsqlW00
    Number: nOk
    Number: numIi
    Number: nCount
    String: strLocNameUser
    String: strLocNameTable
    Boolean: bIsOk
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
        Call SqlConnect ( hsqlW00 )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
            Set nOk = SqlError ( hsqlW00 )
            Return FALSE
        If strIDUser != ''
! что, удаляем право для пользователя? %-)
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.GetCurrUsTable',
        ' :strIDUser, :strIDTable ', ' :strLocNameUser, :strLocNameTable ' )
        Call SqlExecute( hsqlWWW )
        If strIDGroup != ''
! или для группы?
        Set nCount = 0
        Call SqlRetrieve ( hsqlWWW, 'SYSADM.SelGrUsTT220508',
            ' :strIDGroup, :strIDTable ', ' :strLocNameUser, :strLocNameTable ' )
        Call SqlExecute( hsqlWWW )
        Call SqlGetResultSetCount ( hsqlWWW, nCount )
        If ( nCount > 0 )
            Set numIi = 0
        If nCount > 0
            Loop
! что - то есть, вот тогда и "выкусываем"...
        Call SqlFetchNext ( hsqlWWW, nOk )
        If (nOk != FETCH_Ok ) OR (numIi > 1000 )
            Break
        Set numIi = numIi +1
        Call SqlRetrieve ( hsqlW00, 'SYSADM.RUsTaRig220504',
            ' :strLocNameUser, :strLocNameTable ', '' )
        Call SqlExecute( hsqlW00 )

    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
        Call SqlDisconnect ( hsqlW00 )
/

И собственно, триггер...

CREATE TRIGGER SYSADM.DEL_TABRIG220415 Before Delete
ON SYSADM.ListRigthUs
( Execute SYSADM.DelTabRig220415 ( ListRigthUs.IDUSER,
    ListRigthUs.IDGROUP, ListRigthUs.IDTABLE ) )
For Each Row
/

Ну вот, вроде описал... надеюсь, что понятно...

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 8 - А вот теперь о "бухгалтерском" в этой системе

Шаг 8 - А вот теперь о "бухгалтерском" в этой системе

Да, то есть, наконец-то я добрался собственно до бухгалтерии.

Наша работа началась словами о том, что нужна система финансового учета. Задачу мы поставили себе достаточно широко, вернее, при ближайшем рассмотрении оказалось, что система "финансового учета" как - то ОЧЕНЬ быстро превратилась в систему, которая должна "знать" про хозяйственную жизнь предприятия буквально "ВСЕ", и не просто все, но, и должна дать возможность анализировать и прогнозировать. Нам долго рассказывали, что "да нужна просто..." :-) - что - то это "просто" становилось с каждым днем сложнее и сложнее, и эта "вездесущая" сложность, в итоге, и превратилась в действительную "простоту" но, уже простоту ЯЗЫКА ОПИСАНИЯ задачи, попросту говоря, Бухгалтерского языка.

ЧТО есть бухгалтерия (в нашем понимании :-) ? Да в 16 веке жил монах (о нем до сих пор пишут в книжках :-) ) который придумал ЯЗЫК "двойная запись" с его помощью он исхитрился описать хозяйственную жизнь своего монастыря. (а может все и не так было: да какая разница, вообще говоря? :-) ) Важно, что народу понравилось, и вот с той поры весь просвещенный мир всю свою хозяйственную деятельность описывает именно на этом языке.

Компьютер в состоянии резко детализировать учет, Учитывать НЕ только финансовые и материальные потоки, а вообще ВСЕ что угодно! ("двойная запись" - полный язык описания хозяйственных операций) (ОЧЕНЬ интересная тема - провести математически правильное доказательства полноты! :-).

Надеюсь, Вы еще помните господина Кнута? :-) - он сделал замечательную вещь - описал достаточно много алгоритмов, и, для описания он придумал достаточно формальный язык.

На самом деле, я вот о чем: все, что было мной почитано о системах класса "ERP", не содержат конкретных раскладок по "управляющим процессам", а жаль... И, вот интересно: можно ли описать систему "ERP" используя язык "двойной записи"? :-)) Не, наверное, не просто "двойную запись", а еще и набор неких документов.... в итоге, может (или должно?) получится что -то вроде наборов - "управляющее действие" <-> "набор документов" <-> "списки проводок", понятно, что каждая строка из первого набора "разворачивается" в несколько документов, которые в свою "порождают" проводки... (скажу еще раз, ЭТО МОЕ мнение, и, его можно разделять или нет...)

Про документы пару слов я уже говорил, пора поговорить о "двойной записи". Тут есть 2 подхода, во - всяком случае, мне известно именно столько.

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

Недавно я обратил внимание на существенно иной метод работы - хранить СПИСОК ПОЛУ-ПРОВОДОК - почти ТОЖЕ САМОЕ!, НО! Вместе с полу проводкой (в одной строке) можно хранить и остаток на счете, а ЭТО уже может дать и выигрыш. Да и бухгалтерские операции будут "красивее" описываться в таких терминах:. Но: тогда, возможно, надо говорить и о табличке "список бухгалтерских операций". В общем, пока ЭТА тема - "просто один большой вопрос". Попробовать бы...

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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Голиброда Александр.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 9 - Описание структуры данных "бухгалтерии"

Шаг 9 - Описание структуры данных "бухгалтерии"

И, наконец собственно наш взгляд на бухгалтерию.

Итак, основные данные о бухгалтерских операциях мы решили хранить в таблице под названием "Главная Книга", к сожалению, это несколько не бухгалтерское понятие - у нас получился список всех проведенных элементарных операций. Исходя из идей "нормализации данных", решили "обзавестись" еще табличками - "СЧЕТА", "Аналитика", "ВАЛЮТЫ", "КУРСЫ"... И, пожалуй, главная табличка - "ОСТАТКИ" почему главная? :-) - да, к слову.. на самом деле, остатки нам не нужны :-)) - нет ничего проще - взять и суммировать числа в одной из колонок таблицы.... вот только это (суммирование) самая длительная операция из всего, что есть в "сиквеле". Представляете, сколько будет длится получение остатков на счете? :-) - я пробовал, и знаю, что это очень долго, просто неприемлемо долго... так что, проще бороться с остатками...

Главная книга:

CREATE TABLE SYSADM.GROS_BUCH (
    ID VARCHAR(18) NOT NULL,
    ROW_DATE DATE,
    ID_D_ACC VARCHAR(18),
    ID_K_ACC VARCHAR(18),
    ID_AN_D VARCHAR(18),
    ID_AN_K VARCHAR(18),
    DEFIneRow VARCHAR(18),
    Money_ROW DOUBLE PRECISION,
    quanti_ROW DOUBLE PRECISION,
    NUMJOURNAL VARCHAR(10),
    ID_CUR VARCHAR(18),
    ID_DOC VARCHAR(18),
    ID_STR_DOC VARCHAR(18),
    ID_USER VARCHAR(18) NOT NULL)
/

ID - Идентификатор строки... (нужно! :-))

ROW_DATE - Дата (число :-)) - проведения текущей проводки.

ID_D_ACC - Идентификатор счета дебита.

ID_K_ACC - Идентификатор счета кредита.

ID_AN_D - Идентификатор аналитического признака, по которому мы можем анализировать дебетовый счет...

ID_AN_K - Идентификатор аналитического признака, по которому мы можем анализировать счет кредита...

DEFIneRow - Идентификатор описания проводки. Описаний - то не очень и много - так их проще хранить в неком "отдельном" месте... :-))

Money_ROW - Это деньги - сумма денег, о которой ведется речь в проводке...

quanti_ROW - количество... ну сумма... а если учет по счету (любому - или дебиту или кредиту) количественный, то показывать количество в строке очень "правильно" :-))

NUMJOURNAL - номер журнала. Что ЭТО? Ну... точно даже не опишу. Но, как-то сложилось или просто если смотреть на ОБЩИЙ список проводок, то "приятнее" как- то "упорядочить" проводки по темам что ли.

ID_CUR - Идентификатор валюты, в которой была сделана проводка.

ID_DOC - Идентификатор документа, породившего текущую строку.

ID_STR_DOC - Идентификатор строки из табличной части документа, породившего текущую строку, если таковая действительно существует.

ID_USER - Идентификатор пользователя, сделавшего запись.

Ограничения: поскольку описание проводки мы решили хранить в табличке "CONSTCHAR" - списком строковых констант... это наверное, самое "правильное" место для хранения такого рода данных.

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY GrBu001 (
DEFIneRow ) REFERENCES SYSADM.CONSTCHAR
/

Список документов - все документы от туда... важно не дать возможности удалить документ, если еще есть строки в "главной книге"...

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY GrBu002 (
ID_DOC ) REFERENCES SYSADM.LISTDOC
/

Аналогично поступим и с пользователями...

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY LU120603 (
ID_USER) REFERENCES SYSADM.LISTUSER
/

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

Следующая таблица - список счетов:

CREATE TABLE SYSADM.PLAN_ACCOUNT (
    ID VARCHAR(18) NOT NULL,
    ACCOUNT VARCHAR(16),
    DEFINE VARCHAR(50),
    ANALITIC VARCHAR(18),
    ACCLINCK VARCHAR(18),
    FLAGS CHAR(4))
/

ID - Идентификатор счета...

ACCOUNT - номер, или сокращенное название.

DEFINE - описание типа, "товары на складах"

ANALITIC - Идентификатор аналитического признака - "узла на дереве аналитических признаков" (таблице субконт) - указатель, что по счету ведется аналитических учет, и по чему собственно.

ACCLINCK - Идентификатор "связанности" представим себе ситуацию: надо организовать учет по большому количеству материально-ответственных лиц (реализаторов)... (или еще что -то подобное) - учитывать надо допустим, "товары"... как это сделать в этой системе? Почти просто - "связываем" аналитический признак - "МОЛ" (с конкретным именем и фамилией) со счетом из "раздела" товары у "МОЛ". Получается счет с именем "ФИО", по которому учитываем товары... на самом деле, пример "надуманный", но, "похожих" ситуаций достаточно много в практике... так что...

FLAGS - флаги счета все, что я говорил только что - только в 4-х символах получились строки вида "Х_Х_" что есть что?

  1. Аналитичность - если по счету ведется аналитический учет. В первой позиции стоит "Х".
  2. Количественность. Если у нас, допустим, расчетный счет, то о каких количествах можно говорить? - только суммы.... а товары? - есть и суммы и количество.
  3. Связанность (уже рассказал)
  4. Про учет товаров, находящихся у "МОЛ" я говорил, а КАК назвать "счет_название_раздела"? в случае тех же самых "МОЛ", и КАК назвать родительский счет? - типа, "уточнения" которого и будут "счетами-МОЛ" и КАК сказать системе, что на такой счет, без "уточнений" НИЧЕГО положить (или взять) НЕЛЬЗЯ?

Вот именно для разрешения такого рода "неприятностей", мы и ввели эту позицию флага.

А теперь очень важно сказать что идентификатор в этой таблице несет некие нагрузки.

ALTER TABLE SYSADM.PLAN_ACCOUNT PRIMARY KEY (ID)
/

Теперь ограничения: нельзя позволить удалить счет, если есть строки в "GROS_BUCH", в которых счет "упомянут".

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY GB100401 (
ID_D_ACC) REFERENCES SYSADM.PLAN_ACCOUNT
/

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY GB100402 (
ID_K_ACC) REFERENCES SYSADM.PLAN_ACCOUNT
/

Естественно, нужно добавить еще ограничения на "ANALITIC" и "ACCLINCK" но, сделаем это после того, как опишем таблицу "аналитические признаки".

Да, так вот и она:

CREATE TABLE SYSADM.SUBCONTO (
    ID VARCHAR(18) NOT NULL,
    NAME CHAR(50),
    STORY VARCHAR(254),
    FLAGS DOUBLE PRECISION,
    IDSTRUCT VARCHAR(18),
    IDPARAM VARCHAR(18))
/

ID - Идентификатор аналитического признака.

NAME - Название

STORY - Пожалуй самое "нагруженное поле" - именно тут "моделируется" древовидная структура... как и зачем... начнем с "зачем" вернее "почему" да, именно так... проще (да и логичнее) было бы хранить идентификатор "родителя" - самое "то", вот только КАК получить ВСЕ "поддерево" начиная с некого узла? - необходимость в таком действии есть, а ВОЗМОЖНОСТЬ? - в "оракле" есть, а синтаксис "SQLBase" чуть проще, и возможности уже нет. Вот мы и "выкрутились" - "просто" добавляем идентификатор "родителя" к строке, которая и получилась "списком родителей" - историей... и, получить "набор потомков" - "просто" :-)) надо выбрать всех, у кого есть в истории нужные идентификаторы... неприятности: пришлось ограничить глубину вложения.

FLAGS - Некий флаг. Пока, как я понимаю, это "для будующих применений".

IDSTRUCT - Идентификатор описания документа-редактора параметров аналитического признака (из таблицы "LISTPATTERN") уф, загнул, и наверное, по- порядку: аналитический признак - "контрАгент" - нужно его описание - адрес, банковский счет, телефон директора... или, "заказ" - а вот тут - даже пока и не придумывается... но, в любом случае, МНОГО! И что важно, так то, что все данные параметров Аналитики, по - большому счету, нужно хранить в неких таблицах, и, соответственно, нам нужны "екзешники" для редактирования...

IDPARAM - Идентификатор, а это ссылка на данные... из той таблицы, которая описана в предыдущей ссылке...

Подчеркнем важность илентификатора:

ALTER TABLE SYSADM.SUBCONTO PRIMARY KEY (ID)
/

А теперь ограничения. Сначала введем ограничения для списка счетов:

ALTER TABLE SYSADM.PLAN_ACCOUNT FOREIGN KEY PA100400 (
ANALITIC ) REFERENCES SYSADM.SUBCONTO
/

ALTER TABLE SYSADM.PLAN_ACCOUNT FOREIGN KEY PA100401 (
ACCLINCK ) REFERENCES SYSADM.SUBCONTO
/

Теперь для "Главной книги": ограничения на поля "аналитических признаков".

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY SU100401 (
ID_AN_D) REFERENCES SYSADM.SUBCONTO
/

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY SU100402 (
ID_AN_K) REFERENCES SYSADM.SUBCONTO
/

И, "на последок": про права я рассказывал? - а ограничения, связанные с "аналитикой"? вот и они...

ALTER TABLE SYSADM.LISTRIGTHUS FOREIGN KEY SB100400 (
IDSUBC ) REFERENCES SYSADM.SUBCONTO
/

Пора двигаться дальше... просто список валют:

CREATE TABLE SYSADM.CURRENCY (
    ID VARCHAR(18) NOT NULL,
    NAME_CUR VARCHAR(25),
    DEF_CUR VARCHAR(5))
/

ID - Идентификатор валюты.

NAME_CUR - "длинное" название.

DEF_CUR - "сокращенное" название.

Естественное замечание:

ALTER TABLE SYSADM.CURRENCY PRIMARY KEY (ID)
/

Ограничения: естественно, раз валюты упоминаются в "главной книге".

ALTER TABLE SYSADM.GROS_BUCH FOREIGN KEY CU100401 (ID_CUR)
REFERENCES SYSADM.CURRENCY
/

А вот теперь уже интереснее: "кроссы" или, коэффициенты перевода... или курсы валют? Ну, наверное последнее определение самое правильное...

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

CREATE TABLE SYSADM.CROSSCUR (
    ID VARCHAR(18) NOT NULL,
    ROW_DATE DATE,
    ID_CUR1 VARCHAR(18),
    SUM_C DOUBLE PRECISION,
    ID_CUR2 VARCHAR(18))
/

ID - Идентификатор.

ROW_DATE - Дата введения нового курса.

ID_CUR1 - Идентификатор валюты "продажи".

SUM_C - Коэффициент пересчета.

ID_CUR2 - Идентификатор валюты "покупки".

Методика перевода из валюты в валюту: "курс покупки" может не совпадать с "курсом продажи" - для этого между двумя валютами ДОЛЖНО быть две строки перевода. Как все это работает? Выбираем нужную нам строку - самую "свежую" запись, в которой представлены необходимые нам коды валют. "ID_CUR1" валюта "продажи" - та валюта, которую мы ХОТИМ поменять (продать) (допустим доллар). ID_CUR2 - код валюты, которую "покупаем" (гривня или рубль, если хотите :-)). SUM_C - коэффициент перевода ( допустим, 5,6) SUM_C = 5,6 а, в ОБРАТНУЮ сторону (обычно пишут курс покупки -5.9) и вот ТУТ мы указываем: SUM_C = 0,1694 (1/5.9) - ОЧЕНЬ извиняемся, но проще не придумалось.

Ограничения? Как же без них? :-) - тоже есть. Ограничиваем возможность удалить строку из списка валют, если у нас есть ее курсы...

ALTER TABLE SYSADM.CROSSCUR FOREIGN KEY CU100403 (
ID_CUR1 ) REFERENCES SYSADM.CURRENCY
/

ALTER TABLE SYSADM.CURRENCY FOREIGN KEY CU100404 (
ID_CUR2 ) REFERENCES SYSADM.CURRENCY
/

Ну вот, обо всем поговорили, добрались до остатков:

CREATE TABLE SYSADM.REMAINDET (
    ROW_DATE DATE NOT NULL,
    ID_ACC VARCHAR(18) NOT NULL,
    ID_AN VARCHAR(18) NOT NULL,
    REM_ACC DOUBLE PRECISION,
    REM_quanti DOUBLE PRECISION,
    REM_MANEY VARCHAR(18) NOT NULL)
/

ROW_DATE - Дата. Многие бухгалтерские системы имеют месячные итоги, то есть, нет "штатной" возможности сказать, сколько было на неком счету денег 14 числа некого прошедшего месяца... такое положение может и устраивает бухгалтеров, но совершенно не устраивает "управленцев" (а систему мы "придумывали" и для них тоже)... вот мы и решили, что "самым правильным" будет делать ежедневные остатки... причем, если по некому счету в некий день операций не происходило, то и остаток за ЭТОТ день хранится не будет...

ID_ACC - Идентификатор счета.

ID_AN - Идентификатор аналитического признака.

REM_ACC - Сумма остатка на счете...

REM_quanti - Количество остатка, если по счету ведется количественный учет...

REM_MANEY - Идентификатор валюты, в которой совершена последняя проводка. Т.е. если по некому счету у нас ведется много валютный учет, и, следующая проводка, которая записывается в "главную книгу" делается в иной валюте, чем предыдущая, то остаток пересчитывается в новую валюту, происходит суммирование, и новый остаток, в новой валюте записывается в таблицу...

Ограничения вполне понятны, и подробно о них говорить не интересно...

ALTER TABLE SYSADM.REMAINDET FOREIGN KEY Rem100401 (
ID_ACC ) REFERENCES SYSADM.PLAN_ACCOUNT
/

ALTER TABLE SYSADM.REMAINDET FOREIGN KEY Rem100402 (
ID_AN) REFERENCES SYSADM.SUBCONTO
/

ALTER TABLE SYSADM.REMAINDET FOREIGN KEY Rem100403 (
REM_MANEY ) REFERENCES SYSADM.CURRENCY
/

А вот теперь триггера, которые и считают остатки. Вот команда, которая помогает нам получить остаток на текущем счету по текущим аналитике и валюте.

STORE SYSADM.STRSELREM select a.ROW_DATE, a.REM_ACC, a.REM_quanti, a.REM_MANEY
 from remaindet a
where  a.ID_acc=:2 AND
a.ID_an=:3 AND a.REM_MANEY=:4
AND  a.ROW_DATE in
(select max ( b.ROW_DATE )  from REMAINDET b where
b.ROW_DATE <=  :1 and b.ID_ACC = :2 and b.ID_AN = :3 and b.REM_MANEY = :4 )
/

Команда добавления новой строки в таблицу "остатки".

STORE SYSADM.STRINSREM insert into Remaindet
( ROW_DATE, ID_ACC, ID_AN, REM_ACC, REM_quanti, REM_MANEY )
values (:1, :2, :3, :4, :5, :6 )
/

Команда исправления нужной строки в таблице "остатки".

STORE SYSADM.STRUPREM update Remaindet set
Rem_Acc = Rem_Acc + :1,
REM_quanti = REM_quanti + :2
where ID_acc=:3 AND
ID_an=:4 AND REM_MANEY =:5 AND
ROW_DATE >= :6
/

А вот теперь и главная подготовительная процедура.

STORE SYSADM.INSROWREM Procedure: InsRowRem static
Parameters
    Date/Time: RemDtW
    String: RemID_Acc
    String: RemID_AN
    Number: RemK
    Number: RemSum
    String: RemID_cur
Local variables
    String: strSelWhere
    String: strSelInto
    String: strUpdWhere
    String: strUpRemOfr
    String: strUpFl
    String: strInsRemOld
    Number: Remfl
    Number: RemACC
    String: RemCur
    Number: RemKol
    String: Row
    String: NameTabl
    Number: nOk
    Date/Time: RemDat
    Sql Handle: hsqlWWW
    Number: nCount
    Number: bInsert
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
    On Procedure Execute
        set NameTabl = 'remaindet'
        Set RemACC = 0
        Set RemKol = 0
        Set bInsert = 1
        Set strSelWhere = ' :RemDtW, :RemID_Acc, :RemID_AN, :RemID_cur '
        Set strSelInto = ' :RemDat, :RemACC, :RemKol, :Remfl '
        Set strUpdWhere = ' :RemSum, :RemK, :RemID_Acc, :RemID_AN, :RemID_cur, :RemDtW '
        Set strInsRemOld = ' :RemDtW, :RemID_Acc, :RemID_AN, :RemACC, :RemKol, :RemID_cur '
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
            Return FALSE
! что с начала: получим остатки.
        Call SqlRetrieve(hsqlWWW, 'sysadm.strSelRem', strSelWhere, strSelInto )
        Call SqlExecute(hsqlWWW)
        Call SqlGetResultSetCount ( hsqlWWW, nCount )
        If nCount >0
            Call SqlFetchNext(hsqlWWW, nOk)
!если остаток на счете за необходимое нам число есть
        If RemDtW = RemDat
            Set bInsert = 0
        If bInsert = 1
! а вот если нету, то в таблицу остатки надо добавить
! строку, с ПРЕДЫДУЩИМ значением остатка,
            Call SqlRetrieve(hsqlWWW, 'sysadm.strInsRem', strInsRemOld,'')
            Call SqlExecute(hsqlWWW)
! а потом ВСЕ изменить.... наверное,
! не очень "логично", но... работает...
        Call SqlRetrieve(hsqlWWW,'sysadm.strUpRem', strUpdWhere,'')
        Call SqlExecute(hsqlWWW)
    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

И вот процедура, которая работает в триггере на добавление строки в "главную книгу":

STORE SYSADM.INS_ROWBGREM Procedure: Ins_RowBgRem static
Parameters
    String: GBmaxID
    String: strRoWid
    Date/Time: GBdat
    String: my_d_acc
    String: my_k_acc
    String: my_an_d
    String: my_an_k
    Number: GB_k
    Number: my_sum_row
    String: GBid_cur
Local variables
    String: strInsP
    Number: nOk
    Number: tmp_Qw
    Number: tmp_Sum
    Sql Handle: hsqlWWW
    Number: nChoose
    String: OperNow
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )

    On Procedure Execute

! что? Да, именно, ЭТО секция работы с будущей
! репликацией... пока просто обозначим ее...
!		Set OperNow = 'I'
        When SqlError

            Set nOk = SqlError ( hsqlWWW )
            Return FALSE
! сначала нужен идентификатор строки...
        Call SqlRetrieve(hsqlWWW, 'sysadm.GetMaxID', ' :NameTabl, :GBmaxID ', ' :GBmaxID ')
        Call SqlExecute ( hsqlWWW )
        Call SqlFetchRow ( hsqlWWW, 0, nChoose )
! а потом, добавить (или изменить) "остатки" что важно:
! для одной строки из "главной книги" нам нужны две
! строки в "остатках" и, если для одного счета происходит
! увеличение сумм, то для другого - уменьшение.. это я и показал.
        Call SqlRetrieve(hsqlWWW, 'InsRowRem',
            ' :GBdat, :my_d_acc, :my_an_d, :GB_k, :my_sum_row, :GBid_cur ','')
        Call SqlExecute ( hsqlWWW )

        set tmp_Qw = -GB_k

        set tmp_Sum = -my_sum_row

        Call SqlRetrieve(hsqlWWW, 'InsRowRem',
            ':GBdat, :my_k_acc, :my_an_k, :tmp_Qw, :tmp_Sum, :GBid_cur ','')
        Call SqlExecute ( hsqlWWW )
    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

А вот и триггер, который работает:

CREATE TRIGGER SYSADM.INSROWGB After Insert ON SYSADM.GROS_BUCH
(Execute SYSADM.INS_ROWBGREM
(
GROS_BUCH.ID,
GROS_BUCH.rowid,
GROS_BUCH.ROW_DAT,
GROS_BUCH.ID_D_ACC,
GROS_BUCH.ID_K_ACC,
GROS_BUCH.ID_AN_D,
GROS_BUCH.ID_AN_K,
GROS_BUCH.K_REM,
GROS_BUCH.SUM_ROW,
GROS_BUCH.ID_CUR ))
For Each Row
/

Процедура смены строки в "главной книге". Поменяться может ВСЕ, (пользователь меняет, а вот что ему в голову взбредет... :-)) нам же нужно отслеживать те изменения, которые меняют "остатки":

STORE SYSADM.UPPR_GRBU Procedure: UpPr_GrBu static
! сначала стоит все удалить, вернее не все,
! а старую строку из "остатков"
! мне показалось, что проще удалить все, а потом,
! привычно, начать все заново... :-))
        set tmp_Qw = -K_REM
        set tmp_Sum = -SUM_ROW
        Call SqlRetrieve(hsqlWWW, 'InsRowRem',
            ' :ROW_DAT, :ID_D_ACC, :ID_AN_D, :tmp_Qw, :tmp_Sum, :ID_CUR ','')
        Call SqlExecute ( hsqlWWW )
        Call SqlRetrieve( hsqlWWW, 'InsRowRem',
            ' :ROW_DAT, :ID_K_ACC, :ID_AN_K, :K_REM, :SUM_ROW, :ID_CUR ','')
        Call SqlExecute ( hsqlWWW )
! вот ЭТОТ кусок текста относится
! к реализации системы реплицирования...
!		Set OperNow = 'U'
!         Call SqlImmediate ( 'insert into SYSREP.DT$GROS_BUCH select
 ID, ROW_DATE, ID_D_ACC, ID_K_ACC, DEFIneRow, Money_ROW,
 quanti_ROW, NUMJOURNAL, ID_CUR, ID_AN_D, ID_AN_K, ID_DOC,
 ID_STR_DOC, ID_USER, :OperNow, current timestamp from
 SYSADM.GROS_BUCH where rowid = :strRoWid ' )
! вторая часть "марлизонского балета" - старые значения
! "выкусили", а вот новые то НАДО добавить...
        set tmp_Qw = -NewK_REM

        set tmp_Sum = -NewSUM_ROW

        Call SqlRetrieve(hsqlWWW, 'InsRowRem',
            ' :NewROW_DAT, :NewID_D_ACC, :NewID_AN_D, :NewK_REM, :NewSUM_ROW, :NewID_CUR ','')
        Call SqlExecute ( hsqlWWW )
        Call SqlRetrieve( hsqlWWW, 'InsRowRem',
            ' :NewROW_DAT, :NewID_K_ACC, :NewID_AN_K, :tmp_Qw, :tmp_Sum, :NewID_CUR ','')
        Call SqlExecute ( hsqlWWW )
    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

С процедурой "покончили", надеюсь, все понятно, а вот и триггер:

CREATE TRIGGER SYSADM.UPD_GBU Before Update ON SYSADM.GROS_BUCH
REFERENCING OLD oldT NEW NewT (
Execute SYSADM.UpPr_GrBu (
NewT.ROW_DATE, NewT.ID_D_ACC, NewT.ID_K_ACC,
NewT.Money_ROW, NewT.quanti_ROW,
NewT.ID_CUR, NewT.ID_AN_D, NewT.ID_AN_K, NewT.rowid,
oldT.ID, oldT.ROW_DATE, oldT.ID_D_ACC, oldT.ID_K_ACC,
oldT.DEFIneRow, oldT.Money_ROW, oldT.quanti_ROW,
oldT.NUMJOURNAL, oldT.ID_CUR, oldT.ID_AN_D, oldT.ID_AN_K,
oldT.ID_DOC, oldT.ID_STR_DOC, oldT.ID_USER ))
For Each Row
/

Удаление. После всего описанного, тут уже все понятно... (я надеюсь :-))

STORE SYSADM.DELL_ROWBGREM Procedure: Dell_RowBgRem static
Parameters
    String: strRoWid
    string: ID
    Date/Time: ROW_DAT
    string: ID_D_ACC
    string: ID_K_ACC
    string: DEFINIT
    Number: SUM_ROW
    Number: K_REM
    string: NUMJOURNAL
    string: ID_CUR
    string: ID_AN_D
    string: ID_AN_K
    string: ID_DOC
    string: ID_STR_DOC
    string: ID_USER
Local variables
    String: strInsP
    Number: GBmaxID
    Number: nOk
    Number: tmp_Qw
    Number: tmp_Sum
    Sql Handle: hsqlWWW
    Number: nChoose
    string: OPER
Actions
    On Procedure Startup
        Call SqlConnect ( hsqlWWW )
    On Procedure Execute
        When SqlError
            Set nOk = SqlError ( hsqlWWW )
            Return FALSE
        set tmp_Qw = -K_REM
        set tmp_Sum = -SUM_ROW
        Call SqlRetrieve(hsqlWWW, 'InsRowRem',
            ' :ROW_DAT, :ID_D_ACC, :ID_AN_D, :tmp_Qw, :tmp_Sum, :ID_CUR ','')
        Call SqlExecute ( hsqlWWW )
        Call SqlRetrieve( hsqlWWW, 'InsRowRem',
            ' :ROW_DAT, :ID_K_ACC, :ID_AN_K, :K_REM, :SUM_ROW, :ID_CUR ','')
        Call SqlExecute ( hsqlWWW )
!        Set OPER = 'D'
! и все, что положено будет делать для удаленных
! строк - занесем соответствующие строки и в
! "дельта таблицу"... - все это, конечно,
! "воспоминания о будущем" :-)...
    On Procedure Close
        Call SqlDisconnect ( hsqlWWW )
/

Вот и триггер:

CREATE TRIGGER SYSADM.DEL_GB
Before DELETE ON SYSADM.GROS_BUCH (
Execute SYSADM.Dell_RowBgRem (
rowid, ID, ROW_DATE,
ID_D_ACC, ID_K_ACC, DEFIneRow,
Money_ROW, quanti_ROW,
NUMJOURNAL, ID_CUR, ID_AN_D, ID_AN_K, ID_DOC, ID_STR_DOC, ID_USER ))
For Each Row
/

Вот, вроде все... во всяком случае, с ЭТОЙ частью...

Загрузить проект | Предыдущий Шаг | Оглавление
Автор Голиброда Александр.


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

Клиент Сбербанк

Smart Card
Development Kit

Комплект разработчика приложений работающих со смарт картами. Лучшая безопасность и неограниченные возможности для ваших программ. Подробнее...
Шаг 1 - Введение (14.12.2002 - 1.9 Kb)
Шаг 2 - Авторы официальной документации (14.12.2002 - 1.9 Kb)
Шаг 3 - Содержание (14.12.2002 - 1.9 Kb)
Шаг 4 - 1.1. Порядок установки системы. (14.12.2002 - 1.9 Kb)
Шаг 5 - 1.2. Технические средства. (14.12.2002 - 1.9 Kb)
Шаг 6 - 1.3. Программное обеспечение. (14.12.2002 - 1.9 Kb)
Шаг 7 - 1.4. Состав комплекта поставляемого программного обеспечения. (14.12.2002 - 1.9 Kb)
Шаг 8 - 2.1. Подготовительные работы. (14.12.2002 - 1.9 Kb)
Шаг 9 - 2.2. Инсталляция программного обеспечения рабочего места "Банк". (14.12.2002 - 1.9 Kb)
Шаг 10 - 2.3 Установка на рабочем месте "Банк" комплекса защиты "Аккорд". (14.12.2002 - 1.9 Kb)
Шаг 11 - 2.4 Параметры АРМ, настраиваемые с помощью файла SETUP.INI. (14.12.2002 - 1.9 Kb)
Шаг 12 - 3.1.Подготовка дистрибутивной дискеты с программным обеспечением рабочего места "Клиент". (14.12.2002 - 1.9 Kb)
Шаг 13 - 3.2. Подготовка ключевой дискеты сотруднику банка для выезда. (14.12.2002 - 1.9 Kb)
Шаг 14 - 3.3. Подготовка дискеты с открытыми ключами ЭЦП подразделения Сбербанка РФ, в котором установлено рабочее место "Банк". (14.12.2002 - 1.9 Kb)
Шаг 15 - 3.4. Подготовка к проведению инсталляции. (14.12.2002 - 1.9 Kb)
Шаг 16 - 3.5. Инсталляция программного обеспечения рабочего места "Клиент". (14.12.2002 - 1.9 Kb)
Шаг 17 - 3.6 Установка на рабочем месте "Клиент" комплекса защиты "Аккорд". (14.12.2002 - 1.9 Kb)
Шаг 18 - 3.7 Параметры АРМ, настраиваемые с помощью файла SETUP.INI. (14.12.2002 - 1.9 Kb)
Шаг 19 - 3.8 Особенности инсталляции АРМ "Клиент" в среде WINDOWS 3.11, WINDOWS 95, 98. (14.12.2002 - 1.9 Kb)
Шаг 20 - 3.9 Особенности сетевой инсталляции АРМ "Клиент". (14.12.2002 - 1.9 Kb)
Шаг 21 - Рекомендации по использованию модемов в системе "Клиент-Сбербанк". (14.12.2002 - 1.9 Kb)
Шаг 22 - Основные критерии для настройки модемов при прямой связи. (14.12.2002 - 1.9 Kb)
Шаг 23 - Рекомендации по конфигурированию компьютеров рабочих мест "Клиент" и "Банк". (14.12.2002 - 1.9 Kb)
Шаг 24 - Описание общих принципов использования файлов-шаблонов печати документов в системе "Клиент-Сбербанк". (14.12.2002 - 1.9 Kb)
Шаг 25 - Обеспечение взаимодействия АРМ "Банк" с АРМ "Операционный день" (ОД) банка. (14.12.2002 - 1.9 Kb)
Шаг 26 - Выгрузка принятых документов из АРМ "Банк". (14.12.2002 - 1.9 Kb)
Шаг 27 - Конфигурирование АРМ "Банк" для конвертации в SBRF3. (14.12.2002 - 1.9 Kb)
Шаг 28 - Описание общих принципов использования шаблонов для конвертации данных в системе "Клиент-Сбербанк". (14.12.2002 - 1.9 Kb)
Шаг 29 - Вопрос первый, на чем это написано. (14.12.2002 - 1.9 Kb)
Шаг 30 - Пробуем конвертировать в DBF с помощью Convert.exe. (14.12.2002 - 1.9 Kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 1 - Введение

Шаг 1 - Введение

В наше время широкое распространение получают клиент-банковские системы. Данных систем много, например Клиент Сбербанк или Diasoft Client. Данные системы значительно облегчают работу с банком. Быстро, просто но вот стыковка с 1С бывает проблематична. Появление этих шагов связано с задачей, которая стоит у меня - "связать 1С и Клиент Сбербанк". Я сначала выставлю официальную документацию, потом немного напишу сам, ну, а дальше все в ваших руках, точнее клавиатуре. Официальную документацию кстати не так просто получить.

Хочу сразу сказать, что приведена вся документация просто ради приличия. Вообще первоначальной настройкой занимаются люди из банка. А вот, что можно делать самим начинается с шага "Шаг 18 - 3.7 Параметры АРМ, настраиваемые с помощью файла SETUP.INI".

Следующий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 2 - Авторы официальной документации

Шаг 2 - Авторы официальной документации

                 УПРАВЛЕНИЕ БАНКОВСКИХ СИСТЕМ СБЕРБАНКА РОССИИ

                                        Директор Управления банковских
                                        систем Сбербанка России
                                        __________________С.С. Зайцев
                                        "___"___________________2001г.

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

                   "К Л И Е Н Т  -  С Б Е Р Б А Н К"

                      Руководство по инсталляции

                           СБ1270000.001 РИ.1
                             (Версия 4.16)

                                         Начальник отдела автоматизации
                                         розничных операций Управления
                                         банковских систем Сбербанка России
                                         ____________________М.С.Захаров
                                        "___"________________________2002г.

                                         Исполнитель:
                                         Главный инженер отдела
                                         автоматизации розничных операций
                                         Управления банковских систем
                                         Сбербанка России
                                         ___________________Н.В. Родионов
                                        "___"________________________2002г.

                             Москва, 2002


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 3 - Содержание

Шаг 3 - Содержание

1. Общие положения.

  • 1.1. Порядок установки системы
  • 1.2. Технические средства
  • 1.3. Программное обеспечение
  • 1.4. Состав поставляемого ПО

2. Инсталляция программного обеспечения "Банк.

  • 2.1. Подготовительные работы
  • 2.2. Инсталляция рабочего места "Банк"
  • 2.3 Установка на рабочем месте "Банк" комплекса защиты "Аккорд"
  • 2.4 Параметры АРМ, настраиваемые с помощью файла SETUP.INI

3. Инсталляция программного обеспечения "Клиент".

  • 3.1. Подготовка дистрибутивной дискеты
  • 3.2. Подготовка ключевой дискеты сотруднику банка
  • 3.3. Подготовка дискеты с открытыми ключами
  • 3.4. Подготовка к проведению инсталляции
  • 3.5. Инсталляция программного обеспечения
  • 3.6. Установка на рабочем месте "Клиент" комплекса защиты "Аккорд"
  • 3.7. Параметры АРМ, настраиваемые с помощью файла SETUP.INI
  • 3.8. Особенности инсталляции АРМ "Клиент" в среде WINDOWS 3.11, WINDOWS 95, OS/2
  • 3.9. Особенности сетевой инсталляции АРМ "Клиент"

Приложение А. Рекомендации по использованию модемов ZyXEL 1496 в системе "Клиент-Сбербанк"
Приложение B. Рекомендации по конфигурированию компьютеров рабочих мест "Клиент" и "Банк"
Приложение C. Описание общих принципов использования файлов-шаблонов печати документов
Приложение D. Обеспечение взаимодействия АРМ "Банк" с АРМ "Операционный день" (ОД) банка
Приложение E. Описание общих принципов использования шаблонов для конвертации данных в системе "Клиент-Сбербанк"


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 4 - 1.1. Порядок установки системы

Шаг 4 - 1.1. Порядок установки системы

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

  • принимать от клиента платежные документы, производить их предварительную обработку и печать;
  • передавать клиенту информацию о состоянии принятых от него платежных документов;
  • передавать клиенту информацию о состоянии его счетов, сформированную на основании работы программы "Операционный день";
  • передавать клиенту платежные требования, поступившие в его адрес, и отказы от акцепта на выставленные им платежные требования;
  • обмениваться с клиентами произвольной информацией (договора, инструкции, законодательные акты и т.д.).

Применяемые в системе "Клиент-Сбербанк" процедуры электронной цифровой подписи и шифрации исключают злоумышленные перехват, прочтение и искажение передаваемой информации, а также возможность несанкционированной передачи платежных документов. Процедура электронной подписи удовлетворяет стандартам Российской Федерации РФ Р34.10-94 и РФ Р34.11-94, а процедура шифрования - требованиям ГОСТ 28147-89.

Информационная безопасность рабочих мест "Клиент" и "Банк" обеспечивается программно-аппаратным комплексом "Аккорд", позволяющим обеспечить:

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

Система "Клиент-Сбербанк" может устанавливаться:

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

Рабочее место (подсистема) "Клиент" устанавливается у клиента банка, а рабочее место (подсистема) "Банк" - в отделении Сбербанка, обслуживающем клиентов, подключенных к системе "Клиент-Сбербанк".

Передача сообщений (транспортных файлов) между рабочими местами "Клиент" и рабочим местом "Банк" системы "Клиент-Сбербанк" может осуществляться следующими способами:

  1. Посредством проведения сеансов прямой модемной связи через телефонную сеть общего назначения (телефонную сеть "Искра-2", при наличии сети "Искра-2" в регионе). Пример организации системы "Клиент-Сбербанк" при использовании этого варианта передачи сообщений приведен на рисунке ниже.

    4_1.gif (3464 b)

  2. С использованием внешней транспортной системы (электронной почты). При использовании внешней транспортной системы, обмен данными между рабочими местами "Банк" и "Клиент" осуществляется через директории приема и передачи данных рабочих мест, при этом реализован следующий алгоритм взаимодействия рабочих мест "Банк" и "Клиент":
    1. программа "Клиент" формирует запрос и помещает соответствующие транспортные файлы в директорию передачи рабочего места Клиент";
    2. внешняя транспортная система передает по линиям связи указанные файлы из директории передачи рабочего места "Клиент" в директорию приема рабочего места "Банк" (вводится в поле Директ.отправки карточки реквизитов);
    3. программа "Банк" принимает имеющиеся в директории приема файлы, формирует ответные файлы и помещает их в директорию передачи для конкретного клиента (вводится в поле Директ.отправки карточки клиента);
    4. внешняя система передает по линиям связи ответные файлы из директории передачи рабочего места "Банк" в директорию приема соответствующего рабочего места "Клиент";
    5. программа "Клиент" принимает имеющиеся в директории приема файлы.

Для совместного использования прямого модемного доступа к модулю "Банк" с внешней транспортной системой (электронной почтой) почтовая система должна удовлетворять нижеперечисленным требованиям:

  • в почтовой системе должны быть зарегистрированы те клиенты, которые подключены к системе "Клиент-Сбербанк" через эту почтовую систему.
  • почтовая система должна уметь распознавать файлы, предназначенные для отправки зарегистрированным в ней клиентам по маске в имени файла (см.описанную ниже структуру имен файлов) и забирать в директории отправки модуля "Банк" только эти файлы, оставляя файлы других клиентов.
  • при приеме - передаче файлов система должна сохранять имя файла, дату и время его создания.
  • в директорию приема модуля "Банк" принятые почтовой системой файлы должны перемещаться только по окончанию приема.
  • почтовая система должна гарантировать доставку файла клиенту при разрывах соединений и некачественной передаче (повтор).

Общими требованиями к внешней транспортной системе (системе электронной почты) являются:

  1. Гарантированная доставка файлов двоичного формата без изменения их содержания, имени, даты и времени создания файла.
  2. Все служебные сообщения (квитанции), используемые внешней системой, не должны поступать в директории приема рабочих мест "Банк" и "Клиент".
  3. Удаление передаваемых файлов из директорий передачи рабочих мест "Клиент" и "Банк" необходимо осуществлять только после завершения успешной передачи сообщений и получения подтверждений об их успешном приеме.

Таким требованиям полностью удовлетворяет функциональная подсистема "Прием-передача данных" (ФП ППД).

Внимание! Удаление транспортной системой передаваемых файлов из директории передачи рабочего места "Банк" необходимо производить при работающей программе "Банк". В случае удаления передаваемых файлов из директории передачи рабочего места "Банк" при неработающей программе "Банк", программа считает данные файлы не отправленными и повторно помещает их в директорию передачи.

При обмене данными в системе "Клиент-Сбербанк" используются транспортные файлы, имеющие следующую структуру имени (внешняя транспортная система не должна изменять имена файлов):

4_2.gif (3161 b)

Обмен сообщениями в системе "Клиент-Сбербанк" предусмотрен только между рабочим местом "Банк" и рабочими местами "Клиент", обмен сообщениями между рабочими местами "Клиент" не производится.

При инсталляции и дальнейшей эксплуатации системы Клиент-Сбербанк выделяются следующие категории лиц, различающихся своими полномочиями:

  • Оператор рабочего места "Клиент" - подготавливает и передает документы (произвольное количество операторов на каждое рабочее место "Клиент");
  • Оператор рабочего места "Банк" - принимает и распечатывает документы, полученные от клиентов, подготавливает и передает ответные квитанции об исполнении (или об отказе от исполнения) документов (произвольное количество операторов на каждое рабочее место "Банк");
  • Администратор рабочего места "Клиент" - ведет список операторов, изготавливает ключи электронной цифровой подписи и передает открытые ключи подписи для регистрации на рабочем месте "Банк", работает с архивом транспортных файлов.
  • Администратор рабочего места "Банк" - ведет список операторов рабочего места "Банк", изготавливает ключи подписи для руководителей и передает открытые ключи подписи для регистрации их на рабочих местах "Клиент", работает с архивом транспортных файлов, изготавливает дистрибутивные дискеты для инсталляции рабочих мест "Клиент" (не более 2-х администраторов на каждое рабочее место "Банк" ).

Кроме того, предполагается наличие в территориальном банке Центра генерации и распределения ключей (ЦГРК) территориального банка, в задачи которого входит подготовка криптографических ключей и защищенных от копирования дистрибутивных дискет с программными драйверами криптозащиты и электронной цифровой подписи для систем "Клиент-Сбербанк", установленных в пределах территориального банка Сбербанка РФ.

Действия операторов и администраторов рабочих мест "Клиент" и "Банк" при инсталляции и дальнейшей эксплуатации рабочих мест изложены в настоящем руководстве и в Руководстве по эксплуатации рабочих мест "Клиент" и "Банк", а в части использования ключевой системы криптографической защиты - в соответствующих Инструкциях по использованию ключевой системы автоматизированной системы "Клиент-Сбербанк" (для рабочих мест "Клиент" и "Банк"). Действия персонала ЦГРК по подготовке и ведению ключей, а также по изготовлению защищенных от копирования дистрибутивных дискет с программными драйверами криптозащиты и электронной цифровой подписи для систем "Клиент-Сбербанк" изложены в "Инструкции по изготовлению ключей шифрования для системы "Клиент-Сбербанк".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 5 - 1.2. Технические средства

Шаг 5 - 1.2. Технические средства

1.2.1 Технические средства для рабочего места "Клиент"

Для организации автоматизированного рабочего места "Клиент" требуются следующие технические средства:

  • IBM PC 386,486 и выше - персональный компьютер (Монитор VGA, ОЗУ не менее 2 МБ, винчестер с объемом свободной дисковой памяти не меее 100 МБ);
  • принтер, поддерживающий управляющие коды EPSON, или лазерный принтер (желательно с русифицированным картриджем);
  • модем, HAYES совместимый по системе команд, желательно модели ZyXEL-1496 (для варианта установки системы "Клиент-Сбербанк" с использованием сеансов прямой модемной связи);
  • комплекс защиты от несанкционированного доступа "Аккорд".

Примечание: Комплекс защиты от несанкционированного доступа "Аккорд" у клиента-юридического лица устанавливается по согласованию с ним.

Для рабочего места "Клиент" требуется одна коммутируемая линия связи телефонной сети общего пользования или сети ИСКРА-2 (для варианта установки системы "Клиент-Сбербанк" с использованием сеансов прямой модемной связи).

1.2.2 Технические средства для рабочего места "Банк"

Для организации автоматизированного рабочего места "Банк" требуются следующие технические средства:

  • IBM PC 486-DX4-100 (Pentium-75) - совместимый персональный компьютер (Монитор VGA, ОЗУ не менее 8 МБ, винчестер IDE типа с объемом свободной дисковой памяти не менее 300 МБ (запас под файл операций по счетам VIBOR.DDF и архивы входящих и исходящих файлов);
  • лазерный русифицированный принтер с производительностью, обеспечивающей достаточно высокий темп печати;
  • модем, HAYES совместимый по системе команд, желательно модели ZyXel 1496 (для варианта установки системы "Клиент-Сбербанк" с использованием сеансов прямой модемной связи). Число модемов определяется числом каналов доступа к АРМ "Банк";
  • комплекс защиты от несанкционированного доступа "Аккорд" (необязательно при проведении организационных мероприятий по ограничению доступа к АРМ "Банк").

Для АРМ "Банк" требуется несколько (до 10) коммутируемых линий связи телефонной сети общего пользования или совместимых с сетью ИСКРА-2 (для варианта установки системы "Клиент-Сбербанк" с использованием сеансов прямой модемной связи). При своей работе программа "Банк" включает подключенный к этой телефонной линии модем в режим автоответа (модемного ответа на входящие телефонные звонки), что делает невозможным использование данной телефонной линии для обычных голосовых телефонных соединений.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 6 - 1.3. Программное обеспечение

Шаг 6 - 1.3. Программное обеспечение

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

  • операционная система MS DOS версии не ниже 6.0;
  • программный комплекс АРМ "Клиент";
  • программный драйвер эмуляции криптоплаты "Криптон-3" CRY_DRV.COM;
  • программный драйвер работы с электронной цифровой подписью I99RF386.EXE;
  • программный драйвер русификации клавиатуры компьютера;
  • программное обеспечение комплекса защиты от НСД "Аккорд" (по согласованию с клиентом);
  • программное обеспечение вычисления ХЭШ-функции контролируемых по целостности файлов кода программ и некоторых файлов данных (ViewDoc.EXE).

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

  • дисковая операционная система MS DOS версии не ниже 6.0;
  • программный комплекс АРМ "Банк";
  • программный драйвер эмуляции шифроплаты "Криптон-3" CRY_DRV.COM;
  • программный драйвер работы с электронной цифровой подписью I99RF386.EXE;
  • программный драйвер русификации клавиатуры компьютера;
  • программное обеспечение комплекса защиты от НСД "Аккорд"

Для нормальной работы АРМ "Банк" и "Клиент" в среде MS DOS необходим запуск программы SHARE.EXE, входящей в состав операционной системы MS DOS, что можно осуществить включением соответствующей строки в стартовый файл конфигурирования компьютера AUTOEXEC.BAT (LH С:\DOS\SHARE.EXE /F:4096 /L:200). Устанавливаемое на рабочих местах "Банк" и "Клиент" программное обеспечение защищено от копирования и не может быть скопировано для работы на другие компьютеры.

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

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

Рекомендации по конфигурированию компьютеров рабочих мест "Клиент" и "Банк" приведены в Приложении Б к настоящему Руководству.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 7 - 1.4. Состав комплекта поставляемого программного обеспечения

Шаг 7 - 1.4. Состав комплекта поставляемого программного обеспечения

Для организации работ по инсталляции программного обеспечения систем "Клиент-Сбербанк", используется поставляемый в территориальный банк Сбербанка России комплект программного обеспечения, в состав которого входят:

  • исходные файлы для генерации дистрибутивов модуля "Банк", модуля "INIC98", дистрибутивов рабочих мест "Клиент".
  • дискета с программами шифрования и электронной цифровой подписи, предназначенная для организации ЦГРК по подготовке криптографических ключей и защищенных от копирования дистрибутивных дискет с программными драйверами криптозащиты и электронной цифровой подписи для систем "Клиент-Сбербанк", установленных в пределах территориального банка Сбербанка РФ. (Поставляется отдельно Управлением безопасности Сбербанка России).

Генерация дистрибутивов производится с помощью специальной программы INIC98.EXE, первичная инсталляция которой производится с дистрибутива, предоставленного Управлением банковских систем Сбербанка России.

Модификация установленных рабочих мест модулей "Банк" производится при смене версии программного обеспечения с помощью программы UPDATE.EXE, исходные данные для которой готовятся из исходных файлов с помощью программы INIT_UPD.EXE. АРМ "Клиент" производит замену версии при получении упаковки UPDATE.DAN сам по желанию клиента, либо с помощью программы UPDATE.EXE.

Процесс генерации дистрибутивов описан в INSTCLNT.TXT.

Дискета с программами шифрования и электронной цифровой подписи содержит программы:

CRY_DRV.COM - программный драйвер эмуляции криптоплаты "Криптон-3";
I99RF386.EXE - программный драйвер электронной цифровой подписи;

Для организации системы "Клиент-Сбербанк", кроме настоящего руководства, должны использоваться следующие документы:

"Руководство по эксплуатации рабочего места "Банк";
"Руководство по эксплуатации рабочего места "Клиент",

А также поставляемые Управлением безопасности Сбербанка России инструкции:

  • Требования по обеспечению безопасности в процессе эксплуатации абонентского пункта системы "Клиент-Сбербанк";
  • Рекомендации по обеспечению безопасности конфиденциальной информации при размещении абонентского пункта системы "Клиент-Сбербанк";
  • Инструкция по использованию ключевой системы (подсистема "Клиент");
  • Инструкция по использованию ключевой системы (подсистема "Банк");
  • Инструкция по изготовлению ключей шифрования для системы "Клиент-Сбербанк";
  • Рекомендации по обеспечению защиты абонентского пункта системы "Клиент-Сбербанк" от несанкционированного доступа (НСД);
  • Руководство по обеспечению защиты от несанкционированного доступа рабочих мест системы "Клиент-Сбербанк" с помощью комплекса "Аккорд".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 8 - 2.1. Подготовительные работы

Шаг 8 - 2.1. Подготовительные работы

Перед началом инсталляции необходимо прочесть руководство пользователя программы "Банк". Инсталляция программного обеспечения рабочего места "Банк" осуществляется сотрудниками подразделения Сбербанка России, эксплуатирующим систему "Клиент-Сбербанк".

Определить максимально ожидаемое число клиентов, подключаемых к системе "Клиент-Сбербанк" данного подразделения Сбербанка России, и заказать таблицу сетевых ключей с числом ожидаемых клиентов и запасом в 20 ключей на случай срочной замены при компроментации ключа клиента. Нормальное число клиентов для одного АРМ "Банк" - не более 300, зависящее от производительности компьютера, объема операций по счетам и числа каналов доступа к банковскому АРМ.

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

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

Для инсталляции программного обеспечения рабочего места "Банк" необходимы:

  • Дистрибутив АРМ "Банк" на дискете;
  • Дистрибутивная дискета с программным драйвером CRY_DRV.COM эмуляции криптоплаты "Криптон-3", полученная в ЦГРК;
  • Дистрибутивная дискета с программным драйвером I99RF386.EXE электронной цифровой подписи, полученная в ЦГРК;
  • Дискета с главным ключом (файлы GK.DB3 и UZ.DB3), полученная в ЦГРК;
  • Дискета с сетевыми ключами рабочего места "Банк" (файлы KL00001.NKL и KL00001.KEY), полученная в ЦГРК.

Внимание! Проверьте длину полученного от из ЦГРК файла с сетевыми ключами KL00001.NKL, которая должна соответствовать числу заказанных ключей в таблице ( N ключей * 36 ).

Кроме того, необходимо подготовить таблетки Тouch Мemory, на которых в процессе инсталляции будут созданы:

  • таблетка с секретных ключем администратора рабочего места "Банк";
  • две рабочие таблетки с секретными ключами электронной цифровой подписи подразделения Сбербанка РФ, в котором установлено рабочее место "Банк".

    Для выезда сотрудников банка к клиентам создаются специальные ЭЦП для выезда, защищенные паролем.

    • Предыдущий Шаг | Следующий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 9 - 2.2. Инсталляция программного обеспечения рабочего места "Банк".

Шаг 9 - 2.2. Инсталляция программного обеспечения рабочего места "Банк".

Приведенные ниже действия по инсталляции программного обеспечения предполагают, что программное обеспечение рабочего места "Банк" будет располагаться в директории C:\BANK_CB, хотя расположение и название этой директории может быть при инсталляции изменено.

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

1. Для инсталляции на компьютер программного драйвера CRY_DRV.COM эмуляции криптоплаты "Криптон-3", вставьте в дисковод компьютера дискету с защищенным от копирования драйвером CRY_DRV.COM и запустите на ней программу инсталляции с параметром C:\BANK_CB.

2. Для инсталляции на компьютер программного драйвера электронной цифровой подписи I99RF386.EXE, вставьте в дисковод компьютера дискету с защищенным от копирования драйвером I99RF386.EXE и запустите на ней программу инсталляции с параметром C:\BANK_CB.

3. Произведите инициализацию криптодрайвера CRY_DRV.COM, для чего запустите программу C:\BANK_CB\CRY_DRV.COM, и, при запросе, вставьте в дисковод дискету с главным ключом системы (при использования дисковода "В", запуск криптодрайвера осуществляется с параметром -b C:\BANK_CB\CRY_DRV.COM -b).

4. Произведите инициализацию драйвера электронной подписи I99RF386.EXE, для чего запустите программу C:\BANK_CB\I99RF386.EXE (LH C:\BANK_CB\I99RF386.EXE).

5. Произведите инсталляцию программного обеспечения рабочего места "Банк" в директорию C:\BANK_CB. Для инсталляции рабочего места Банк запустите с дистрибутивной дискеты АРМ "БАНК" программу INSTALL.EXE и произведите установку программного обеспечения на локальный диск (C:\BANK_CB). По окончании копирования файлов и привязки программного обеспечения к компьютеру при нормальном завершении, программа инсталляции предложит ввести пароль администратора рабочего места "Банк" для последующего входа в программу BANK_СB.EXE, который необходимо ввести два раза.

Внимание !

Дистрибутивная дискета содержит счетчик количества инсталляций, значение которого уменьшается при корректном завершении работы программы INSTALL.EXE. Значения:
- номера следующей инсталляции;
- общего количества инсталляций, которое можно провести с данной дискеты;

Оотображаются при запуске программы INSTALL.EXE в левой нижней части экрана в следующем формате:

9_1.gif (898 b)

При инсталляции все имеющиеся в корневой директории инсталляционной дискеты программы файлы будут перенесены программой-инсталлятором в указанную директорию (C:\BANK_CB).

Установленные на компьютер программы BANK_CB.EXE, SET_BANK.EXE защищены от копирования и не могут быть скопированы и запущены на других компьютерах.

6. Для конфигурирования рабочего места "Банк" необходимо запустить программу SET_BANK.EXE, расположенную в директории с программным обеспечением рабочего места "Банк". Перед запуском убедитесь в наличии в директории файла SPR.DDP (упакованный программой INIC98.EXE при генерации дистрибутива справочник банков SPR.DDF).

При первом запуске, программа конфигурации SET_BANK.EXE запрашивает число последовательных портов компьютера, через которые производится подключение рабочего места "Банк" к модемам, и через них к телефонной сети. В зависимости количества используемых для подключения к телефонной сети портов, введите 1 - при подключении через один последовательный порт, или 2 при подключении через два последовательных порта (рекомендуется ввести 2 даже при использовании одного порта для последующего расширение объемов и подключения второго модема. Для отключения порта достаточно поставить номер СОМ=0). Максимальное число портов = 8 при использовании в компьютере мультипортовой карты стыка RS-232. При использовании вставленных в компьютер модемов с портами, настраиваемыми по IRQ, возможна работа программы с четырьмя портами.

После этого программа предложит ввести данные в экранную форму "Реквизиты АРМ", в которой большинство полей уже заполнено по умолчанию.

============================== Реквизиты АРМ ==============================
 Директория базы данных C:\BANK_CB\BASE
 Директория статистики STAT
 Директория приема C:\BANK_CB\IN
 Директория передачи C:\BANK_CB\OUT
 Директория обработки C:\BANK_CB\TEMP
 Директория экспорта C:\BANK_CB\IMPEXP
 Наименование банка АЛТАЙСКОЕ ОСБ
 Реквизиты банка для экспорта валютных платежей (включая адрес)
 БИГ КОД банка ( код отделения ) Реквизиты отделения отправителя
 Реквизиты банка получателя экспорта (код банка и адрес) п.52A
 БИГ КОД банка ( код территориального банка или РКЦ УВО )
 Реквизиты банка текущего получателя принятой валютной платежки
 Номер клиента банка 2
 Процент обязательной продажи валюты 75
 Признак внешней почтовой системы 0

Назначение полей следующее:
Директория базы данных Путь к директории, в которой располагается база данных программы
Директория статистики Наименование директории, в которой располагаются статистические данные работе программы (размещается в директории с базой данных программы) В ней формируются тексты журнала.
Директория приема Путь к директории, предназначенной для приема данных от рабочих мест клиентов через систему связи с клиентами
Директория передачи Путь к директории, предназначенной для передачи данных на рабочие места клиентов через систему связи с клиентами
Директория обработки Путь к вспомогательной директории, используемой программой для формирования файлов на отправку (выборка, упаковка) или обработки принятых файлов
Директория экспорта Путь к директории, используемой программой для экспорта или импорта данных при возможном взаимодействии с другим программным обеспечением данного рабочего места, в данную директорию помещаются также принятые от клиентов файлы свободного формата (для использования выгружаемых файлов без выхода из программы нужно указать путь к директории в локальной сети)
Наименование банка Регистрационное имя банка, используемое далее при установке программного обеспечения клиентов данной системы "Клиент-Сбербанк". Должно состоять из не менее чем 4-х букв русского или латинского алфавита (первые три символа участвуют в формировании имен транспортных файлов).
Реквизиты банка для экспорта валютных платежей Реквизиты Банка, используемые при печативалютного платежного поручения в режиме "Экспорт" (графа "ORIGINATOR").
Реквизиты банка получателя Реквизиты Банка получателя, используемые при печати валютного платежного поручения в режиме "Экспорт" (графа "DESTINATION")
Номер клиента банка Текущее значение регистрационного номера клиента банка, которое будет использоваться при регистрации очередного клиента. Начальное значение не менее 2.
Процент обязательной продажи валюты Процент обязательной продажи валюты от валютной выручки для организаций клиентов банка (экспортная выручка на транзитном валютном счете)
Признак внешней почтовой системы При использовании варианта прямой модемной связи вводится значение 0, при использовании внешней системы связи с клиентами (через директории приема и передачивнешней связи), вводится значение 1.

Примечания:
1. Имена логических дисков директорий приема, передачи и обработки должны совпадать. Особенно то касается АРМ БАНК при связи с использованием общей базы данных для нескольких АРМ "Банк" на диске сервера в локальной сети.
2. При подключении компьютера рабочего места "Банк" к локальной вычислительной сети, в качестве логических дисков для размещения директорий, приема, передачи и обработки могут указываться как локальные, так и сетевые диски.

В поле "Наименование банка" указывается Регистрационное имя банка, первые три буквы которого используются в именах файлов передачи, формируемых на рабочих местах "Клиент" данной системы "Клиент-Сбербанк". Это имя должно использоваться при вводе в поле "Наименование банка" экранной формы "Реквизиты АРМ" при инсталляции программного обеспечения рабочих мест "Клиент".

После заполнения экранной формы "Реквизиты АРМ", программа предложит ввести пароль администратора для входа в программу SET_BANK.EXE, который необходимо ввести два раза. (Этот пароль, вводимый первый раз при инсталляции АРМ является МАСТЕР-паролем администратора АРМ, поэтому введите его более сложным, чем набор цифр, и замените его сразу же при втором входе в программу SET_BANK). После правильного ввода пароля администратора, программа предложит ввести данные в экранную форму конфигурирования принтера (по умолчанию программой предлагаются команды для принтера EPSON).

=================== Параметры принтера ===================

 Номер порта принтера (LPT) 1

 Переключение в режим ЭЛИТА 1b39121b4d1b301b4378

 Переключение в режим PICА 1B39121B501B321B4350

 Переключение в CONDENSED 1B390F1B301B437A

 Строка инициализации 1B40

Строки для переключений пишутся в шестнадцатеричном виде и должны содержать команду переключения в нужный режим и выбор числа строк на странице. По клавише F2 можно изменить тип принтера с матричного на лазерный (с русифицированным картриджем шрифтов) и изменить строки переключений. Эти строки описаны в меню 6 файла MODEM.MN@ и могут быть изменены.

Внимание! Программа может работать с принтером, подключенным к локальному параллельному порту компьютера LPT1 или LPT2. При указании номера порта LPT = 0 программа будет выдавать данные при печати на сетевой принтер в файл с именем PRN или другой, определенный в SETUP.INI (обеспечение переадресации на сетевой принтер ложится на соответствующий драйвер сети (CAPTURE.EXE при сети NOVELL) ).

Последняя экранная форма предназначена для ввода параметров модема.

================== Параметры порта =====================
 Стр. ModemReset AT&F
 Стр. ModemInit ATS0=0&d2&K3&M0S7=60X6S43=3*P6 &N0
 Стр.ModemHangUp ~~+++~~ATH0
 Стр.ModemAnswer AT S0=1
 Стр. ModemDial AT DP
 Номер линии СОМ 1 IRQ 4 Порт 3F8
 Скорость порта 19200

В ней требуется заполнить:

  • Строку команд сброса модема (ModemReset)
  • Строку команд инициализации модема перед проведением сеанса связи (ModemInit), программой предлагаются строки команд инициализации для наиболее распространенных модемов (выбор из дополнительного меню - по нажатию клавиши F2)
  • Строку перевода модема в командный режим (ModemHangUp)
  • Строку перевода модема в режим автоответа (ModemAnswer)
  • Номер последовательного порта, к которому подключен модем (физические адреса портов с номерами 1-4 контролируются по памяти компьютера - они должны быть включены в работу в BIOS компьютера). При вводе номеров 5-12 физические адреса портов программой не контролируются и вводятся в соответствии с параметрами аппаратуры.
  • Номер IRQ - адрес вектора прерываний от порта RS-232
  • Физический базовый адрес порта
  • Скорость последовательного порта, бит/сек (выбор из меню через клавишу "пробел"), рекомендуется скорость 19200 при компьютерах до 486-SX-33 и 38400 при более мощных (для мультипортовой карты - 19200)

При использовании внешней системы электронной почты, в строке "Номер линии COM" необходимо ввести 0, если отключена работа с прямым доступом к АРМ БАНК. 0 также вводится в дополнительных, пока не используемых портах (число которых может быть с запасом).

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

  • программное обеспечение производит предварительную упаковку передаваемых в линию связи данных, поэтому в модеме могут быть отключены протоколы аппаратной компрессии данных при передаче (MNP-5 и V42bis).
  • должен быть отключен режим XON-XOFF и включен режим аппаратного управления потоком данных по CTS-RTS.
  • может быть включен режим аппаратной коррекции ошибок связи (V42,MNP4) при достаточно хороших условиях связи.
  • должен быть включен режим фиксированной скорости обмена модема с компьютером в линии RS232.

Рекомендации по использованию модемов типа ZyXEL U1496 в системе "Клиент-Сбербанк" приведены в Приложении А к настоящему руководству.

В случае, если при входе в программу было указано наличие нескольких портов подключения к телефонной сети, экранная форма установки параметров модема предъявляется несколько раз, при этом форма заполняется для каждого порта в соответствии с типом модема, подключенного к этому порту (не допускается использование двух портов с номерами 1-4 на одном IRQ, а также использование мыши с прерыванием, совпадающем с прерыванием указанного СОМ-порта). При установке в компьютер мультиплексора на стык RS-232 номера портов должны быть 5-8 и общий IRQ (3,4,5,7). При заполнении карточки на порт, зарезервированный на последующее расширение каналов доступа к АРМ "Банк", введите в номер линии порта число 0. После ввода параметров модемов, первоначальная установка параметров программы закончена и производится выход из программы SET_BANK.EXE.

Примечание: Изменение числа каналов доступа (портов) возможно после удаления файла SETUP.CFG и переконфигурирования рабочего места вновь.

При необходимости корректировки введенных при первом запуске программы SET_BANK.EXE параметров, администратор рабочего места "Банк" может, запустив программу SET_BANK.EXE повторно, отредактировать ранее установленные параметры АРМ "Банк".

7. После окончания работы программы SET_BANK.EXE, необходимо средствами MS DOS (Norton) перенести файл с сетевым ключем KL00001.NKL из директории C:\BANK_CB в созданную программой SET_BANK.EXE директорию базы данных C:\BANK_CB\BASE. Убедитесь также, что в текущей директории присутствует файл SETUP.CFG, формируемый программой первоначальной установки параметров SET_BANK.EXE.

При установленной в компьютере плате "АККОРД" загрузите в память драйвер этой платы TMDRV.EXE c указанием номера порта и подготовьте таблетки TOUCH-MEMORY для генерации ЭЦП.

Включите модем (при использовании варианта прямой модемной связи между рабочими местами "Банк" и "Клиент") и произведите запуск программы рабочего места "Банк" BANK_CB.EXE ).

При первом входе в программу необходимо правильно заполнить экранную форму с реквизитами "Банка". Ниже приводится пример заполнения реквизитов.

==============================Клиент банка================================
 Регистр.номер клиента: 9999 Номер клиента в банке (опер.день):
 Регистрационное имя клиента: АЛТАЙСКОЕ ОСБ  Овердрафт счетов
 Полное наименование организации / предприятия (для документов)
 Оперу Алтайского банка Сбербанка России
 ИНН клиента 4409801222
 Почтовый адрес: Барнаул, ул.Селезневская, д.40
 Данные для MAIL
 Телекс: RODNIK  Телефоны: 747-34-99
 Директ.отправки
 БИК банка 40173604 Корр.счет банка в РКЦ 30101810200000000604
 Банк АЛТАЙСКИЙ БАНК СБ РФ Г.БАРНАУЛ
 Филиал (ОСБ) ОПЕРО Алтайского банка СБ РФ
 Рубл.счет . . .  . Рубл.счета для покупки валюты:
 у банка 47422810800029900014 на бирже
 Валютный счет: 40702.840.6.00020201104.
 в UVO RKZ the Savings Bank of RUSSIAN FEDERATION
 Статус Свободен Номер сетевого ключа 1 Оплата телеграфа 200.00
 Руководитель Сидоров А.В.  (И.О.Фамилия)
 Гл.бухгалтер Иванов В.А.  (И.О.Ф.) Печать докум.реестром
 Кред.орган. ЭЦП на ТМ Кол-во ЭЦП 1 Код участ. 3800020000 Версия 4.14
 NN ЭЦП

В поле "Регистр.номер клиента" вводится предлагаемое программой по умолчанию значение 9999 (значение не может быть менее 4001).

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

В поле "Номер ключа" вводится номер установленного на рабочем месте сетевого ключа, для рабочего места "Банк" значение этого поля равно 1.

АРМ "Банк" может обеспечивать связь с клиентами по каналам связи, как по прямому доступу (точка-точка), так и по внешней почтовой системе параллельно. В этом случае нужно поставить признак наличия внешней почтовой системы (SET_BANK). Для связи с почтовым сервером может быть выделена отдельная директория для приема данных от клиентов, подключенных к банку через почтовую систему. В этом случае эта директория прописывается в поле "Директория отправки" реквизитов АРМ "Банк".

Введенные реквизиты записываются в базу данных клиентов, зарегистрированных на рабочем месте "Банк". Таким образом, первой записью в списке зарегистрированных клиентов на рабочем месте "Банк", являются реквизиты самого банка.

После этого программа начинает генерацию ЭЦП АРМ, начиная с администратора рабочего места "Банк". Необходимо ввести идентификатор администратора рабочего места "Банк" (для упрощения работы со списком зарегистрированных открытых ключей электронных цифровых подписей на рабочем месте "Банк", рекомендуется ввести "Администратор" и через дефис регистрационное имя банка, например "Администратор-ОПЕРУ") и нажать клавишу <ENTER>.

Программа предлагает предъявить таблетку для ЭЦП администратора и после генерации открытый ключ подписи автоматически помещается в таблицу ЭЦП администратора банка и добавляется в файл PUBL.DDT, находящийся в директории программы. После этого программа просит вставить вновь созданную ЭЦП администатора для входа в программу "Банк".

8. Для изготовления и регистрации рабочих ЭЦП АРМ "Банк", необходимо, находясь в основном окне, нажать клавишу F3 и перейти в режим работы со справочником открытых ключей электронной цифровой подписи.

== Открытые ключи ЭЦП ==
 Ключ администратора
 Архивные ключи ЭЦП

Для генерации ключа ЭЦП необходимо нажать клавишу F2 ("Ввод") и предъявить ЭЦП администратора банка.

После этого программа предложит убрать ЭЦП администратора и ввести идентификатор ЭЦП. Необходимо ввести идентификатор, причем в качестве идентификатора рекомендуется (для упрощения работы со списком зарегистрированных открытых ключей электронных цифровых подписей на рабочем месте "Банк"), использовать номер ЭЦП и регистрационное имя банка, например "ЭЦП 1 ОПЕРУ") и нажать клавишу <ENTER>.

Программа записывает открытый ключ (файл PUBL.DDT) и секретный ключ рабочей ЭЦП на носитель Touch Memory, при этом открытый ключ подписи автоматически помещается в список открытых ключей электронной цифровой подписи рабочего места "Банк".

После генерации всех ключей ЭЦП АРМ "Банк" готов к основной работе (при запуске с рабочей ЭЦП 1 или ЭЦП 2).

При необходимости произведите печать на принтере открытых ключей электронной цифровой подписи (печать работает только при старте с ЭЦП 1 или ЭЦП 2 - режим обслуживания).

9. Произведите настройку специальных текстовых файлов-шаблонов печати платежных документов, размещаемых в директории с программой "Банк" в соответствии с "Руководством по эксплуатации рабочего места "Банк" и Приложением В к настоящему Руководству. С помощью средств MS DOS или специальных программных средств резервного копирования, изготовьте страховую копию установленного на компьютер программного обеспечения с сохранением структуры директорий и поддиректорий.

Подготовка дистрибутивных дискет для непосредственой инсталляции рабочих мест "Клиент" возложена на администратора АРМ "Банк" и производится им на его рабочем месте с соответствующим программным обеспечением. Для инсталляции программы генерации дистрибутивов на компьютер, предназначенный этого рабочего места, запустите с дистрибутивной дискеты программы INIC98 программу INSTALL.EXE.

Программа предложит создать на винчестере компьютера директорию для установки программного обеспечения. Предложенная директория (по умолчанию C:\INIC98) может быть переименована по усмотрению администратора.

После завершения инсталляции программы INIC98.EXE в ее директорию необходимо переписать исходные файлы для генерации дистрибутивов АРМ "Клиент" в соответствии с описью (OPIS.CFG), шаблоны для печати документов и выписки, отредактированные для конкретного банка, отредактированное меню для клиента и последний экземпляр справочника банков, заменяемый в этой директории при каждом обновлении справочника.

Дальнейшая эксплуатация рабочего места "Банк" производится в соответствии с "Руководством по эксплуатации рабочего места "Банк".


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 10 - 2.3 Установка на рабочем месте "Банк" комплекса защиты "Аккорд"

Шаг 10 - 2.3 Установка на рабочем месте "Банк" комплекса защиты "Аккорд"

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 11 - 2.4 Параметры АРМ, настраиваемые с помощью файла SETUP.INI

Шаг 11 - 2.4 Параметры АРМ, настраиваемые с помощью файла SETUP.INI

Некоторые параметры АРМ, например, для печати документов, могут быть настроены путем написания в текстовом файле SETUP.INI строк с значениями, отличающимися от значений по умолчанию. Строка пишется без отступа и в нее входит идентификатор, а затем через пробел новое значение параметра.

Набор изменяемых параметров АРМ "БАНК":

  • Точка . - разделитель целой части числа суммы от дробной по умолчанию символ '-' (тире)
  • НульКоп ? - завершение числа рублей при отсутствии копеек при типе печати T=PRUR (по умолчанию знак '=') - символ '?' отключает этот метод печати (было 1234= ,будет 1234-00)
  • Триада ' - разделитель триад чисел - по умолчанию символ ',' (запятая)
  • Копий 2 - число экземпляров печати открытого ключа ЭЦП, помещающееся на листе формата A4 (умолчание: 1)
  • LenSch 22 - контроль за минимальной длиной введенного номера счета по умолчанию 20
  • КлючИНН 0 - отключение контроля за правильностью ввода номера ИНН
  • CONV_OD "F:\OD_BANKA\CONV\NAME_CNV.TRN" - имя файла для взаимной блокировки процессов "Подкачка из ОД" и выборки данных из ОД банка (работа конвертора).
    Внимание! При наличии этого параметра программа следит за появлением этого файла (фаза работы конвертора данных из ОД банка в промежуточный файл) с периодом в 1 сек. При окончании работы конвертора (определяется по исчезновению этого файла), если включено основное окно программы, запускается автоматически конвертация данных (процедура, запускаемая оператором по нажатию меню <Подкачка из ОДБ>).
  • DOC_OD "F:\OD_BANKA\CONV\NAME_DOC.TRN" - имя файла для взаимной блокировки процессов "Выгрузка документов" и загрузки выгруженных документов в ОД банка
  • КонОД 13:45:00 - Время окончания приема документов для проводки текущим операционным днем - по умолчанию 16:00 для печати реестра принятых рублевых документов по клавишам ALT_F2
  • AutoPRD "C:\AUTOMAIL\@???????.*" - при указании этого параметра производится отправка автоматически всех файлов, подходящих под указанную маску поиска файлов. Нужно помнить, что символы 2-4 в имени файла должны содержать регистрационный номер клиента в АРМ "Банк" (например, имя @0210512.arj адресует файл клиенту с номером 21). При отсутствии в списке клиентов указанного номера или при наличии у него признака "Арестован" файл будет переименован в имя с первым символом '!', например, A1760301.txt => !1760301.txt, с сообщением в журнал об отсутствии указанного номера 176. !4.12 Допускается в SETUP.INI вводить до 10 масок на поиск файлов на отправку. Дополнительные имена идентификаторов: AutoPRD1 - AutoPRD9.
  • AutoPRM "F:\AMAIL\???????A.M??" - в параметре указана директория выгрузки принятых в почте свободного формата файлов, подходящих под указанную маску поиска ???????A.M??. При приеме файлов производится проверка доступа к указанной директории и наличие файла с таким же именем. При отсутствии такого файла производится автоматическая выгрузка файла из почты с отметкой об проведенной обработке файла. !!4.12 Допускается в SETUP.INI вводить до 10 масок на определение масок файлов, подлежащих автоматической выгрузке из почты. Дополнительные имена идентификаторов: AutoPRM1 - AutoPRM9.
  • TMR_MAIL 5 - период просмотра (в сек) директории приема файлов из внешней почтовой системы, а также директории для отправки файлов при указании параметра AutoPRD.
  • МодОП 1 - признак возможности ввода операций по счетам клиентов вручную - при отсутствии в ОСБ АРМ "Операционный день" (по умолчанию 0)
  • Реестр 2 - печать нужного количества экземпляров реестра отпечатанных платежных документов. При перепечатке документов они в реестр не попадают.
  • COPYBASE D:\CBASE - этот параметр указывает, что программа должна делать в фоновом режиме горячую копию баз данных и контрольных архивов транспортных файлов в указанную директорию (например, на другой винчестер).
  • АРХИВ F:\BANK_CB\ARCBASE - этот параметр указывает директорию архивов системы, т.е. место для хранения архивных файлов, формирующихся при чистке баз данных.

Можно ввести строки для переключения на кириллицу для лазерного или струйного принтера (в строке присутствует размер инициализируемого шрифта, число строк на странице и ориентация бумаги). При наличии таких принтеров желательно!

ELITA "_&l0O_(3R_(s0p12.00h10.00v0s0b0T_&l8D"
PICAD "_&l0O_(3R_(s0p10.00h12.00v0s0b0T_&l6D"
CONDEN "_&l1O_(3R_(s0p16.67h8.5v0s0b0T_&l12D"
ELITR "_&l1O_(3R_(s0p12.00h10.00v0s0b0T_&l8D"
CONDP "_&l0O_(3R_(s0p16.67h8.5v0s0b0T_&l12D" // condensed Портрет

В примере символом _ заменен символ ESC (27 - 1B). При наличии этих строк в SETUP.INI Esc-последовательности, введенные в программе SET_BANK перестают действовать! SAVER 10 - параметр устанавливает время для контроля за нажатием клавиш при работе оператора. Умолчание - 1 (мин). Устанавливается в пределах 0-50.

Нижеперечисленные настройки введены в версии 4.12:

  • K_SIGN 1 - включается автоматический контроль за количеством ЭЦП на файле с документами для клиентов, работающих с двумя ЭЦП. Для контроля нужно в карточке абонента проставить число ЭЦП, равное 2. При поступлении файла с документами, в случае его подписи одной ЭЦП файл не будет обрабатываться, а будет отвергнут.

Введено в 4.14:

  • NUM_RUR 999999 - числовая маска ограничителя номеров рублевых платежных поручений (должна состоять из девяток) - умолчание = 99999.
  • ИНН_ПОЛ 1 включение жесткого контроля за наличием в поле ИНН получателя.
  • КОДЫ_К_КРЕДИТ - строка, содержащая список допустимых кодов операций в поле назначения платежа, при платежах на счет типа К по умолчанию.
  • КОДЫ_Н_КРЕДИТ - строка, содержащая список допустимых кодов операций в поле назначения платежа, при платежах на счет типа Н по умолчанию.
  • КОДЫ_К_ДЕБЕТ - строка, содержащая список допустимых кодов операций в поле назначения платежа, при платежах со счета типа К по умолчанию.
  • КОДЫ_Н_ДЕБЕТ - строка, содержащая список допустимых кодов операций в поле назначения платежа, при платежах со счета типа Н по умолчанию.
  • TEST_ACC 1 включение контроля расчетного счета получателя по ключу на основе БИК возможен отказ в приеме документа по ошибке 42 - ошибка в счете получателя по умолчанию = 0 - проверка счета производится на АРМ КЛИЕНТ TEST_UNNUM 1 включение отказов в приеме документа при повторе уникального номера код ошибки = 15 умолчание = 0 - допускается прием документа с сообщением в журнал.

Начиная с версии 4.04 от 28.12.98 г. введена возможность страхового копирования базы данных в процессе работы программы. Эту возможность желательно использовать при наличии в компьютере второго винчестера на случай выхода из строя основного винчестера. При работе программы с периодом установленным параметром TMR_MAIL (умолчание 3 сек) будет производиться по очереди просмотр файлов баз данных и контрольных архивов программы. При наличии рассогласований с копией производится модификация файла копии. Для включения этого режима работы программы нужно в SETUP.INI включить строку: COPYBASE D:\CBASE где в виде параметра указана директория копии базы данных.

При работе банковского АРМ с валютными счетами клиентов в директорию базы данных должен быть помещен файл SWIFT.DDF для автоматического контроля BIC - кодов в валютных платежных поручениях при их приеме. Генерация этого справочника производится на соответствующем рабочем месте генерации справочников банков.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 12 - 3.1. Подготовка дистрибутивной дискеты с программным обеспечением рабочего места "Клиент"

Шаг 12 - 3.1. Подготовка дистрибутивной дискеты с программным обеспечением рабочего места "Клиент"

Подготовке дистрибутивной дискеты с программным обеспечением рабочего места "Клиент", должен предшествовать ввод данного клиента в список клиентов рабочего места "Банк" в соответствии с указаниями п.3.6 "Руководства по эксплуатации рабочего места "Банк"".

Перед подготовкой дистрибутивной дискеты клиента, проверьте соответствие версии файла-справочника банков (файл SPR.DDF), имеющегося на рабочем месте по подготовке дистрибутивных дискет клиентов с действующей версией аналогичного справочника, размещенного в директории базы данных рабочего места "Банк". В случае расхождения версий справочника банков, необходимо в директории с программным обеспечением по подготовке дистрибутивных дискет клиентов, заменить файл SPR.DDF на аналогичный файл, имеющийся на рабочем месте "Банк".

Для подготовки дистрибутивной дискеты, используемой при непосредственной инсталляции программного обеспечения рабочего места "Клиент", необходимо:

  1. Составить опись файлов для генерации дистрибутива OPIS.CFG (список см. ниже - кроме CLIENT.EXE и SETUP.EXE. Файлы справочника описываются с исходными именами - SPR.DDF и VAL.DDF).
  2. Вставить в дисковод компьютера заранее отформатированную дискету;
  3. Запустить в созданной для подготовки дистрибутивных дискет директории программу INIC98.EXE. После запуска программа предложит заполнить следующие поля экранной формы, соответствующие параметрам дистрибутивной дискеты:
    Укажите номер дисковода A:
Введите имя покупателя АОЗТ "Клиент"
Введите регистрационный номер 12
Введите число инсталляций 20
Введите имена программ CLIENT.EXE
                       SETUP.EXE

    Номер дисковода - А или В (в зависимости от того, на каком дисководе будет создаваться дистрибутивная дискета);
    Имя покупателя - Должно строго соответствовать (с учетом прописных и строчных букв) регистрационному имени клиента, присвоенному ему при регистрации на рабочем месте "Банк", в противном случае установленное с данной дистрибутивной дискеты программное обеспечение рабочего места "Клиент" не будет работать с рабочим местом "Банк".
    Регистрационный номер - Желательно соответствие регистрационному номеру клиента, присвоенном ему при регистрации на рабочем месте "Банк".
    Число инсталляций - Максимальное число инсталляций программного обеспечения "Клиент" с создаваемой дистрибутивной дискеты (нужно резервировать это число на дополнительные инсталляции при смене компьютера у клиента)
    Введите имена программ - Введите имена инсталлируемых программ CLIENT.EXE и SETUP.EXE.

Примечание: Вводимое число инсталляций с создаваемой дистрибутивной дискеты должно обеспечивать возможные случаи переинсталляции файлов CLIENT.EXE и SETUP.EXE, связанные с возможной модификацией данных файлов компьютерными вирусами, с переносом программного обеспечения на другой компьютер и множественную установку у одного клиента на несколько компьютеров.

После завершения ввода данных, программа формирует дистрибутивную дискету рабочего места "Клиент", содержащую следующие файлы:

  • install.exe - программа инсталляции;
  • klient.fld - файл экранных форм;
  • kl_bank.obd - файл с описателем базы данных;
  • client.ex$ - инсталлируемый файл программы;
  • client.mnu - файл меню;
  • client.hlp - файл помощи;
  • shab_kb.brw - файл с описателем табличных окон (Browse);
  • spr.ddp - упакованная база данных "Справочник БИК";
  • val.ddp - упакованная база данных "Справочник валют";
  • tpor.txt - шаблон для печати "Рублевая платежка";
  • REES_PP.TXT - шаблон печати рублевых поручений реестром
  • tvip.txt - шаблон для печати "Выписка по рублевому счету";
  • TVPOR1.TXT - шаблон "Поручение на продажу валюты ЦБ";
  • ТVPOR7.TXT - шаблон "Поручение на продажу валюты ЦБ";
  • TSVAL1.TXT - шаблон "Заявка на продажу валюты"
  • TSVAL2.TXT - шаблон "Заявка на продажу валюты"
  • TSVAL3.TXT - шаблон "Заявка на продажу валюты"
  • TSVAL4.TXT - шаблон "Заявка на продажу валюты"
  • TSVAL5.TXT - шаблон "Заявка на продажу валюты"
  • TSVAL6.TXT - шаблон "Заявка на продажу валюты"
  • TRVAL1.TXT - шаблон "Заявка на покупку валюты"
  • TRVAL2.TXT - шаблон "Заявка на покупку валюты"
  • TRVAL3.TXT - шаблон "Заявка на покупку валюты"
  • TRVAL4.TXT - шаблон "Заявка на покупку валюты"
  • TRVAL5.TXT - шаблон "Заявка на покупку валюты"
  • TRVAL6.TXT - шаблон "Заявка на покупку валюты"
  • tvalvip.txt - шаблон "Выписка по валютному счету"
  • valpor.txt - шаблон "Валютное платежное поручение" MT100
  • valpormb.txt - шаблон "Валютное платежное поручение" - межбанковский платеж MT200
  • treb.txt - шаблон "Платежное требование"
  • treb_i.txt - шаблон "Инкассовое поручение"
  • treb_b.txt - шаблон "Платежное требование", получено из банка
  • akcept.txt - шаблон "Отказ от акцепта"
  • akceptb.txt - шаблон "Отказ от акцепта", получено из банка
  • REES_RD.TXT - платежное поручение
  • REES_VD.TXT - валютное платежное поручение
  • REES_SV.TXT - заявка на продажу валюты
  • REES_RV.TXT - заявка на покупку валюты
  • REES_VP.TXT - поручение на разблокировку экспортной выручки
  • REES_TR.TXT - требования
  • REES_AK.TXT - отказы от акцепта
  • setup.ex$ - инсталлируемый файл программы конфигурирования рабочего места;
  • setup.hlp - файл помощи;
  • modem.mn@ - файл меню - исходный текст;
  • modem.mnu - файл меню;
  • WINDOW.SBT - набор текстовых строк
  • FIELD.SBT - набор текстовых строк
  • CLIENT.SBT - набор текстовых строк
  • BANK.DDT - файл открытых ключей АРМ "Банк" (переименованный из файла PUBL.DDT)
  • HASH.CFG - заготовка со списком проверяемых файлов по ХЭШ.
  • RTM.EXE - файлы для работы версии DOS DPMI16 DPMI16BI.OVL

Примечание:

  1. При наличии у клиента валютных счетов ему требуется наличие справочника SWIFT-кодов банков. Дискету с упакованным справочником SWIFT.ARJ (SWIFT.DDF) берут отдельно и распаковывают его по месту установки в базу данных.
  2. Проверьте правильность значений суммы оплаты телеграфных расходов и процента обязательной продажи валюты в файле MODEM.MN@ (меню N7 и меню N8). При несоответствии текущим значениям исправьте и обработайте программой MAKEMENU.EXE.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 13 - 3.2. Подготовка ключевой дискеты сотруднику банка для выезда

Шаг 13 - 3.2. Подготовка ключевой дискеты сотруднику банка для выезда

Подготовка ключевой дискеты ЭЦП сотруднику банка для выезда к клиентам, используемой при инсталляции рабочих мест "Клиент" для отправки вновь сгенерированных ЭЦП клиента электронной почтой системы возложена на администратора рабочего места "Банк".

Администратор банка генерирует ЭЦП для выезда сотрудникам банка штатными средствами АРМ "Банк". Желательно, чтобы в идентификаторе ЭЦП присутствовала фамилия сотрудника. С помощью этой ЭЦП на рабочем месте "Клиент" можно отправить открытые ключи клиента для их последующей регистрации администратором банка.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 14 - 3.3. Подготовка дискеты с открытыми ключами ЭЦП подразделения Сбербанка РФ, в котором установлено рабочее место "Банк"

Шаг 14 - 3.3. Подготовка дискеты с открытыми ключами ЭЦП подразделения Сбербанка РФ, в котором установлено рабочее место "Банк"

Для переноса открытых ключей ЭЦП подразделения Сбербанка РФ, в котором установлено рабочее место "Банк", необходимо средствами MS-DOS скопировать содержащийся в директории с программным обеспечением рабочего места "Банк" файл PUBL.DDT на дискету ЭЦП для выезда сотрудника банка с переименованием его в другое имя BANK.DDT.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 15 - 3.4. Подготовка к проведению инсталляции

Шаг 15 - 3.4. Подготовка к проведению инсталляции

Перед началом инсталляции необходимо прочесть "Руководство по эксплуатации рабочего места "Клиент" и "Инструкцию по использованию ключевой cистемы" (подсистема "Клиент"). Инсталляция программного обеспечения рабочего места "Клиент" осуществляется сотрудниками подразделения Сбербанка России, эксплуатирующем данную систему "Клиент-Сбербанк". При инсталляции программного обеспечения рабочего места "Клиент", со стороны клиента должен присутствовать администратор рабочего места "Клиент", ответственный за эксплуатацию рабочего места и его администрирование, а при создании ключевых дискет с секретными ключами электронной цифровой подписи и сотрудник клиента, ответственный за отправку документов в банк.

Перед проведением инсталляции рабочего места "Клиент", необходимо, чтобы данный клиент был зарегистрирован администратором на рабочем месте "Банк" в соответствии с п. 3.6. "Руководства по эксплуатации рабочего места "Банк"".

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

Для инсталляции программного обеспечения рабочего места "Клиент" необходимы:

  • Дистрибутивная дискета с программным обеспечением рабочего места "Клиент", подготовленная администратором рабочего места "Банк" в соответствии с п. 3.1 настоящего руководства.
  • Дистрибутивная дискета с программным драйвером CRY_DRV.COM эмуляции криптоплаты "Криптон-3", полученная в ЦГРК;
  • Дистрибутивная дискета с программным драйвером I99RF386.EXE электронной цифровой подписи, полученная в ЦГРК;
  • Дискета с главным ключом (файлы GK.DB3 и UZ.DB3), полученная в ЦГРК;
  • Дискета с сетевым ключом рабочего места "Клиент" (файлы KLss0XXX.NKL и KLss0XXX.KEY), полученная в ЦГРК (ss - номер сети);
  • Копия ключевой дискеты администратора рабочего места "Банк", содержащая секретный и открытый ключи электронной цифровой подписи администратора (файлы SIGN.KEY, PUBL.DDT, BANK.DDT), полученная от администратора рабочего места "Банк" (см. п.п. 3.2 и 3.3 настоящего руководства);

Примечание: Сетевой ключ рабочего места "Клиент" KLSSnnnn.NKL должен быть создан в ЦГРК из одной системной сетевой таблицы (соответствующей данной системе "Клиент-Сбербанк") с сетевым ключом KLSS0001.NKL, установленным на рабочем месте "Банк".

SS - номер сети (2,3...)

При отсутствии у клиента платы защиты от НСД типа "АККОРД" для генерации ЭЦП необходимо подготовить дискеты, из которых в процессе инсталяции будут созданы:

  • ключевая дискета администратора рабочего места "Клиент";
  • дискеты с рабочими ЭЦП организации, в которой устанавливается рабочее место "Клиент";


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 16 - 3.5. Инсталляция программного обеспечения рабочего места "Клиент"

Шаг 16 - 3.5. Инсталляция программного обеспечения рабочего места "Клиент"

Приведенные ниже действия по инсталляции программного обеспечения предполагают, что программное обеспечение рабочего места "Клиент" будет располагаться в директории C:\CLIENT, хотя расположение и название этой директории может быть при инсталляции изменено.

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

1. Для инсталляции на компьютер программного драйвера CRY_DRV.COM эмуляции криптоплаты "Криптон-3", вставьте в дисковод компьютера дискету с защищенным от копирования драйвером CRY_DRV.COM и запустите на ней программу инсталляции с параметром C:\CLIENT.

2. Для инсталляции на компьютер программного драйвера электронной цифровой подписи I99RF386.EXE, вставьте в дисковод компьютера дискету с защищенным от копирования драйвером I99RF386.EXE и запустите на ней программу инсталляции с параметром C:\CLIENT.

3. Произведите инициализацию криптодрайвера CRY_DRV.COM, для чего запустите программу C:\CLIENT\CRY_DRV.COM, и, при запросе, вставьте в дисковод дискету с главным ключом системы (при использования дисковода "В", запуск криптодрайвера осуществляется с параметром –b C:\CLIENT\CRY_DRV.COM -b).

4. Произведите инициализацию драйвера электронной подписи I99RF386.EXE, для чего запустите программу C:\CLIENT\I99RF386.EXE (LH C:\CLIENT\I99RF386.EXE).

5. Произведите инсталляцию программного обеспечения рабочего места "Клиент" в директорию C:\CLIENT компьютера, для чего запустите на заранее созданной администратором рабочего места "Банк" дистрибутивной дискеты клиента (см. п.3.1.) программу INSTALL.EXE и произведите установку программного обеспечения в директорию C:\CLIENT. По окончании переноса программного обеспечения, программа инсталляции предложит ввести пароль администратора рабочего места "Клиент", который необходимо ввести два раза. Установленные на компьютер клиента программы CLIENT.EXE и SETUP.EXE защищены от копирования и не могут быть скопированы и запущены на других компьютерах.

Версия 4.12: Для инсталляции может использоваться программа INSTALL2.EXE, которая генерирует случайный код и требует ввода кода подтверждения на ее использование, который формируется программой GEN_ANSW.EXE, находящейся у администратора АРМ "БАНК".

16_1.gif (1898 b)

6. Для конфигурирования рабочего места "Клиент" необходимо запустить программу SETUP.EXE, расположенную в директории с программным обеспечением рабочего места "Клиент" (C:\CLIENT). После запуска программа конфигурации SETUP.EXE предложит ввести данные в экранную форму "Реквизиты АРМ".

============================== Реквизиты АРМ ===============================
 Директория базы данных C:\CLIENT\BASE
 Директория статистики  STAT
 Директория приема      C:\CLIENT\IN
 Директория передачи    C:\CLIENT\OUT
 Директория обработки   C:\CLIENT\TEMP
 Директория экспорта    C:\CLIENT\IMPEXP
 Регистрационное имя    АОЗТ "КЛИЕНТ"
 Наименование банка     АЛТАЙСКОЕ ОСБ
 Номер клиента банка    127  Индекс компьютера 1
 Реквизиты клиента для отправки валютных платежей (включая адрес)
 AOZT CLIENT INTERNATIONAL LTD.      RUSSIA, BARNAUL,ST. LENINA 13 - INN 1909209110
 Реквизиты банка клиента (код банка и адрес) п.52A -
 SABRRUMM198  ALTAY BANK OF THE SAVING BANK OF RF
 RUSSIA, BARNAUL, ST.IVANOVA 121
 Процент обязательной продажи валюты 75
 Текущий номер файла отправки        1
 Текущий уникальный номер документа  1

Действия по заполнению этой экранной формы в основном аналогичны действиям, изложенным в п. 2.3. настоящего руководства, за исключением полей:
Регистрационное имя Имя клиента из дистрибутива
Наименование банка Должно указываться регистрационное имя (с учетом строчных и прописных букв) банка, введенное в графу "Наименование банка" экранной формы "Реквизиты АРМ" на рабочем месте "Банк" (программа SET_BANK.EXE). В случае несовпадения имен банка на рабочих местах "Банк" и "Клиент", связь между рабочими местами устанавливаться не будет.
Номер клиента банка Регистрационный номер, присвоенный клиенту банка при регистрации его на рабочем месте "Банк". В случае несовпадения регистрационных номеров данного клиента на рабочих местах "Банк" и "Клиент", связь между рабочими местами устанавливаться не будет.
Индекс компьютера Номер компьютера, предназначенного для отправки документов и почты свободного формата. Может принимать значения 0, 1-4. При значении 0 – формирование файла с документами невозможно.
Реквизиты клиента для отправки валютных платежей. Реквизиты клиента, включаемые в валютное платежное поручение клиента (графа 50А)
Реквизиты банка клиента Реквизиты банка, включаемые в валютное платежное поручение клиента (графа 52А)
Текущий номер файла Текущий номер, под которым будет отправлен на рабочее место "Банк" транспортный файл, при инсталляции равен 1, инкрементируется программой при создании очередного транспортного файла (при пере инсталляции на установленное рабочее место нужно перед переинсталляцией уточнить предыдущее значение при просмотре предыдущей версии).
Текущий уникальный номер Число, используемое для создания уникального номера, используемого программой для идентификации платежного документа, при инсталляции значение равно 1.

После заполнения экранной формы "Реквизиты АРМ", программа предложит ввести пароль администратора для входа в программу SETUP.EXE, который необходимо ввести два раза. (Этот пароль, вводимый первый раз при инсталляции АРМ является МАСТЕР-паролем для администратора АРМ "Банк" - сотрудник банка должен передать его администратору после возвращения), поэтому введите его более сложным, чем набор цифр, и замените его сразу же при втором входе в программу SETUP.EXE).

=================== Параметры принтера ===================
Номер порта принтера (LPT) 1
Переключение в режим ЭЛИТА 1b266c304f1b266c3844
Переключение в режим PICА  1b266c304f1b266c3644
Переключение в CONDENSED   1b266c314f1b266c3844
Строка инициализации       1b45
==========================================================

Для печати на сетевой принтер через DOS или WINDOWS нужно установить номер порта принтера равный нулю, в этом случае печать будет идти в файл PRN. (Переопределение см. в SETUP.INI).

==================== Параметры порта =====================
Стр. ModemReset AT &F  (AT &F1)
Стр.  ModemInit>ATS0=0&D2&K3&M0S7=60X6S43=3*P6 &N6
Стр.ModemHangUp ~~~+++~~ATH0
Стр.ModemAnswer AT S0=1
Стр.  ModemDial ATDP
Номер линии СОМ 2  IRQ 3 Порт 2F8
Скорость  порта 38400
Число дозвонов  200
==========================================================

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

========== Связь ===========

Тип связи Модемная связь
Телефоны  747-34-96
          957-54-96
============================

После ввода параметров модема появляется экранная форма "Связь", в которой необходимо указать вид связи с банком (выбор - клавишей пробел):

Модем - при связи с банком посредством проведения сеансов прямой модемной связи через телефонную сеть общего назначения. Необходимо также ввести номера телефонов, по которым модем будет соединяться с модемом рабочего места "Банк", при этом, кроме цифр можно использовать следующие символы:

"-"  -   (дефис) для разделения цифр номера;
"W"  -   для ожидания  ответного тонального сигнала АТС при наборе номера;
","  -   для двухсекудной паузы в наборе номера.

При использовании междугородней связи или связи через офисную АТС код города может быть включен в строку ModemDial:

AT DP 8W095 - код Москвы  или AT DP 9W - выход в город через 9-ку.

Внешняя связь - при связи с использованием внешней (по отношению к системе "Клиент-Сбербанк") системы электронной почты. (В данных порта поставить номер СОМ = 0).

Нет связи - компьютер не предназначен для связи с банком, на нем не требуется инициализация драйверов для работы с ЭЦП и шифрованием (CRY_DRV и I99RF386 ).

После ввода параметров связи, первоначальная установка параметров программы закончена и производится выход из программы SETUP.EXE. При необходимости корректировки введенных при первом запуске программы SETUP.EXE параметров, администратор рабочего места может, запустив программу SETUP.EXE повторно, откорректировать ранее установленные параметры АРМ "Клиент".

После первичного заполнения нужно запустить программу SETUP.EXE и сменить пароль на тот, который будет передан администратору АРМ "Клиент" (первичный пароль является МАСТЕР-паролем).

9. С помощью текстового редактора проверьте содержимое файла HASH.CFG и откорректируйте список контролируемых на целостность файлов в случае расхождения реального расположения этих файлов с предложенным по умолчанию. Это необходимо, т.к. при первом запуске программа начнет вычисление ХЭШ-функций и результаты будут в файле с именем HASHddmm.??? в директории импорта - экспорта (IMPEXP) и сразу пойдут на печать в принтер (ddmm - день и месяц текущей даты, а ??? - регистрационный номер клиента). Для нормальной печати предварительно включите принтер и настройте строки в файле SETUP.INI при наличии лазерного или струйного принтера.

10. Включите модем и запустите программу CLIENT.EXE. После ввода начального пароля администратора, программа предложит войти в систему под именем "Администратор", для чего необходимо нажать клавишу и ввести установленный ранее пароль администратора (при инсталляции).

ВНИМАНИЕ!!

В случае наличия в компьютере аппаратных средств для работы с TOUCH-MEMORY и желании хранить ЭЦП на таблетках нужно до старта CLIENT.EXE загрузить драйвер TMDRV.EXE (или др.) в резидент и после этого запустить программу CLIENT.EXE.

При первом входе в программу необходимо предъявить дискету для хранения мастер-ключа ЭЦП этого клиента, которая должна храниться на случай восстановления мастер-ключа АРМ при замене главного ключа у клиента.

При первом входе в программу необходимо правильно заполнить экранную форму с реквизитами клиента.

===============================Клиент банка===============================
 Регистр.номер клиента: 133 Номер клиента в банке (опер.день):
 Регистрационное имя: ООО USER                 Овердрафт счетов
 Полное наименование организации / предприятия (для документов)
 ООО "Пользователь системы 'Клиент-Сбербанк'"
 ИНН клиента 7700990081
 Почтовый адрес: Москва ул.Селезневская 13
 Данные для MAIL
 Телекс:                       Телефоны: 11-22-33
 Директ.отправки
 БИК банка  44525225  Корр.счет банка в РКЦ 30101810400000000225
 Банк "СБЕРБАНК РОССИИ" Г.МОСКВА
 Филиал (ОСБ) ОПЕРУ 2
 Рубл.счет 40702.810.9.38010000166.      Рубл.счета для покупки валюты:
   у банка                           на бирже
 Валютный счет      .   . .           .
 Банк (валюта) ОПЕРУ-2
 Статус  Свободен   Номер сетевого ключа 200    Оплата телеграфа 0200.00
 Руководитель А.С.Скоробогатов          (И.О.Фамилия)
 Гл.бухгалтер И.В.Селезнева-Карбонкина  (И.О.Ф.) Печать докум.реестром
 Кред.орган.   ЭЦП на ТМ   Кол-во ЭЦП 1 Код участ. 3000020000 Версия 4.16

После этого программа переходит к генерации электронной цифровой подписи администратора АРМ "Клиент".

Необходимо ввести идентификатор администратора рабочего места "Клиент", причем в качестве идентификатора рекомендуется (для упрощения процедуры идентификации открытого ключа на рабочем месте "Банк") использовать имя "Администратор" и регистрационное имя клиента, например "АОЗТ КЛИЕНТ - Администратор".

Программа размещает открытый и секретный ключи электронной цифровой подписи администратора (файлы SIGN.KEY и PUBL.DDT) на ключевую дискету администратора, при этом открытый ключ подписи администратора помещается в базу открытого ключа администратора АРМ "Клиент".

Программа после генерации ЭЦП администратора переходит к регистрации ЭЦП банка. При наличии файла BANK.DDT на дистрибутиве клиента он копируется при инсталляции в основную директорию программы и после генерации ЭЦП администратора открытые ключи банка принимаются автоматически. При отсутствии файла BANK.DDT в директории программы предлагается указать путь к файлу с открытыми ключами банка.

В появившемся окне уточните директорию для поиска файла с открытыми ключами (файл BANK.DDT на дискете) A:\ (для дисковода "В" - B:\). Выберите в окне поиска файл ????.DDT, нажмите клавишу . При этом регистрируются имеющиеся на дискете открытые ключи ЭЦП подразделения Сбербанка РФ, в котором установлено рабочее место "Банк".

После приема открытых ключей банка программа предлагает установить сетевой ключ в директорию базы данных. Для этого нужно подготовить дискету, содержащую сетевой ключ KLss0XXX.NKL и транспортный ключ KLss0XXX.KEY.

После перезагрузки программы появляется приложение с распечаткой ХЭШ контролируемых файлов программы, описанных в текстовом файле HASH.CFG. При этом проверяется печать на принтере клиента (при наличии лазерного или струйного принтера требуется предварительная настройка ESC - последовательностей переключения размеров шрифтов в файле SETUP.INI - см.ниже. При отсутствии русификации у принтера требуется предварительно загрузка шрифтов в принтер). В случае неудачной печати при первом запуске возможна печать из файла HASHddmm.nnn в директории IMPEXP (этот файл сразу после регистрации открытых ключей ЭЦП клиента в банке рекомендуется отправить в банк почтой свободного формата). Перевычисление ХЭШ-функций возможно при нажатии клавиш ALT_F5 в основном окне программы (на головном рабочем месте).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 17 - 3.6 Установка на рабочем месте "Клиент" комплекса защиты "Аккорд"

Шаг 17 - 3.6 Установка на рабочем месте "Клиент" комплекса защиты "Аккорд"

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 18 - 3.7 Параметры АРМ, настраиваемые с помощью файла SETUP.INI

Шаг 18 - 3.7 Параметры АРМ, настраиваемые с помощью файла SETUP.INI

Некоторые параметры АРМ, например, для печати документов, могут быть настроены путем написания в текстовом файле SETUP.INI строк с значениями, отличающимися от значений по умолчанию. Строка пишется без отступа и в нее входит идентификатор, а затем через пробел новое значение параметра.

Набор изменяемых параметров АРМ "Клиент":

  • Телеграф 0 - признак контроля допустимости отправки <Телеграфом> в банк, находящийся в том же регионе. Умолчание = 1.
    // переопределение PRN на другой идентификатор принтера при
// сетевой печати - в SETUP.CFG LPT = 0
// Версия 4.16 допускает использование до 8 принтеров
//PRN  LPT1
//PRN2 LPT2
//PRN3 LPT3
//PRN4 \\SERV_NT\HP_Laser4V
//PRN5 \\SERV2\HP_4M
//PRN6 \\SERV_NT\LASER4L
//PRN7
//PRN8
  • ЦенаП 2.15 - сумма оплаты отправки <почтой> ЦБ - умолчание=0
  • ЦенаЭП 3.10 - сумма для оплаты отправки электронным платежом (тип отправки "Электронно") умолчание = 0
  • LenAbon 200 - суммарная длина наименования Фирма + " р/с " + Номер счета + " в " + Отправитель (в случае отправки из кредитной организации). Значение по умолчанию - 160. Аналогично вычисляется суммарная длина сложной строки при получателе в филиале основного банка.
  • TMR_MAIL 5 - период в секундах для опроса директории IN при типе связи <Внешняя связь>. Умолчание - 3 секунды.
  • Точка . - разделитель целой части числа суммы от дробной (333,222.23) по умолчанию символ '-' (тире)
  • НульКоп ? - завершение числа рублей при отсутствии копеек при типе печати T=PRUR (по умолчанию знак '=') !!! символ '?' отключает этот метод печати (было 1234= будет 1234-00)
  • Триада ' - разделитель триад чисел - по умолчанию символ ',' (запятая)
  • Копий 2 - число экземпляров распечатки кодов открытого ключа ЭЦП, помещающееся на листе формата A4 (умолчание: 1)
  • ИНКАС1 - "Постановление правительства Российской Федерации"
  • ИНКАС2 - "номер 555 от 11.11.1997 г. о налогообложении в РФ" - две строки длиной не более 58 символов каждая для ввода в поля основания для формирования инкассового поручения у организаций, имеющих это право.
  • Ключ 0 - отключение контроля за правильностью ввода расчетного счета по системе ключевания ЦБ (по БИК банка)
  • LenSch 22 - контроль за минимальной длиной введенного номера счета по умолчанию 20 (При указании числа 120 разрешено заполнение поля строкой другой длины с предупреждением о длине 20).
  • КлючИНН 0 - контроль за правильностью ввода номера ИНН по 10-му байту умолчание = 1.
  • Курс 1 - принудительный запрос курсов валюты при отсутствии у клиента валютных счетов (умолчание: 0)
  • МодОП 1 - включение принудительного запроса операций с указанной при запросе даты (требуется для переприема списка операций по счету для модификации измененных в банке назначений платежа (умолчание 0 - т.е. операции присылаются при обнаружении расхождения в данных в банке и у клиента в операциях, начиная с указанной даты запроса за каждый день)
  • АРХИВ D:\CLIENT\ARCBASE - этот параметр указывает директорию архивов системы, т.е. место для хранения архивных файлов, формирующихся при чистке баз данных.
  • Можно ввести строки для переключения на кириллицу для лазерного или струйного принтера (в строке присутствует размер инициализируемого шрифта, число строк на странице и ориентация бумаги). При наличии таких принтеров желательно!!
    ELITA   "_&l0O_(3R_(s0p12.00h10.00v0s0b0T_&l8D"
PICAD   "_&l0O_(3R_(s0p10.00h12.00v0s0b0T_&l6D"
CONDEN  "_&l1O_(3R_(s0p16.67h8.5v0s0b0T_&l12D"
ELITR   "_&l1O_(3R_(s0p12.00h10.00v0s0b0T_&l8D"  // Elita в режиме Альбом
        Символом _ заменен символ ESC (код 27 - 1B)

CONDP  "_&l0O_(3R_(s0p16.67h8.5v0s0b0T_&l12D"   // Сжатый - портрет
        При наличии этих строк в SETUP.INI Esc-последовательности,
        введенные для принтера в программе SETUP.EXE перестают действовать!
  • SAVER 10 - параметр устанавливает время для контроля за нажатием клавиш при запущенной программе. Умолчание - 1 (мин). Устанавливается в пределах 0-50.
  • НДС 15 - значение по умолчанию = 20. Устанавливается для операций расчета НДС - сервисная функция при вводе во вторую или третью строку назначения платежа рублевых платежек.
  • Т_НДС "В т.ч.НДС (15%) " - строка по умолчанию = "В т.ч.НДС " возможно требуется изменение при установке другого значения НДС.
  • AutoPRM "F:\AMAIL\???????A.M??" - в параметре указана директория выгрузки принятых в почте свободного формата файлов, подходящих под указанную маску поиска ???????A.M?? (? - символ может принимать произвольное значение. При приеме файлов производится проверка наличия файла с таким же именем. При отсутствии такого файла производится автоматическая выгрузка файла из почты с отметкой об проведенной обработке файла.
    !!! 4.12 Допускается в SETUP.INI вводить до 10 масок на определение масок файлов, подлежащих автоматической выгрузке из почты.
    Дополнительные имена идентификаторов: AutoPRM1 - AutoPRM9.
  • ИМЯ_СЧ 1 - Признак печати наименования организации и ИНН из карточки счета, а не из реквизитов АРМ при печати выписки и операций в виде документа. (используется у спецклиентов, работающих с чужими счетами ) - умолчание = 0.
  • NUM_RUR 999999 - числовая маска ограничителя номеров рублевых платежных поручений (должна состоять из девяток) - умолчание = 99999.
      // количество строк на странице А4 для печати реестров (для каждого шрифта)
  // приведены значения по умолчанию
KS_PICAD  62
KS_ELITA  82
KS_CONDA  84    // condensed альбом
KS_ELITR  57    // Elita альбом
KS_CONDP  124   // condensed портрет

MAIL_REG 40  // включить тип отправки 'Электронно' для платежей внутри региона
             // по умолчанию 50 - 'Внутри региона'
ДАТА_ПП  1 // включение поля Дата платежа в редактирование
KLIR_RS  0 // отключить контроль на номером счета при отправке Расч.сист.СБ
AUDIT_PRN 1 // включить запись сообщения о печати документов в журнал
КПП 345638  // строка настройки КПП клиента

BADSIM  |%#  // строка настройки недопустимых символов для русских текстов
КОНТР_РССБ 0 // отключить рекомендации типа отправки <Расчет.сист.СБ>


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 19 - 3.8 Особенности инсталляции АРМ "Клиент" в среде WINDOWS 3.11, WINDOWS 95, 98

Шаг 19 - 3.8 Особенности инсталляции АРМ "Клиент" в среде WINDOWS 3.11, WINDOWS 95, 98

Для обеспечения работоспособности АРМ "Клиент" в графической среде (запуск в DOS-приложении) требуется, чтобы резидентные драйвера CRY_DRV.COM и I99RF386.EXE были доступны программе CLIENT.EXE в любой DOS-сессии. Это достигается тем, что загрузка этих драйверов должна производиться из командного файла AUTOEXEC.BAT. Таким образом, инсталляция этих драйверов должна производиться в режиме MS-DOS до старта Windows. Для этого пропишите в конец AUTOEXEC.BAT строку C:\NC\NC и перезагрузите компьютер. В среде Norton Commander произведите инсталляцию всех программ криптозащиты. Пропишите в AUTOEXEC.BAT строки для запуска драйверов: C:\CLIENT\CRY_DRV.COM и LH C:\CLIENT\I99RF386.EXE. После перегенерации главного ключа и перезапуска компьютера на новом главном ключе примите сетевые ключи и уберите строку C:\NC\NC.

Для нормальной работы под Windows инсталляцию АРМ "Клиент" нужно производить из DOS-сессии Windows. Для этого загрузите Windows и запустите из нее либо DOS-приложение, либо просто Norton. После этого запустите INSTALL.EXE с дистрибутива клиента и произведите полную инсталляцию по вышеописанной инструкции. После этого вынесите в соответствующее окно иконку для запуска CLIENT.EXE. Этому приложению при работе должен быть указан максимальный приоритет для нормальной работы модемного драйвера при сеансе связи.

При подключении сетевого принтера нужно учитывать, что он должен иметь возможность использования в DOS-приложении и установлен как принтер по умолчанию. Проверку правильности установки принтера можно сделать в Norton Commander: нажмите на маленьком текстовом файле F5 (copy) на PRN. Если печать на PRN прошла нормально, то установка сетевого принтера произведена правильно. При использовании в среде Windows нескольких принтеров возможна настройка печати на нужный порт соответствующей строкой в SETUP.INI.

Внимание !!

При работе программы под Windows должен быть отключен Screen Saver, который при старте может сломать работу программы (особенно проявляется при использовании After Dark).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 20 - 3.9 Особенности сетевой инсталляции АРМ "Клиент"

Шаг 20 - 3.9 Особенности сетевой инсталляции АРМ "Клиент"

АРМ "Клиент" может быть установлен на несколько комьютеров для работы в сетевом режиме на общей базе в локальной сети учреждения. При этом инсталляция должна производиться с одного дистрибутива, в котором при генерации указано достаточное число инсталляций.

Первая инсталляция производится как обычно по вышеописанной технологии, за исключением того, что при описании путей к директориям работы программы в них указывается не локальный диск, а сетевой. На этом первом (главном) компьютере производится генерация ЭЦП клиента и отправка их для регистрации в банковское рабочее место. При этом в банке регистрируется этот первый компьютер, на котором должна в дальнейшем производиться отправка документов, почты и запросов на счета и операции.

После того, как открытые ключи клиента зарегистрированы в банке и получена первая выписка, можно приступать к расширению числа компьютеров. Без инсталляции на эти компьютеры средств криптозащиты и ЭЦП произведите инсталляцию программы с дистрибутива клиента. При первом запуске SETUP.EXE укажите в реквизитах путь к базе рабочего места в локальной сети. В портах укажите номер COM = 0, если Вы не хотите использовать этот компьютер для связи. На этом инсталляция заканчивается, рабочее место клиента готово к работе. В случае, когда дополнительное рабочее место предполагается использовать для связи с АРМ "Банк", потребуется инсталляция на компьютер драйверов CRY_DRV и I99RF386, при этом в портах указывается номер COM > 0.

На главном компьютере администратор рабочего места создает первичный список операторов для работы с АРМ "Клиент".

При работе в совместном режиме на общей базе запуск программы производится с параметром S (CLIENT.EXE S). Нужно иметь в виду, что для подготовки транспортного файла запроса или с документами должен быть запуск программы в режиме монопольной работы с базой, т.е. без параметра на главном компьютере. Это возможно, когда на остальных компьютерах работы программы корректно завершена.

Примечание: В версии 4 разрешена связь с банком с любого компьютера клиента для отправки подготовленных на главном компьютере файлов с запросами, документами и передача / прием почты.

У связного компьютера в SETUP.CFG должен быть установлен номер COM не равный 0 и тип связи "Модемная связь". На него нужно инсталлировать драйвера CRY_DRV.COM и I99RF386.EXE с загрузкой их в резидент также, как на главном компьютере.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 21 - Рекомендации по использованию модемов в системе "Клиент-Сбербанк"

Шаг 21 - Рекомендации по использованию модемов в системе "Клиент-Сбербанк"

Материал, изложенный в данном приложении дает рекомендации по использованию модемов типа ZyXEL 1496 в системе "Клиент-Сбербанк", кроме того, данные рекомендации могут облегчить работу по настройке модемов других типов для работы в системе "Клиент-Сбербанк".

При использовании модемов в системах, подобных системе "Клиент- Сбербанк" наиболее целесообразен следующий вариант использования модемов:

Модем рабочего места "Банк":

Модем рабочего места "Банк" не определяет конкретного протокола обмена с модемом рабочего места "Клиент" и командой AT &N0 устанавливается в так называемый "мультипротокольный режим", осуществляя поддержку практически любого протокола, предлагаемого выходящим на связь модемом рабочего места "Клиент";

При этом строка инициализации для модема ZyXEL 1496 имеет вид:

AT S0=0 &C1 &D2 &M0 &N0 S7=60 X6 S43=3 &K3
- пробелы могут быть удалены

Модем рабочего места "Клиент"

Модем рабочего места "Клиент", исходя из качества линии связи, должен определять конкретный протокол обмена с модемом рабочего места "Банк", что осуществляется с помощью AТ - команд модема:

&N14 - протокол V22bis    2400 бит/с
&N5  - протокол V32       4800 бит/с
&N4  - протокол V32       9600/7200/4800 бит/с;
&N3  - протокол V32T      9600T/7200/4800 бит/с;

Командой AT &K3 производится отключение аппаратной поддержки модемом протоколов сжатия данных MNP-5 и V42bis, поскольку сжатие данных при обмене осуществляет непосредственно программное обеспечение системы "Клиент-Сбербанк".

При этом строка инициализации для модема ZyXEL 1496 имеет вид: (на примере обмена по протоколу V22bis 2400 бит/с)

AT S0=0 &C1 &D2 &K3 &M0 S7=90 X6 &N3

Примечание: Устанавливаемая на рабочих местах скорость порта должна быть не ниже максимально возможной для данного рабочего места скорости обмена данными.

При конфигурировании модемов типа ZyXEL 1496, в зависимости от качеcтва линий связи, в некоторых случаях может также потребоваться установка оптимальных для данных условий:
уровня чувствительности модема с помощью регистра S52;
уровня передачи на коммутируемой линии (-n)dBm с помощью команды AT *Pn (AT *P5).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 22 - Основные критерии для настройки модемов при прямой связи

Шаг 22 - Основные критерии для настройки модемов при прямой связи

Ниже приведены критерии, которыми нужно руководствоваться при настройке модема для работы. В качестве примера команды приведены АТ-команды для модема ZyXEL.

  1. Должна быть включена асинхронная приемо-передача данных с компьютером с буферизацией данных (normal link - &M0).
  2. Включена фиксированная скорость обмена модема с портом при установлении соединения (&B1).
  3. Детектор несущей (DCD) - устанавливается, когда обнаружена несущая (&C1).
  4. Готовность модема (DSR) - всегда в 1 (&S0).
  5. Модем возвращает коды результатов на команды (Q0).
  6. Управление потоком данных аппаратное через CTS/RTS (&H3).
  7. Включен контроль за ошибками в линии V42 (MNP4) (&K3).

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

При установке АРМ КЛИЕНТ требуется проверка состояния линий связи. При этом рекомендуется отключить аппаратную коррекцию ошибок (&K0) и при сеансе связи по откатам и числу ошибок передачи (приема) в диагностическом окне модема произвести оценку качества линий связи. В случае большого числа ошибок аппаратная коррекция может не справляться с ошибками и будет происходить разрыв связи по таймеру.

При установке в АРМ "Клиент-Сбербанк" модема другого типа (не ZyXel), рекомендуется просмотреть его техническое описание и провести адаптацию АРМ к данному типу модема. Для этого необходимо подобрать строку инициализации для включения режимов, указанных выше.

Затем нужно просмотреть список кодов ответов для данного типа модема. Для правильного функционирования программы нужно отредактировать меню N 3 файла MODEM.MN@, в котором есть таблица ответов из модема. Например, для модема типа US Robotics нужно строку NO DIALTONE отредактировать на строку NO DIAL TONE, иначе программа неправильно реагирует на отсутствие тона в линии при попытке набрать номер.

В первую очередь нужно обратить внимание на соответствие числового представления кода ответа его символьному соответствию. Число элементов меню не должно превышать 30. Длину строки (L=13) можно увеличить, но она не должна быть длиннее максимальной. Также можно добавить в меню N 1,2 новый тип модема и его строку инициализации.

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

MAKEMENU.EXE MODEM.MN@

и при этом будет сформирован новый файл MODEM.MNU. Эта процедура должна производиться сотрудником банка в процессе инсталляции системы.

Ниже приведены элементы меню для некоторых типов модемов с списком ответов модема ZyXel Elite 2864.

_ MENU 1  X=10 Y=4 L=18 S=11 C=1
_ Модем _
 0
_
P 1 ZyXEL U-1496
P 2 GVC
P 3 DISCAVERY_2400
P 4 SMART OWN
P 5 AnCom STE-2442
P 6 US Robotics
P 7 TAINET-288C
P 8 TAICOM_288
P 9 ACCURA_288
P 10 MOTOROLA 3265
P 11 BOCAMODEM
_

_ MENU 2  X=10 Y=8 L=40 S=9 C=1
 0
_     ########################################
P  1  ATS0=0&d2&K3&M0S7=60X6S43=3*P6 &N0
P  2  ATB0&C1&D2%C0S0=0S7=70X4\N3
P  3  ATB0&C1&D2%C0S0=0S7=70X4\N3
P  4  ATB0&C1&D2%C0S0=0S7=70X4\N3
P  5  AT&D2X4W2&Q6%C0S7=70
P  6  AT&C1S7=70X4&B1&M4&A1&K3&S0&H1&R2&I0&N6
P  7  AT &C1&D2X4W2\J0\Q2\N2\A3S7=70
P  8  AT&C1&D2X4W2&K3&M0\N3\A3S7=70%C0S95=2
P  9  AT&C1&D2X4&K3&Q9S7=70S95=7 S37=9
P 10  ATS7=70&C1&D2X4*SM3*FL3*DL0*CM1*CT0*MX7
P 11  AT\A3&D2X4S7=70S95=3 S37=11
_

_ MENU 3 X=0 Y=0 L=13 S=10 C=2
_STR_MODEM_
 0
_
P 0   OK
P 1   CONNECT
P 2   RING
P 3   NO CARRIER
P 4   ERROR
P 5   CONNECT 1200
P 6   NO DIALTONE
P 7   BUSY
P 8   NO ANSWER
P 9   RINGING
P 10  CONNECT 2400
P 11  CONNECT 4800
P 12  CONNECT 9600
P 14  CONNECT 19200
P 15  CONNECT 7200
P 16  CONNECT 12000
P 17  CONNECT 14400
P 18  CONNECT 16800
P 35  CONNECT 31200
P 36  CONNECT 24960
P 37  CONNECT 20800
P 38  CONNECT 33600
P 39  CONNECT 28800
P 40  CONNECT 26400
P 41  CONNECT 24000
P 42  CONNECT 21600
_


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 23 - Рекомендации по конфигурированию компьютеров рабочих мест "Клиент" и "Банк"

Шаг 23 - Рекомендации по конфигурированию компьютеров рабочих мест "Клиент" и "Банк"

При установке программного обеспечения на компьютеры рабочих мест "Клиент" и "Банк", необходимо принимать меры по предоставлению программам максимально возможного объема оперативной памяти, для чего рекомендуется:

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

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

  • подключить драйвер управления расширенной памятью HIMEM.SYS;
  • подключить драйвер эмуляции дополнительной памяти EMM386.EXE;
  • поместить в файл CONFIG.SYS строку "DOS=HIGH,UMB";
  • для загрузки драйверов вместо оператора "DEVICE=" использовать оператор "DEVICEHIGH=";
  • для загрузки резидентных программ в файле AUTOEXEC.BAT использовать команду "LOADHIGH", передав ей в качестве параметра имя и параметры загружаемой резидентной программы.

Примечание: Драйверы эмуляции криптоплаты "Криптон-3" CRY_DRV.EXE и драйвер электронной цифровой подписи I99RF386.EXE загружаются как резидентные программы.

Для примера приведем образцы файлов CONFIG.SYS и AUTOEXEC.BAT для рабочего места "Клиент":

CONFIG.SYS
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE NOEMS
DOS=UMB
FCBS=16,0
DOS=HIGH
BUFFERS=20,0
FILES=50
STACKS=9,256
devicehigh=C:\WINDOWS\SETVER.EXE
DEVICEHIGH=C:\WINDOWS\COMMAND\DISPLAY.SYS CON=(EGA,,1)
COUNTRY=007,866,C:\WINDOWS\COMMAND\COUNTRY.SYS

AUTOEXEC.BAT
@ECHO OFF
PROMPT $p$g
VERIFY ON
mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
PATH C:\WINDOWS;C:\NC;C:\UTIL
SET TEMP=C:\WINDOWS\TEMP
 rem - драйвер - русификатор клавиатуры - /IB5 - индикация бордюром цвет 5
C:\UTIL\UNIKBD /IB5
rem C:\ACCORD\TMDRV.COM P:340
C:\CLIENT\CRY_DRV.COM
LH C:\CLIENT\I99RF386.EXE
SET RTM=EXTMAX 2048

Пример файла CONFIG.SYS приведен в файле CONFIG.SY@ для компьютера HEWLETT PACKARD Vectra VL2 50. Аналогично пример файла AUTOEXEC.BAT приведен в файле AUTOEXEC.BA@.

В случае необходимости установки на компьютере, используемом для рабочего места "Клиент" или "Банк" иного программного обеспечения, требующего загрузки в оперативную память неиспользуемых программами "Банк" или "Клиент" драйверов и резидентных программ, целесообразно определение нескольких вариантов конфигурации компьютера, любой из которых можно выбрать при запуске операционной системы MS-DOS.

Одной из этих конфигураций должна быть конфигурация, определяющая процесс загрузки компьютера при использовании его программой "Клиент" или "Банк".

Организацию "стартового" меню при запуске операционной системы компьютера можно осуществить с использованием дополнительных директив, включаемых в файлы CONFIG.SYS и AUTOEXEC.BAT (для версии MS-DOS 6.0 и выше).

В примере приведен образец файлов CONFIG.SYS и AUTOEXEC.BAT для рабочего места "Клиент", при использовании на компьютере трех альтернативных конфигураций WINDOWS, CLIENT и DOS. Аналогично пишется меню для компьютера с установленной на нем операционной системы WINDOWS 95.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 24 - Описание общих принципов использования файлов-шаблонов печати документов в системе "Клиент-Сбербанк"

Шаг 24 - Описание общих принципов использования файлов-шаблонов печати документов в системе "Клиент-Сбербанк"

При печати платежных документов на рабочих местах "Банк" и "Клиент", программное обеспечение использует специальные файлы шаблонов печати XXXXXXXX.TXT, расположенные в директории с программным обеспечением рабочих мест. Файлы шаблонов печати представляют из себя текстовые файлы ASCII формата, включающие в себя:

  • заголовок шаблона печати;
  • образ печатаемого документа.

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

Строки заголовка шаблона печати должны иметь следующий формат:

FIELD <номер реквизита> <наименование поля> <спецификация формата>

Наменование поля - наименование поля базы данных, содержащего реквизит платежного документа. Наименования полей баз данных приведены в файле FIELDS.OBT, поставляемом с каждой новой версией.

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

  • INT - целое число со знаком в диапазоне от -32768 до 32767 (2 байта)
  • LONG - целое число со знаком в диапазоне от –2147483648 до 2147483647 (4 байта)
  • DOUBLE - число со знаком с плавающей точкой в диапазоне между (+ или -) 10E-307 и (+ или -) 10E+307 D=2 - вводимое число знаков после точки
  • CHAR - символьная строка длиной L=XX символов
  • BYTE - беззнаковое число 0-255 L=1
  • CHR - байт как символ
  • DATE - дата (файловый формат хранения даты)
  • TIME - время (файловый формат хранения времени)

Спецификация формата определяет способ печати реквизита в поле печати данного реквизита.

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

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

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

Спецификация формата | Назначение спецификации | Формат данных | Возможные параметры
%s | печать строки символов | CHAR | T=П Т=Ц умолч. T=Л
%u,%05u,%4u | печать в формате целого числа без знака 0 ... 65535 (можно указать число символов) | INT | Т=Ц умолч. T=Л T=П Т=Ц
%lu | печать в формате целого числа без знака 0 ... 4294967295 | LONG | T=П Т=Ц
%09ld | - печать 9 символов с заполнением лидирующих символов '0' (нулем) со знаком | LONG |
%d | печать в формате целого числа со знаком - 32768 ... 32767 | INT | T=П Т=Ц
%.0Nf | печать в формате числа с плавающей точкой [-]ddddd.dddd где dddd - одна или более десятичных цифр. Число цифр до десятичной точки зависит от величины значения, а число цифр после десятичной точки равно N | DOUBLE | T=PROP S=M T=CURR T=PRUR
T=DATE | Печать даты прописью в виде: 19 ноября 1995 г. | DATE |
%DD-MM-GG | Печать даты в виде 19-11-95 где DD - день месяца MM - месяц GG - год | DATE |
%DD.MM.YYGG __.__.__ __.__.19__ | Печать даты в виде 09.12.1998 Печать даты в виде 19.11.95 Печать даты в виде 19.11.1995 | DATE DATE DATE |
%GG/MM/DD | Печать даты в виде 95/11/19 где DD - день месяца MM - месяц GG - год | DATE |

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

Наименование параметра | Назначение параметра
П=П | При печати производится смещение печатаемых данных правой границе поля печати (буква T - латинская)
П=Ц | При печати производится центрирование печатаемых данных внутри поля печати
Т=VIBK | Печатается соответствующая значению INT - строка текста из меню CLIENT.MNU (BANK_CB.MNU)
Т=DATE | Печатается соответствующая значению DATE- строка текста в формате: 19 марта 1996 г.
Т=VDATE | Печатается соответствующая значению DATE- строка текста в формате: 19 januar 1996 г.
T=PROP S=M | Производится преобразование числа в его строковый эквивалент (сумма прописью) и последующая печать строкового эквивалента на русском языке в виде M строк текста c печатью слов рубли и копейки.
T=PROPV S=M | Производится преобразование числа в его строковый эквивалент (сумма прописью) и последующая печать строкового эквивалента на русском языке в виде M строк текста не печатаются слова рубли и копейки,а дробью 35/100)
T=VPROP S=M | Производится преобразование числа в его строковый эквивалент (сумма прописью) и последующая печать строкового эквивалента на английском языке в виде M строк текста 123.23 (one hundret twenty three 23/100)
Т=CURR | Печать числа с использованием запятых в качестве разделителей триад целой части числа (например 55,555,333-34)
Т=TRUNK | Печать числа с обрезанием хвостовых нулей (для обрезания незначащих нулей после запятой - %.8f)
Т=PRUR | Печать числа с использованием указанного в разделителя символа вместо точки (например, 123456-17)
Т=UPPER | Печать с переводом всех символов печатаемого в верхний регистр (заглавными буквами)
Т=LINE | Печать в несколько строк (S=?) с разбивкой не по пробелам, а без правил переноса (печать суммы прописью ??)
Т=VCURR S=N | Печать числа с использованием запятых в качестве разделителей триад целой части числа (и последующая печать кода валюты по ISO) пример: 123,25.00 (RUR)
T=COMP | Объединение двух символьных строк, следующих в базе друг за другом в одну с последующей разбивкой на фрагменты.
T=COMP2 | Объединение трех символьных строк, следующих в друг за другом в одну с последующей разбивкой на фрагменты (применяется при печати выписки)
T=SPACE | Объединение двух символьных строк с добавлением пробела

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

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

FIELD 3  ЕСЛИ Фирма < "0" ТО Плательщик ИНАЧЕ Фирма %s

это означает, что если поле Фирма пустое (сравнение со строкой "0"), то печатать поле Плательщик, иначе печатать поле Фирма вывод данных строковый: %s

Вариант ветвления условия по ИНАЧЕ необязательный, в этом случае при выполнении условия происходит печать, а при невыполнении поле остается незаполненным.

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

FIELD 38 ЕСЛИ Приоритет >= 90 ТО TXT=58 ИНАЧЕ TXT=59  %s

это означает, что если в поле "Приоритет" лежит значение больше или равно 90 (число из меню), то напечатать текст "58", иначе "59". Если текст содержит пробелы, то его нужно заключить в кавычки: "TXT=Поле 58". Признаком печати текста по условию служит сочетание TXT= (латинскими символами), за которым должен следовать печатаемый текст. Максимальная длина строки текста = 30 символов.

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

Образ печатаемого документа может состоять из:

  • непосредственно выводимых на печать символов;
  • полей печати реквизитов платежного документа, состоящих из последовательности символов #;
  • символов управления принтером (управляющие символы и ESCAPE-последовательности).

Начиная с версии 4.03 введены дополнительные возможности печати по текстовому шаблону:

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

_ШРИФТ 2  (1 = PICAD, 2 = ELITA, 3 = CONDENSED)
          (4 = ELITA альбом, 5 = CONDENSED портрет)
_КОПЛИСТ 2  - число экземпляров документа на листе формата А4
_КОЛДОК  3  - число документов, печатаемых при отсутствии прямых указаний оператора.

2. Введена возможность прямой печати полей из карточки реквизитов абонента. Для этого в списке печатаемых полей нужно указать поле файла ABON.DDF, например:

FABON  Директор  %s

Список полей файла ABON.DDF приведен в описателе полей FIELDS.OBT.

Начиная с версии 4.04 введена возможность объединения нескольких полей в одно с последующей разбивкой их на несколько строк. При этом при наличии данных в поле (не пустое) печать может быть произведена с тестовыми обрамлениями как перед данными, так и после них. Для текстовой вставки перед данными используется сочетание символов F= , за которым в кавычках идет текст. Кавычек может не быть, если в тексте нет пробелов. Текстовая вставка после данных описывается с аббревиатурой Z=. Длина текстовых вставок до 20 символов.

Пример 1

FIELD 25 КодБанкаПол  F="Код уч. <"  %s Z=>

Эта строка означает, что при наличии значения в поле КодБанкаПол будет напечатано: Код уч. <4126700000>

Пример 2:

FIELD 28 Получатель2  %s  S=6
FIELD 28 // 29
FIELD 28 // 30
FIELD 28 // 31
FIELD 32 ДатаПлат   %DD.MM.YYGG
FIELD 28 // 33
FIELD 28 // 34
FIELD 28 СубСчетБанк %s F=" р/с."
FIELD 28 ЕСЛИ СубСчетБанк > "00" ТО БанкКорр %s F=" в "

В этом примере поле печати N 28 формируется из полей <Получатель2>, <СубСчетБанк> с предикатом " р/с." и <БанкКорр> при наличии данных в поле СубСчетБанк с предикатом " в ". При этом может быть напечатано:

АОЗТ "Получатель"

или

АОЗТ "Получатель" р/сч. 40702810038040000012
в Лефортовском ОСБ 5555 МБ АК СБ РФ

Сформированная сложная строка печатается при этом в 6 строк (S=6).

Начиная с версии 4.14 введены дополнительные возможности печати текущей даты и ФИО текущего оператора (4.12):

FOPER 20 %s       - Сидоров П.А.
FDATE 21 T=DATE   - прописью: 08 сентября 2000 г.
    или
FDATE 21 %DD.MM.YYGG  - 08.09.2000
    В качестве примера использования смотрите шаблон REES_PP.TXT.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 25 - Обеспечение взаимодействия АРМ "Банк" с АРМ "Операционный день" (ОД) банка

Шаг 25 - Обеспечение взаимодействия АРМ "Банк" с АРМ "Операционный день" (ОД) банка

Взаимодействие двух АРМ двунаправленное:

  • из ОД банка в АРМ "Банк" данные о счетах клиентов и операциях по всем этим счетам за определенный период. При работе с валютными счетами требуется файл курсов валют.
  • из АРМ "Банк" в ОД выгружаются платежные документы через промежуточный файл.

Необходимые для работы подсистемы БАНК данные о состоянии счетов клиента, о движении средств на счетах клиентов, а также информация о курсах валют передается в подсистему БАНК путем импорта данных из создаваемых сотрудниками банка файлов, имеющих формат файлов баз данных FoxPro, dBASE:

файла счетов  				ISCHET.DBF
файла движения по счетам 			IVIBOR.DBF
файла курсов валют				IKURS.DBF

Названия этих файлов содержат букву I как признак того, что эти файлы отсортированы определенным образом:

  • ISCHET.DBF - отсортирован по номерам счетов (необязательно)
  • IVIBOR.DBF - отсортирован по датам операций и по номерам счетов
  • IKURS.DBF - отсортирован по датам курсов и по кодам валюты

Импорт данных из файлов ISCHET.DBF, IVIBOR.DBF, IKURS.DBF в подсистему БАНК может осуществляться путем запуска программы-конвертора CONVERT.EXE при остановке АРМ "Банк" или через меню "Подкачка из ОДБ" без останова АРМ (желательный режим, т.к. при этой подкачке сразу формируются индексы на базу операций по счетам). Для работы конвертора требуется наличие в директории базы данных АРМ текстовых файлов-шаблонов конвертации:

SCHET.SHB, VIBOR.SHB, KURS.SHB

Подкачка при работе АРМ "Банк" не останавливает обслуживания модемов рабочего места и производит корректно замену баз счетов и операций. Кроме этого при индексации правильно корректируется текущая сумма дебета в карточках счетов, учитывающая полученные, но еще не проведенные в ОД банка документы. С учетом этой суммы формируется текущий остаток на счете, по которому оценивается сумма проведения платежей.

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

Для множественной подкачки в одну базу из нескольких файлов (например, для подкачки в файл операций) нужно положить в директорию базы АРМ "Банк" несколько файлов-шаблонов с именем базы и расширением ".SH?", где символ '?' может принимать значения от 'A' до 'Z'.

Например, подкачка в базу операций может быть из двух файлов:

  • OVIBOR.DBF - архивные операции по счетам за период (30 дней) по шаблону VIBOR.SHA (файл формируется 1 раз утром).
  • TVIBOR.DBF - операции по счетам клиентов за текущий опер.день банка по шаблону VIBOR.SHB (файл может формироваться несколько раз в течении дня).

Поля используемых АРМ "Банк" файлов SCHET.DDF, VIBOR.DDF, KURS.DDF с описанием смыслового назначения полей описаны в файле FIELDS.OBT. Исходя из этого смысла и должны быть написаны программы, подкачивающие данные из ОД банка.

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

COPYCONV - написание этой строки в шаблоне желательно при использовании раздельных файлов с архивными и текущими операциями по счетам. Пример применения этой строки в шаблоне VIBOR.SHA:

ИСТ: F:\PATH..\OVIBOR.DBF
COPYCONV

В этом случае, если произошло изменение исходного файла OVIBOR.DBF, производится конвертация этого файла с одновременным копированием результата в файл VIBOR.ADF, а при отсутствии изменений просто копируются готовые данные из файла VIBOR.ADF (первая буква в расширении определяется последней буквой в расширении шаблона)

COPYTEMP - эта строка говорит о том, что при наличии изменений в файле - источнике данных его нужно сначала скопировать в директорию TEMP программы, а уже затем производить конвертацию (при отсутствии изменений сразу производится конвертация из файла-копии). Этот параметр используется для уменьшения загрузки сети при редких обновлениях данных.

CLEARREZ - эта строка говорит о том, что при конвертации в файл формата DBF или DDF этот файл должен быть очищен от записей (введено в версии 4.12).

GENKEY - (0/1) - признак необходимости формирования ключевого поля при экпорте документов или проверки записи по ключу при импорте данных (подкачка) введено в версии 4.16.

COPYFROM F:\IEXP.DBF - при преобразовании DDF_TO_DBF и при отсутствии файла результата (или размере=0) производится копирование указанного выше файла в него <введено в версии 4.16.

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

Рассмотрим файл счетов клиентов. Поскольку номера счетов хранятся в символьном виде, то цифры должны быть прижаты влево. Поле "Овердрафт" по своей сути является полем предела красного сальдо при отправке клиентом документа. В реализациях, когда подкачка данных из ОД осуществляется один раз в сутки, этот параметр может быть существенным для случаев, когда клиент ожидает поступления на счет в течение дня. Заполнять это поле можно индивидуально для каждого счета или всем сразу, используя возможность конвертора заполнять поле значением по умолчанию (например: UM=10000000.00).

Номер клиента - идентификационный номер, присвоенный клиенту в программе "Операционный день банка" ОПЕРУ или ОСБ (при наличии программы "Операционный день банка"). Все счета одного клиента в файле ISCHET.DBF должны иметь один и тот же номер клиента, совпадающий с номером, введенным в поле "Номер клиента в банке (опер.день)" регистрацонной формы клиента при его регистрации на рабочем месте "Банк" в соответствии с Руководством по инсталляции. Номер клиента используется также при установке подсистемы КЛИЕНТ.

При написании конвертора движения средств по счетам клиентов нужно руководствоваться принципом, что клиент в любой момент времени должен иметь у себя список операций за определенный период времени, по которому он печатает на своем АРМ выписку по счету. Эти данные также могут им использоваться для анализа движения по счету. Учитывая срок предъявления претензий по документообороту, установленный договором (1 месяц), нужно делать выборку операций по счету за тот же период.

Для нормального взаимодействия с АРМ "Банк" не допускается одновременное обращение к промежуточным файлам данных из двух программ - конвертора данных из ОД и АРМ "Банк". Для взаимной блокировки на момент работы любой из программ при работе конвертора должен применяться следующий механизм:

Перед тем, как начать работу с промежуточными файлами данных (ISCHET.DBF, IVIBOR.DBF и т.д.) программа должна создать файл с определенным именем, например CONV.TRK. Затем делается переименование созданного файла в согласованное с АРМ "Банк" имя, например CONV.TRN. В случае успешного переименования начинается работа по формированию результирующих файлов данных, а в случае ошибки переименования, возникающей при наличии такого файла, считается, что на АРМ "Банк" идет подкачка из ОДБ.

При работе АРМ "Банк" в том случае, когда в SETUP.INI указано имя файла для взаимной блокировки двух программ:

CONV_OD "F:\PATHCONV\CONV.TRN" // имя файла и путь произвольны

Делаются аналогичные действия:

а) создается файл F:\PATHCONV\CONV.TR$
б) переименовывается файл F:\PATHCONV\CONV.TR$ в F:\PATHCONV\CONV.TRN

В случае успешного переименования начинается работа по подкачке, иначе выдается сообщение о занятости баз с данными из ОД. По окончании подкачки файл F:\PATHCONV\CONV.TRN удаляется.

В версии 4.03 при наличии такого механизма взаимной блокировки при работе конвертора АРМ "Банк" может обнаруживать появление файла синхронизации. После его исчезновения автоматически запускается процедура подкачки данных из ОД банка. Отключить автоматическую подкачку можно соответствующей строкой в SETUP.INI (Автомат 0).


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 26 - Выгрузка принятых документов из АРМ "Банк"

Шаг 26 - Выгрузка принятых документов из АРМ "Банк"

Программное обеспечение рабочего места "Банк" предусматривает возможность экспорта реквизитов полученных от клиентов и предварительно отпечатанных на рабочем месте "Банк" как рублевых, так и валютных платежных поручений в банковскую программу "Операционный день", эксплуатируемую в подразделении Сбербанка, в котором установлено рабочее место "Банк". Экспорт платежных документов программным обеспечением "Банк" производится путем записи реквизитов платежных поручений в файлы, имеющие распространенный формат DBF файлов баз данных СУБД FoxPro, dBASE:

  • EXPORT.DBF - для рублевых платежных поручений
  • VEXPORT.DBF - для валютных платежных поручений

Примечания:

  1. Одному платежному поручению соответствует одна запись в файле экспорта.
  2. Программа "Банк" не производит удаления записей из файлов экспорта и не следит за ранее произведенными в файл записями.
  3. Номенклатура и наименование полей файлов экспорта определяются, исходя из требований программы "Операционный день" банка. В комплекте поставки программного обеспечения в качестве примера есть файлы EXPORT.DBF и VEXPORT.DBF.
  4. В случае необходимости имена файлов EXPORT.DBF и VEXPORT.DBF могут быть изменены (с внесением соответствующих изменений в файлы шаблонов экспорта WORK.SHB и VALWORK.SHB).
  5. Файлы EXPORT.DBF и VEXPORT.DBF могут размещаться как на локальных, так и на сетевых (при подключении компьютера рабочего места "Банк" к локальной вычислительной сети) логических дисках компьютера рабочего места "Банк".

При экспорте платежных документов используются также файлы шаблонов, размещаемых в директории BASE программного обеспечения "Банк" и имеющие наименование, совпадающее с именем базы данных, но с расширением SHB:

  • WORK.SHB - для экспорта рублевых платежных поручений
  • VALWORK.SHB - для экспорта валютных платежных поручений

используемые для указания программе:
- об именах и месте расположения файлов экспорта;
- о номенклатуре экспортируемых реквизитов платежного документа, а также о соответствии полей реквизитов во внутренней базе данных программы и соответствующих полей файлов экспорта EXPORT.DBF (VEXPORT.DBF).

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

Формат первых строк файла WORK.SHB:

ТИП: DDF_TO_DBF
РЕЗ: [дк:\пк\]EXPORT.DBF
ИСТ: WORK.DDE                // имя совпадает с именем основного
                             // файл, а DDE означает, что файл для
                             // экспорта данных

Где [дк:\пк\] - диск и путь к файлу EXPORT.DBF.

Формат последующих строк файла WORK.SHB:

FIELD <наимен.поля в файле EXPORT.DBF> F=<наимен.поля внутр.базы>

Формат последней строки файла WORK.SHB:

END

В качестве примера приведен файл шаблона WORK.SHB, осуществляющего экспорт реквизитов рублевого платежного поручения из внутренней базы данных в файл EXPORT.DBF, расположенный в подкаталоге Z:\BANK_CB\IMPEXP.

ТИП: DDF_TO_DBF
РЕЗ: Z:\BANK_CB\IMPEXP\EXPORT.DBF
ИСТ: WORK.DDE

FIELD N_PACK     UM=77 //F=N_пачки  // можно взять из поля или подставить
                                    // константу, например = 77
FIELD N_DOCUMENT F=N_платежки
FIELD DATADOC    F=Дата
FIELD DATAPAY    F=ДатаПлат
FIELD ORDER      F=Трасса      TP=%d // выгрузить число, а не текст
FIELD PAYER      F=Фирма ETXT=" "
FIELD PAYER      F=Счет PTXT="р.сч." ETXT=" в " // добавить в PAYER поле Счет
FIELD PAYER      F=Плательщик    // добавить в PAYER поле Плательщик
FIELD INN_PAYER  F=ИНН_Отпр
FIELD ACC_PAYER  F=Р/счет
FIELD SUM        F=Сумма
FIELD TEL        F=Отправка    TP=%d     // выгрузить число
FIELD MFO        F=Код_банка   TP=%09lu
FIELD MFORKC     F=Код_РКЦ     TP=%09lu
FIELD UCH_SB     F=КодБанкаПол           // код участника банка-получателя
FIELD ACC_BANK   F=Счет_банка
FIELD RECEIVER   F=Получатель2
FIELD RECEIVER   F=СубСчетБанк PTXT=" р.сч."
FIELD RECEIVER   F=БанкКорр    PTXT=" - "
FIELD ACC_REC    F=Р/сч_получ
FIELD INN_REC    F=ИНН_Получ
FIELD GROUND     F=Цель_плат1  ETXT=" "
FIELD GROUND     F=Цель_плат2  ETXT=" "
FIELD GROUND     F=Сообщение1
FIELD UNNUM      F=УникНомер
FIELD TIME       F=Время_отпр
FIELD COD_UCH    F=КодУчаст  // код участника банка-отправителя
                             // имеет значение при корр.отношениях с банками
END

Нужно учитывать, что файл с именем основной базы конкретного типа документов и расширением DDE (экспортный) появляется только при наличии в директории BASE файла-шаблона конвертации с именем базы и с расширением SHB. При этом пункт меню "Выгрузка документов", соответствующий данному типу документов, становится доступен. Записи в этом файле появляются только при первой печати вновь принятого документа (при изменении статуса документа на "полученный" и повторной печати выгрузка в файл ????.DDE не производится).

При выгрузке документов записи из экспортного файла удаляются.

Выгрузить в промежуточный файл можно любой тип документа (кроме почты свободного формата), для этого достаточно создать файл для приема данных, написать шаблон для конвертации и поместить его в директорию базы данных (BASE). Кроме выгрузки в формат DBF возможна выгрузка в текстовый строчный формат с позиционным расположением полей в строке. Примеры такой конвертации описаны в приложении E.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 27 - Конфигурирование АРМ "Банк" для конвертации в SBRF3

Шаг 27 - Конфигурирование АРМ "Банк" для конвертации в SBRF3

В версии 4.04 введена возможность конвертации принятых документов в формат SBRF3 с ключеванием. Для функционирования этого типа конвертации необходимо дополнительное конфигурирование рабочего места "Банк". Для ключевания формата SBRF3 требуется файл ключей, сгенерированный для рабочего места "Банк", и присвоен индекс (в примере 000DDD). Для конфигурирования войдите в меню и в пункте "Подготовка -> <Реквизиты АРМ" заполните соответствующие данные (см. Руководство оператора).

В качестве примера приведен шаблон конвертации в формат SBRF3 при выгрузке документов в ОД банка. При типе отправки <Расчет.сист.СБ> документы при наличии файла-шаблона WORK.TKC дополнительно выгружаются в формате SBRF3 для загрузки в программу клиринговых расчетов.

ТИП:  DDF_TO_SBRF
ИСТ:  WORK.dde
РЕЗ:  D:\EXPDOC\EWRK0000.DDD
LEN:  1024

FIELD Дата                 UM=0B1 TP=%DDMMGG
FIELD КодУчаст             UM=0B1 TP=0099990000  // константа для АРМ Банк
FIELD N_платежки           UM=0B1 TP=%06lu

FIELD N_платежки           UM=DT  TP=001  // тип документа

FIELD КодУчаст             UM=PA  TP=%s LEN=10
FIELD КодБанкаПол          UM=RC  TP=%s

FIELD Сумма                UM=AM  TR=2 LEN=17
FIELD Фирма                UM=CU  TP=RUR
FIELD ДатаПлат             UM=VD  TP=%DDMMGG
FIELD Трасса               UM=MT  TP=%03d

FIELD Фирма                UM=PN  LEN=160
FIELD ИНН_Отпр             UM=SI
FIELD Счет                 UM=SA

FIELD Р/счет               UM=SK
FIELD Плательщик           UM=SB  LEN=140
FIELD КодБанкаПл           UM=SN  TP=%09lu

FIELD Получатель2          UM=RN
FIELD ИНН_Получ            UM=RI
FIELD Р/сч_получ           UM=RA
FIELD Цель_плат1           UM=PP  LEN=210
FIELD Цель_плат2           UM=PP
FIELD Сообщение1           UM=PP

FIELD Дата                 UM=LD TR=4 LEN=6

FIELD Отправка             UM=SC TR=3 LEN=2
FIELD Получатель1          UM=BN LEN=140
FIELD БанкКорр             UM=BN PTXT=" ("  ETXT=")"
FIELD Код_банка            UM=BC TP=%09lu
FIELD Счет_банка           UM=BK
END


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 28 - Описание общих принципов использования шаблонов для конвертации данных в системе "Клиент-Сбербанк"

Шаг 28 - Описание общих принципов использования шаблонов для конвертации данных в системе "Клиент-Сбербанк"

В системе "Клиент-Сбербанк" имеется встроенный конвертор данных из структуры базы данных, принятой в системе, в формат DBF или строчный и обратно. Это необходимо для связи с ОД банка или другой бухгалтерской системой у клиента.

Под строчным форматом понимается текстовый файл, в котором каждая строка соответствует записи базы данных, при этом данные, соответствующие полям записи, расположены в строке позиционно. Например, сумма платежа находится в строке с позиции 5 по позицию 25.

Идентификатором системы хранения данных АРМ "Клиент-Сбербанк" являются символы в расширении имени файла DDF.

Реализованы следующие типы конвертации:

DBF_TO_DDF  - из DBF в DDF
STR_TO_DDF  - из STR в DDF
DDF_TO_DBF  - из DDF в DBF
DDF_TO_STR  - из DDF в STR
DDF_TO_SBRF - из DDF в SBRF3

Формат первых трех строк файла шаблона конвертации:

 ТИП: DBF_TO_DDF
 ИСТ: F:\path\YYYYYYYY.DBF
 РЕЗ: XXXXXXXX.DDF
      Для типов STR_TO_DDF и DDF_TO_STR должна быть строка:
 LEN: 550  // где 550 - длина строки для конвертации

 Где: ИСТ: D:\YYYYYYYY.DBF - файл источник информации формата DBF
 ( на момент анализа шаблона программой должен существовать )

 РЕЗ:XXXXXXXX.DDF - файл базы данных программы - получатель
 информации ( при отсутствии создается с параметрами, указан-
 ными в файле KL_BANK.OBD )

Далее должна идти пустая строка или строка с надписью FIELDS.

Формат последующих строк файла - шаблона:

FIELD <наим.поля в файле XXXXXXXX.DDF> F=<наим.поля в файле YYYYYYYY.DBF>

Примечание: В строке допускается указание значения, вводимого при конвертации в поле файла XXXXXXXX.DDF в случае, если соответствующему полю файла YYYYYYYY.DBF не присвоено значения (т.н. ввод "значения по умолчанию"). Для осуществления этого действия необходимо в конце данной строки указать UM=<значение по умолчанию>. Формат последней строки файла конвертации:

END

Файл базы данных системы может быть криптографированным на уникальном ключе. В этом случае данные правильно видит только сама программа и внешним конвертором (программа CONVERT.EXE) пользоваться нельзя. Для определения криптованности того или иного файла базы смотрите файл с описанием полей FIELDS.OBT, в котором стоит признак CRIPT.

В качестве примера приведен файл шаблона VIBOR.SHB, определяющего параметры конвертации данных о движении средств на счетах клиентов из файла IVIBOR.DBF в файл внутренней базы данных VIBOR.DDF.

ТИП:  DBF_TO_DDF
РЕЗ:  VIBOR.DDF
ИСТ:  G:\NEWKLBNK\LASTCONV\DBF\IVIBOR.DBF

FIELD N_платежки   F=NDOC
FIELD Дата         F=DATADOC
FIELD Номер_счета  F=NSCHET
FIELD Сумма        F=SUMMA
FIELD Банк         F=PBANK
FIELD Отправитель  F=P_NAME
FIELD СчетОтправ   F=PSCHET
FIELD КодБанка     F=PMFO
FIELD Назначение   F=GROUND LEN=70
FIELD Назначение2  F=GROUND POS=70 LEN=70
FIELD Назначение3  F=GROUND POS=140
FIELD КодВалюты    F=CDVAL
FIELD КодОперации  F=OPER
FIELD ИНН          F=P_INN
END

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

Пример шаблона для импорта данных платежных поручений в АРМ "Клиент" из внешней бухгалтерской системы.

ТИП:  DBF_TO_DDF
ИСТ:  D:\PATH...\WORK.DBF
РЕЗ:  WORK.DDF

FIELD N_платежки              F=NDOC
FIELD Дата                    F=DT
FIELD ДатаПлат                F=DATEPAY
FIELD Сумма                   F=SUMMA
FIELD Код_банка               F=MFO
FIELD Р/счет                  F=ACCPAYER
FIELD Счет_банка              F=ACCBANK
FIELD СубСчетБанк             F=SUBACC
FIELD Р/сч_получ              F=ACCREC
FIELD Получатель2             F=RECEIVER
FIELD Цель_плат1              F=GROUND  LEN=70
FIELD Цель_плат2              F=GROUND  POS=70  LEN=70
FIELD Сообщение1              F=GROUND  POS=140 LEN=70
FIELD Трасса                  F=ORDER
FIELD Отправка                F=POST
FIELD ИНН_Получ               F=INN
END

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

Зарезервированные служебные буквосочетания:

  • POS= - начальная позиция в поле источнике ( STR_TO_DDF, DBF_TO_DDF ) позиция в результате ( DDF_TO_STR )
  • LEN= - указана длина фрагмента строки
  • UM= - далее лежит значение, присваемое результату при отсутствии поля источника
  • TR= - цифровой символ:
    • 1 - преобразование строки суммы в копейках в число например 0000000030729 -> 307.29
    • 2 - преобразование суммы в строку с числом в копейках с заполнением лидирующими нулями 123409.78 -> 00000012340978 - длина определена длиной поля результата
    • 3 - преобразование типа отправки (для формата SBRF3) - 10 (почтой) -> "11" 20 (телеграфом) -> "12" 30 (расч.сист.СБ РФ) -> "13" 40 (электронно) -> "11" 50 (Внутри региона) -> "11"
    • 4 - ввести в поле текущую дату с компьютера // версия 4.16 длина = 6 - DDMMGG, 8 – DDMMYYGG
    • 5 - преобразование суммы в строку с числом в копейках с заполнением лидирующими пробелами -123409.78 -> "-12340978" - длина определена длиной поля результата

    нецифровой символ:
    • П - прижать данные вправо
    • Ц - центрировать данные в поле результата при компоновке символьных данных из нескольких полей в одно
    • наличие символа (отличного от П и Ц) приводит к вставлению пробела при его отсутствии
  • TP= - далее лежит строка для преобразования данных. Она должна соответствовать типу данных поля в базе DDF (см. файл FIELDS.OBT) и пишется для форматного преобразования языка C. Строка не должна превышать 20 символов, исключая кавычки.
    Примеры:
    TP=%d - целое число в строку
    "TP=ИНН %s" - добавление в строку символов (длина строки не более 20 символов)
    TP=%09lu - целое LONG в строку 9 символов с лидирующими нулями
    TP=%GG/MM/DD - специальное преобразование даты
    TP=%DD.MM.YYGG - дата -> 12.03.1999

Для значений по умолчанию и строк типа преобразования данные не должны включать в себя пробелов, либо должны быть обрамлены символом " (кавычки). Символ новой строки описывается как в zзыке C ( \r , \n ).

Ниже приведен шаблон для конвертации данных из АРМ "Банк" в файл EXPORT.DBF для последующего импорта в "Операционный день" банка.

ТИП:  DDF_TO_DBF
ИСТ:  WORK.DDE
РЕЗ:  F:\BANK_NEW\IMPEXP\EXPORT.DBF

FIELD N_PACK     UM=77 //F=N_пачки  // можно взять из поля или подставить
                                    // константу, например = 77
FIELD N_DOCUMENT F=N_платежки
FIELD DATADOC    F=Дата
FIELD DATAPAY    F=ДатаПлат
FIELD ORDER      F=Трасса      TP=%d  // выгрузить число, а не текст
FIELD PAYER      F=Плательщик
FIELD INN_PAYER  F=ИНН_Отпр
FIELD ACC_PAYER  F=Р/счет
FIELD SUM        F=Сумма
FIELD TEL        F=Отправка    TP=%d  // тип отправки в виде числа
FIELD MFORKC     F=Код_РКЦ     TP=%09lu
FIELD MFO        F=Код_банка   TP=%09lu // девять символов с лидирующим 0
FIELD UCH_SB     F=КодБанкаПол    // БИК или код участника клиринговых расч.
FIELD ACC_BANK   F=Счет_банка
FIELD SUBACC     F=СубСчетБанк
FIELD RECEIVER   F=Получатель2
FIELD ACC_REC    F=Р/сч_получ
FIELD INN_REC    F=ИНН_Получ
FIELD GROUND     F=Цель_плат1
FIELD GROUND     F=Цель_плат2   TR=A // данные из поля Цель_плат2 будут
 // добавлены после заполненной части поля GROUND c добавлением пробела
FIELD GROUND     F=Сообщение1  TR=A // третье поле назначения платежа
FIELD BANKKORR   F=БанкКорр
FIELD UNNUM      F=УникНомер
FIELD TIME       F=Время_отпр
FIELD FIRMA      F=Фирма
FIELD SCHFIRMA   F=Счет
END

Примечание: При конвертации файлы DBF должны существовать! Файл формата DBF может быть без записей, но с описателем полей!

Для правильной работы при конвертации программа проверяет наличие полей, описанных в шаблоне. Для уточнения правильности написания нужно пользоваться текстовым описателем полей баз данных системы "Клиент-Сбербанк", поставляемым с каждой версией в файле FIELDS.OBT.

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

Пример шаблона для импорта в базу платежных документов из строчного формата (WORK.IMP).

В примере имя файла указано с знаками вопроса - это значит, что будут обработаны все файлы, попадающие под данную маску поиска файлов.

ТИП:  STR_TO_DDF
РЕЗ:  WORK.DDF
ИСТ:  D:\?????\...\OTCH????.TXT
LEN:  580 - максимальная длина строки

FIELD N_платежки           POS=0 LEN=9
FIELD Дата                 POS=9 LEN=6   // должно быть DDMMGG
                                         // или DDMMGGGG - LEN=8
FIELD ДатаПлат             POS=15 LEN=6
FIELD Сумма                POS=21 LEN=15
FIELD Код_банка            POS=36 LEN=9
FIELD Р/счет               POS=45 LEN=25  // свой
FIELD СубСчетБанк          POS=70 LEN=25 // суб коррсчет филиала
FIELD Р/сч_получ           POS=95 LEN=25
FIELD Получатель2          POS=120 LEN=70
FIELD Цель_плат1           POS=190 LEN=70   // назначение платежа
FIELD Цель_плат2           POS=260 LEN=70
FIELD Сообщение1           POS=330 LEN=70
FIELD Отправка             POS=500 LEN=2     // тип отправки 10,20,30,40
FIELD ИНН_Получ            POS=502 LEN=12
FIELD БанкКорр             POS=514 LEN=60
FIELD Трасса               POS=574 LEN=1      //очередность платежа 1-6
END

Пример шаблона для экспорта из базы платежных документов в строчный формат (WORK.EXP):

ТИП:  DDF_TO_STR
ИСТ:  WORK.DDF
РЕЗ:  F:\PATH..\EXPORT.TXT
LEN:  475 - максимальная длина строки без учета символов \r\n
FIELD N_платежки           POS=0 LEN=9
FIELD Дата                 POS=9 LEN=6   TP=%DDMMGG
FIELD ДатаПлат             POS=15 LEN=6
FIELD Сумма                POS=21 LEN=15   TR=П   // прижать вправо
FIELD Код_банка            POS=36 LEN=9   TP=%09lu // с лидирующим 0
FIELD Р/счет               POS=45 LEN=25 //свой
FIELD СубСчетБанк          POS=70 LEN=25  // счет филиала банка
FIELD Р/сч_получ           POS=95 LEN=25   TR=П
FIELD Получатель2          POS=120 LEN=70
FIELD Цель_плат1           POS=190 LEN=70   // назначение платежа
FIELD Цель_плат2           POS=260 LEN=70
FIELD Сообщение1           POS=330 LEN=70
FIELD Отправка             POS=400 LEN=2    TP=%d  // число
FIELD ИНН_Получ            POS=402 LEN=12
FIELD БанкКорр             POS=414 LEN=60
FIELD Трасса               POS=474 LEN=1    TP=%d  //очередность
END


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 29 - Вопрос первый, на чем это написано

Шаг 29 - Вопрос первый, на чем это написано

Во-первых, любопытство. Во-вторых, косвенно отношение все это имеет к возможности напрямую читать формат файлов. Что же мы видим. Сам клиент написан на Borland C++.

29_1.gif (4314 b)

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

pkunlite.exe CONVERT.EXE
pause

29_2.gif (4986 b)

Вроде как правильно. К чему я это? К тому что формат DDT наводит на мысль о Btrive, но раз программа работает без всякого Btrive и плюс к этому написана на C++ есть подозрение, что формат файла более менее простой и можно самому написать программу чтения. Если у кого есть информация по этому поводу можете поделиться с людьми. Взять саму программу конвертации и pkunlite.exe можно из архива.

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 30 - Пробуем конвертировать в DBF с помощью Convert.exe

Шаг 30 - Пробуем конвертировать в DBF с помощью Convert.exe

Полная документация по этому процессу описана в "Шаг 28 - Описание общих принципов использования шаблонов для конвертации данных в системе "Клиент-Сбербанк"". Но есть первая проблема. Нам нужно создать файл с расширением SHB, текст в нем должет быть в формате ASCII ("Шаг 29 - Что такое ASCII"), а не ANSI ("Шаг 155 - Что такое ANSI"), то есть его нужно делать в MS-DOS, так как русские буквы не совпадают. Для этого можно использовать Volcov Commander например. В проекте в минимальном варианте будет все необходимое. Самый первый вопрос как увидеть или узнать поля в файле. А вы попробуйте его просмотреть (F3).

30_1.gif (7434 b)

Вот они в самом начале. Чтож попробуем написать файл.

30_2.gif (2430 b)

И запустим.

convert.exe vibor.shb

Не сработает.

30_3.gif (1775 b)

Конечно. Но мы возмем KL_BANK.OBD из каталога CLIENT и переименуем его в FIELDS.OBD, поместим в тот же каталок. Теперь ошибка будет связана с тем, что нет DBF файла.

30_4.gif (1536 b)

Создать его можно с помощью утилиты DBU из проекта. Обратите внимание, что нам нужно в DBF сделать поле SUN как числовое. В DDF это поле называется Сумма. Мы ставим в соответствие в шаблоне полей DBF-DDF. Вот теперь вроде все нормально.

30_5.gif (4672 b)

Все кроме файла Vibor.DDF можно взять из шаблона. Ну, уж измените. Давайте посмотрим что в DBF файле. Сделать это можно, например, с помощью FoxPro (читайте ). Или посмотреть в той же утилите DBU. Суммы конвертировались.

30_6.gif (2456 b)

Загрузить проект | Предыдущий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 1 - Почему описывается типовая

Шаг 1 - Почему описывается типовая

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

Следующий Шаг | Оглавление


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 2 - Готовимся к вводу остатков по счету 01.1

Шаг 2 - Готовимся к вводу остатков по счету 01.1

Правила к вводу остатков – задним числом. Подробнее - "Шаг 20 - Ввод остатков". Для того, чтобы ввести остатки нам понадобиться заполнить справочник основных средств.

2_1.gif (7480 b)

Открываем.

2_2.gif (10307 b)

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

2_3.gif (10755 b)

Они должны быть тоже выставлены на начало периода. Подробнее читайте:

  • "Шаг 189 - Изучаем справочник – периодический реквизит"
  • "Шаг 190 - Изучаем константы – Они тоже бывают периодические"
  • "Шаг 191 - Изучаем периодическую константу"
  • "Шаг 290 - Объект работы с периодическими реквизитами"
  • "Шаг 294 - Изучаем периодический реквизит – ПолучитьЗначение"

И самый главный шаг: "Шаг 315 - Осторожно – основные средства и периодические реквизиты".

Теперь можно нажать на кнопку создания. Появится карточка основного средства.

2_4.gif (13121 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 3 - Записываем карточку и смотрим состояние

Шаг 3 - Записываем карточку и смотрим состояние

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

3_1.gif (16885 b)

Когда будут установлены новые значения и какие были старые. Для нового элемента справочника они не заполнены. Убедились, что дата установки правильная и жмем ОК.

3_2.gif (12606 b)

Вы видите новый элемент и видите, что ни какие данные не заполнены, нет стоимости, нет амортизации. Подробнее читайте:

  • "Шаг 274 - Что такое – основные средства"
  • "Шаг 275 - ПБУ 6/01 Общие положения"
  • "Шаг 276 - ПБУ 6/01 Оценка основных средств"
  • "Шаг 277 - ПБУ 6/01 Амортизация основных средств"
  • "Шаг 278 - ПБУ 6/01 Восстановление основных средств"
  • "Шаг 279 - ПБУ 6/01 Выбытие основных средств"
  • "Шаг 280 - ПБУ 6/01 Раскрытие информации в бухгалтерской отчетности"
  • "Шаг 281 - Как организован учет основных средств в 1C"
  • "Шаг 282 - Налоговый кодекс - Статья 258 - Амортизационные группы"
  • "Шаг 285 - Изучаем справочник основные средства"
  • "Шаг 286 - Что происходит при нажатии на кнопку инвентарной карточки?"

Отсутствие информации говорит о том, что нет данных на счетах 01.1 и 02.1. Чтобы эти данные появились Вы должны внести остатки.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 4 - Как внести остатки по 01.1

Шаг 4 - Как внести остатки по 01.1

Можно создать операцию в журнале операций.

4_1.gif (4358 b)

Прочитайте еще раз - "Шаг 20 - Ввод остатков". Для основных средств Дебет – 01.1 кредит 00. Начинаем создавать новую операцию.

4_2.gif (4868 b)

Указываем счет дебета 01.1. После выбора счета нам нужно указать основное средство.

4_3.gif (9145 b)

Мы указываем то, что ввели в справочнике. Далее мы указываем кредит 00 и сумму балансовой стоимости, по которой данное основное средство числится.

4_4.gif (8954 b)

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

4_5.gif (7469 b)

Поменяем щелкнув на кнопку.

4_6.gif (5262 b)

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

4_7.gif (9727 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 5 - Как внести остатки по 02.1

Шаг 5 - Как внести остатки по 02.1

Остатки вводятся также за исключением того, что счет 02.1 является пассивным, и поэтому должен быть в кредите.

5_1.gif (8566 b)

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

5_2.gif (1787 b)

У нас будет формироваться инвентарная карточка ОС, в которой будут формироваться веденные данные.

5_3.gif (4149 b)

После внесения всех остатков нам нужно построить отчет по ОС.

5_4.gif (4688 b)

Указать начало периода.

5_5.gif (5014 b)

И выверить отчет с тем, что есть на начало периода по текущей документации.

5_6.gif (5099 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 6 - Начисляем амортизацию

Шаг 6 - Начисляем амортизацию

Каждый месяц нужно производить начисление амортизации в соответствии с методом указанным в справочнике. Большинство применяют линейный метод, подробнее о методах - "Шаг 283 - Методы начисления амортизации". Начисление амортизации находится в регламентных журналах.

6_1.gif (4785 b)

Создаем новую запись.

6_2.gif (2819 b)

И выбираем начисление амортизации.

6_3.gif (4657 b)

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

6_4.gif (8900 b)

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

6_5.gif (6304 b)

Можно посмотреть проводки операции.

6_6.gif (7225 b)

И убедиться, что начисление проведено.

6_7.gif (8179 b)

Но выверять начисление амортизации тут не удобно. Первые месяцы все равно придется проверять, чтобы убедиться, что начисление прошло правильно. Это связано с первоначальным выставлением реквизитов и сроком полезного действия. Как получается сумма при линейном способе ? Просто сумму балансовой стоимости надо делить на срок полезного действия.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 7 - Выверяем начисленную амортизацию

Шаг 7 - Выверяем начисленную амортизацию

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

7_1.gif (4503 b)

Указываем счет 02.1 и период за месяц начисления.

7_2.gif (4345 b)

И смотрим.

7_3.gif (4995 b)

Мы видим начальное сальдо, конечное сальдо и по каждой единице основных средств сумму начисленной амортизации. Тут нужно сверять счет 01.1 и 02.1, на все что лежит на счете 01.1 должна быть начислена амортизация на счете 02.1 за исключением того оборудования, амортизация на которое может не начисляться. Это знают бухгалтера. Смысл карточки счета проверить, что на каждую единицу на которую нужно амортизация начислена. Отнесение затрат лучше проверить по главной книге.

7_4.gif (3752 b)

Указав тот же период мы увидим распределение затрат по амортизации. Суммы должны быть правильные.

7_5.gif (2239 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 8 - Почему амортизация может не начисляться ?

Шаг 8 - Почему амортизация может не начисляться ?

Первое, что нужно проверить, что это основное средство есть на счете 01.1 и у него есть балансовая стоимость. Для этого нужно сделать анализ счета по субконто.

8_1.gif (5344 b)

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

8_2.gif (3293 b)

И видим, что основное средство есть. Если нет, то либо не внесены остатки, либо нет введения в эксплуатацию.

8_3.gif (4263 b)

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

8_4.gif (1412 b)

Группу ОС.

8_5.gif (1809 b)

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

8_6.gif (1011 b)

Счет затрат.

8_7.gif (1555 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 9 - Покупка ОС на наличные

Шаг 9 - Покупка ОС на наличные

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

9_1.gif (3651 b)

Получение основных средств приводится на счет 08.4. То есть корреспондирующий счет 08.4.

9_2.gif (2950 b)

Дальше нужно указать объект внеоборотных активов. Для каждой покупки нужно создавать отдельный элемент справочника. Это важно. Каждая покупка должна сопровождаться новой записью в объекте внеоборотных активов, я бы посоветовал даже писать номер документа. Итак, выбираем субконто внеоборотных активов:

9_3.gif (6326 b)

В справочнике создаем новую запись:

9_4.gif (5536 b)

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

9_5.gif (7935 b)

Дальше сумму и все остальные параметры, кстати НДС тоже.

9_6.gif (2474 b)

Там нужно еще сотрудника и всякую калахту заполнить. Но с этим уже справитесь. Если что-то не заполните, то просто документ не проведется. В результате вы должны увидеть новый документ в журнале авансовых отчетов и отчет о проведении:

9_7.gif (10918 b)

В операции документа должна быть сумма без НДС.

9_8.gif (8822 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 10 - Где отразится покупка ОС

Шаг 10 - Где отразится покупка ОС

Во-первых, на карточке счета 08.4 на этот период. В прошлом шаге мы провели в первых числах января. Строим карточку счета за январь.

10_1.gif (7469 b)

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

10_2.gif (1967 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 11 - Покупка ОС через счет-фактуру

Шаг 11 - Покупка ОС через счет-фактуру

Второй вариант покупки через счет-фактуру. Полученную счет-фактуру нужно ввести.

11_1.gif (8402 b)

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

11_2.gif (3299 b)

Будем заполнять поступление ОС.

11_3.gif (11827 b)

Тут мы и столкнемся с объектом внеоборотных активов. Обратите внимание, что я ставлю галочку, что счет фактура пока не предъявлена.

11_4.gif (11827 b)

Создаем и выбираем новый объект.

11_5.gif (2576 b)

Дальше цена, ндс и все такое. Документ должен провестись, что будет отражено в общем журнале.

11_6.gif (7477 b)

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

11_7.gif (9401 b)

И провести ее.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 12 - Смотрим карточку счета

Шаг 12 - Смотрим карточку счета

Если теперь посмотреть карточку счета, то мы увидим, что есть второе поступление.

12_1.gif (9581 b)

А в главной увидим, что есть обороты по счету 60 (поставщики подрядчики).

12_2.gif (6481 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 13 - Подготовка к продаже

Шаг 13 - Подготовка к продаже

Прежде чем продавать ОС нужно заполнить документ передачи ОС:

13_1.gif (4115 b)

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

13_2.gif (8489 b)

На вкладке "передача" указать причину, покупателя и стоимость продажи. Стоимость продажи совсем не обязана быть той же самой, что и балансовая стоимость.

13_3.gif (5314 b)

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

13_4.gif (20661 b)

Будет произведено начисление амортизации за этот месяц. Это связано с тем, что в начисление амортизации принтер уже не попадет. Дальше будет списана амортизация и рассчитана остаточная стоимость. Остаточная стоимость будет помещена на расходы, а продажная стоимость на доходы. Обратите внимание, что нет проводок по НДС. Они появятся при создании счет фактуры.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 14 - Продаем ОС

Шаг 14 - Продаем ОС

После подготовки к продаже можем продавать. Выписываем счет фактуру:

14_1.gif (2858 b)

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

14_2.gif (10501 b)

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

14_3.gif (10544 b)

Выбираем наш документ. Счет фактура будет заполнена автоматически на основе данного документа.

14_4.gif (10153 b)

Будет сформирована только одна проводка по начислению НДС.

14_5.gif (9589 b)

Вот мы и продали основное средство.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 15 - Перемещение ОС

Шаг 15 - Перемещение ОС

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

15_1.gif (3697 b)

В первую очередь Вы должны выбрать основное средство.

15_2.gif (8666 b)

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

15_3.gif (2540 b)

Проводим документ. В результате будет изменен счет затрат. Это можно увидеть в справочнике основных средств по данному наименованию.

15_4.gif (7770 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 16 - Создаем склады

Шаг 16 - Создаем склады

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

16_1.gif (4350 b)

Откроется список складов. Добавим новый.

16_2.gif (6185 b)

Операция очень нужная при работе с материалами в не зависимости от их принадлежности к субсчетам всегда используется понятие склада. Это и правильно, на одном складе физически может храниться и ГСМ и спецодежда. Хотя в реальной жизни один склад это субсчет. Но тут проблема известная и освещена в шагах:

  • "Шаг 374 - Субсчета и типовая (или шестая ошибка)"
  • "Шаг 376 - А если очень хочется субсчет (на примере акта выполнения услуг)"


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 17 - Приходуем товар

Шаг 17 - Приходуем товар

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

  • "Шаг 13 - Подготовка к продаже"
  • "Шаг 14 - Продаем ОС"

Идея такая же, Вы производите приход, а потом при получении проводите счет фактуру. Итак, нам нужен журнал учет Материалов.

17_1.gif (7066 b)

Создаем новый документ поступление материалов.

17_2.gif (9354 b)

Выбираем наш склад.

17_3.gif (7855 b)

А теперь нам нужно создать новый материал.

17_4.gif (3173 b)

Откроется справочник материалов. Вопрос философский – быть или не быть. А точнее создавать или нет новый элемент в справочнике. Отчет один – если наименование и цена совпадают с элементом, который есть в справочнике, то создавать его не надо. При создании нужно указать субсчет хранения и покупную цену. Указание покупной цены обязательно !!! Вы увидите в дальнейшем, что при продаже производится списание на затраты именно покупной цены, а на реализацию, то есть в доход идет цена продажи.

17_5.gif (6006 b)

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

17_6.gif (3548 b)

Если есть еще, то дальше заполняем и проводим. Видим, что с поставщика (счет 60) списана сумма и выделен НДС.

17_7.gif (11262 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 18 - Отпускаем материал

Шаг 18 - Отпускаем материал

Если материал есть на складе, то его можно продать. Поступает материал путем прихода, мы это смотрели в прошлом шаге. Материал мог быть у Вас на остатках. В таком случае его нужно внести как ввод остатков (подробнее можно почитать "Шаг 4 - Как внести остатки по 01.1"). Отпуск материалов это еще не продажа. Вы можете отпустить их, а счет фактуру выставить намного позднее. Нам нужен журнал учет материалов.

18_1.gif (6330 b)

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

18_2.gif (8933 b)

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

18_3.gif (9296 b)

Вывод, что именно этого материала нет на этом складе. Либо вообще нет, либо нет данного количества. Мы с Вами в шаге "Шаг 17 - Приходуем товар". Поместили товар на склад – Новое место хранения. Вот отсюда его и возьмем. В результате документ проводится.

18_4.gif (19753 b)

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

18_5.gif (11095 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 19 - А как на отпущенный материал выписать счет фактуру

Шаг 19 - А как на отпущенный материал выписать счет фактуру

Если акт передачи заполнен, то совсем просто. Идем в журнал "Cчет-фактуры выданные":

19_1.gif (4635 b)

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

19_2.gif (8997 b)

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

19_3.gif (3748 b)

Появится список документов. Выбираем наш.

19_4.gif (1108 b)

Счет фактура будет заполнена на основе этого документа. Можно смело его проводить и смотреть операции.

19_5.gif (9886 b)

Производится только проводка по НДС.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 20 - Книга покупок – Книга продаж

Шаг 20 - Книга покупок – Книга продаж

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

20_1.gif (2902 b)

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

20_2.gif (6195 b)

А дальше основание. Появится список всех счет фактур выданных этому покупателю.

20_3.gif (9750 b)

Выбираем нашу. Все заполняется автоматически.

20_4.gif (12428 b)

И проводим.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 21 - Как получить печатную книгу продаж или покупок

Шаг 21 - Как получить печатную книгу продаж или покупок

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

21_1.gif (2477 b)

Появляется окно, в нем необходимо выбрать период.

21_2.gif (8581 b)

И нажимаем "сформировать". Вот она родная.

21_3.gif (11505 b)

В соответствии с правилами ведения можно ее формировать на компьютере, а каждый месяц распечатывать, прошивать и скреплять печатью.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 22 - Учитываем услуги сторонних организаций

Шаг 22 - Учитываем услуги сторонних организаций

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

22_1.gif (6648 b)

В нем можно создать документ - услуги сторонней организации.

22_2.gif (9422 b)

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

22_3.gif (17074 b)

После этого Вы должны указать субконто для счета и сумму.

22_4.gif (3049 b)

Дальше технология таже, что и у материалов. Вы создаете входящую счет фактуру (подробнее "Шаг 19 - А как на отпущенный материал выписать счет фактуру"), а на основе нее производите запись в книгу покупок (подробнее "Шаг 20 - Книга покупок – Книга продаж").


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 23 - Оказываем услуги

Шаг 23 - Оказываем услуги

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

23_1.gif (5270 b)

В этом журнале начинаем создавать новый документ.

23_2.gif (8232 b)

Дальше обычное заполнение.

23_3.gif (13222 b)

И опять все как с материалами, Вы создаете счет фактуру (подробнее "Шаг 19 - А как на отпущенный материал выписать счет фактуру"), а на основе нее производите запись в книгу продаж (подробнее "Шаг 20 - Книга покупок – Книга продаж").


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 24 - Касса (50)

Шаг 24 - Касса (50)

В работе с кассой участвую только три документа – приходный ордер, расходный ордер выплата зарплаты из кассы. Приходный ордер обеспечивает дебет кассы, расходный ордер и выплата зарплаты из кассы - кредит. Есть тут одна особенность, если вы выдаете зарплату из кассы, то одновременно выписывается расходный ордер на всю сумму. Но этот расходный ордер не проводиться, а только заполняется. Ежедневно по кассе строиться кассовая книга. Обратите внимание, что в кассовую книгу попадут только приходные и расходные ордера. Вот для чего на сумму выданной зарплаты выписывается расходный ордер который не проводиться. Его проведение приведет к несоответствию данным по документам и счета о чем Вам тут же сообщит программа. Все эти три документа находятся в меню документ.

24_1.gif (9415 b)

Сама кассовая книга в меню отчеты.

24_2.gif (6857 b)


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 25 - Выписываем приходный ордер

Шаг 25 - Выписываем приходный ордер

Приходным ордером оформляется поступление денег в кассу. То есть дебет 50 счета.

25_1.gif (13294 b)

Первым заполняется счет. В соответствии с выбранным счетом Вам будет предложено заполнение субконто (аналитические признаки). В данном случае нужно указать предприятие, далее число, дата - все тривиально. Обязательно заполнение поля "Принято ОТ". Именно эта фамилия будет использована в кассовой книге. Вроде все совсем просто, ах нет. Есть такой счет 76.5. Если посмотреть типовую конфигурацию, то там есть только контрагенты.

25_2.gif (2504 b)

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

25_3.gif (2902 b)

В результате мы сможем проводить операции с использованием субконто сотрудники.

25_4.gif (8335 b)

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


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 26 - Выписываем расходный ордер

Шаг 26 - Выписываем расходный ордер

Все похоже на приходный ордер.

26_1.gif (10985 b)

А тут счет зачем выбирать? Могут быть разные операции, на зарплату, в подотчет и так далее. Расходный ордер может быть и на другую организацию кстати. Обратите внимание на галочку формировать проводки. Именно эту галочку надо снимать, если Вы выдавали ранее зарплату по документу выдача зарплаты. Документ будет проведен, но проводки не сформированы.


www.ПЕРВЫЕ ШАГИ.ru :: Шаг 27 - Продажа или покупка – проблемы

Шаг 27 - Продажа или покупка – проблемы

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

  • оплата
  • счет фактура
  • акт прихода

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

PS. Вывод очень простой, конфигурация предлагаемая 1С не так уж и плоха. И нет проблем с ведением учета на ней. Уж поверьте в 1С работают далеко не глупые люди, и скорее всего более компетентные, чем обычные бухгалтера. Достаточно просто задаться вопросом, почему они сделали так, потом почитать по данному вопросу литературу и ответ напрашивается сам собой. В данном случае и проблемы нет, если знать, что можно два раза заносить счет фактуру в книге покупок и продаж.

Предыдущий Шаг | Оглавление


1С Бухгалтерия | Народная бухгалтерия | Клиент-Сбербанк | Типовая конфигурация

Типовая конфигурация

Smart Card
Development Kit

Комплект разработчика приложений работающих со смарт картами. Лучшая безопасность и неограниченные возможности для ваших программ. Подробнее...
Шаг 1 - Почему описывается типовая. (19.12.2002 - 1.9 Kb)
Шаг 2 - Готовимся к вводу остатков по счету 01.1. (19.12.2002 - 1.9 Kb)
Шаг 3 - Записываем карточку и смотрим состояние. (19.12.2002 - 1.9 Kb)
Шаг 4 - Как внести остатки по 01.1. (19.12.2002 - 1.9 Kb)
Шаг 5 - Как внести остатки по 02.1. (19.12.2002 - 1.9 Kb)
Шаг 6 - Начисляем амортизацию. (19.12.2002 - 1.9 Kb)
Шаг 7 - Выверяем начисленную амортизацию. (19.12.2002 - 1.9 Kb)
Шаг 8 - Почему амортизация может не начисляться ? (19.12.2002 - 1.9 Kb)
Шаг 9 - Покупка ОС на наличные. (19.12.2002 - 1.9 Kb)
Шаг 10 - Где отразится покупка ОС. (19.12.2002 - 1.9 Kb)
Шаг 11 - Покупка ОС через счет фактуру. (19.12.2002 - 1.9 Kb)
Шаг 12 - Смотрим карточку счета. (19.12.2002 - 1.9 Kb)
Шаг 13 - Подготовка к продаже. (19.12.2002 - 1.9 Kb)
Шаг 14 - Продаем ОС. (19.12.2002 - 1.9 Kb)
Шаг 15 - Перемещение ОС. (19.12.2002 - 1.9 Kb)
Шаг 16 - Создаем склады. (19.12.2002 - 1.9 Kb)
Шаг 17 - Приходуем товар. (19.12.2002 - 1.9 Kb)
Шаг 18 - Отпускаем материал. (19.12.2002 - 1.9 Kb)
Шаг 19 - А как на отпущенный материал выписать счет фактуру. (19.12.2002 - 1.9 Kb)
Шаг 20 - Книга покупок - Книга продаж. (19.12.2002 - 1.9 Kb)
Шаг 21 - Как получить печатную книгу продаж или покупок. (19.12.2002 - 1.9 Kb)
Шаг 22 - Учитываем услуги сторонних организаций. (09.01.2003 - 1.9 Kb)
Шаг 23 - Оказываем услуги. (12.01.2003 - 1.0 Kb)
Шаг 24 - Касса (50). (12.02.2003 - 1.9 Kb)
Шаг 25 - Выписываем приходный ордер. (12.02.2003 - 1.9 Kb)
Шаг 26 - Выписываем расходный ордер. (12.02.2003 - 1.9 Kb)
Шаг 27 - Продажа или покупка - проблемы. (26.02.2003 - 1.9 Kb)
Ведущий раздела Каев Артем. Web дизайнер: Кузин Андрей.