Хочу поделиться с посетителями сайта своим подходом к преобразованию таблицы значений в дерево значений и обратно.
Вообще, при разработке отраслевой задачи, была необходимость почти во всех документах, выводить информацию в виде дерева и хранить ее в табличных частях документа, а также в интерактивной обработке данных в виде дерева.
Отсюда появился небольшой модуль для расширения возможности работы с деревом значений, хотя и с некоторыми оговорками.
Основной идеей является использование двух ключевых реквизитов/колонок КлючСтроки и КлючСвязи.
Однако они не всегда необходимы. Код, на мой взгляд достаточно "высушен".
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт, который работает с ним. После того, как вы вводите все параметры кода и нажимаете кнопку генерировать, получаем что-то вроде такой ссылки. По сути эта ссылка нам и нужна. Создав необходимый url можно скачать картинку, которая генерируется с помощью api.
И так в чем заключается подход:
1. Генерируем текст, который надо прописать в qr-коде.
2. Используя ссылку «http://chart.apis.google.com/chart?cht=qr&chs=230?230&chl=» +»Наш текст» скачиваем картинку.
3. Размещаем картинку в нашем табличном документе.
Код реализации:
Эту статью я посвящаю двум процедурам ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр. Они являются полным «антиподом действий» друг другу, а разработчики 1с предприятия отнесли их в раздел «Процедуры и функции сохранения значений».
Почему именно так они названы, для чего они полезны ну и конечно же почему эти функции ассоциируются с сохранением значений попробую разъяснить.
С этими функциями я познакомился еще, когда начинал свою деятельность 1с программиста в программных продуктах семейства 1с предприятия версии 7.7, обратил я на них внимание впервые, когда мне необходимо было сохранять сложные типы данных (например, заполненную таблицу значений, структуру и т.д.).
А т.к. средствами 1с можно представить различные типы значений в виде строки (с использованием процедуры ЗначениеВСтрокуВнутр), задачка моя упростилась. И вот собственно описание этих двух простых, но очень полезных функций.
ЗначениеВСтрокуВнутр
Функция ЗначениеВСтрокуВнутр преобразует или другими словами приводит в строковое представление данные, т.е. данные преобразуются в специальный строковый формат, который можно использовать только внутри одной информационной базы, это очень важно!
Например, у нас есть массив:
А преобразование данного массива в строковое представление будет иметь вид: {«#»,51e7a0d2-530b-11d4-b98a-008048da3034,{3, {«S»,»Тара»},{«S»,»Контейнер»},{«S»,»Паллет»}}}
ЗначениеИзСтрокиВнутр
Функция ЗначениеИзСтрокиВнутр производит обратное преобразование из строкового представления данных во внутреннее представление системы 1с предприятия. Т.е. если выполнить код вида:
Мы в переменную «МассивЗначений» передаем уже не строку, а определенный тип данных «Массив» причем массив уже заполненный ранее. Источник
Установить ссылку нового это специальный механизм программиста, который позволяет присваивать новому объекту нужную ссылку. В основном это задача обмена, во многих типовых обменах используется синхронизация по UID объекта.
Рассмотрим этот метод на конкретной задаче: «Если в базе в справочнике «номенклатуры» нет объекта с UID = «1014270d-d794-11df-825c-001517542b79», то необходимо его создать с таким же UIDом и присвоить название – «Служебная номенклатура» »
Подробнее остановимся на строке
В типовых конфигурациях обычно все служебные программные кода в модулях объектов перед записью заключены в условие «не ОбменДанными.Загрузка». Т.е. если Это загрузка то эти программные кода не выполняются. Если процедура присвоения UIDа не работает, то возможно вам нужно еще выполнить глобальный поиск, чтобы найти сторонние программные строки «УстановитьСсылкуНового» – «камни преткновения» Источник Битая ссылка, <Объект не найден>, Уникальный Идентификатор, GUID
Введение
Многие из Вас, наверное, сталкивались с такой проблемой как, удаление элементов в справочниках, а значит, знают, какую кучу проблем это приносит. Я видал много способов восстановления порушенного справочника. Все их можно свести к следующему:
Заводится новый элемент справочника, аналогичный удаленному элементу, а потом он заносится во все документы, вместо удаленного элемента. Дальше все различается только способом занесения элемента в документы. Кто все исправляет в руки, кто пишет обработку - все зависит от опыта и квалификации исполнителя. После чего, необходимо перепровести все измененные документы. В общем, долгая и нудная работа, не всегда дающая 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)
Что и требовалось получить. Пользуйтесь.
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ. Тестировалось на Office 2007.
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
Периодически могут возникать ситуации, когда необходимо разложить числовое значение цвета на его RGB-составлящие. Например, если говорить о платформе 1С 8, то для задания цвета шрифта, цвета области табличного документа и т.п. мы можем использовать либо web-цвета, либо цвета стилей, либо абсолютный цвет, который задается через RGB-составляющие:
где R,G,B - числовое значение цвета от 0 до 255 (красный, зеленый и синий соответственно)
В тоже время некоторые приложения, например Excel, возвращают значение цвета одним десятичным числом, которое формируется из всех трех составляющих по определенному алгоритму. И если нам необходимо, например, скопировать формат ячейки Excel в ячейку табличного документа 1С, то возникает вопрос, как нам разложить числовое представление цвета на его RGB-составляющие?
Чтобы разобраться в этом вопросе, давайте посмотрим, по какой формуле формируется числовое представление цвета. Формула достаточно проста: Цвет = R + G * 256 + B * 65535
где R,G,B - числовое значение цвета от 0 до 255 (красный, зеленый и синий соответственно)
Если представить коэффициенты немного в другом виде, то наша формула преобразуется к следующему виду: Цвет = R*(256^0) + G*(256^1) + B*(256^2)
То есть наше числовое представление цвета есть ни что иное, как трехзначное число по основанию 256. Поэтому, чтобы получить требуемые составляющие, нам надо всего лишь преобразовать значение цвета из 10-тичной системы в систему по основанию 256. Каждое из трех полученных значений и будет искомым значением составляющих цвета.
На примере переноса цвета ячейки Excel код будет вылядеть так:
Восстановление документов 1С из архива в рабочую базу (XML обмен)
Не редко требуется восстановить данные испорченного документа 1С из архива базы после не умышленных, а зачастую ошибочных, действий удачливого пользователя. Самым простым способом является выгрузка данных из базы архива 1с в XML, а затем загрузка этого XML файла в рабочую базу. Данное решение целиком и полностью опирается на внутренние XML алгоритмы работы конфигурации 1С. При помощи предлагаемой обработки в рабочую базу загружаются все реквизиты документа и его табличные части в том виде, в котором они существовали в архиве.
Исключение составляют движения документа. Данные о движениях не сохраняются при XML сериализации. Хотя документ и восстанавливается проведенным, но все регистры учета и накопления не трогаются. По этому, после восстановления документа следует его провести, либо воспользоваться обработкой, которая позволяет восстановить утерянный или испорченный документ со всеми его движениями.
Импорт - экспорт данных через XML. Обработка обмена данными.
Начало работы с обработкой по экспорту данных документа 1С в XML начинается с выбора имени XML файла и документа, данные которого необходимо сохранить. Первый этап следует выполнять на архивной копии базы, из которой требуется получить достоверные данные. После указания требуемых данных следует нажать кнопку "Выгрузить". Экспорт данных выбранного документа будет осуществлен в указанный пользователем XML файл.
Импорт данных из XML файла следует осуществлять уже в рабочей базе в режиме "1С Предприятие". Для этого откройте обработку, выберите файл данных и нажмите кнопку восстановить. Документ выбирать не обязательно, так как все его данные уже известны и содержаться в XML файле. Важное замечание - движения документа не изменяются, по этому если нужно их тоже восстановить документ следует провести. Скачать обработку:Скачивать файлы может только зарегистрированный пользователь!
Импорт данных из 1С в XML
Обеспечение возможности импорта данных из 1С в XML осуществляет процедура XML_Импорт. Процедура импорта проверяет пользовательский ввод - имя файла и ссылку на документ, данные которого нужно сохранить в XML файл. Далее создается новый текстовый файл, в который средствами 1С осуществляется выгрузка значений всех реквизитов документа и табличных частей. Исходный код процедуры:
Экспорт данных из XML в 1С
Обратная операция - экспорт данных из XML в 1С реализована в процедуре XML_Экспорт. Данные, сохраненные на предыдущем этапе, читаются из XML файл при помощи механизма XML Reader. Для восстановления данных документа достаточно указать только имя XML файла, так все необходимые данные о том, какой именно документ нужно восстанавливать уже имеются в файле. После успешного чтения данных 1С средствами платформы изменит требуем документ и откроет его в новом окне для проверки. Для восстановления движений документа его необходимо провести. Исходный код процедуры:
Восстановить нумерацию документов или справочников нам поможет специальная обработка «Универсальные подбор и обработка объектов». Эту обработку можно найти на диске ИТС (УниверсальныеПодборИОбработкаОбъектов.epf).
Порядок работы с обработкой:
Открываем обработку через меню «Файл» – пункт «Открыть»:
Выбираем файл «УниверсальныеПодборИОбработкаОбъектов.epf» и нажимаем «Открыть»:
В открывшемся окне в поле «Объект поиска» выбираем вид документа (которые требуется перенумеровать), для справочника - выбираем нужный справочник:
Далее устанавливаем отбор на закладке «Отбор по значениям реквизитов», например, нам надо восстановить нумерацию документов «Реализация товаров и услуг» начиная с 01 января 2010 года по текущую дату. Нажимаем в командной панели кнопку «Добавить». В окне выбора поля выбираем «Дата», в колонке «Тип сравнения» указываем «Больше», в поле «Значение» устанавливаем 01.01.2010, для справочника - сразу нажимаем «Найти объекты»:
После этого нажимаем «Найти объекты»:
Программа перемещает нас на закладку «Найденные объекты», на которой мы видим список отобранных документов для перенумерации. На рисунке наглядно показано, с какой даты изменена нумерация (убраны так называемые лидирующие нули):
Далее мы переходим на закладку «Обработки», в левой части выбираем пункт «Перенумерация объектов» (дважды кликаем по нему мышкой):
В следующем окне указываем с какого номера перенумеровывать (поле «Начальный номер»). В нашем случае это – 1. Если мы хотим восстановить нумерацию учитывая префикс, устанавливаем переключатель в положение «Не изменять существующие префиксы»:
После нажатия кнопки «Выполнить» происходит перенумерации документов.
Начиная с платформы 8.0 системы 1С Предприятие, существует возможность ограничивать права доступа пользователей на уровне записей. Для этого используется механизм RLS (Record Level Security). Такая «тонкая» настройка может быть полезна для ограничения доступа по организациям, клиентам, номенклатуре и др.
RLS – это возможность разработчика задать условие на таблицы базы данных для тех или иных пользователей (групп пользователей) и не дать им увидеть лишнего. Условие имеет булевый тип. Если значение условия принимает значение «истина», то доступ предоставляется, в противном случае – запрещается.
RLS используется одновременно с настройкой обычных прав доступа. Поэтому прежде чем приступить к настройке RLS, необходимо раздать обычные права на объекты конфигурации.
RLS применяется для следующих видов прав доступа:
* Чтение
* Добавление
* Изменение
* Удаление
Порядок настройки RLS
Рассмотрим простой пример выполнения настройки. Снимки экрана сделаны на версии 1С Предприятие 8.2 (8.2.9.356). Синтаксис шаблонов текстов ограничений описан в документации по 8.2 в книге «Руководство разработчика. Часть 1», поэтому на нем останавливаться не будем.
Итак, первым делом нужно определить шаблоны ограничений для каждой существующей роли.
После этого на основании указанных шаблонов задаются ограничения к необходимым объектам. Для редактирования текста условия можно воспользоваться конструктором ограничений доступа к данным.
Для редактирования нескольких ролей удобно управлять через окно «Все роли».
Для копирования условий в другие роли можно использовать окно «Все ограничения доступа». Шаблоны в другие роли могут копироваться только вручную.
Вот и все. Можно проверить результат.
Недостатки использования RLS:
1. Применение механизма ограничения доступа на уровне записей приводит к неявному увеличению таблиц, участвующих в запросе, что может привести к ошибкам в клиент-серверном режиме работы базы данных.
2. Для контроля записи бывает трудно или невозможно реализовать сложную логику приложения. В таких случаях лучше использовать условия в процедуре ПриЗаписи().
3. Написание условия (запроса) требует определенной квалификации разработчика.
4. Дополнительные трудности может создать невозможность отладки условия (запроса).
В типовых конфигурациях права на уровне записей могут быть заданы интерактивно для следующих объектов: организации, контрагенты, номенклатура, склады, подразделения, физические лица, заявки кандидатов и другие.
Следует помнить, что ограничения прав доступа на уровне записей довольно ресурсоемкий механизм и чем более сложные ограничения Вы поставите, тем медленнее программа будет работать, особенно при большой базе данных. Мелкоступов Александр
Отправка писем из 1С Предприятия – одна из самых необходимых функций, отсутствующая в штатном функционале платформы. Один из вариантов реализации – это подключение к MS Outlook по технологии OLE. В статье приведены примеры создания писем, событий и задач в MS Outlook из 1С. Автоматическое создание событий и задач используется не часто, но порой бывает очень удобно.
В файловом варианте информационной базы «1С:Предприятие 8.0» журнал регистрации располагается в каталоге информационной базы, там же, где и файл самой информационной базы.
Например, если информационная база хранится в файле C:/1C_base/1Cv8.1CD, то журнал регистрации будет находиться в файле C:/1C_base/1Cv8.log.
С версии «1С:Предприятие 8.1» существенно переработан журнал регистрации, изменена структура хранения. Журнал хранится в нескольких файлах, а не в одном, как это было ранее. При настройке журнала регистрации существует возможность задать периодичность разделения его на отдельные файлы:
Файлы *.log хранятся в каталоге информационной базы в подкаталоге 1Cv8Log. Например C:\1c_base\1Cv8Log\20070927070000.log
В клиент-серверном варианте информационной базы журнал регистрации располагается в каталоге данных приложения, не зависящем от пользователя, а именно: <Общие данные приложений>/1C/1Cv8/<Идентификатор информационной базы>/1Cv8.log, например, C:/Documents and Settings/All Users/Application Data/1C/1Cv8/4129dbdb-b495-41cb-99ea-ef315060a03e/1Cv8.log.