1с получить каталог обработки

Обновлено: 07.07.2024

Эта статья дает представление о работе внешних компонент в системе «1С: Предприятие».
Будет показан процесс разработки внешней компоненты для системы «1С: Предприятие» версии 8.2, работающей под управлением ОС семейства Windows с файловым вариантом работы. Такой вариант работы используется в большинстве решений, предназначенных для предприятий малого бизнеса. ВК будет реализована на языке программирования C++.

Внешние компоненты «1C: Предприятие»

  • с использованием Native API
  • с использованием технологии COM
Структура ВК

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

Запуск демонстрационной ВК

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


Демонстрационная ВК расположена на диске подписки ИТС в каталоге «/VNCOMP82/example/NativeAPI».
Для сборки демонстрационной ВК будем использовать Microsoft Visual Studio 2008. Другие версии данного продукта не поддерживают используемый формат проекта Visual Studio.

Открываем проект AddInNative. В настройках проекта подключаем каталог с заголовочными файлами, необходимыми для сборки проекта. По умолчанию они располагаются на диске ИТС в каталоге /VNCOMP82/include.
Результатом сборки является файл /bind/AddInNative.dll. Это и есть скомпилированная библиотека для подключения к конфигурации 1С.

Подключение ВК к конфигурации 1С

Создадим пустую конфигурацию 1С.
Ниже приведен код модуля управляемого приложения.

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

Демонстрация заложенного функционала

Произвольное имя внешней компоненты

Задача: Изменить имя внешней компоненты на произвольное.
В предыдущем разделе использовался идентификатор AddInNativeExtension, смысл которого не был пояснен. В данном случае AddInNativeExtension — это наименование расширения.
В коде ВК определен метод RegisterExtensionAs, возвращающий системе «1С: Предприятие» имя, которое необходимо для последующей регистрации ВК в системе. Рекомендуется указывать идентификатор, который в известной мере раскрывает суть внешней компоненты.
Приведем полный код метода RegisterExtensionAs с измененным наименованием расширения:

В приведенном примере имя ВК изменено на SomeName. Тогда при подключении ВК необходимо указывать новое имя:

Расширение списка свойств ВК

  1. Изучить реализацию свойств ВК
  2. Добавить свойство строкового типа, доступное для чтения и записи
  3. Добавить свойство строкового типа, доступное для чтения и записи, которое хранит тип данных последнего установленного свойства. При установке значения свойства никаких действий не производится
  4. Убедиться в работоспособности произведенных изменений

Полное описание методов, включая список параметров подробно описан в документации, поставляемой на диске ИТС.
Рассмотрим реализацию приведенных методов класса CAddInNative.
В демонстрационной ВК определены 2 свойства: Включен и ЕстьТаймер (IsEnabled и IsTimerPresent).
В глобальной области видимости кода библиотеки определено два массива:

которые хранят русское и английское названия свойств. В заголовочном файле AddInNative.h определяется перечисление:

  1. Добавить имя добавляемого свойства в массивы g_PropNames и g_PropNamesRu (файл AddInNative.cpp)
  2. В перечисление Props (файл AddInNative.h) перед ePropLast добавить имя, однозначно идентифицирующее добавляемое свойство
  3. Организовать память под хранение значений свойств (завести поля модуля компоненты, хранящие соответствующие значения)
  4. Внести изменения в методы GetPropVal и SetPropVal для взаимодействия с выделенной на предыдущем шаге памятью
  5. В соответствии с логикой приложения внести изменения в методы IsPropReadable и IsPropWritable

Перечисление Props будет иметь вид:

Для значительного упрощения кода будем использовать STL C++. В частности, для работы со строками WCHAR, подключим библиотеку wstring.
Для сохранения значения метода Тест, определим в классе CAddInNative в области видимости private поле:

Для передачи строковых параметров между «1С: Предприятие» и внешней компонентов используется менеджер памяти «1С: Предприятие». Рассмотрим его работу подробнее. Для выделения и освобождения памяти соответственно используются функции AllocMemory и FreeMemory, определенные в файле ImemoryManager.h. При необходимости передать системе «1С: Предприятие» строковый параметр, внешняя компонента должна выделить под нее память вызовом функции AllocMemory. Ее прототип выглядит следующим образом:

где pMemory — адрес указателя, в который будет помещен адрес выделенного участка памяти,
ulCountByte — размер выделяемого участка памяти.
Пример выделения памяти под строку:

