Статьи по разработке к рассмотрению

Тема в разделе "Статьи", создана пользователем Grassway, 28 дек 2013.

  1. TopicStarter Overlay
    Grassway
    Offline

    Grassway Новичок в 1С

    Регистрация:
    28 дек 2013
    Сообщения:
    3
    Симпатии:
    10
    Баллы:
    4
    Пример создания простейшей обработки для управляемого интерфейса.

    Для примера возьмем конфигурацию «Бухгалтерия Предприятия 3.0″.
    Делать будем заполнение регистра сведений «Счета учета расчетов с контрагентами» значениями по умолчанию (обработка была актуальна еще на релизе 2.0, да и я думаю, будет актуальна, пока в конфигурациях 1С будет сохраняться механизм автоподстановки счетов расчетов)

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

    Код:
    Функция СведенияОВнешнейОбработке() Экспорт
    
    РегистрационныеДанные = Новый Структура();
    РегистрационныеДанные.Вставить("Наименование", "Установка счетов учета расчетов с контрагентами");
    РегистрационныеДанные.Вставить("БезопасныйРежим", Истина);
    РегистрационныеДанные.Вставить("Версия", "v 1.0");
    РегистрационныеДанные.Вставить("Информация", "v 1.0");
    РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
    
    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Идентификатор");
    тз.Колонки.Добавить("Использование");
    тз.Колонки.Добавить("Представление");
    
    НоваяСтрока = тз.Добавить();
    НоваяСтрока.Идентификатор = "ОткрытьОбработку";
    НоваяСтрока.Использование = "ОткрытиеФормы";
    НоваяСтрока.Представление = "Открыть обработку заполнения счетов учета расчетов";
    
    РегистрационныеДанные.Вставить("Команды", тз);
    
    Возврат РегистрационныеДанные;
    
    КонецФункции
    


    Это самая важная часть для регистрации обработки в конфигурации. Без этой функции обработку можно будет вызвать только через меню Файл — Открыть.

    Рассмотрим что здесь к чему.
    Функция формирует данные для записи нового элемента в справочник «ДополнительныеОтчетыИОбработки». Ключи формируемой структуры являются именами реквизитов нового элемента, значения — соответствующими значениями.

    [​IMG]

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

    [​IMG]

    В одном из мест в модуле видно, что вместо ключа «ВариантЗапуска» (согласно реквизитам табличной части справочника) нужно использовать ключ «Использование»

    [​IMG]

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

    Далее, создаем форму обработки. Естественно, управляемую. Добавляем на форму реквизит «Организация» (ссылка на справочник «Организации») и кнопку командной панели «Выполнить запись».

    [​IMG]

    Кнопка командной панели будет не видна, пока ей не будет назначена соответствующая команда:

    [​IMG]

    При создании команды формы, назначим ей новый обработчик — процедуру модуля формы (в нашем случае это будет процедура КомандаВыполнитьЗаписьДанных(Команда)

    Код:
    &НаСервере
    Процедура ВыполнитьЗаписьДанныхНаСервере()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Контрагенты.Ссылка
    |ИЗ
    | Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    | Контрагенты.ЭтоГруппа = ЛОЖЬ";
    тз = Запрос.Выполнить().Выгрузить();
    Для Каждого СтрокаТаблицы Из тз Цикл
    
    тКонтрагент = СтрокаТаблицы.Ссылка;
    Если тКонтрагент.ЭтоГруппа Тогда
    Продолжить;
    КонецЕсли;
    МенеджерЗаписи = РегистрыСведений.СчетаУчетаРасчетовСКонтрагентами.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Контрагент = тКонтрагент;
    МенеджерЗаписи.Организация = Организация;
    МенеджерЗаписи.Прочитать();
    МенеджерЗаписи.Активность = Истина;
    МенеджерЗаписи.Организация = Организация;
    МенеджерЗаписи.Контрагент = тКонтрагент;
    МенеджерЗаписи.ВидРасчетовПоДоговору = Перечисления.ВидыРасчетовПоДоговорам.РасчетыВВалютеРегламентированногоУчета;
    МенеджерЗаписи.СчетУчетаАвансовВыданных = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.02");
    МенеджерЗаписи.СчетУчетаАвансовПолученных = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02");
    МенеджерЗаписи.СчетУчетаРасчетовСПокупателем = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
    МенеджерЗаписи.СчетУчетаРасчетовСПоставщиком = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
    МенеджерЗаписи.Записать(Истина);
    КонецЦикла;
    
    КонецПроцедуры
    
    &НаКлиенте
    Процедура КомандаВыполнитьЗаписьДанных(Команда)
    
    ВыполнитьЗаписьДанныхНаСервере();
    Предупреждение("Обработка завершена!");
    
    КонецПроцедуры
    


    Теперь идем в режим Предприятия, и добавляем обработку в список внешних обработок:

    [​IMG]

    Что и как заполнять при привязке новой обработки:

    [​IMG]

    Публикация должна быть установлена в «Использование», Размещение — указано в каком разделе (подсистеме) будет доступна обработка, Команда — заполняется по данным сведений о регистрации обработки из функции «СведенияОВнешнейОбработке()», раздел Дополнительная информация — оттуда же.

    Остался один важный момент: в табличной части Команды есть колонка Быстрый доступ. Она определяет пользователей, которым будет доступен вызов обработки. Если в вашей базе нет пользователей, то выглядеть это будет примерно так:

    [​IMG]

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

    [​IMG]

    [​IMG]

    Обработка для изучения прикреплена к сообщению

    Вложения:

    ExtreMe, Lelchik37, Inkeeper и ещё 1-му нравится это.
  2. TopicStarter Overlay
    Grassway
    Offline

    Grassway Новичок в 1С

    Регистрация:
    28 дек 2013
    Сообщения:
    3
    Симпатии:
    10
    Баллы:
    4
    Получение макета в управляемой форме отчета (обработки)

    В процессе разработки очень часто требуется выведение информации в табличные документы (это как правило, отчеты различного рода). Без макетов тут никак. В обычных формах было все просто: Макет = ПолучитьМакет(«ИмяМакета»), в управляемом интерфейсе такого не получится. Подобная конструкция в модуле управляемой формы неизменно вызывает ошибку, в каком бы контексте она не использовалась.
    Сначала немного теории.

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

    2. Конструкции модуля объекта, не заключенные в операторные скобки (Процедура — КонецПроцедуры; Функция — КонецФункции), исполняются в момент инициализации отчета, до открытия основной формы.

    Логично предположить, что если в модуле объекта любому из реквизитов присвоить некое значение (соответствующего реквизиту типа), то это значение становится доступным и в управляемой форме. Дальше все просто до безобразия: помимо макета, добавляем реквизит с любым именем (назовем его «РеквизитМакет» для простоты обращения) и типом данных «Произвольный», и в модуле объекта записываем туда полученный макет. А дальше в модуле формы пользуемся уже полученным значением.

    Теперь картинки =)
    Исходный макет — это наш обычный макет, из которого будем "выдергивать" области для заполнения и выведения в результирующую таблицу. РеквизитМакет — это реквизит произвольного типа, который может хранить любые данные:

    [​IMG]

    Поместим в реквизит объекта полученный из макета табличный документ. При вызове отчета (обработки) в реквизит «РеквизитМакет» будет помещен табличный документ, сформированный из макета (как видно, для этого достаточно одной строчки кода в модуле объекта):

    [​IMG]

    Теперь наш макет доступен в модуле управляемой формы, как свойство основного реквизита «Отчет» (доступ «через точку»):

    [​IMG]

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

    Вложения:

    • DebtControl.erf
      Размер файла:
      10,2 КБ
      Просмотров:
      167
    SERGEI1983, anton-1981, ExtreMe и 3 другим нравится это.
  3. gennadyantropov
    Offline

    gennadyantropov Новичок в 1С

    Регистрация:
    19 июл 2011
    Сообщения:
    29
    Симпатии:
    3
    Баллы:
    4
    Можно так:
    Код:
    Макет = ЭтотОбъект.РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    Последнее редактирование: 4 июн 2014
    Lelchik37, sir_w и Irishka77 нравится это.
  4. Nik02071
    Offline

    Nik02071 Опытный в 1С

    Регистрация:
    12 ноя 2008
    Сообщения:
    347
    Симпатии:
    1
    Баллы:
    29
    Спасибо!
  5. ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Все понятно и подробно расписано.
    Можно еще добавить пункт сохранение реквизитов))))
    Последнее редактирование: 9 апр 2015

Поделиться этой страницей