Пример создания внешней печатной формы АКТа для Бухгалтерии 3.0
1. В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя.
2. В модуле обработки пишем код. Постараюсь его максимально комментировать. Главное должно быть:
функция ПечатьВнешнейПечатнойФормы табличного документа - которая выведет данные в макет
функция Печать - вызывается из конфигурации! в нее передается массив печатаемых объектов
и функция СведенияОВнешнейОбработке(). Она необходима для регистрации печатной формы в справочнике ДополнительныеОтчетыИОбработки, в ней собирается структура с данными для подключения формы. Эта функция, а также ряд сопутствующих ей, практически одинаковы для всех печатных форм, поэтому их можно просто копировать в новую печатную форму ничего не меняя.
3. Добавляем макет вывода печатной формы:
4. Сохраняем и добавляем в конфигурацию:
Подключается через Администрирование - Печатные формы, отчеты и обработки:
Создаете новую обработку, записывайте и при открытии документа Реализация, нажав на Печать - появляются доступные печатные формы с разными подписывающими.
Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство:
в обычном приложении параметр для ОтборСтрок - Отбор...
в управляемом приложении - ФиксированнаяСтруктура
ОтборСтрок, которое входит в расширение табличного поля, связанного с табличной частью.
Управляемые формы
пример:
или такой динамический отбор
Обычные формы
Использовать его очень просто:
или 2-й вариант:
А теперь конкретные примеры:
Подчиненные табличные части в 8.х
С помощью свойства ОтборСтрок можно реализовать подчиненные (связанные) табличные части. При смене текущей строки в первой табличной части вторая табличная часть показывает только связанную информаци. Например, таким образом можно реализовать работу с комплектами: 1-я таб. часть - комплекты, вторая - состав комплекта.
Во второй табличной части должна быть колонка - идентификационный признак, связывающий ее с первой табличной частью. Таких колонок может быть несколько (составной ключ);
В событии ПриАктивизацииСтроки для первого табличного поля пишем:
При добавлении новой строки во вторую табличную часть, нужно следить за тем, чтобы идентификационная колонка была установлена.
Обращаю ваше внимание, что при таком отборе не используются индексы и для больших табличных частей возможно замедление работы.
Еще раз напомню, что ОтборСтрок входит в расширение табличного поля табличной части, т.е. табличное поле должно быть связано с табличной частью. Если же оно связано с динамическим списком типа СправочникСписок, то здесь нужно использовать свойство Отбор для объекта типа СправочникСписок.
Если понадобилось перебрать строки, вошедшие в отбор, то это можно сделать, только заново перебрав все строки и проверив условие отбора для каждой строки. Перебрать строки табличного поля, которые сейчас на экране - невозможно.
В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла...
И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С.
Чтение PDF файлов из 1С
Первым дело я стал искать, как напрямую можно прочитать данные из 1С в PDF файлах - было найдено много информации и вариантов решений, но к сожалению большинство из них не правильно работали с кодировкой В результате банальный текст вида Красный стул превращался в страшную кракозябру.
Далее после долгих поисков был найден конвертер PDF в TXT - pdf2txt
Данная функция возвращает значение Истина, если хотя бы в одной из таблиц перерасчета есть хотя бы одна запись по данному документу. Если таких записей нет, то функция вернет значение Ложь, и перерассчитывать записи этого документа не нужно.
Собственно перерасчет записей, как и их расчет, рекомендуется выполнять в процедуре общего модуля по тем же причинам, что и расчет. Процедура перерасчета отличается от процедуры расчета только тем, что в расчете участвуют не все записи документа, а только удовлетворяющие усло- виям проводимого перерасчета. Например, только записи по конкретным сотрудникам и конкретным видам расчета.
Наконец, после того как нужные записи перерассчитаны, необхо- димо средствами встроенного языка удалить соответствующие записи из таблицы перерасчета, так как перерасчет больше не требуется.
Процедуру перерасчета записей документа рекомендуется помещать в модуле этого документа как экспортную процедуру. В этом случае она может быть вызвана из других модулей, в том числе из обработки перерасчета, описанной в предыдущем разделе. В качестве параметров в процедуру должна передаваться информация о том, какие именно записи документа необходимо перерассчитать. Ниже приведен пример такой процедуры, где в качестве параметра используется список сотрудников, по которым необходимо выполнить перерасчет.
Процедура перерасчета записей документа
Процедуры общего модуля, выполняющие непосредственный перерасчет записей, по алгоритму схожи с процедурами расчета. Основное отличие состоит в том, что в процедурах перерасчета происходит расчет только тех записей, которые удовлетворяют заданным условиям. В данном случае это записи по заданному списку сотрудников. Также при перерасчете не нужно производить предварительную запись набора с формированием фактического периода действия, так как набор уже записан в регистр (перерассчитываемый документ всегда проведен). Ниже приведен пример процедур ПерерассчитатьЗаписиРегистраРасчета() и ПерерассчитатьНаборЗаписей(). Эти процедуры используют вызов тех же самых процедур и функций, которые используются при расчете.
Кодирование: Ctrl+Пробел - вызов подсказки Ctrl+Q - вызов шаблона Ctrl+F1 - поиск в синтакс-помощнике Ctrl + L - удалить текущую строку Alt+Shift+F - отформатировать код Исследование: F12 - ставим курсор на процедуре или функции и переходим к определению процедуры или функций. Ctrl+(минус) - перемещает назад в модуль, из которого ушли через F12 Ctrl+T - найти в дереве конфигурации Ctrl+F - найти объект метаданных или его реквизит в дереве метаданных. Отладка: F5 - начать/продолжить отладку F9 - установить/снять точку останова F10 - шагнуть через процедуру или функцию, на следующую строку кода F11 - идти по порядку с заходом во все процедуры и функции. Alt+F9 - список точек останова Shift+F9 - вычислить выражение Ctrl+Shift+F9 - отк./вкл. точку остан. Ctrl+Alt+W - открыть табло Ctrl+Alt+C - открыть стек вызовов Закладки: Alt+F2 - установить/снять закладку F2 - к следующей закладке Shift+F2 - к предыдущей закладке Быстрый переход по Процедурам, Функциям, Условиям, Циклам: Ctrl+[ - перейти назад Ctrl+] - перейти вперед Ctlr+G - перемещения к строке кода Окно сообщений: Ctrl+Alt+Z - очистить. Ctrl+Shift+Z - очистить и закрыть
Рассмотрим более подробно:
Глобальные действия
Создать новый документ - Ctrl + N
Открыть существующий документ - Ctrl + O
Активизировать поле поиска в командной панели - Ctrl + D
Открыть "Глобальный поиск по текстам" - Ctrl + Shift + F
Открыть "Результаты глобального поиска по текстам" - Ctrl + Shift + H
Запустить 1С:Предприятие без отладки - Ctrl + F5
Открыть окно "Конфигурация" - Ctrl + Shift + С
Обновить конфигурацию БД - F7
Открыть "Шаблоны текста" - Ctrl + Shift + T
Открыть встроенный "Калькулятор" системы 1С:Предприятие - Ctrl + F2
Открыть "Свойства" - Alt + Enter
Открыть "Дополнительно" - Shift + Alt + Enter
Открыть "Служебные сообщения" - Ctrl + Alt + O
Закрыть "Служебные сообщения" - Ctrl + Shift + Z
Очистить служебные сообщения - Ctrl + Alt + Z
Открыть "Справку" - F1
Открыть "Содержание справки" - Shift + F1
Открыть "Индекс справки" - Shift + Alt + F1
Открыть "Поиск по справке" - Ctrl + Alt + F1
Открыть "Синтакс-Помощник - Ctrl + Shift + F1
Поиск по индексу в "Синтакс-Помощнике" - Ctrl + F1
Общие действия
Удалить - Del
Добавить - Ins
Сохранить активный документ - Ctrl + S
Печать активного документа - Ctrl + P
Печать на текущий принтер - Ctrl + Shift + P
Копировать в буфер обмена - Ctrl + C - Ctrl + Ins
Вырезать в буфер обмена - Ctrl + X - Shift + Del
Вставить из буфера обмена - Ctrl + V - Shift + Ins
Добавить к буферу обмена - Shift + Num+
Вычесть из буфера обмена - Shift + Num-
Выделить все - Ctrl + A
Отменить последнее действие - Ctrl + Z - Alt + BackSpace
Вернуть отмененное действие - Ctrl + Y - Shift + Alt + BackSpace
Найти - Ctrl + F
Найти следующий - F3
Найти следующий выделенный - Ctrl + F3
Найти предыдущий - Shift + F3
Найти предыдущий выделенный - Ctrl + Shift + F3
Заменить - Ctrl + H
Найти в дереве - Ctrl + T
Следующий элемент в результатах поиска и окне сообщений - F8
Предыдущий элемент в результатах поиска и окне сообщений - Shift + F8
Развернуть (узел дерева, группу табличного документа, группировку модуля) - Ctrl + Num+
Свернуть (узел дерева, группу табличного документа, группировку модуля) - Ctrl + Num-
Развернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные - Ctrl + Alt + Num+
Свернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные - Ctrl + Alt + Num-
Развернуть (все узлы дерева, группы табличного документа, группировки модуля) - Ctrl + Shift + Num+
Свернуть (все узлы дерева, группы табличного документа, группировки модуля) - Ctrl + Shift + Num-
Следующая страница - Ctrl + PgDn - Ctrl + Alt + F
Предыдущая страница - Ctrl + PgUp - Ctrl + Alt + B
Включить/выключить жирность - Ctrl + B
Включить/выключить курсив - Ctrl + I
Включить/выключить подчеркивание - Ctrl + U
Переход к предыдущей главе справки - Alt + Left
Переход к следующей главе справки - Alt + Right
Управление окнами
Закрыть активное окно, модальный диалог или приложение - Alt + F4
Закрыть активное обычное окно - Ctrl + F4
Закрыть активное окно (кроме обычных) - Shift + Esc
Активизировать следующее обычное окно - Ctrl + Tab - Ctrl + F6
Активизировать предыдущее обычное окно - Ctrl + Shift + Tab - Ctrl + Shift + F6
Активизировать следующую секцию окна - F6
Активизировать предыдущую секцию окна - Shift + F6
Вызвать системное меню приложения или модального диалога - Alt + Space
Вызвать системное меню окна (кроме модальных диалогов) - Alt + Hyphen(-) - Alt + Num-
Вызвать главное меню - Alt - F10
Вызвать контекстное меню - Shift + F10
Переход по истории активности окон
Переместиться назад - Ctrl + "-"
Переместиться вперед - Ctrl + Shift + "-"
Вернуть активность обычному окну - Esc
Форма
Перейти к следующему элементу формы/выполнить действие кнопки по умолчанию - Enter
Выполнить действие кнопки по умолчанию - Ctrl + Enter
Перейти к следующему элементу формы - Tab
Вернуться к предыдущему элементу формы - Shift + Tab
Активизировать командную панель, связанную с активным элементом управления/формой - Alt + F10
Открыть "Список элементов управления формы" - Ctrl + Shift + L
Перемещение по элементам управления, объединенным в одну группу - Up, Down, Left, Right
Работа со списком и деревом
Открыть - F2
Обновить - Ctrl + Shift + R
Скопировать - F9
Новая группа - Ctrl + F9
Удалить строку - Shift + Del
Перемещение строки вверх - Ctrl + Shift + Up
Перемещение строки вниз - Ctrl + Shift + Down
Перенести элемент в другую группу - Ctrl + Shift + M
Перейти на уровень вниз с одновременным раскрытием группы - Ctrl + Down
Перейти на уровень вверх (к "родителю") - Ctrl + Up
Закончить редактирование - Shift + F2
Развернуть узел дерева - Num+ - Ctrl + Num+
Свернуть узел дерева - Num- - Ctrl + Num-
Развернуть узел дерева и все подчиненные - Num* - Ctrl + Alt + Num+
Свернуть узел дерева и все подчиненные - Ctrl + Alt + Num-
Развернуть все узлы дерева (выполняется в любом месте дерева) - Ctrl + Shift + Num+
Свернуть все узлы дерева (выполняется в любом месте дерева) - Ctrl + Shift + Num-
Изменение флажка - Пробел
Поле ввода
Переключить режим вставки/замены - Ins
Кнопка выбора - F4
Кнопка открытия - Ctrl + Shift + F4
Очистить поле - Shift + F4
Удалить символ слева от курсора - BackSpace
Удалить символ справа от курсора - Del
Удалить слово слева от курсора - Ctrl + BackSpace
Удалить слово справа от курсора - Ctrl + Del
Перейти в начало строки - Home
Перейти в конец строки - End
Поле картинки
Увеличить масштаб - Num+
Уменьшить масштаб - Num-
Прокрутить - Up, Down, Left, Right
Прокрутить на размер окна вверх - Page Up
Прокрутить на размер окна вниз - Page Down
Прокрутить на размер окна влево - Alt + PgUp
Прокрутить на размер окна вправо - Alt + PgDn
Редактор управляемых форм
Переключиться на закладку "Форма" - Alt + 1
Переключиться на закладку "Модуль" - Alt + 2
Переключиться на закладку "Форма" и активизировать закладку "Элементы" - Alt + 3
Переключиться на закладку "Форма" и активизировать закладку "Реквизиты" - Alt + 4
Переключиться на закладку "Форма" и активизировать закладку "Команды" - Alt + 5
Переключиться на закладку "Форма" и активизировать закладку "Командный интерфейс" - Alt + 6
Переключиться на закладку "Форма" и активизировать закладку "Параметры" - Alt + 7
Переключиться на закладку "Форма" и активизировать окно предварительного просмотра формы - Alt + 8
Редактор форм
Протестировать форму - Ctrl + R
Переместить элемент управления - Up, Down, Left, Right
Копировать элемент управления - Ctrl + (Up, Down, Left, Right)
Копировать элемент управления с инверсией выравнивания по сетке - Ctrl + Alt + (Up, Down, Left, Right)
Изменить размер элемента управления - Shift + (Up, Down, Left, Right)
Изменить размер элемента управления с инверсией выравнивания по сетке - Shift + Alt + (Up, Down, Left, Right)
Инверсия использования сетки - Alt + (Up, Down, Left, Right)
Открыть окно "Привязка границ для элемента…" - Ctrl + Shift + S
Начало редактирования - F2
Редактор табличных документов
Перейти к ячейке - Ctrl + G
Перемещение по ячейкам - Up, Down, Left, Right
Перемещение по ячейкам к следующей заполненной или пустой - Ctrl + (Up, Down, Left, Right)
Перемещение по ячейкам к следующей заполненной или пустой с выделением ячеек - Ctrl + Shift + (Up, Down, Left, Right)
Выделение ячеек - Shift + (Up, Down, Left, Right)
Выделение ячеек от текущей до начала строки - Shift + Home
Выделение ячеек от текущей до конца строки - Shift + End
Выделение строк - Alt + Shift + (Up, Down)
Выделение строк до следующей заполненной или пустой ячейки - Ctrl + Alt + Shift + (Up, Down)
Выделение колонок - Alt + Shift + (Left, Right)
Выделение колонок до следующей заполненной или пустой ячейки - Ctrl + Alt + Shift + (Left, Right)
Выделение ячеек от текущей до начала документа - Ctrl + Shift + Home
Выделение ячеек от текущей до конца документа - Ctrl + Shift + End
Прокрутить на страницу вверх - PgUp
Прокрутить на страницу вниз - PgDn
Прокрутить на страницу влево - Alt + PgUp
Прокрутить на страницу вправо - Alt + PgDn
Перейти к редактированию содержимого ячейки - Enter
Переключение режима редактирования/ввода в ячейке - F2
Перейти в начало строки - Home
Перейти в конец строки - End
Перейти в начало текста - Ctrl + Home
Перейти в конец текста - Ctrl + End
Установка имени текущей области - Ctrl + Shift + N
Редактор текстовых документов и модулей
Переключить режим вставки/замены - Ins
Перейти в начало строки - Home
Перейти в конец строки - End
Выделить до начала строки - Shift + Home
Выделить до конца строки - Shift + End
Перейти в начало текста - Ctrl + Home
Перейти в конец текста - Ctrl + End
Выделить до начала текста - Ctrl + Shift + Home
Выделить до конца текста - Ctrl + Shift + End
Прокрутить на одну строку вверх - Ctrl + Up
Прокрутить на одну строку вниз - Ctrl + Down
Перейти к началу предшествующего слова - Ctrl + Left
Перейти к началу следующего слова - Ctrl + Right
Выделить слово - Ctrl + W
Выделить предшествующее слово - Ctrl + Shift + Left
Выделить следующее слово - Ctrl + Shift + Right
Прокрутить на страницу вверх - PgUp
Прокрутить на страницу вниз - PgDn
Выделить предыдущую страницу текста - Shift + PgUp
Выделить следующую страницу текста - Shift + PgDn
Снять выделение - Esc
Перейти к строке - Ctrl + G
Удалить символ слева от курсора - BackSpace
Удалить символ справа от курсора - Del
Удалить слово слева от курсора - Ctrl + BackSpace
Удалить слово справа от курсора - Ctrl + Del
Установить/снять закладку - Alt + F2
Следующая закладка - F2
Предыдущая закладка - Shift + F2
Удалить текущую строку - Ctrl + L
Форматировать блок - Shift + Alt + F
Добавить комментарий - Ctrl + Num/
Удалить комментарий - Ctrl + Shift + Num/
Cдвинуть блок вправо - Tab
Сдвинуть блок влево - Shift + Tab
Синтаксический контроль - Ctrl + F7
Процедуры и функции модуля - Ctrl + Alt + P
Перейти к объявлению процедуры или переменной - F12
Контекстная подсказка - Ctrl + Пробел
Свернуть группу (курсор может быть в любом месте группы) - Ctrl + Num -
Развернуть группу (курсор может быть в любом месте группы) - Ctrl + Num +
Cвернуть все группы - Ctrl + Shift + Num -
Развернуть все группы - Ctrl + Shift + Num +
Обновить группировки - Ctrl+ Shift + R
Активизация шаблона - Ctrl + Q
Перейти по операторным скобкам назад - Ctrl + [
Перейти по операторным скобкам вперед - Ctrl + ]
Перейти по операторным скобкам назад с выделением текста - Ctrl + Shift + [
Перейти по операторным скобкам вперед с выделением текста - Ctrl + Shift + ]
Отладчик
Начать/продолжить отладку - F5
Перезапуск приложения для отладки - Ctrl + Shift + F5
Прекратить отладку - Shift + F5
Шагнуть в - F11
Шагнуть через - F10
Шагнуть из - Shift + F11
Идти до курсора - Shift + F10
Установить/снять точку останова - F9
Отключить/включить точку останова - Ctrl + Shift + F9
Список точек останова - Alt + F9
Вычислить выражение - Shift + F9
Открыть табло - Ctrl + Alt + W
Открыть стек вызовов - Ctrl + Alt + C
Редактор картинок
Переключение картинка/коллекция - Ctrl + K
Параметры картинки/коллекции - Shift + Alt + P
Отразить слева направо - Ctrl + H
Отразить сверху вниз - Ctrl + Shift + H
Выделение прямоугольником - Shift + Alt + S
Масштаб - Ctrl + M
Ластик - Ctrl + Shift + E
Заливка - Ctrl + Shift + F
Карандаш - Ctrl + Shift + I
Кисть - Ctrl + Shift + B
Линия - Ctrl + Shift + L
Кривая - Shift + Alt + С
Аэрограф - Ctrl + Shift + A
Текст - Shift + Alt + T
Увеличение масштаба - Ctrl + Num+
Уменьшение масштаба - Ctrl + Num-
Палитра свойств
Сохранить свойства - Enter
Восстановить значения свойства - Esc
Раскрыть категорию свойств - Num+
Закрыть категорию свойств - Num-
Перейти в начало палитры - Home
Перейти в конец палитры - End
Перейти к предыдущему свойству - Up
Перейти к следующему свойству - Down
Прокрутить на страницу вверх - PgUp
Прокрутить на страницу вниз - PgDn
Перейти к предыдущей категории - Ctrl + PgUp
Перейти к следующей категории - Ctrl + PgDn
Редактор карты маршрута
Перейти на следующий элемент карты - Tab
Перейти на предыдущий элемент карты - Shift + Tab
Уменьшить ширину элемента карты - Shift + (Left)
Увеличить ширину элемента карты - Shift + (Right)
Уменьшить высоту элемента карты - Shift + (Up)
Увеличить высоту элемента карты - Shift + (Down)
Перемещение выделенного варианта вверх (только при выделенном варианте в - Ctrl + (Up)
элементе "Выбор варианта")
Перемещение выделенного варианта вниз (только при выделенном варианте в - Ctrl + (Down)
элементе "Выбор варианта")
Поиск - Ctrl + F
Найти следующий - F3
Найти предыдущий - Shift + F3
Замена - Ctrl + H
Конфигурация
Открыть конфигурацию - Alt + К + Enter
Поиск во всех текстах - Alt + К + Т
Объединение конфигураций - Alt + К + О
Загрузить измененную конфигурацию - Alt + K + З
Конвертирование данных - Alt + К + Е
Администрирование
Пользователи - Alt + А + П
Сохранить данные - Alt + А + Х
Восстановить данные - Alt + А + В
Выгрузить данные - Alt + А + Ы
Загрузить данные - Alt + А + Г
Настройка журнала регистрации - Alt + А + Н
Распределенная ИБ - Alt + А + Р
Управление - Alt + А + Р + У
Автообмен - Alt + А + Р + А
Действия
Открыть в отладчике - Alt + Д + Т
Синтаксический контроль запросов - Alt + Д + К
Синтаксический контроль - Alt + Д + И
Процедуры и функции модуля - Alt + Д + Р
Файл
Новый - Ctrl + N
Открыть - Ctrl + O
Сохранить - Ctrl + S
Печать - Ctrl + P
Сравнить файлы - Alt + Ф + Р
Закрыть - Alt + Ф + З
Просмотр - Alt + Ф + Р + Р + Enter
Параметры страницы - Alt + Ф + М
Работа с закладками
Предыдущая закладка - Shift + F2
Закладка - Alt + F2
Следующая закладка - F2
Работа с блоком
Форматировать - Ctrl + Shift +F
Сдвинуть вправо - Tab
Сдвинуть влево - Shift + Tab
Добавить комментарий - Ctrl + Num /
Удалить комментарий - Ctrl + Shift + Num /
Окна
Закрыть окно - Ctrl + F4
Следующее окно - Ctrl + Shift + F6
Предыдущее окно - Ctrl + F6
Каскадом - Alt + О + К
Закрыть окно сообщений - Ctrl + Shift + z
Следующая страница - Ctrl + Alt + F
Предыдущая страница - Ctrl + Alt + B
Разделить окно - Alt + О + Р
Поиск и замена
Заменить - Ctrl + Shift + F3
Искать - Ctrl + F3
Повторить поиск - F3
Искать назад - Alt + F3
Искать вперед - Shift + F3
Переход к строке - Ctrl + Shift + L
Сервис
Калькулятор - Ctrl + F2
Синтаксис помощник - Alt + С + С
Настройка шаблонов - Alt + С + Н
Временная блокировка - Alt + С + В
Запуск предприятия - F11
Запуск отладчика - F12
Помощь
Помощь - F1
Содержание - Shift + F1
Поиск в Синтакс-Помощнике - Ctrl + F1
О программе - Alt + П + О
Обработка "Выгрузка и загрузка данных XML" (ВыгрузкаЗагрузкаДанныхXML)
Данная обработка позволяет производить обмен данными между одинаковыми (идентичными) конфигурациями на платформе 1С 8.х
Режимы работы
Обработка реализует 2 режима работы: Выгрузки (создание файла выгрузки указанных пользователем данных) и Загрузки (чтение файла выгрузки, созданного одноименным режимом, и запись имеющихся в нем данных). Установка режима осуществляется выбором в поле Режим.
Перед запуском того или иного режима (нажатие кнопки Выполнить) нужно указать имя файла выгрузки либо введя его вручную в поле "Имя файла", либо воспользовавшись кнопкой выбора этого поля и стандартным диалогом выбора файла.
В режиме загрузки имеется возможность редактирования использования итогов при записи регистров, что может повлиять на скорость загрузки.
Кнопки "Отключить итоги" и "Включить итоги" доступны при установленном флаге "Включить возможность редактирования использования итогов во время загрузки данных" и используются для ручного управления режимом использования итогов при загрузке данных.
Условия применимости обработки
Обработка может использоваться только в тех случаях, когда информационная база, в которой осуществлялась выгрузка данных, и та, в которой данные загружаются, являются однородными (конфигурации идентичны, данные могут различаться), либо все выгружаемые объекты практически полностью идентичны по составу и типам реквизитов и табличных частей, свойствам "ведущего" объекта метаданных и т.д. Следует отметить, что, в связи с указанными ограничениями, обработка главным образом предназначена для обмена между однородными ИБ.
Формат файла выгрузки отличается от формата файла, создаваемого при выгрузке по плану обмена, заголовочной частью. Для выгрузки данных (элементов справочников, наборов записей регистров и т.д.) обработкой используется тот же механизм XML-сериализации, что и выгрузкой по планам обмена, в этой части форматы файлов идентичны.
Определение состава выгрузки
Обработка позволяет осуществить как полную, так и частичную выгрузку данных информационной базы в файл. Настройка состава выгружаемых данных производится в диалоге путем установки флажков в колонке дерева, отображающего объекты метаданных, данные по которым могут быть выгружены. Дополнительная колонка флажков, "При необходимости", устанавливает необходимость выгрузки объектов данного типа "по ссылке". То есть, если флажок установлен только в колонке "При необходимости", то данные по такому объекту будут выгружаться не полностью, а только в том объеме, который необходим для поддержания ссылочной целостности в информационной базе, которая будет загружать файл выгрузки.
При открытии формы обработка устанавливает признак выгрузки по ссылке всем объектам, что гарантирует ссылочную целостность выгруженного фрагмента информационной базы.
При нажатии на кнопку "Определить объекты, выгружаемые по ссылке" обработка анализирует, ссылки на какие данные могут содержаться в объектах, у которых установлен признак полной выгрузки, и автоматически заполняет колонку флажков, индицирующих необходимость выгрузки по ссылке. Если объект уже имеет установленный флажок полной выгрузки, в таком случае флажок выгрузки по ссылке не устанавливается.
Возможные применения
Использование этой обработки возможно, например, для создания полной или частичной резервной копии данных, осуществления обмена данными между информационными базами, а также как вспомогательный инструмент при восстановлении проблемных информационных баз.
Сохранение производится процедурой СохранитьРеквизитыИТабличныеЧасти. В качестве параметров она принимает сохраняемый объект и имя файла. Ссылочные реквизиты сохраняются в виде GUID.
За чтение объекта отвечают процедуры ЗагрузитьРеквизитыИТабличныеЧасти и ЗагрузитьОбъектРекурсивно. Чтобы прочитать объект вызывается первая, ей передаются объект, который необходимо заполнить, и имя файла. Вторая является вспомогательной.
В приложенном файле - Скачивать файлы может только зарегистрированный пользователь! - демонстрационная обработка, позволяющая сохранить ссылочный объект БД в файл и заполнить объект из файла. Заполняемый объект должен быть того же типа, что и сохраненный, а также он должен быть предварительно создан, сохранен в ИБ и выбран в поле "Ссылка".
Для понимания особенностей записи и проведения документа в форме следует, прежде всего, разделять особенности записи самого объекта (ДокументОбъект) и особенности работы расширения формы. Расширение формы документа действует, если основной реквизит формы имеет тип ДокументОбъект. Оно обеспечивает специфическую функциональность формы при редактировании и записи документа. Задача расширения заключается в реализации удобного для пользователя поведения формы. Но собственно запись и проведение документа выполняет, разумеется, объект, являющийся реквизитом формы. Расширение документа обрабатывает различные команды пользователя, выполняет предварительные проверки и другие сервисные действия, а затем вызывает запись объекта. Запись объекта выполняется так же, как и если бы она вызывалась средствами встроенного языка. То есть с точки зрения объекта запись в форме и запись средствами языка ничем не различаются. Таким образом, расширение обеспечивает некоторую сервисную функциональность, обращаясь в конечном итоге к функциональности объекта. Следует учитывать, что расширение формы действует, только если используются механизмы формы и не действует, если выполняется обращение непосредственно к объекту. Например, если вызвать метод Записать() у объекта ДокументОбъект, то никакие действия расширения формы не будут выполняться. Чтобы они выполнялись нужно вызывать метод ЗаписатьВФорме().
Далее мы рассмотрим те сервисные действия, которые обеспечивает расширение формы документа. В данном разделе, мы опишем только те действия, которые специфичны именно для расширения формы документа и не будем касаться общих действий, которые поддерживаются расширениями всех объектов.
Установка даты документа
При открытии формы нового документа, если дата документа не установлена (равна значению типа Дата по умолчанию), то документу устанавливается рабочая дата. Следует заметить, что используется именно рабочая дата, а не текущая (если не установлено использование текущей даты в качестве рабочей). Это дает возможность пользователю настроить рабочую дату так, чтобы новые документы вводились определенной датой. При этом в качестве даты устанавливается начало дня (дата без времени), даже если в качестве рабочей даты выступает текущая дата. Но если свойство АвтоВремя имеет значение НеИспользовать, и рабочая дата равна текущей, то устанавливается текущая дата, вместе со временем. Таким образом, для варианта АвтоВремя = НеИспользовать при открытии берется рабочая дата (если она отличается от текущей) или текущая дата вместе со временем, а для остальных вариантов установка времени откладывается на момент записи документа.
При записи нового документа в форме если свойство АвтоВремя имеет значение отличное от НеИспользовать, и не используется оперативное проведение, и время документа пустое (0:00:00), то выполняется автоматическая установка времени на основании значения свойства АвтоВремя. Действие расширения формы в этом случае аналогично вызову метода УстановитьВремя() с вариантом выбранном в свойстве АвтоВремя и с использованием журналов документа.
Расширение формы так же предоставляет команды для установки времени документа в начало дня, конец дня, перед предыдущим и за последующим документом.
Установка режима записи
При нажатии кнопки "ОК", если для документа в метаданных разрешено проведение, документ записывается в режиме проведения.
Кроме того, расширение формы предоставляет две отдельные команды для записи с проведением и записи с отменой проведения.
При любой записи документа в форме, если установлено свойство расширения формы ПриЗаписиПерепроводить и документ проведен, то выполняется запись в режиме проведения. Это позволяет исключить ситуацию, когда пользователь изменит документ, а движения документа не будут обновлены.
Установка режима оперативного проведения
При записи документа в форме, расширение формы выполняет установку режима проведения (оперативное или неоперативное проведение). Установка выполняется по следующему алгоритму.
Вначале если свойство ИспользоватьРежимПроведения имеет значение Авто выполняется первичный подбор режима проведения из вариантов Оперативный, Неоперативный и Запрашивать.
Если у пользователя нет права на неоперативное проведение – используется оперативное проведение.
Если документ не проведен – используется оперативное проведение.
Если дата документа равна текущей, а время меньше или равно текущему, то используется режим Запрашивать. Здесь и далее в этой статье сравнение даты имеется в виду без учета времени, а сравнение времени описывается отдельно.
Если дата документа меньше текущей, то используется неоперативное проведение.
Если дата документа равна текущей и время больше текущего – используется оперативное проведение.
Дальнейшие действия системы определяются уже исходя из трех вариантов (Оперативный, Неоперативный и Запрашивать) установленных непосредственно в свойстве ИспользоватьРежимПроведения или на основании описанного алгоритма для варианта Авто.
Если дата документа меньше текущей, используется оперативный режим и у пользователя есть права на неоперативное проведение, то пользователю предлагается использовать неоперативный режим. Если пользователь отказывается, то запись документа отменяется.
Если дата документа меньше текущей, используется оперативный режим и у пользователя нет права на неоперативное проведение, то запись документа отменяется.
Если дата документа меньше текущей и используется режим Запрашивать, то в зависимости от наличия прав на неоперативное проведение или выбирается неоперативный режим (без запроса пользователя), или запись документа отменяется.
Если дата документа больше текущей и используется оперативный режим, то запись документа отменяется. Штатное поведение расширения формы не разрешает проведение документа завтрашней датой, даже если у пользователя есть права на неоперативное проведение. Это объясняется тем, что после появления документов проведенных завтрашней датой текущие остатки регистров используемых проводимыми оперативно документами перестают соответствовать реальным остаткам и механизм оперативного проведения для всех пользователей перестает работать адекватно.
Далее если используется режим Запрашивать, то пользователю выдается диалог с выбором режима проведения.
Полученный таким образом режим проведения (Оперативный или Неоперативный) используется при выполнении записи документа.
Проверка прав
При открытии формы документа, если документ проведен, а у пользователя нет права "Интерактивное изменение проведенных", то расширение переводит форму в режим ТолькоПросмотр.
При записи документа в форме выполняется проверка прав на интерактивное проведение и интерактивную отмену проведения в соответствии с текущим режимом записи.
Считывание движений
При открытии формы документа, если есть табличные поля, связанные с движениями (наборами записей) объекта редактируемого в форме, то эти движения считываются из базы данных и соответственно отображаются в табличных полях.
Параметры:
<Право> (обязательный)
Тип: Строка. Название права доступа.
<Объект метаданных> (обязательный) — Объект метаданных.
<Пользователь/Роль> (необязательный)
Тип: ПользовательИнформационнойБазы, Метаданные.Роли.Роль
Возвращаемое значение:
Тип: Булево. Истина - право доступа к объекту установлено; Ложь - в противном случае.
Описание:
Показывает установку права доступа к объекту метаданных для текущего пользователя.
Вызов метода всегда требует административных прав, если явно указан третий параметр - Пользователь/Роль, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется.
Примечание:
Права доступа к объектам метаданных устанавливаются при конфигурировании ролей Синтаксис:
Параметры:
<Наименование права> (обязательный)
Тип: Строка. Наименование запрашиваемого на объект права, например "Read".
<Объект метаданных> (обязательный)
Объект метаданных, права на доступ к которому проверяются.
<Список полей> (обязательный)
Тип: Строка. Список полей объекта базы данных, права на доступ к которым проверяются. Поля указываются списком, через запятую. Могут присутствовать имена табличных частей, реквизитов табличных частей, в последнем случае поле описывается как <Имя табличной части>.<Имя реквизита табличной части>.
<Пользователь/Роль> (необязательный)
Тип: ПользовательИнформационнойБазы, Метаданные.Роли.Роль. Указывает пользователя или роль, для которых нужно определить доступность права. При этом возвращается значение права так, как оно определено в конфигурации.
Возвращаемое значение:
Тип: ПараметрыДоступа.
Описание:
Позволяет получить права текущего пользователя на заданный объект метаданных с указанием полей.
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки, т.е. при обновлении данных, отображаемых табличным полем или при поиске по подстроке. Важно отметить, что обработчик данного события вызывается табличным полем перед вызовом обработчиков события ПриВыводеСтроки для всех видимых строк табличного поля. Основным отличием данного события от события ПриВыводеСтроки является то, что в обработчике события ПриПолученииДанных можно изменять настройки ячеек группы строк, а не одной строки как в обработчике события ПриВыводеСтроки.
Обрабатывая данное событие можно изменять шрифт, цвет фона или текста, как определенной ячейки, так и всей строки табличного поля, устанавливать высоту или видимость ячеек строки табличного поля, а также устанавливать картинку, флажок или новый текст в ячейке. Параметром данного события является объект типа ОформлениеСтрок - коллекция объектов типа ОформлениеСтроки, являющихся оформлениями строк табличного поля.
Важно отметить, что в некоторых случаях обработчик события ПриПолученииДанных может вызываться табличным полем более одного раза. Например, если текущая строка табличного поля находится в середине видимой области, то при обновлении обработчик события ПриПолученииДанных будет вызван табличным полем два раза: первый раз для группы строк, начиная с текущей строки до верхней видимой и второй раз для строки, следующей за текущей до нижней видимой строки. Такое поведение табличного поля связано с тем, что при обновлении табличное поле пытается сохранить позицию текущий строки в видимой области.
Поясним использовании события ПриПолученииДанных на следующем примере. Пусть существует форма списка справочника "Номенклатура" с двумя табличными полями. Пусть одно из табличных полей отображает указанный список справочника как дерево, а другое как иерархический список. Требуется в табличном поле, отображающем данные как иерархический список, отображать остатки по позициям номенклатуры.
Наиболее эффективным способом решения данной задачи является использование события ПриПолученииДанных. В обработчике данного события формируется запрос к регистру накопления "УчетНоменклатуры" для получения остатков. В качестве параметра данного запроса передается массив, содержащий ссылки на отображаемые строки табличного поля. Затем выполняется запрос и получается выборка. Полученная выборка обходится и значения остатков устанавливаются в ячейке "Остаток".
Один из наиболее актуальных сегодня вопросов создания, поддержки и развития информационных систем организаций — задача интеграции их отдельных подсистем и компонентов. Платформа «1С:Предприятие 8» обладает значительным спектром функций и механизмов взаимодействия с внешними программами и оборудованием на основе общепризнанных открытых стандартов и протоколов.
Довольно большую группу среди них составляют средства обмена данными, которые мы и рассмотрим в этой статье.
Для начала нужно сказать о довольно простых, но в то же время эффективных и часто используемых на практике возможностях.
* Работа с текстовыми документами. Встроенный язык платформы позволяет разработчику создавать, динамически формировать и записывать текстовые документы, в том числе на основе готовых шаблонов. Обмен данными с использованием текстовых документов может быть одним из самых простых способов взаимодействия с другими информационными системами.
* Последовательное чтение текстовых файлов. Дело в том, что такие файлы могут быть очень большого объема, поэтому существуют специальные программные объекты, позволяющие читать и записывать их быстро (с использованием оптимизированных алгоритмов).
* XML. Платформа позволяет организовывать интеграцию с прикладными системами с использованием XML-документов, являющихся на сегодня общепринятым средством представления данных. Поддержка XML выполнена на уровне встроенного языка.
* DBF-файлы. Механизм работы с базами данных формата DBF предназначен для обеспечения возможности манипулирования ими непосредственно из языка системы через объект xBase. Можно как работать с существующими базами данных, так и создавать новые базы данных произвольной конфигурации.
* Работа с файловой системой. Доступ к функциям работы с файловой системой реализован на уровне встроенного языка. Эта возможность может быть использована при организации взаимодействия с другими информационными системами через общие каталоги.
Базовые средства обмена данными
Платформа также содержит набор специализированных средств обмена данными для создания распределенных информационных систем на основе программ «1С:Предприятия» и решений других поставщиков.
Они реализуются благодаря использованию ряда средств платформы, которые разработчик может применять как по отдельности, так и в различных комбинациях, в зависимости от конкретной решаемой задачи. Такой подход позволяет обеспечить гибкость механизмов обмена и их настраиваемость на решение как можно большего круга задач. В состав средств платформы, используемых для построения схем обмена данными, входят:
* объекты «обмена»,
* средства сериализации,
* средства документов.
При помощи этих средств могут быть реализованы две основные технологии собственно обмена данными:
* универсальный механизм обмена данными;
* механизм управления распределенными информационными базами.
Планы обмена содержат информацию об узлах, которые могут участвовать в обмене данными, определяют состав информации и указывают, следует ли задействовать механизм распределенной информационной базы при обмене. В качестве узлов могут выступать информационные базы «1С:Предприятия» или других систем. Для каждого узла можно задать код, наименование и необходимый перечень реквизитов, описывающих узел. Узел может иметь также несколько подчиненных табличных частей для хранения информации, связанной с этим узлом, несколько форм для отображения информации, содержащейся в плане обмена, и т. д.. В плане обмена указывается также состав данных, которыми предполагается вести обмен. Для каждого из объектов прикладного решения, которые могут участвовать в обмене, можно задать режим автоматической регистрации их изменений. Программно разработчик всегда может выполнять регистрацию на уровне встроенного языка.
В одном прикладном решении может существовать несколько планов обмена, каждый из которых может описывать свой порядок обмена данными. Например, если выполняется обмен данными с удаленными складами и удаленными офисами, то, скорее всего, будет существовать два плана обмена (один — для обмена со складами, другой — для офисов), поскольку состав данных, которыми производится обмен со складами, будет значительно уже, чем состав данных, предназначенных для обмена с офисами.
С помощью объектов «план обмена» реализованы два важных внутренних механизма платформы.
* Служба регистрации изменений. Позволяет получать информацию о том, какие элементы данных были изменены и в какой узел обмена их необходимо передать. Для каждого элемента данных, указанного в плане обмена, ведется своя таблица регистрации изменений. Они имеют разную структуру в зависимости от того, для каких элементов данных регистрируются изменения, но все-таки структуры таблиц подобны. Каждая запись указывает на некоторый элемент данных, некоторый узел и содержит номер сообщения, в котором это изменение передано в первый раз.
* Инфраструктура сообщений. Перенос данных между узлами распределенной информационной базы выполняется с помощью сообщений, которые поддерживаются инфраструктурой сообщений. Каждое сообщение относится к определенному плану обмена, имеет определенный узел-отправитель, узел-получатель и целочисленный номер.
XML-сериализация — это процесс преобразования данных «1С:Предприятия» в последовательность данных формата XML и наоборот.
Средства чтения и записи XML-документов позволяют работать с данными формата XML на «базовом» уровне, без привязки к объектам «1С:Предприятия». В частности, они дают возможность открывать XML-документы для чтения, читать из них данные, создавать новые XML-документы и записывать в них данные. Все это активно используется при реализации различных схем обмена данными.
Универсальный механизм обмена данными
Универсальный механизм обмена данными предназначен для создания территориально распределенных систем на основе как «1С:Предприятия», так и решений других поставщиков. Однако этот механизм позволяет переносить только данные, перенос конфигурации и административной информации «1С:Предприятия» при его помощи невозможен. В качестве формата обмена используются XML-документы, при этом при обмене данными между информационными базами «1С:Предприятия» не накладывается ограничений на идентичность конфигурации и структуры конкретных объектов. В то же время в одной конфигурации может быть создано несколько независимых схем обмена с различными информационными системами. Важно также и то, что при организации схемы обмена не накладывается ограничений на структуру распределенной системы. Может быть организована как классическая структура типа «звезда», так и более сложные многоуровневые структуры типа «снежинка» и др.
Разработчику прикладного решения предоставляется возможность гибкого управления составом обмена с точки зрения как структуры передаваемых данных, так и состава передаваемой информации в конкретные узлы обмена. Объект базы данных первоначально создается в одном из узлов обмена, при этом состав передаваемой информации может регулироваться в зависимости от содержимого данных и не зависит от места первоначального ввода информациии.
Механизм управления распределенными информационными базами
Механизм управления распределенными информационными базами (УРИБ) играет ключевую роль в создании территориально распределенных систем на основе идентичных конфигураций «1С:Предприятия 8» (распределенная система должна иметь древовидную структуру, в которой существует корневой узел и определено отношение «главный—подчиненный» для каждой пары связанных узлов). Данная технология обеспечивает регистрацию изменений в базах данных, инфраструктуру сообщений и обмен информацией в формате XML. Централизованное управление конфигурацией системы осуществляется с помощью визуальных средств или программным образом. С ее помощью выполняется не только обмен данными, но и перенос программной конфигурации.
УРИБ реализует следующие основные возможности:
* интерактивное создание распределенной системы и выполнение обмена данными без дополнительного программирования;
* обеспечение идентичности конфигураций информационных баз, входящих в состав распределенной системы;
* подключение новых и отключение существующих узлов;
* создание начального образа информационной базы для нового узла;
* различные способы разрешения коллизий при одновременном изменении данных в разных узлах распределенной системы;
* в рамках одной распределенной информационной базы может быть создано несколько схем обмена;
* распределенная информационная база может содержать схемы обмена с другими информационными системами, в том числе с информационными базами «1С:Предприятия», не являющимися распределенными информационными базами;
* задание условий на передачу и прием изменений на уровне отдельных элементов данных;
* восстановление обмена данными в таких случаях, как восстановление информационных баз из резервных копий и т. д.;
* сжатие сообщений обмена в формате .ZIP и автоматическую распаковку сообщений обмена при приеме.
Различные способы управления обменом данными
Отличительная особенность механизма УРИБ заключается в том, что во всех узлах должны быть одинаковые конфигурации и между двумя связанными узлами должны быть установлены отношения главный—подчиненный. Благодаря этому процесс обмена можно формализовать и создавать распределенные информационные базы даже без программирования, так как система «знает», как обмениваться информацией. В отличие от этого, при использовании универсального механизма обмена данными в узлах может быть что угодно и взаимодействовать они могут как угодно, поэтому обязательно нужно писать код, описывающий правила такого взаимодействия. Таким образом, механизм УРИБ — это быстро и просто, но по определенным правилам, а универсальный механизм обмена данными — это «как угодно» и поэтому сложнее и требует написания всего кода вручную.
В целом же прикладное решение может содержать произвольное количество планов обмена как с использованием механизма УРИБ, так и без его использования. Например, одна и та же информационная база может входить в состав различных распределенных систем. Например, по одному плану обмена (с использованием УРИБ) она будет «общаться» с филиалами, а по другому плану обмена (с применением универсального механизма обмена данными) она может работать с корпоративной информационной системой (не «1С:Предприятие»), поставляя туда данные о работе филиалов для создания консолидированной отчетности по всему холдингу в целом.
Таким образом, программные средства и механизмы «1С:Предприятия» позволяют создавать различные по структуре однородные и неоднородные распределенные информационные системы.
Хочу поделиться с посетителями сайта своим подходом к преобразованию таблицы значений в дерево значений и обратно.
Вообще, при разработке отраслевой задачи, была необходимость почти во всех документах, выводить информацию в виде дерева и хранить ее в табличных частях документа, а также в интерактивной обработке данных в виде дерева.
Отсюда появился небольшой модуль для расширения возможности работы с деревом значений, хотя и с некоторыми оговорками.
Основной идеей является использование двух ключевых реквизитов/колонок КлючСтроки и КлючСвязи.
Однако они не всегда необходимы. Код, на мой взгляд достаточно "высушен".