Для удобства работы с строковыми типами данными опишем функцию wstring_to_p. Она получает в качестве параметра wstring-строку. Результатом функции является заполненная структура tVariant. Код функции:

Тогда соответствующая секция case оператора switch метода GetPropVal примет вид:

Метода SetPropVal:

Для реализации второго свойства определим поле класса CaddInNative

в котором будем сохранять тип последнего переданного значения. Для этого в метод CaddInNative::SetPropVal добавим команду:

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

Расширение списка методов

  1. Расширить функционал внешней компоненты следующим функционалом:
  2. Изучить способы реализации методов внешней компоненты
  3. Добавить метод-функцию Функц1, которая в качестве параметра принимает две строки («Параметр1» и «Параметр2»). В качестве результата возвращается строка вида: «Проверка. Параметр1, Параметр2»
  4. Убедиться в работоспособности произведенных изменений
  1. Добавить имя метода в массивы g_MethodNames и g_MethodNamesRu (файл AddInNative.cpp)
  2. Добавить осмысленный идентефикатор метода в перечисление Methods (файл AddInNative.h)
  3. Внести изменения в код функции GetNParams в соответствии с логикой программы
  4. При необходимости внести изменения в код метода GetParamDefValue, если требуется использовать значения по умолчанию параметров метода.
  5. Внести изменения в функцию HasRetVal
  6. Внести изменения в логику работы функций CallAsProc или CallAsFunc, поместив туда непосредственно исполняемый код метода

Отредактируем функцию GetNProps, чтобы она возвращала количество параметров метода «Тест»:

Внесем изменения в функцию CAddInNative::GetParamDefValue:

Благодаря добавленной строке

в случае отсутствия одного или нескольких аргументов соответствующие параметры будут иметь пустое значение (VTYPE_EMPTY). Если необходимо наличие значения по умолчанию для параметра, следует задать его в секции eMethTest оператора switch функции CAddInNative::GetParamDefValue.
Так как метод «Тест» может возвращать значение, необходимо внести изменения в код функции HasRetVal:

И добавим исполняемый код метода в функцию CallAsFunc:

Скомпилируем компоненту и приведем код конфигурации к виду:

Таймер

  1. Изучить реализацию таймера в демонстрационной ВК
  2. Модифицировать метод «СтартТаймер», добавив возможность передавать в параметрах интервал срабатывания таймера (в миллисекундах)
  3. Убедиться в работоспособности произведенных изменений

Рассмотрим реализацию таймера в демонстрационной ВК.
Так как мы рассматриваем процесс разработки внешней компоненты для ОС семейства Windows, не будем рассматривать реализацию таймера в других операционных системах. Для ОС GNU/Linux, в частности, реализация будет отличаться синтаксисом функции SetTimer и TimerProc.
В исполняемом коде вызывается метод SetTimer, в который передается функция MyTimerProc:

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

Приведем код метода CallAsProc к виду:

Теперь проверим работоспособность. Для этого в модуле управляемого приложения конфигурации напишем код:

Взаимодействие с системой «1С: Предприятие»

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

Создание конфигураций 1С: добавляем обработку

Автор уроков и преподаватель школы: Владимир Милькин

Продолжаем изучение азов создания конфигураций на 1С.

На этом уроке мы вместе создадим новую обработку, а затем напишем для неё команды, которые демонстрируют работу со справочником "Сотрудники".

Возвращаемся в конфигуратор и открываем дерево конфигурации.


Добавляем новую обработку

Правой кнопкой нажимаем на разделе "Обработки" и выбираем пункт "Добавить":


Открылось окно создания новой обработки. Перейдём на закладку "Основные" и укажем в качестве имени обработки "ОбработкаСправочников":


Создаём форму для обработки

Перейдём на закладку "Формы" нажмём на зелёный плюсик, чтобы добавить новую форму (визуальное представление нашей обработки):


Появился конструктор создания формы. Оставим всё по умолчанию и нажмём "Готово":


Открылась новая форма:


Создаём новую команду для формы

Перейдём на закладку "Команды"->"Команды формы":


Добавим новую команду (зелёный плюсик):


И в свойствах новой команды укажем имя "ВыводВсехСотрудников":


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


Нас перенесло в модуль формы в процедуру-обработчик команды "ВыводВсехСотрудников":


Пишем код обработчика команды

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

