Обратился ко мне старый клиент и говорит - беда с нумерацией счетов!
Менеджеры, кто как хотел - так и изменял номера документов. с префиксом, без, писали даже б/н. Но тут пришел новый бухгалтер и сказал - нужно с 1 октября запустить авто нумерацию с номера 00010000, но старые счета не трогать!
Попросили - сделали:
т.к. Старые трогать нельзя - простое восстановление нумерации отпадает
Первое решение, которое пришло в голову, сделать выборку по моментувремени создания счета - обратная сортировка - получить первый - и к полученному номеру документа +1
Но оказалось, что бывает такое: менеджеры создают счета сегодня, но ставят дату вчера - и получается только что созданный документ уже не последний пришлось переделать алгоритм.
Только алгоритм решили немного переделать - не получаем дату создания документа, а сортируем по части ГУИДа, которая является началом периода создания документа.
Одной из часто встречающихся причин не оптимальной работы системы является неправильное или несвоевременное выполнение регламентных операций на уровне СУБД. Особенно важно выполнять эти регламентные процедуры в крупных информационных системах, которые работают под значительной нагрузкой и обслуживают одновременно большое количество пользователей. Специфика таких систем в том, что обычных действий, выполняемых СУБД автоматически (на основании настроек) оказывает недостаточно для эффективной работы.
Если в работающей системе наблюдаются какие-либо симптомы проблем с производительностью, следует проверить, что в системе правильно настроены и регулярно выполняются все рекомендуемые регламентные операции на уровне СУБД.
Выполнение регламентных процедур должно быть автоматизировано. Для автоматизации этих операций рекомендуется использовать встроенное средства MS SQL Server: Maintenance Plan. Существуют так же другие способы автоматизации выполнения этих процедур. В настоящей статье для каждой регламентной процедуры дан пример ее настройки при помощи Maintenance Plan для MS SQL Server 2005.
Для MS SQL Server рекомендуется выполнять следующие регламентные операции:
Обновление статистикОчистка процедурного КЭШаДефрагментация индексовРеиндексация таблиц базы данных
Рекомендуется регулярно контролировать своевременность и правильность выполнения данных регламентных процедур.
Обновление статистик
MS SQL Server строит план запроса на основании статистической информации о распределении значений в индексах и таблицах. Статистическая информация собирается на основании части (образца) данных и автоматически обновляется при изменении этих данных. Иногда этого оказывается недостаточно для того, что MS SQL Server стабильно строил наиболее оптимальный план выполнения всех запросов.
В этом случае возможно проявление проблем с производительностью запросов. При этом в планах запросов наблюдаются характерные признаки неоптимальной работы (неоптимальные операции).
Для того, чтобы гарантировать максимально правильную работу оптимизатора MS SQL Server рекомендуется регулярно обновлять статистики базы данных MS SQL.
Для обновления статистик по всем таблицам базы данных необходимо выполнить следующий SQL запрос:
Обновление статистик не приводит к блокировке таблиц, и не будет мешать работе других пользователей. Статистика может обновляться настолько часто, насколько это необходимо. Следует учитывать, что нагрузка на сервер СУБД во время обновления статистик возрастет, что может негативно сказаться на общей производительности системы.
Оптимальная частота обновления статистик зависит от величины и характера нагрузки на систему и определяется экспериментальным путем. Рекомендуется обновлять статистики не реже одного раза в день.
Приведенный выше запрос обновляет статистики для всех таблиц базы данных. В реально работающей системе разные таблицы требуют различной частоты обновления статистик. Путем анализа планов запроса можно установить, какие таблицы больше других нуждаются в частом обновлении статистик, и настроить две (или более) различных регламентных процедуры: для часто обновляемых таблиц и для всех остальных таблиц. Такой подход позволит существенно снизить время обновления статистик и влияние процесса обновления статистики на работу системы в целом.
Запустите MS SQL Server Management Studio и подключитесь к серверу СУБД. Откройте папку Management и создайте новый план обслуживания:
Создайте субплан (Add Sublan) и назовите его «Обновление статистик». Добавьте в него задачу Update Statistics Task из панели задач:
Настройте расписание обновления статистик. Рекомендуется обновлять статистики не реже одного раза в день. При необходимости частота обновления статистик может быть увеличена.
Настройте параметры задачи. Для этого следует два раза кликнуть на задачу в правом нижнем углу окна. В появившейся форме укажите имя базу данных (или несколько баз данных) для которых будет выполняться обновление статистик. Кроме этого вы можете указать для каких таблиц обновлять статистики (если точно неизвестно, какие таблицы требуется указать, то устанавливайте значение All).
Обновление статистик необходимо проводить с включенной опцией Full Scan.
Сохраните созданный план. При наступлении указанного в расписании срока обновление статистик будет запущено автоматически.
Очистка процедурного КЭШа
Оптимизатор MS SQL Server кэширует планы запросов для их повторного выполнения. Это делается для того, чтобы экономить время, затрачиваемое на компиляцию запроса в том случае, если такой же запрос уже выполнялся и его план известен.
Возможна ситуация, при которой MS SQL Server, ориентируясь на устаревшую статистическую информацию, построит неоптимальный план запроса. Этот план будет сохранен в процедурном КЭШе и использован при повторном вызове такого же запроса. Если Вы обновили статистику, но не очистили процедурный кэш, то SQL Server может выбрать старый (неоптимальный) план запроса из КЭШа вместо того, чтобы построить новый (более оптимальный) план.
Таким образом, рекомендуется всегда после обновления статистик очищать содержимое процедурного КЭШа.
Для очистки процедурного КЭШа MS SQL Server необходимо выполнить следующий SQL запрос:
Этот запрос следует выполнять непосредственно после обновления статистики. Соответственно, частота его выполнения должна совпадать с частотой обновления статистики.
Настройка очистки процедурного КЭШа
для (MS SQL 2005)
Поскольку процедурный КЭШ необходимо очищать при каждом обновлении статистики, данную операцию рекомендуется добавить в уже созданный субплан «Обновление статистик». Для этого следует открыть субплан и добавить в его схему задачу Execute T-SQL Statement Task. Затем следует соединить задачу Update Statistics Task стрелочкой с новой задачей.
В тексте созданной задачи Execute T-SQL Statement Task следует указать запрос «DBCC FREEPROCCACHE»:
Дефрагментация индексов
При интенсивной работе с таблицами базы данных возникает эффект фрагментации индексов, который может привести к снижению эффективности работы запросов.
Рекомендуется регулярное выполнение дефрагментации индексов. Для дефрагментации всех индексов всех таблиц базы данных необходимо использовать следующий SQL запрос (предварительно подставив имя базы):
Дефрагментация индексов не блокирует таблицы, и не будет мешать работе других пользователей, однако создает дополнительную нагрузку на SQL Server. Оптимальная частота выполнения данной регламентной процедуры должна подбираться в соответствии с нагрузкой на систему и эффектом, получаемым от дефрагментации. Рекомендуется выполнять дефрагментацию индексов не реже одного раза в день.
Возможно выполнение дефрагментации для одной или нескольких таблиц, а не для всех таблиц базы данных.
Настройка дефрагментации индексов (MS SQL 2005)
В ранее созданном плане обслуживания создайте новый субплан с именем «Дефрагментация индексов». Добавьте в него задачу Reorganize Index Task:
Задайте расписание выполнения для задачи дефрагментации индексов. Рекомендуется выполнять задачу не реже одного раза в неделю, а при высокой изменчивости данных в базе еще чаще – до одного раза в день.
Настройте задачу, указав базу данных (или несколько баз данных) и выбрав необходимые таблицы. Если точно неизвестно, какие таблицы следует указать, то устанавливайте значение All.
Реиндексация таблиц включает полное перестроение индексов таблиц базы данных, что приводит к существенной оптимизации их работы. Рекомендуется выполнять регулярную переиндексацию таблиц базы данных. Для реиндексации всех таблиц базы данных необходимо выполнить следующий SQL запрос:
Реиндексация таблиц блокирует их на все время своей работы, что может существенно сказаться на работе пользователей. В связи с этим реиндексацию рекомендуется выполнять во время минимальной загрузки системы.
После выполнения реиндексации нет необходимости делать дефрагментацию индексов.
В ранее созданном плане обслуживания создайте новый субплан с именем «Дефрагментация индексов». Добавьте в него задачу Rebuild Index Task:
Задайте расписание выполнения для задачи реиндексирования таблиц. Рекомендуется выполнять задачу во время минимальной нагрузки на систему, не реже одного раза в неделю.
Настройте задачу, указав базу данных (или несколько баз данных) и выбрав необходимые таблицы. Если точно неизвестно, какие таблицы следует указать, то устанавливайте значение All.
Реиндексация таблиц базы данных
Необходимо осуществлять регулярный контроль выполнения регламентных процедур на уровне СУБД. Ниже приведен пример контроля выполнения плана обслуживания для MS SQL Server 2005.
Откройте созданный вами план обслуживания и выберите из контекстного меню пункт «View History»:
Откроется окно с протоколом выполнения всех заданных регламентных процедур.
Успешно выполненные задачи и задачи, выполненные с ошибками, будут помечены соответствующими иконками. Для задач, выполненных с ошибками, доступна подробная информация об ошибке.
Инструкция создания одностороннего обмена данными между конфигурациями "Источник" и "Приемник" с нуля:
1 Скачиваем последнюю версию конфигурации "Конвертация данных". Сейчас на сайте ИТС перестали почему-то публиковать полные дистрибутивы, поэтому находим где-нибудь изначальный релиз и накатываем обновления с сайта.
2 В процессе установки обновлений у вас в папке с шаблонами конфигураций (смотрите её расположение в настройках окна запуска 1С) появится папка Conversion с вложенными папками версий конвертации данных. Заходите в последнюю версию на которую обновились и берите оттуда следующие файлы:
MD80Exp.epf, MD81Exp.epf, MD82Exp.epf, V8Exchan.epf, V8Exchan81.epf, V8Exchan82.epf.
3 Отдельно обращаю ваше внимание. Для успеха операции крайне важно использовать эти файлы из той версии конфигурации "Конвертация данных" в которой вы создаете правила обмена.
4 Следующий этап: выгрузка метаданных Источника и Приемника в xml файлы. Для этого предназначена обработка MD**Exp.epf. Галки выгружать регистры и прочее снимаете. Используйте нужную в зависимости от платформы. Опять же, повторюсь, - из одного и того же комплекта конвертации данных. Иначе ничего не получится.
5 Теперь открывайте базу "Конвертация данных".
6 Заходите в "Справочники"-"Конфигурации". Добавить новый элемент. В качестве файла загрузки указываете выгруженные метаданные. Выбираете "Загрузить в новую конфигурацию". Таким образом создаете две конфигурации с именами, например, Источник и Приемник.
7 Теперь заходите в "Справочники"->"Конвертации". Добавить новый элемент. Указываете в качестве конфигураций источника и приемника наши созданные конфигурации.
8 Конвертация данных предложит вам создать правила конвертации объектов и выгрузки автоматически. Соглашайтесь. Тут я подробностей писать не буду. Об этом в интернете много уже есть.
9 Теперь выгрузите созданный файл правил обмена на диск.
10 И, наконец, крайне важно для выгрузки и загрузки данных по созданным нами правилам обмена использовать не встроенный универсальный обмен в формате XML из самих конфигураций, а использовать наши V8Exchan**.epf, упомянутые выше.
Итак, главное правило: MD**Exp.epf и V8Exchan**.epf должны быть из одного комплекта, прилагающегося к версии Конвертация данных. Причем той же версии, в которой создавались правила обмена. И никаких встроенных обработок для универсального обмена в формате XML, только V8Exchan**.epf.
Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально.
Примерами таких веб-сервисов можно назвать:
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервис Центробанка, для получения ежедневных данных.
http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервис Яндекса проверки правописания.
https://www.flightstats.com/developers/bin/view/Web+Services/WSDL ряд веб сервисов авиастатистики, для мониторинга полетов, сведений о погоде, и.т.п.
WSDL (Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. (спецификация http://www.w3.org/TR/wsdl).
SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределенной вычислительной среде. SOAP используется для обмена произвольными сообщениями в формате XML и удалённого вызова процедур (RPC). (спецификация http://www.w3.org/TR/soap/).
XDTO (XML Data Transfer Objects) — механизм объектного моделирования данных, описываемых с помощью схемы XML (подробнее http://v8.1c.ru/overview/xdto.htm).
Большинство примитивных типов сериализованных объектов разработана компание W3 и их описание находится в пространстве имен «http://www.w3.org/2001/XMLSchema».
 
и так: Задание 1: Установка платформы 1С: Предприятие, установка компоненты IIS сервера, связь Web-Расширения 1С с сервером IIS.
При установке платформы 1С: Предприятие необходимо установить Web-Расширение.
Рис. 1. Выбранные компоненты в момент установки 1С
В меню «Панель управленияВсе элементы панели управленияПрограммы и компоненты» Необходимо выполнить установку дополнительных компонентов Windows «Включение или отключение компонентов Windows» где указать все компоненты IIS (за исключением FTP, для текущей работы он не требуется). После установки рекомендуется перезапустить операционную систему.
Рис. 2. Выбранные компоненты в момент установки IIS
В меню «Панель управленияВсе элементы панели управленияАдминистрирование» запустить консоль «Диспетчер служб IIS», где открыть элемент «Пулы приложений» открыть пул «DefaultAppPool» в контекстном меню выбрать «Дополнительные параметры…» где элемент «Разрешены 32-рязрядные приложения» надо установить «True». Это необходимо для работы Web-Расширения 1С, т.к. оно является 32-битным прилодением.
В той же консоли «Диспетчер служб IIS», выбрать элемент «Default Web Site», выбрать действие «Проверка подлинности» где необходимо включить варианты: «Анонимная проверка подлинности», «Обычная проверка подлинности», «Проверка подлинности Windows».
Теперь возможна публикация Web-Сервисов 1С на сервере IIS. Но для того, чтобы было возможно выполнить эту публикацию, необходимо запустить Конфигуратор 1С: Предприятия от имени пользователя «Администратор».
Задание 2: Создание простой конфигурации 1С.
Считаем, что в базе данных есть информация информации обо всех заказах, содержащая количество и тип номенклатуры, который был заказан, в одном заказе может быть список, содержащий номенклатуру и количество, заказ так же имеет свой номер и дату его создания. Информацию обо всех заказах надо передать через Web-Сервис.
Для описания этого необходимо создать объекты базы данных:
Рис. 3. Структура данных в созданной конфигурации 1С
Справочник «Номенклатура», без дополнительных реквизитов. В реквизитах «по умолчанию» содержится информацию о наименовании и коде номенклатуры.
Документ «Заказ покупателя», который будет содержать табличную часть «Товары», каждая строка которой будет иметь информацию о номенклатуры (элемент типа «СправочникСсылка.Номенклатура») и количестве (элемент «Количество» типа «Число» беззнаковое с 15 знаками до запятой и 3 после).
Далее можно запустить 1С в режиме предприятия и создать несколько документов, заполненных созданными нами же номенклатурами и соответствующим количеством.
Задание 3: Создание и публикация Веб-Сервиса 1С.
В группировке «Общие» конфигурации создать новый элемент типа «XDTO-пакеты», первоначально для передачи номенклатуры. Его можно назвать, например «NomenclatureXDTO». URL пространство имен, в соответствии со спецификацией WSDL необходимо назначить в виде URL адреса спецификации данного пакета, например
«company.com/1C/Nomenclature». В этом пакете необходимо создать тип объекта, например «Nomenclature», в котором есть реквизиты «Code» и «Name», с соответствующим типом «string (http://www.w3.org/2001/XMLSchema)».
Теперь надо создать второй XDTO пакет, который будет содержать информацию о заказах покупателей, его можно назвать «ClientOrderXDTO» в пространсте имен «company.com/1C/ClientOrder». В первую очередь необходимо подключить директиву импорта «company.com/1C/Nomenclature», для того, чтобы можно было использовать созданный нами пакет сериализации номенклатуры. Это необходимо для передачи номенклатуры, содержащейся в табличной части документа «Заказы покупателей».
Теперь надо создать тип объекта «ClientOrderRow», содержащий одну строку табличной части. Этот тип будет состоять из совокупности реквизитов «Nomenclature» и «Count», соответственно для номенклатуры необходимо указать тип объекта «Nomenclature (http://company.com/1C/Nomenclature)», а для количества, «double (http://www.w3.org/2001/XMLSchema)».
Тип объекта, содержащий сам заказ можно назвать «ClientOrder» должен содержать номер заказа, дату создания и массив элементов из табличной части заказа. «Number» типа строка, «Date» типа «dateTime (http://www.w3.org/2001/XMLSchema)» и «Products» типа «ClientOrderRow (http://company.com/1C/ClientOrder)», при этом необходимо указать, что минимальное количество «0», а максимальное количество «-1», это говорит о том, что этот объект будет массивом.
Но, поскольку необходимо возвращить список заказов, то необходимо создать тип объекта, содержащий этот массив, потому надо создать еще один элемент, называемый «ArrayOfClientOrders», у которого будет всего один реквизит, называемый «ClientOrder» типа «ClientOrder (http://company.com/1C/ClientOrder)».
Рис 4. Структуры XDTO пакетов в 1С
На этом создание описания передаваемых значений можно считать оконченным. Необходимо описать сам веб сервис и его методы.
В группировке «Общие» конфигурации надо создать объект, Web-Сервиса. Его можно назвать «Service». Во вкладке «Прочее» надо указать пространство имен, которому принадлежит веб-сервис, например «company.com/1C», а так же список XDTO пакетов, содержащий только что созданные пакеты «company.com/1C/Nomenclature, company.com/1C/ClientOrder». Во вкладке «Операции» создать метод «GetClientOrders», который будет возвращать значения «ArrayOfClientOrders (http://company.com/1C/ClientOrder )», при этом установить возможность возвращать пустые значения и нажать на поле с лупой, называемое «Имя метода», тем самым в модуле веб-сервиса будет создана функция, который будет вызвана при обращении к данному методу веб-сервиса.
Для того, чтобы корректно описать функцию, получающую из базы данных и возвращающую список заказов покупателей, необходимо знать внутренний язык 1С, потому код этой функции находится в приложении 1. В пояснении нуждается то, что «ФабрикаXDTO», это некоторый менеджер, который выполняет сериализацию объектов, и этот сериализованный объект необходимо возвратить. При этом происходит выборка всех заказов, содержащихся в базе данных, сериализация полей номера, даты, и строк табличной части, при этом номенклатура, нуждается в дополнительной сериализации, и уже упакованный объект вставляется в общую структуру. Собирается массив упакованных объектов, сериализуется в пакет массива. И отправляется клиенту, как результат вызванной функции.
Для публикации веб-сервиса в меню конфигуратора 1С выбрать «АдминистрированиеПубликация на веб-сервере…», после чего указать название публикации веб-сервиса, например «Company», имя сервиса, например «Service» и адрес «service.1cws», а так же указать путь для публикации, например «C:\inetpub\www\root\Company».
После этого WSDL структура Web-Сервиса будет доступна по адресу «localhost/Company/ws/service.1cws?wsdl»
Задание 4: Создание клиента на C# платформы .NET 4.0.
В Visual Studio создать новое консольное приложение C#.
Далее вызвать контекстное меню над элементом проекта «Reference», и выполнить действие «Add service reference…», в открывшемся меню нажать на кнопку «Advanced…», откроется окно, где необходимо нажать на кнопку «Add Web Reference…».
Откроется меню, в которое необходимо вставить ссылку на WSDL описание веб-сервиса.
Рис. 5. Подключение веб-сервиса к проекту на C#
Для созданного в 1С веб-сервиса эта ссылка будет иметь вид «localhost/Company/ws/service.1cws?wsdl», после корректного получения описания веб-сервиса надо указать название пространства имен .NET, из под которого будет доступно обращение к веб-сервису, например «CompanyService», затем нажать на кнопку «Add Reference…», Visual Studio автоматически сгенерирует классы по этому описанию. В проекте достаточно будет вызывать методы сгенерированного класса, при этом сериализация и вызов будут выполнять платформой .NET.
Далее необходимо написать программу, которая будет обращаться к веб сервису, и выводить пользователю полученные данные. Для этого необходимо знать язык C#, код программы представлен в приложении 2. Из этого кода надо пояснить, то, что создание объекта «Service», есть не что иное, как создание менеджера обращения к сервису. От этого имени будут вызывать методы веб-сервиса.
«_1CWebServiceClientConsole» — это общее пространство имени проекта, оно выбирается при создании. Пространство имени веб-сервиса, полученное из WSDL структуры полностью включено в пространство имени проекта, что позволяет вызывать удаленные методы «как свои».
Построение такой архитектуры является прозрачной для программистов, но при этом необходимо понимать в какие моменты и что проходит сериализацию для последующей передачи. Подобная архитектура клиент-серверных приложений на данный момент самая популярная.
Приложение 1: код функции GetClientOrders на языке 1С
Приложение 2: код программы на C# осуществляющий обращение к веб-сервису
Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа!!.....
Именно такое сложное чувство непонимания было поначалу и у меня. В процессе обучения и реального опыта была создана эта шпаргалка, целью которой было "разложить всё по полочкам", чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи объектов.
Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.
В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.
Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).
Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.
Пример выбора обработчиков событий записи объекта:
Бывают задачи, когда потребуется использовать несколько обработчиков для решения одной задачи. Например, надо запросить информацию у пользователя во время записи: «Будем создавать новый документ на основании этой записи?» и, если пользователь ответит утвердительно, то надо создать новый документ с ссылкой на записываемый объект. Причем запись нового документа надо выполнять в транзакции, т.к. если текущая запись по каким то причинам будет отменена, то и уже созданный и записанный документ не должен остаться в базе данных.
Для решения этой задачи потребуется использовать обработчики события модуля формы по двум причинам:
1) Диалог с пользователем возможен только на клиенте, а клиентеские обработчики есть только в модуле формы. Для диалога будем использовать клиентскую процедуру модуля формы ПередЗаписью(), и сохраним ответ пользователя в параметре этой процедуры «ПараметрыЗаписи».
2) А в процедуре ПриЗаписиНаСервере() модуля формы примем этот параметр и в зависимости от него будем создавать документ или нет. Почему именно эта процедура? Ссылка будет получена только после записи, но поскольку нам нужно записывать в транзакции, то нужно использовать процедуры ДО завершения транзакции, но уже имеющие ссылку на записываемый объект. ПередЗаписью() не подходит , так как ещё нет ссылки, а ПослеЗаписи() не подходит, так как транзакция уже завершена. Остаётся ПриЗаписи(), но перед нами встаёт выбор: модуля формы или модуля объекта? Поскольку обработчик события ПриЗаписи() модуля объекта не содержит параметр, содержащий ответ пользователя, а событие ПриЗаписиНаСервере() модуля формы содержит, то ответ очевиден-используем это событие ПриЗаписиНаСервере() модуля формы потому что:
1) Это событие выполняется в транзакции 2) Содержит параметр «ПараметрыЗаписи», в котором уже содержится ответ пользователя, который передался из процедуры ПередЗаписью() 3) Ссылка уже создана и можно создавать новый документ, используя эту ссылку.
Ну и теперь последовательность запуска событий (в том порядке, в каком они перечислены) и небольшие подробности :
Во многих обработчиках есть параметр «Отказ». Там, где этот параметр присутствует означает, что в этом обработчике ещё можно отказаться от записи, присвоив параметру «Отказ» значение Истина, и тогда запись произведена не будет. 1) Модуль формы ПередЗаписью(Отказ, ПараметрыЗаписи)
Выполняется на клиенте!
Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию, предупредить о чём-либо, дать возможность отказаться и т.п.
Второй параметр этого обработчика «ПараметрыЗаписи» имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои.
Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно использовать. Например, при записи регистра сведений, надо сделать запись в другой регистр сведений старое значение ресурса. Можно передать старое значение в эти самые параметры и уже в ПриЗаписиНаСервере сделать запись в другой регистр. 2) Модуль формы ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
3) Модуль объекта ОбработкаПроверкиЗаполнения (Отказ, ПроверяемыеРеквизиты)
Эти два обработчика проверки заполнения реализуются через параметр «ПроверяемыеРеквизиты» типа Массив, содержащий реквизиты, которые надо проверять (т.е. которым установлено свойство проверки заполнения «Выдавать ошибку»)
И если из этого массива убрать реквизит, то проверяться он не будет, если добавить, то будет выполняться проверка заполнения.
Таким образом, можно сказать, что эти два обработчика событий предназначены :
Для включения в проверку заполнения тех реквизитов, у которых в свойствах «ПроверкаЗаполнения» указано «Не проверять». Для этого надо добавить этот реквизит в массив параметр «ПроверяемыеРеквизиты»
Для того, чтобы исключить из автоматической проверки реквизиты, у которых установлено свойство проверки заполнения «Выдавать ошибку» в зависимости от каких-то условий. Для этого надо удалить этот реквизит из массива параметра «ПроверяемыеРеквизиты»
Имеется несколько особенностей, которые необходимо учитывать:
Если у формы из которой записывается объект в свойствах не установлено «ПроверятьЗаполнениеАвтоматически», то тогда эти обработчики проверки заполнения не вызываются и проверки не происходят!
Вызываются только при интерактивной записи! При программной записи не вызываются. Для проверки нужно использовать метод объекта ПроверитьЗаполнение(), который инициирует запуск этих событий.
Для документов, имеющих возможность проведения , эти события проверки заполнения вызываются только при проведении!
Оба эти события выполняются на сервере, отличие в том, что ОбработкаПроверкиЗаполненияНаСервере() это событие модуля формы и, следовательно, есть доступ к данным формы. А ОбработкаПроверкиЗаполнения() - событие модуля объекта. 4) Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки. Есть доступ к данным формы. Есть параметр ТекущийОбъект.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан. Начало транзакции 5) Модуль объекта ПередЗаписью(Отказ)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки.
Для документов в параметры данного обработчика добавляются ещё два параметра:РежимЗаписи, РежимПроведения. Запись 6) Модуль объекта ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Возникает в момент, когда выполняется установка номера нового документа, задачи или бизнес-процесса.
Или ПриУстановкеНовогоКода(СтандартнаяОбработка,Префикс)
Возникает в момент, когда выполняется установка нового кода элемента справочника, узла плана обмена или кода плана видов характеристик.
Эти событии вызываются для объектов у которых указано свойство «Автонумерация» и только для новых объектов.
Если установить параметру СтандартнаяОбработка значение Ложь, то новый номер генерироваться не будет и можно программно задать код объекта в данном обработчике. 7) Модуль объекта ПриЗаписи(Отказ)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.
Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый. 8) Модуль формы ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи. Есть доступ к данным формы. Есть последний шанс отказаться от записи.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Можно обратиться к его свойствам и методам. Завершение транзакции 9) Модуль формы ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Выполняется на сервере.
Можно использовать для того, чтобы визуально что-то отобразить на форме. 10) Модуль формы ПослеЗаписи(ПараметрыЗаписи)
Выполняется на клиенте!
Можно использовать для того, чтобы визуально что-то отобразить на форме или выдать предупреждение пользователю.
Как внести в 1С Зарплата и Кадры 7.7 исправления вставки по страховым взносам?
Сервис - настройки - ставки страховых взносов. Не попадает уплата страховых взносов в персонифицированный учет.
Нужно сделать документ "Расчет по страховым взносам". Меню документы – налоги - расчет по страховым взносам. В поле "Месяц начисления взносов" указывается месяц, за который перечислены страховые взносы. Дата документа определяет месяц, в котором произведено перечисление страховых взносов. При заполнении Персонифицированного учета не заполняются суммы уплаченных взносов.
В меню Документы-Налоги-Расчеты по страховым взносам, заполнить данный документ за каждый расчетный месяц. Как ввести выплаты по Лицензионным договорам? Они не должны облагаться страховыми взносами?
В меню Справочники - Расчет зарплаты - Виды расчетов - Удержание - НДФЛ - убрать Выплаты по лицензионным договорам из облагаемой базы; - Страховые взносы - Налоги - убрать Выплаты по лицензионным договорам из облагаемой базы. Завести Лицензионный договор, он не будет ничем облагаться. Как завести аренду автомобиля с водителем, чтоб аренда авто не попадала под страховые взносы, в работа водителя не попадала только под ФСС?
Необходимо вводить новые начисления и прописывать, что аренда не облагается налогами, а услуга работы облагается всеми налогами, и после расчета налогов в Журнале расчета страховых взносов удалить сумму ФСС. Как ввести б/л по болезни ребенка 3-и года в стационаре?
В меню Документы - Больничный лист - ввести в данном документе Причину нетрудоспособности: Уход за больным ребенком; и в случае по уходу за ребенком: До 7-ми лет в стационаре, но т.к. средний заработок не заполняется автоматически, его нужно заполнить суммой последнего заработка. Нужно изменить данные в Персонифицированном учете по стажу сотрудника, как это сделать?
В меню Справочники – Сотрудники – Сотрудник - Ввод данных - Персонифицировананный учет ПФР (ввод сведений о стаже) - заполнить данные по стажу или изменить уже имеющиеся данные. Как ввести б/л по болезни ребенка 3-и года в стационаре?
В меню Документы - Больничный лист - ввести в данном документе Причину нетрудоспособности: Уход за больным ребенком; и в случае по уходу за ребенком: До 7-ми лет в стационаре, но т.к. средний заработок не заполняется автоматически, его нужно заполнить суммой последнего заработка. Договор ГПХ не обложился ФСС?
Вознаграждение по договору подряда облагается страховыми взносами в ПФР, ФФОМС и ТФОМС и не облагается страховыми взносами в ФСС РФ (п. 2 ч. 3 ст. 9 Закона N 212-ФЗ). Не заполняется средний заработок по больничному листу.
В настройках поставили проводку по умолчанию "Пропорционально расчетной базе". Где прописать проводку по пособию беременным, вставшим на учет в ранние сроки беременности?
Справочник - расчет зарплаты - виды расчетов - единовременные пособия из соцстраха. На вкладке бухгалтерский учет поставить галочку расходы за счет ФСС и прописать проводку Дт 69.01 Кт 70. В табеле учета рабочего времени 3 и 10 мая ставятся как рабочие дни. Ввод праздничных дней проставила 3-00, 10-00.
Необходимо перезаполнить календарь пятидневка за май с галочкой "Учитывать праздники" и заново сформировать табель учета рабочего времени. Где проставить ставку ФСС НС и ПЗ?
Справочники - бухучет зарплаты - дополнительные проводки. Как ввести Справку по инвалидности?
Нужно в Справочнике Сотрудники выбрать сотрудника, получившего справку по инвалидности. Во вкладке Налоговый учет в строке Данные для расчета страховых взносов по кнопке Изменить выбрать документ Справка об установлении инвалидности. В Отпуске до 1,5 лет неверно ввели дату выплаты пособия до 1,5 лет, как можно ее изменить?
Необходимо сделать возврат в период заведения данного документа, исправить данные и перепровести все документы. Как можно указать, что в ЗиК ведется организация по УСН?
Изменить в Настройках организации – УСН - в Константах - Организация применяющая УСН и сделать расчет з/п. Как внешнего совместителя принять на основное место работы?
Можно уволить Совместителя и принять на работу Штатного сотрудника. В ЗиК считаются все страховые взносы, а организация находится на УСН.
В операциях в константах, в константе основной тариф страховых взносов проставить по кнопке история значения организации, применяющие УСН, и указать с какого числа данная константа действует. В декларации по ЕСН нет кнопки выгрузить…
В сервисе - в настройках во вкладке программа и бухучет поставить программу (вместо другой программы в хозрасчетной организации) бухгалтерия 7.7, ред.4.5 и заново открыть декларацию по ЕСН. Как можно просмотреть данные по Журналу з/п только за 2009г.?
В Журнале з/п установить Глубину просмотра архива на начало года. Установка ЕСН в ЗИКе.
Через "Стартовый помощник". В больничном листе не заполняется средний заработок.
В сервисе в настройках на вкладке зарплата и бухучет в поле проводка по умолчанию прописать проводку по умолчанию. Перезаполнить больничный, средний заработок заполнится. Как оформить невыходы сотрудника?
Меню Документы - Прочие отклонения – Невыходы. Компенсация за использование личного автомобиля в пределах норм облагается НДФЛ.
В составе облагаемой базы НДФЛ найти данное начисление и перенести в левый список. Как добавить стандартный вычет на ребенка?
В меню Справочники – Сотрудники – Сотрудник - на вкладке Основное - Ввод данных - Вычеты НДФЛ - стандартный вычет 1000 руб. Как ввести расчет по сотрудницам вставшим на учет в ранние сроки беременности?
Необходимо ввести предопределенный расчет: Меню Справочники - Расчет з/п - Виды расчетов - Единовременные пособия из соцстраха и проставить в нем проводку. Не вводится новый сотрудник в справочнике "Сотрудники".
Надо отжать кнопку "Установка (отключение) вывода списка по группам. Не формируется проводка по пособию по беременным, вставшим на учет в ранние сроки беременности.
В справочнике - расчет зарплаты - виды расчетов по кнопке "Помощник" описать предопределенный расчет вытянуть единовременное пособие из соцстраха, оставить галочку начисление носит разовый характер, пособие за счет ФСС в шаблоне проводки Дт 69.01 "Расходы по страхованию" Кт 70 счета, записать вид расчета. Ввести его документом ввод расчета по сотруднику, выбрать вид начисления пособие по беременным, вставшим на учет в ранние сроки беременности и сделать его расчет. В табеле рабочего времени не появляется сотрудница, находящаяся в отпуске по уходу за ребенком.
При формировании табеля заполнять не только штатными сотрудниками, а проставлять галочку Временно не работают. Сотрудница вышла из отпуска по уходу за ребёнком раньше времени. Что делать?
Изменить сроки в документе "Отпуск по уходу за ребёнком". Нет кнопки "Выгрузить" в отчетности по ЕСН.
Открыть: сервис- настройки-зарплата и бухучет, сменить программу бухучета, вместо"Другая программа бухучета в хозрасчетной организации". Требуется выгрузить план счетов из бухгалтерии.
Сервис обмен данными выгрузка данных в зарплату и кадры, галочками отмечаете, какие счета надо выгрузить и копируете путь. В ЗиК сервис-обмен данными - загрузка данных вставляете путь, 2 галочки режим отладки, запоминать ссылки и нажимаете на кнопку "Загрузить".Была введена надбавка. Дата начала задана, дата окончания нет. Вышел приказ на отмену надбавки с первого августа. Как ее отменить?
Для исправления даты окончания документа "Ввод расчета списку сотрудников" необходимо создавать документ-исправление по кнопке "Исправить". После создания записей-сторно, необходимо оформить (как и предлагает программа) документ "Начисление з/пл" со способом "Переначисление за прошлые периоды" и указать весь период, пока действовал вид расчета, оформленный исправляемым документом. <br>Также можно воспользоваться документом "Временное прекращение действия надбавок (удержаний)". Документ позволяет приостанавливать временно и насовсем начисления и удержания по одному сотруднику.Сотрудник работает с 4 мая, ошиблась и в приказе о приеме на работу поставила с 14 мая. Обнаружила в августе, что зарплата за май рассчитана неверно. В приказе поправила дату приема на работу. Зарплата за май неправильная. В конце августа сотрудник увольняется.
В документе начисление зарплаты указать способ переначисление зарплаты за прошлый период с 1 мая по 31 мая. После этого переначислить налоги и сделать перерасчет. Данные по перерасчету за май отразятся в журнале расчета зарплаты в периоде август. Не формируются проводки по налогам с ФОТ, по оплате труда формируются.
В справочнике- расчет зарплаты-виды расчетов для каждого налога на вкладке бухгалтерский учет поставить точку распределять по счетам и указать проводку ДТ счета пусто, т.е он будет подбираться автоматически или из проводки по умолчанию. Или из справочника сотрудники, или из подразделения, в зависимости от того, где прописаны проводки по начислению зарплаты и КТ счета 69 субсчета соответствующего налога. При заведении сотрудника дата рождения становится 2046 год, а год рождения 1946, как изменить?
В меню Сервис-Параметры-Год начала рабочего столетия изменить на 1945 год. При проведении пособия до 1.5 лет - не проводится. Ругается на некорректную проводку.
В этом случае необходимо в меню Справочники-Расчет зарплаты-Виды расчетов-Пособ.до 1,5 лет и до 3-х лет проставить проводку и перепровести созданный документ. Сотрудник был направлен в командировку на 3 дня с 30.05.09, но вернулся раньше, как изменить данные по командировке, если расчетный период, когда был создан документ, закрыт?
Находясь в расчетном периоде Июня в заведенном документе Оплата по среднему заработку по кнопке Исправить открыть редактирование периода командировки и отредактировать дату По и провести документ. При формировании отчетности по ЕСН и ПФР неверно формируются суммы авансовых платежей, расхождение по данным сотрудника в переходящем отпуске.
Нужно заполнить внешнюю форму отчета и выгрузить в Бухгалтерию. Как можно узнать в какие периоды сотрудник находился в отпуске?
Нужно просмотреть форму Т-2 (личная карточка), раздел 8. Сотрудник заболел во время отпуска. Больничный не проводится. При вводе больничного листа выдается сообщение: "За период уже были введены отклонения, прервать?".
В этом случае, нужно выбрать нет. После этого зайти в документ отпуск по кнопке "Исправить", изменяем дату окончания отпуска, если отпуск будет продлеваться. Как можно завести отпуск по уходу за ребенком до 1,5 лет, если у сотрудницы родилась двойня?
Нужно ввести на каждого ребенка отдельный документ-отклонение Отпуск по уходу за ребенком. Как проставить проводку по ПФР? <br></font>Следует в меню Справочники-Расчет з/п-Виды расчетов-ЕСН и страховые взносы в нужном налоге проставить проводку.
[b]Сотрудник отработал неполный рабочий день, каким образом можно исправить 8 часов работы на фактически отработанное время работника?
Часы работы можно изменить в Табеле рабочего времени, вместо 8 часов проставить фактически отработанное время. Как в программе проставить работу сотрудников по 4-дневной рабочей неделе?
Необходимо в меню Регламенты-Календари создать Сменный календарь по 4 дня, в меню Справочники-Графики работы создать новый график и внести в него Сменный календарь. При помощи документа Кадровое перемещение внести изменение у сотрудников изменение графика работы и рассчитать зарплату. Управляющая компания должна показать данные в 2-НДФЛ уплаченные за физ.лицо.
В этом случае следует заполнить 1-НДФЛ на этого человека и сформировать данные по формированию данных 2-НДФЛ. Как ввести праздничные дни?
В меню Регламенты-Ввод праздничных дней ввести праздничные дни. Как ввести начисление единоразового пособия при рождении ребенка?
В меню Справочники-Расчет зарплаты проставить данное начисление по ФСС и в меню Документы-Ввод расчетов сотруднику ввести данное начисление. Корректно ли, принять ранее уволенного сотрудника под старым табельным номером?
Нет, только под новым номером. Удержание алиментов.
Меню документы ввод удержаний - исполнительный лист, указываем сотрудника способ удержания почтовый сбор, сумму почтового сбора, способ расчета фиксированной суммой, указываем сумму. После расчета заходим в отчеты исполнительные листы, вид отчета почтой и нажимаем "Сформировать". Как провести беспроцентный займ и посчитать материальную выгоду?
В меню Справочники - Расчет зарплаты ввести Новое начисление (беспроцентный займ), в меню Документы - Ввод расчета по сотруднику ввести начисление займа и по Вводу начислений ввести расчет Материальной выгоды по вкладам. Отпуск по уходу за ребенком. неправильно поставила дату по..
Необходимо исправить в документе дату по... и перерассчитать зарплату. Как рассчитать командировочные по среднему заработку в программе 1С:Зарплата и Кадры 7.7. Не считается регрессивная ставка по ФФОМС и ТФОМС по сотруднику оклад которого превысил 600000 руб. за 9 месяцев.
Нужно ввести в меню Документы-Прочие отклонения-Оплата по среднему заработку. Регрессивная ставка ФФОМС и ТФОМС не считается после превышения 600000 руб.
Для более быстрого поиска в базах данных было придумано свойство индекс. При использовании таблиц значений мы также можем создавать индексы для произвольных колонок.
Например, у нас есть таблица с колонками «Номенклатура, Цена, ЕдиницаИзмерения». И если мы часто ищем в таблице строки с какой-то номенклатурой, то лучше эту колонку проиндексировать и тогда программа не будет каждый раз перебирать все строки, а будет использовать индекс.
Чтобы создать индекс применяется метод «Индекс», в параметрах которого передается строка в которой перечисляются индексируемые колонки.
Т.к. индексируемых колонок может быть несколько, то возможна и такая запись:
Когда индекс создан, то при использовании методов таблицы значений «Найти» или «НайтиСтроки» будет использоваться созданный нами индекс.
А для поиска в таблице значений существует два специальных метода: первый Найти
Данный метод возвращает первую найденную строку с искомым значением или Неопределено, если не находит. Поэтому его удобно использовать для поиска уникальных значений, т.к. иначе придется при нахождении значения удалять его из таблицы, чтобы найти следующее.
Чтобы так не мучиться существует следующий метод, который позволяет находить массив подходящих строк НайтиСтроки
Этот метод всегда возвращает массив, но он может быть и пустой, если ничего не найдено. И ещё этот метод также как и предыдущий возвращает сами строки таблицы значений, а не сами значения в отдельном массиве. Поэтому изменив значения в строке массива или как в предыдущем методе у найденной строки, Вы поменяете значение в обрабатываемой таблице значений.
Чем ещё хорош этот метод, так это то, что он может искать сразу по нескольким колонкам таблицы значений одновременно:
Единственный минус, как видно, нельзя применять другие виды сравнения кроме как "равно"
Для реализации расшифровки отчетов, выполненных при помощи системы компоновки данных, в платформе реализован объект ОбработкаРасшифровкиКомпоновкиДанных, который позволяет сформировать настройки компоновки данных, которые можно использовать для формирования отчета - расшифровки.
В некоторых ситуациях использовать возможности объекта ОбработкаРасшифровкиКомпоновкиДанных не представляется возможным, и возникает необходимость программного получения значений полей, которые присутствовали в некоторой ячейке табличного документа, для которой можно получать расшифровку.
В данной статье описывается, каким образом устроен объект ДанныеРасшифровки и как его можно использовать для получения значений полей и полей группировок.
ВАЖНО!
Для того, чтобы при выводе отчета объект ДанныеРасшифровки был заполнен, следует его создать при компоновке макета и передать в процессор компоновки данных.
Для создания объекта ДанныеРасшифровки, при вызове метода Выполнить компоновщика макета, следует передать переменную, в которую требуется поместить созданный объект.
Пример:
Для того, чтобы данные расшифровки заполнились при формировании результата, необходимо передать объект ДанныеРасшифровки в метод Инициализировать процессора компоновки данных.
Пример:
Если используется метод объекта Отчет СкомпоноватьРезультат, то для заполнения данных расшифровки следует передать в метод переменную, в которую необходимо поместить данные расшифровки.
Пример:
Если отчет формируется при помощи стандартной команды отчета Сформировать, то данные расшифровки помещаются в свойство расширения формы отчета ДанныеРасшифровки.
Объект ДанныеРасшифровки содержит настройки, для которых этот объект был сформирован (заполняются при генерации макета компоновки данных) и коллекции элементов расшифровки (заполняются при формировании результата).
Каждый элемент расшифровки имеет идентификатор (который и помещается в ячейку табличного документа - результата) и массив идентификаторов родительских элементов расшифровки. Имея идентификатор расшифровки из объекта ДанныеРасшифровки можно получить элемент расшифровки при помощи метода Получить или при помощи операции [].
Пример:
Существуют два типа элементов расшифровки: ЭлементРасшифровкиКомпоновкиДанныхПоля и ЭлементРасшифровкиКомпоновкиДанныхГруппировка.
ЭлементРасшифровкиКомпоновкиДанныхПоля содержит список значений полей, которые присутствуют в элементе расшфровки. В каждом значении имеется указание того, для какого поля содержится значение (соответствует пути к данным поля в терминах настроек компоновки данных, например: Номенклатура.ОсновнойПоставщик), само значение поля, и указание того, что значение было получено для иерархической записи (имеет значение Истина, если значение было получено от иерархической записи).
ЭлементРасшифровкиКомпоновкиДанныхГруппировка содержит имя группировки, для которой был создан элемент (соответствует идентификатору группировки в настройках из данных расшифровки).
При компоновке результата процессор компоновки данных заполняет данные расшифровки следующим образом:
1. При выводе группировки помещает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхГруппировка, с указанием того, какая группировка выводится. Если выводится вложенная группировка, то в качестве идентификатора родительского элемента группировки будет использован идентификатор расшифровки от родительской группировки.
2. В качестве дочернего к элементу группировки выдает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который выдает значения полей, по которым осуществлялась группировка. Например, если группировка осуществлялась по полю Номенклатура.ОсновнойПоставщик, то в значениях полей будет находиться значение для этого поля. При этом, если группировка выполнялась по иерархии и в настоящий момент выдавалась иерархическая запись, то в значении поля группировки об этом будет сказано в свойстве Иерархия.
3. При выводе ячеек процессор компоновки получит из каждой ячейки список полей, которые нужно помещать в ее расшфровку и создаст в данных расшифровки для ячейки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который поместит значения полей. При этом родительским для нового элемента будет являться элемент, содержащий значения полей группировки, т.е. элемент, заполненный на втором шаге. Если выводился элемент для ресурсов на пересечении группировок кросс-таблицы, то у элемента будет установлено два родительских элемента - один от группировки - строки и один от группировки - колонки. Идентификатор вновь созданного элемента будет помещен в качестве значения расшифровки в ячейку результирующего табличного документа. Именно этот идентификатор придет в обработчик расшифровки, если пользователь потребует расшифровать в отчет в данной ячейке.
Обработка расшифровки.
При обработке расшифровки, в обработчик поля табличного документа будет передаваться идентификатор расшифровки. По этому идентификатору из объекта данных расшифровки можно получить элемент расшифровки. В этом элементе будут находиться значения полей, которые предполагалось выдавать в качестве расшифровки в данной ячейке.
Если необходимо получать значения полей - группировок для текущего элемента, то следует рекурсивно получить все родительские элементы расшифровки и получить из них значения полей.
Введение
Многие из Вас, наверное, сталкивались с такой проблемой как, удаление элементов в справочниках, а значит, знают, какую кучу проблем это приносит. Я видал много способов восстановления порушенного справочника. Все их можно свести к следующему:
Заводится новый элемент справочника, аналогичный удаленному элементу, а потом он заносится во все документы, вместо удаленного элемента. Дальше все различается только способом занесения элемента в документы. Кто все исправляет в руки, кто пишет обработку - все зависит от опыта и квалификации исполнителя. После чего, необходимо перепровести все измененные документы. В общем, долгая и нудная работа, не всегда дающая 100% результат правильного восстановления. Есть, правда, один быстрый способ, основанный на формате DBF, точнее методах работы с ним.
Вот об этом мы и поговорим. Итак, что нам для этого надо. Иметь голову, наполненную мозгами, умелые ручки, знания основ перевода чисел из одной системы счисления в другую и любой редактор DBF файлов. Я, к примеру, использую winDBFview фирмы "Гэндальф".
Часть 1. Нам повезло.
С начала, собственно, о формате DBF и методах работы с ним. Думаю, рассказывать обо всем формате нет смысла, это тема отдельной статьи, поэтому расскажем о нем вкратце, для понимания тех действий, которые необходимо совершить.
Итак, что такое DBF формат и с чем его едят. Файл DBF можно разделить на две части: заголовок и, собственно, набор данных. В заголовке находится вся служебная информация, показывающая из каких полей состоит запись, типы этих полей, размер данных в полях, количество записей, размер записи, и откуда в файле начинаются записи, но это сейчас ни к чему. В наборе данных находятся, собственно, записи данных. В начале каждой записи стоит специальный байт - признак удаления. То есть когда вы говорите программе удалить запись, она ее фактический не удаляет, а ставит в первый байт записи метку о том, что данная запись удалена.
Отсюда следует, что если найти запись соответствующую удаленному элементу и сбросить признак удаления, переиндексировать базу, то можно обнаружить что, правильно удаленный
элемент будет восстановлен не только в справочнике, но всех документах.
Для тех, кто не знает что почем, показываю на примере:
Рабочая конфигурация ТиС, удалили элемент справочника товаров.
Запускаем winDBFview и выбираем Файл - Открыть. В появившемся окне диалога находим папку, в которую установлена база и открываем там файл. А какой? Вот ведь вопрос: как узнать? Да просто. Запускаем какую-нибудь оболочку, переходим в папку с базой и находим файл"1Cv7.DD". Открываем его для просмотра и находим там следующую строчку - "Справочник Номенклатура" - в нашем случае, у вас, вместо "Номенклатура" ставим название порушенного справочника (как он называется в конфигураторе) . И видим приблизительно следующее (см. рис. 1). То, что у меня выделено под надписью "Name" и есть искомое нами имя файла. Открываем его в редакторе DBF файлов, и смотрим. В поле CODE содержится код элемента справочника, а в поле DESCR наименование элемента. Как будете искать - уже дело техники и возможностей редактора. Найдя нужный элемент, сбрасываем байт пометки на удаления и сохраняем сделанные изменения.
Часть 2. Нам не повезло.
Но может быть, что вы не смогли быстро приехать к месту событий (всякое в жизни бывает). Приступили к восстановлению элемента. Запустили редактор. И начали искать и не нашли удаленный элемент. Куда он делся? Опять вернемся к формату DBF, и посмотрим, что происходит при добавлении новой записи. С начала программа ищет помеченные на удаление записи и если не находит, то добавляет новую запись. А если находит, вы правы, пишет вместо нее. И что делать, неужто опять все в руки?
Внимательно смотрим листинг файла "1Cv7.DD". Видите перед полем CODE поля ID и PARENTID. Для чего они нужны. Из описания поля (см. рис. 1), следует, что это какой-то идентификатор объекта. Оказывается 1С все равно, на тот код, что вы указали в справочнике элементов. Сама для себя она каждому объекту присваивает свой код. Значит, если мы узнаем этот код, то сможем создать запись полный аналог удаленной. Хм.... А как узнать этот код?
Есть много способов. Я, надеюсь, предлагаю вам самый простой. Итак, начнем.
Запускаем 1С. Лезем в Сервис - Монитор пользователей - Журнал регистрации. В появившемся диалоге делаем отбор: "во всем журнале, отбор по признаку удаление элемента справочника", жмем "ОК".
И смотрим журнал (см. рис. 2). Видите, там, где написано "Номенклатура 2258 04 ....", это и есть удаленный элемент справочника, его нам и надо восстановить. Сверху присутствует
строка: "<Объект не найден>(36201/)", 36201 - это и есть ID объекта. Создаем в справочнике новый элемент - полный аналог удаленному элементу. Выходим из 1С. Запускаем редактор, находим созданный нами элемент и поле ID ставим найденный. Внимательный читатель может сразу заметить существенное различие между соседними записями. Вот сейчас мы и переведем найденный идентификатор к нужному виду.
Перевод из одной системы счисления в другую, подробно изучается в школах и институтах, поэтому на этом останавливаться не будем. Изучив весь справочник, замечаем, что в идентификатор состоит из цифр и заглавных букв латинского алфавита. То есть может содержать все цифры от "0" до "9", и буквы от "A" до "Z". Значит, используется тридцати шестеричная система счисления 10 цифр плюс 26 букв. Приступим:
* 36201 делим на 36, получаем 1005 в остатке 21;
* 1005 делим на 36, получаем 27 в остатке 33;
В конце имеем три числа: 27, 33, 21. Заменяем их соответствующими значениями из приведенной ниже таблицы и получаем ID объекта RXL. Записываем его вместо ID созданного нами элемента. Номер можно получить средствами самой 1С использую функцию _IdToStr() и наоборот получит десятичное число из его тридцати шестеричного представления _StrToId().
Запускаем 1С, индексируем базу и смотрим, что имеем (см. рис. 3)
Что и требовалось получить. Пользуйтесь.
Вопрос: У меня добавлен новый пользователь.
Создаю новый интерфейс (копированием существующего) и указываю этот интерфейс в качестве основного для данного пользователя.
Проблема в том, что созданный новый интерфейс почему-то не отображается. Видно только следующие пункты меню: Файл, Правка,Сервис,Окна и Справка.
Подскажите что нужно сделать?
Ответ: надо на этот интерфейс права дать пользователю! Конфигурация-Общие-Роли-РольПользователя открываешь, в ней Общие-Интерфейсы-ТвойИнтерфейс- ТАМ НАДА ПОСТАВИТЬ ГАЛОЧКУ "ИСПОЛЬЗОВАНИЕ"
Создание журнала с закладками, причем в справочнике можно задать каждой закладке любое название. Создавал в конфигурациях «Бухгалтерский учет» и «Торговля и Склад». Выглядит это так:
а справочник:
1. Создаем новый справочник.Новый1
где, уровень = 1, длина кода = 10, длина наименования = 50. серии кодов = в пределах подчинения, тип кода = текстовый, основное представление = в виде наименования.
Редактируем форму списка:
Добавляем 2 кнопки: Заполнить, Применить.
В модуль:
2. В Документы, Общие реквезиты добавляем «ДляОтбора» где: Тип значения = строка и длина = 10 , в Дополнительные стоит галочка «Отбор».
3. В «Журналах» копируем «Общий» и в его модуле пишем:
4. Заходим в режиме Предприятия, открываем созданный нами справочник и заполняем его. Называем закладки и жмем «Применить», открываем Журнал и пользуемся