Сразу хочу сказать, что этот код нельзя писать прямо в процедуре "ВыводВсехСотрудников", так как она выполняется на клиенте (обратите внимание на специальную строчку перед процедурой "&НаКлиенте"). Попытка прочитать данные из базы в клиентской процедуре всегда будет приводить к ошибке (пока просто запомните это).

Поэтому давайте допишем в конце модуля процедуру такого вида:


Обратите внимание, что перед ней я указал признак "&НаСервере". Это означает, что она будет выполняться на сервере, а значит мы можем из неё читать данные справочника.

Теперь организуем вызов этой процедуры из клиентской "ВыводВсехСотрудников":


Тут логика такая:

Это на самом деле несложно. Обход всех справочников в 1С однотипен. А значит научившись это делать сейчас со справочником "Сотрудники", вы сможете делать также и с любыми другими справочниками.

Для доступа к данным справочника используется менеджер, доступ к которому осуществляется так:

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

Что представляет из себя менеджер справочника? Менеджер - это ещё не сами данные справочника. Менеджер - это некоторый программный объект (можете представлять его себе в виде чёрного ящика), через который мы можем что-либо делать со справочником.

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

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

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

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

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

Чтобы получить очередную порцию данных из выборки, необходимо вызвать у выборки встроенный в неё метод "Следующий". Получение порций данных (одна порция соответствует одному элементу справочника) обычно происходит в цикле:

Когда данные (элементы справочника) в выборке закончатся, метод "Следующий" вернёт Ложь и цикл прекратится.

После каждого вызова метода "Следующий" (при условии, что он вернул "Истина") выборка будет содержать в себе все поля с данными только считанного элемента справочника, обращаться к которым можно по именам через точку:

Получается в один момент - мы работаем с данными только одного из элементов справочника. И тут мы можем или сразу их вывести пользователю (методом "Сообщить") или, к примеру, мы можем сложить их в другую коллекцию (массив), чтобы потом уже за раз с ними что-нибудь сделать. Всё зависит от задачи, которую мы решаем.

Значит код процедуры "ВыводВсехСотрудниковНаСервере" напишем таким образом:


Превращаем команду в кнопку

Давайте проверять! Для этого перетащим нашу команду на форму, чтобы она превратилась в кнопку:


Готово!

Теперь запустим 1С:Предприятие (меню "Отладка"->"Начать отладку"), откроем нашу обработку (меню "Сервис"->"Обработка справочников") и нажмём кнопку "Вывод всех сотрудников":



Ну раз такое дело - со следующего урока начинаем создавать более интересные проекты.

Для учеников

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

На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .

Внешние обработки, печатные формы, обработки по заполнению табличных частей

В данном материале описываются особенности реализации механизма подключения "Внешние обработки, печатные формы, обработки по заполнению табличных частей" (далее ВПФО). Также перечисляются требования, предъявляемые к внешним обработкам, для возможности их использования данным механизмом.

Общее описание

Механизм предназначен для подключения (без изменения конфигурации):

  • Внешних обработок для произвольного выполнения
  • Внешних обработок в качестве дополнительных печатных форм объектов (справочников и документов)
  • Обработок для заполнения табличных частей объектов

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

Для реализации механизма ВПФО используется справочник "Внешние обработки".

Для справочника предусмотрены специализированные реквизиты*:

  • "Вид обработки" - описывает, какого вида данная ВПФО
    1. Произвольная обработка
    2. Обработка для заполнения табличных частей объектов
    3. Внешняя печатная форма
    • "Хранилище внешней обработки" - хранит двоичные данные подключаемой внешней обработки. При использовании двоичные данные сохраняются на диск во временный файл, и обращение к файлу производится программно как к внешней обработке.

    ПРИМЕЧАНИЕ
    Полный перечень реквизитов будет описан ниже, в разделе Техническая реализация механизма "Внешние обработки, печатные формы, обработки по заполнению табличных частей"

    Для удобства, формы списков ВПФО вызываются раздельно, с предустановленным отбором по реквизиту "Вид обработки", из подменю "Сервис".

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

    Для остальных пользователей назначаются права на чтение(использование) и запись(изменение) по каждому элементу справочника ВПФО.

    Преимущества использования механизма ВПФО перед механизмом платформы открытия внешних обработок:

    • Возможность использования механизма пользователями, НЕ имеющими права на интерактивное открытие внешних обработок
    • Ограничение доступа к использованию и изменению обработок на уровне записей (RLS), т.е. к каждой обработке отдельно
    • Целостность БД и неизменность функционала в зависимости от внешних факторов (переноса БД, сетевой работы пользователей, создания архивных копий БД и пр.)

    Описание видов справочника ВПФО и требования к подключаемым внешним обработкам

    Рассмотрим каждый вид ВПФО по отдельности.

    Произвольная обработка

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

    Открытие произвольных обработок в форме списка производится при выборе элемента ВПФО с видом "Произвольная обработка". При этом, производится сохранение двоичных данных из реквизита "Хранилище внешней обработки" на диск во временный файл. После этого, у сохраненной внешней обработки открывается основная форма.

    Основная форма для произвольной обработки должна быть определена обязательно.

    Обработка для заполнения ТЧ объектов

    Для обработок заполнения ТЧ необходимо указывать внешнюю обработку (файл на диске, с расширением epf), список объектов и их ТЧ, для которых необходимо использовать данную обработку.

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

    Перед открытием формы объекта в командных панелях табличных полей (источником данных для которых является табличная часть объекта), которым соответствуют определенные строки в справочнике ВПФО, программно добавляются пункты в подменю "Заполнить" (если подменю "Заполнить" отсутствует на командной панели, оно создается).

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

    Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта)

    • Объект – ДокументОбъект, СправочникОбъект. Откуда был произведен вызов процедуры заполнения внешней обработки;
    • ИмяТабличнойЧасти – Строка. Имя табличной части, для которой вызвана обработка;
    • ТабличноеПолеОбъекта – Элемент формы: Табличное поле. Табличное поле формы, для которого вызвана обработка.

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

    Обработка так же может иметь в своем составе макет "Параметры_Авторегистрации", используемый для автоматического заполнения принадлежности печатной формы в справочнике "Внешние обработки". Макет должен состоять из 2-х колонок – "полное имя объекта" и "имя табличной части".

    Пример макета Параметры_Авторегистрации:


    Внешняя печатная форма

    Для подключаемых внешних печатных форм указывается:

    • внешняя обработка
    • список объектов, для которых данная печатная форма используется

    Для каждого типа объекта дополнительно можно указать:

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

    Вызов диалога настройка условий отбора осуществляется при начале выбора значения в колонке "отбор":


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


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

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

    Для сохраненной внешней обработки:

    • заполняется реквизит "СсылкаНаОбъект" - тип "Любая ссылки", в который передается ссылка на объект, для которого необходимо выполнить печать;
    • вызывается функция "Печать()" (должна располагаться в модуле обработки с признаком "Экспорт") без параметров, возвращающая табличный документ.

    Наличие реквизита "СсылкаНаОбъект" и экспортной функции "Печать()" в модуле объекта обработки с видом "Внешняя печатная форма" обязательно.

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

    Обработка так же может иметь в своем составе макет "Параметры_Авторегистрации", используемый для автоматического заполнения принадлежности печатной формы в справочнике "Внешние обработки" состоящий из одной колонки – полное имя объекта для которого будет создаваться соответствующая кнопка печати.

    Пример макета Параметры_Авторегистрации:


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

    Техническая реализация механизма "Внешние обработки, печатные формы, обработки по заполнению табличных частей"

    В базе данных внешние обработки, печатные формы, обработки по заполнению табличных частей хранятся в справочнике "Внешние обработки". Справочник имеет следующую структуру:


    • ХранилищеВнешнейОбработки. Хранилище значения, хранятся двоичные данные обработки, определенной для всего элемента.
    • ВидОбработки. ПеречислениеСсылка. ВидыДополнительныхВнешнихОбработок, определяет вид ВПФО каждый вид (печатная форма, заполнение табличных частей, обработка) рассмотрен отдельно в разделе "Описание видов справочника ВПФО и требования к подключаемым внешним обработкам".
    • Комментарий. Строка неограниченной длинны.
    • КомментарийКФайлуИсточнику. Строка, неограниченной длинны, хранит параметры файла, дату создания и пр. Заполняется автоматически в момент интерактивного выбора файла внешней обработки. Пользователем не изменяется.

    ТабличнаяЧасть.Принадлежность. Хранит типы объектов, для которых задается ВПФО и прочие описанные ниже параметры. Табличная часть используется для элементов с видом обработки: "Печатная форма" или "Заполнение табличных частей".

    Реквизиты табличной части:

    • ПредставлениеОбъекта. Строка, неограниченной длинны, хранит строковое представление выбранного объекта, для отображения пользователю.
    • СсылкаОбъекта. СправочникСсылка, ДокументСсылка, содержит пустую ссылку на объект конфигурации. т.к. реквизит типа "Тип" для табличной части не может быть определен, то по пустой ссылке определяется тип объекта, для которого следует подключать внешнюю печатную форму или обработку по заполнению табличной части. Ссылку на пустое значение определенного типа удобно использовать в запросах.
    • ТабличнаяЧастьИмя**. Строка, 100. Содержит имя ТЧ объекта, для которого задается ВПФО.
    • ТабличнаяЧастьПредставление**. Строка, неограниченной длинны. Содержит синоним ТЧ объекта, используется для отображения пользователю представления табличной части объекта, для которого задается.
    • НастройкиПостроителяДляОтбора***. Хранилище значения, может содержать настройки построителя отчета, выгруженные из него отборы для выбранного объекта.
    • ХранилищеВнешнейОбработки***. ХранилищеЗначения, может содержит двоичные данные подключаемой внешней обработки., которая будет использоваться в первую очередь, вместо обработки расположенной в шапке.
    • ЗаменяемаяПечатнаяФорма***. Строка, 200. Имя печатной встроенной формы объекта, которую необходимо заменить подключаемой.
    • ИмяФайлаПечатнойФормы***. Строка, неограниченной длинны - имя файла подключенной печатной формы.
    • ПредставлениеОтбораПостроителя***. Строка, неограниченной длинны, хранит представление отбора построителя, используется для отображения представления отбора в табличной части формы элемента справочника "Внешние обработки".

    ** Используется только для элементов с видом обработки: "Заполнение табличных частей"
    *** Используется только для элементов с видом обработки: "печатная форма".

    Подключение дополнительных печатных форм к формам объектов конфигурации

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

    Подключение обработок по заполнению табличных частей к формам объектов конфигурации

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

    Вам приходилось отправлять внешнюю обработку по почте и в самый последний момент перепроверить - та ли это версия? Вам приходилось задаваться вопросом - какая из этих обработок с именами "Обработка1", "Обработка1 (новая)" и "Обработка1 (новая2)" является актуальной? А чем они отличаются? Если вы уже познакомились с системами контроля версий, то наверняка, сталкиваетесь с вопросом - какие изменения внесены между версиями обработки?

    Вы хотите получить возможность быстро посмотреть содержимое внешней обработки и сравнить ее с другой? И все это без запуска 1С:Предприятия, только из оболочки ОС? Тогда мы идем к вам! :)

    Задачи на разработку

    Итак, я хотел чтобы у меня была возможность:

    Поставленные самому себе задачи были достигнуты. Написан инструмент "V8 Viewer".
    Ниже располагается инструкция по применению.

    Возможности программы

    На данный момент, актуальная версия 1.0.2.6 умеет:

    1. Регистрироваться в системе, как обработчик открытия внешних отчетов и обработок. Это означает, что в любом месте системы, где есть возможность открыть файл на просмотр, можно открыть и посмотреть содержимое внешнего отчета(обработки).
    2. Просматривать содержимое файла, открывать макеты, модули форм и объектов. Для управляемых форм возможен просмотр элементов формы.
    3. Выполнять сравнение двух файлов, аналогично тому, как сделано в самой платформе. Имеется возможность сравнения дерева метаданных, содержимого макетов и модулей.
    4. Предусмотрен "отчет по свойствам" - в дереве сравнения можно отобразить отчет, похожий на стандартный "Отчет о сравнении объектов".
    5. В редакторе модуля есть возможность навигации по перечню процедур и функций, сворачивание/разворачивание всех блоков кода (по аналогии со стандартным редактором кода)
    6. Отображать внутреннее содержимое контейнера - низкоуровневый "просмотр" файла. Запускается правым щелчком на файле, пункт "Browse".
    7. Предусмотрено автоматическое обновление. При запуске проверяется наличие обновлений и выдается предложение об обновлении.

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

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

    При работе с SVN вы создаете где-нибудь репозитарий - хранилище, в котором будет лежать вся история версий. Это может быть каталог на компьютере, но лучше - где-то в сети Интернет. Допустим, мы хотим хранить версии просто на машине. Заходим в пустой каталог (пусть будет D:\REPO) и в контекстном меню выбираем пункт TortoiseSVN->Create repository here. Теперь, этот каталог будет нашей базой данных со всей историей версий.

    Далее, есть понятие "рабочего каталога". "Рабочий каталог", это то место, в котором вы ведете непосредственно разработку. Этот каталог "подключен" к репозиторию и может обмениваться с ним изменениями (фиксировать новые изменения, откатываться к предыдущим).

    Заходим в любой пустой каталог, выбираем в контекстном меню "SVN Checkout" и указываем путь до репозитория. Теперь, каталог подключен к репозиторию.

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

    Прелесть в том, что можно сравнивать 2 любые версии файла. Меню "Tortoise SVN->Show log->Compare with..". Кроме того, Tortoise позволяет сравнивать вообще любые 2 файла, не только в рабочем каталоге, а вообще везде.

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

    Настройка Tortoise SVN


    1. Устанавливаем V8 Viewer
    2. В любом каталоге щелкаем правой кнопкой и выбираем TortoiseSVN->Settings->Advanced

    3. В окне Advanced добавляем расширение .epf и указываем командную строку запуска V8 Viewer C:\Program Files\v8viewer.exe -diff %base %mine
    Обратите внимание на параметры командной строки:

    • ключ -diff запускает программу в режиме сравнения
    • шаблоны %base и %mine - это ключевые слова Tortoise. Вместо них он подставит пути к выбранным Вами файлам.

    По умолчанию, при сравнении модулей программа распаковывает их во временный каталог. При сравнении внешним diff-инструментом видны имена временных файлов, которые неинформативны.

    В версии 1.0.1 и старше возможно указание дополнительных ключей -name1 и -name2. В этих аргументах можно передать заголовки сравниваемых файлов, которые будут отображены в интерфейсе. Для TortoiseMerge можно воспользоваться макросами %bname и %yname. В них Tortoise передает заголовки сравниваемых файлов, по которым их можно идентифицировать.

    В конечном итоге, строка запуска сравнения может иметь следующий вид:

    \v8viewer.exe -diff %base %mine -name1%bname -name2%yname

    символами процента (%) отмечены ключевые слова Tortoise вместо которых он подставляет конкретные значения имен сравниваемых файлов и заголовков к ним. Рекомендуется настроить ключи -name1 и -name2, чтобы повысить информативность сравнения двух файлов 1С, чтобы видеть - где какой. Примеры настройки командной строки можно прочесть ниже.

    4. Сохраняем изменения.

    Теперь, если мы войдем в каталог с внешними обработками и выделим две из них, то в контекстном меню "Tortoise SVN ->" появится пункт "Diff", который запустит сравнение файлов.

    Особенности программы

    Системные требования

    Вся работа со внутренними файлами 1С, такими как табличные документы и графические схемы, выполняется программой " Настройка V8 Viewer

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

    Settings window

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

    Для сравнения текстов используется любой сторонний diff-viewer. В настройках необходимо указать командную строку для запуска. Метки "%1" и "%2" замещают имена файлов, передаваемые для сравнения. Необязательные метки %name1 и %name2 используются в качестве заголовков файлов.

    Ну и рекомендуется настроить соответствие типу файла - с помощью флажка "файловые ассоциации".

    Примеры настройки командной строки для diff-просмотрщика

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

    2. Подавляющее большинство инструментов для сравнения файлов понимают синтаксис:

    [путь к exe] [первый файл] [второй файл]

    Строка запуска для такого случая должна иметь вид: "C:\[путь к exe]" %1 %2

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

    "C:\[путь к exe]" /base:%1 /mine:%2 /bname:%name1 /yname:%name2

    Заключение

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

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

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

    P.S. Если понравится, не забывайте вернуться на эту страницу и поставить "плюсик" :)

    Спасибо за внимание!

    UPD 30.04.2020

    Исправлена ошибка открытия обработок, созданных современными версиями платформы

    Специальные предложения

    Electronic Software Distribution

    Интеграция 1С с системой Меркурий

    Алкогольная декларация

    Готовые переносы данных

    54-ФЗ

    Управление проектом на Инфостарте

    Траектория обучения 1С-разработчика

    Посмотрел. Круто!
    Теперь в моем наборе "must have".
    Почему сразу не подвязаны файлы отчетов *.erf ?
    Не хватает просмотра макетов СКД)
    *.cf даже открывает, можно узнать название конфигурации и почитать глобальный модуль) (1) Serj1C, читаем статью: это предварительная версия. Отчеты намеренно не подвязаны, ради экономии времени. Обязательно будут. Макеты СКД должны открываться. Разве нет? Внушает!
    Эх, когда ж ктонить уже на JavaScript сравнение форм портирует :(

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


    4-го фрэймворка по умолчанию нет в WinXP SP3, по крайней мере, на оф.диске с СП3 у меня вшит только 2.0 (5) andrewks, странно, у меня есть. Но у меня тестовый образ диска кхм. не совсем официальный.
    Вернее, у меня есть образ диска, на котором я тестировал "чистый запуск". Диск вроде родной, не "ремикс". Все запускается, работает.

    Вот ошибка выпала.
    При открытии формы в обработке под 8.2. Система win 7.

    (8)
    Вот. Но это честно был первый файл в который я ткнул.

    Редактор AvalonEdit. Но Вам им пользоваться нельзя, у вас аллергия :):):)

    (12) под линуксом не работает . Я надеюсь, что все-таки у Magister получиться доработать редактор и запустить его в linux версии конфигуратора. (13) pumbaE, под Линуксом, ага, не работает. и на Макоси тоже. Хотя есть Mono, можно вспомнить и пресловутый 1% компьютеров :)
    P.S. у самого дома - линукс, не стоит разводить старый, как мир холивар.

    (14) я не развожу, я просто уточняю.

    p.s.: вам скоро захочется делать merge для обработок ибо бранчи это удобно, еще захочется посмотреть историю изменения определенного куска модуля.

    (16) andrewks, на базе SynEdit, альтернатива SciColorer - это в снегопате. Если партнеры продавят api в конфигураторе, то когда-нибудь думаю можно будет и без снегопата.

    (17) pumbaE, а можно подробнее ? Есть определённые пожелания к api в конфигуратор? Давай составим петицию, главное чтобы она разумной была.

    (0) Evil Beaver , круто! Спасибо! Пожелания:
    1. Сравнение начинать не только правой кнопкой мыши - Показать различия в диалогах, а просто двойным щелчком. Ну или в настройках указать метод (возможно, при двойном ЛКМ открывать сам модуль).

    2. В сравнении SVN передавать не темповые файлы вида tmpCEE5.tmp, а нормальные названия. Я долго вкуривал, что файл слева - более поздняя версия ((. Или это зависит от настроек tortoise?

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

    (95) Cratos2, поподробней можете посмотреть в снегопате, я как скриптописатель могу показать мощь api снегопата и скриптов. 1. Сравнение начинать не только правой кнопкой мыши - Показать различия в диалогах, а просто двойным щелчком. Ну или в настройках указать метод (возможно, при двойном ЛКМ открывать сам модуль)
    Поведение содрал с родного "одинэсовского". Ваше предложение интересно, подумаю.
    2. В сравнении SVN передавать не темповые файлы вида tmpCEE5.tmp, а нормальные названия. Я долго вкуривал, что файл слева - более поздняя версия ((. Или это зависит от настроек tortoise?

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

    У меня английский интерфейс, скриншоты с него и снимал. Руссификация есть, но когда я ее вижу, то как слепой котенок пытаюсь переводить с русского обратно на английский. Дело привычки. Хотя айтишник, имхо, должен владеть английским, даже если он пишет "Если Тогда" :)

    4. За ошибку спасибо. Посмотрю.

    (13) Пока что мешает доработать нехватка времени и отсутствие всего требуемого функционала в Снегопате. С Сашей по этому поводу общались, но у него времени мало сейчас - так что быстро не получится.

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

    (33) Потому что цель 1С - зарабатывать деньги. И пока что эта цель вполне достигается.
    Не поставили задачу программистам пофиксить что-то - вот и не пофиксили. Всё просто :)

    А вот [quote]Используют бесплатные компоненты, вместо написания своих.[/quote]это наоборот хорошо. Зачем изобретать велосипеды?

    (31) sanches; kuntashov; srv7; Evil Beaver;
    Судя по массовым минусам - вы все согласны, т.е. вам тоже всем хватает только школьных знаний? :) (31) а меня в институте учили что Си и С++ это как бы не одно и тоже.
    И еще - а в какой это школе С++ дают или С ? Вы скажите - я постараюсь туда сына перевести, а то мы все по книжкам, да по книжкам и дома. (0) Маленькое уточнение: не только SVN но и для всей линейки Tortoise применима данная настройка (git, mercurial, bzr).
    (3) orefkov, сравнение ведь это пол дела, захотите сразу же и merge форм :) А зачем все это нужно?
    Текстовый файл с историей версий, описание, версии обработок в архиве.
    SVN - нужны только при групповой работе (и тогда да, ставить SVN какой-нить, просмоторщик вроде этого и т.д.), но никак не одному программисту.
    Все :)
    А сравнивать обработки можно вполне и типовыми средствами. отбило охоту кормить троля.
    Отвечу кратко - удобство.
    удобство пользоваться громоздким VSN в одиночку?!
    Да уж :)
    Это еще не известно, кто тролль :)

    (20) AlexO, кхм. история версий в архиве, а описание - в txt.
    Вопрос: Сколько кликов мышкой у вас получается от момента сохранения файла до момента регистрации новой версии?
    Ну или не кликов, а элементарных действий?

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

    Сколько кликов мышкой у вас получается от момента сохранения файла
    все столько же, как и создавать-нажимать кнопки и писать описание в SVN.

    кто вам делает откат? SVN? точно такой же "откат" - берете старую версию из архива и делаете с ней, что хотели.
    НО: зато все просто, всегда знаешь - как все устроено и где лежит, простейшая структура, возможность создания перекрестных "ссылок", виден размер всего и в частности, можно "подключать" любые файлы, компоновать все в какой душе угодно последовательности и структуре, могу поменять структуру как требуется, а не как заложили разработчики, если нужно по другому скопоновать файлы или время требует перемен, быстрое создание архива всей библиотеки и перенос и развертывание - в общем, полная свобода.
    И никаких ограничений :) (20) AlexO, прочтите (11) , автор предпочитает "громоздкий" svn (но svn развивается, посмотрите на версию 1.7 уже даже .svn в корне лежит, а не в каждой папке) , я использую bzr и git. Недосыпание очень вредит здоровью, а работа по вечерам вредит семейным отношениям. Поэтому хочу попросить автора все же поберечь себя и семью и работать в рабочее время :-) Я серьезно. (27)
    так вот, никакой SVN вам не позволит:
    - при смене ссылок - найти их ВСЕ и обновить (только Линукс так умеет, да и то - потому что у него используются непосредственно ССЫЛКИ-метки)
    - пометить, что каталог - пустой, и требует инфо
    . и многое, многое другое, что недоступно вашим SVN-ам..
    А я делаю все это - влегкую. Так что минусы - всем "защитникам" SVN. (48) AlexO, расшифруйте плиз
    - пометить, что каталог - пустой, и требует инфо -- для какой структуры каталогов это необходимо, пометить, что каталог должен быть пустым и т.д.
    - при смене ссылок - найти их ВСЕ и обновить -- какие ссылки, что менять и на что, что обновлять. (49) pumbaE,
    "- пометить, что каталог"
    если заранее сделана структура, но там нет инфо. Делаешь пометку на каталоге, потом можно его по пометке найти - где пустые.
    "- - какие ссылки, что менять и на что, что обновлять."
    а потому что не просто набор обработок и прочего, а с пояснениями и ссылками по пересекающимся работам.

    (50) AlexO, дружище, может хватит троллить? Был задан довольно конкретный вопрос - расскажи что ты имеешь в виду, как организован твой супер-пупер рабочий процесс?

    А ты отвечаешь малопонятными и неубедительными фразами ни о чем. Или объясни толком, с самого начала или не парь мозги, ок?

    (51)
    в (18 ) описана база.
    В (26 ), (48 ), (50 ) - использование.
    Что непонятно? Что структурированность, прежде всего - должна быть в голове? :)

    (52) AlexO, может сподобитесь на публикацию "Как я у меня структурировано располагаются обработки".
    Потому как из (18) непонятно где вы храните ссылки на пустые каталог в текстовом файлике или же архиве.
    Как архиве лежат версии обработок и по описанию можно быстрой найти необходимую версию, как с помощью перекресных ссылок вы знаете, что для этого клиента в этой обработке сделано то, для другого другое, при этом базой является вот та версия обработки и дополнительно у третьего клиента стоит еще старая версия.

    Читайте также: