Управляемое приложение. Внешняя обработка. Создание связанных объектов

12.04.11

Разработка - Инструментарий разработчика

Задача: В "1С:Управление торговлей 11" (релиз 11.06.7). Создать документ Счет-фактура выданный аванс на основании документа Поступление безналичных денежных средств из формы документа или из формы списка документов.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Создать счет-фактуру выданный аванс на основании поступления безналичных денежных средств
.epf 7,57Kb
259
259 Скачать (1 SM) Купить за 1 850 руб.

Условия:

1) До записи нового документа счет-фактура выданный аванс показать его заполненную, по основанию, форму и предложить пользователю интерактивно его записать;

2) Обработку создания документа сделать внешней и подключаемой к форме документа основания.

Нюанс: У документа счет-фактура выданный аванс в конфигурации оснований не задано.

Решение:

Шаг 1.

Понятно, что от нас требуется создать внешнюю обработку вида "СозданиеСвязанныхОбъектов" и подключить её в информационную базу.

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

 

Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.ПоступлениеБезналичныхДенежныхСредств");

    ПараметрыРегистрации.Вставить("Вид", "СозданиеСвязанныхОбъектов");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Создать документ счет-фактура на аванс на основании документа поступление безналичных денежных средств");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка табличной части к документу счет-фактура выданный аванс");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    ДобавитьКоманду(ТаблицаКоманд,
    "Счет-фактура на аванс",
    "Счет-фактура на аванс",
    "ВызовКлиентскогоМетода",
    Истина);

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
  Команды = Новый ТаблицаЗначений;
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
  Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Истина, Модификатор = "")
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


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

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

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

Шаг 2.

Так как мы использовали ВызовКлиентскогоМетода, то обязательную процедуру, для внешней подключаемой обработки создания связанных объектов, ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт, необходимо выполнять &НаКлиенте в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит, и поместим внутрь модуля формы следующий код:

 

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт

    //Переберем все выбранные документы на основании, которых будет созданы другие новые документы
    //В нашем случае это всего один документ "Поступление безналичных денежных средств"
    Для каждого Элемент из ОбъектыНазначенияМассив Цикл

        //Получая форму объекта создаваемого документа, мы уже создаем этот объект
        ФормаДок = ПолучитьФорму("Документ.СчетФактураВыданныйАванс.ФормаОбъекта");

        //Далее мы получаем объект только, что созданной формы и помещаем её в переменную
        //В объекте содержатся все реквизиты (элементы) формы
        ДанныеФормы = ФормаДок.Объект;

        //Мы помещаем объект формы в переменную,
        //так как должны передать её в процедуру на сервере,
        //где нельзя изменять объект формы, зато можно править переменную содержащую его
        СоздатьНовыйДокумент(Элемент, ДанныеФормы);

        //После выполнения процедуры на сервере мы получаем изменную переменную ДанныеФормы,
        //которую необходимо передать в уже созданную нами форму
        КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);

        //Открываем результат выполнения обработки
        ФормаДок.Открыть();
    КонецЦикла;

КонецПроцедуры


Ниже приведу код, который у вас может быть совершенно другим, и делать какие-либо другие манипуляции с объектом формы:

 

&НаСервере
Процедура СоздатьНовыйДокумент(Элемент, НовыйОбъект)

    Основание = Элемент.Ссылка;

    НовыйОбъект.Дата = ТекущаяДата();
    НовыйОбъект.Организация = Основание.Организация;
    НовыйОбъект.ДокументОснование = Основание;
    НовыйОбъект.Контрагент = Основание.Контрагент;
    ДанныеОснования = ПолучитьДанныеОснованияНаСервере(НовыйОбъект.ДокументОснование);
    ЗаполнитьЗначенияСвойств(НовыйОбъект, ДанныеОснования);

    Для каждого СтрокаТЧ из Основание.РасшифровкаПлатежа Цикл
        НоваяСтрока = НовыйОбъект.Авансы.Добавить();
        Если ЗначениеЗаполнено(СтрокаТЧ.СчетНаОплату) Тогда
            НоваяСтрока.Содержание = "Предварительная оплата" + ФормированиеПечатныхФорм.СформироватьЗаголовокДокумента(СтрокаТЧ.СчетНаОплату, НСтр("ru=' по счету на оплату'"));
        КонецЕсли;
        НоваяСтрока.Сумма = СтрокаТЧ.Сумма;
        НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118;
        ТекПроцентНДС = ЦенообразованиеКлиентСервер.ПолучитьСтавкуНДСЧислом(НоваяСтрока.СтавкаНДС);
        НоваяСтрока.СуммаНДС = ЦенообразованиеКлиентСервер.РассчитатьСуммуНДС(НоваяСтрока.Сумма, ТекПроцентНДС);
    КонецЦикла;

    НовыйОбъект.Сумма = НовыйОбъект.Авансы.Итог("Сумма");
    НовыйОбъект.СуммаНДС = НовыйОбъект.Авансы.Итог("СуммаНДС");

КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеОснованияНаСервере(ДокументОснование)

    ДанныеОснования = Документы.СчетФактураВыданныйАванс.ПолучитьВходящиеНомерДатуДокумента(ДокументОснование);

    Возврат ДанныеОснования;

КонецФункции


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

Если есть более оптимальные, более правильные решения поставленной задачи, сообщайте об этом мне или публикуйтесь самостоятельно, не молчите. На данный момент информации о внешних подключаемых обработках на управляемом приложении почти нет, даже книги Радченко М.Г. дают её в ограниченном объеме.

P.S. Следующая задача, которую я пытаюсь решить: внешняя подключаемая обработка заполнения объекта без его записи в информационную базу.

Релиз платформы: 8.2.13.219 Файл-сервер

UPD: Хорошие примеры от Поручик: первый и второй

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    152641    836    398    

846

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    4399    29    14    

39

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами. Self hosted версия

300000 руб.

03.03.2021    14265    12    27    

36

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    20827    59    43    

106

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    14163    36    7    

69

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    9436    35    10    

57

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3240 руб.

14.01.2013    185840    1127    0    

899

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    16827    6    30    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4691 12.04.11 16:10 Сейчас в теме
(0)
>>>> сообщайте об этом мне или публикуйтесь самостоятельно, не молчите.
Слушаюсь, вашескородие. Сделано.

Реализация/Перемещение товаров на основании поступления товаров для Управления торговлей 11
http://infostart.ru/public/83963/

Поступление безналичных денежных средств на основании реализации товаров для Управления торговлей 11
http://infostart.ru/public/83248/
arturlix; 79044970523; +2 Ответить
2. alexk-is 6541 13.04.11 08:19 Сейчас в теме
Программный код в тексте публикации можно раскрасить получше.
ANDRU48DOP; +1 Ответить
3. 79044970523 934 13.04.11 15:02 Сейчас в теме
Оформил текст кода разукрашкой. Спасибо. Очень полезная вещь!
4. пользователь 15.09.11 14:44
Сообщение было скрыто модератором.
...
5. andron79 13.01.12 10:04 Сейчас в теме
Спасибо, очень помогло.
6. пользователь 13.01.12 15:33
Сообщение было скрыто модератором.
...
7. Гость 20.02.12 00:30
Спасибо, очень пригодилась
8. Поручик 4691 30.06.12 16:28 Сейчас в теме
(0) Вот вам ещё две работы по теме, если актуально:
http://infostart.ru/public/141777/
http://infostart.ru/public/141765/
9. Yury1001 1472 17.07.12 11:41 Сейчас в теме
Это всё хорошо, а как изменить тот объект из которого вызвал?
Вернее изменить я его могу но форма не видит этих изменений, а если объект записать то нужно форму закрыть и заново открыть.

ч/з 9мин ...ну или Действия Перечитать, всё равно лажа.

З.Ы. Ногами не бейте - два часа страдаю, пока ничего не получается.
Нет ли где случайно примера заполнения табличной части?

а, всё, нашел http://infostart.ru/public/84119/
извиняюсь
10. 79044970523 934 17.07.12 19:05 Сейчас в теме
Я верю что будет другое решение.
11. Вальская Людмила 5 17.10.13 09:42 Сейчас в теме
Спасибо!
Если кто может - подскажите толковую книжку по программированию для управляемого приложения!
(Ажеронок и проч, "Разработка управляемого интерфейса" не предлагать!)
13. AleksSF 226 13.12.13 23:54 Сейчас в теме
(11) Вальская Людмила,
На мой взгляд это самое лучшее http://www.spec8.ru/
12. sumixam 08.11.13 07:49 Сейчас в теме
Добрый день коллеги, хотел бы поитересоваться нет ли у кого ссылки на статью или примерчик, где можно глянуть как из документа на управляемой форме (свой документ), ввести на основании документ первичный в бухгалтерии (30 типов документов) или УПП буду очень признателен за информацию, пока ничего путнегоне нашел. Спасибо.
14. elian 137 25.04.14 12:05 Сейчас в теме
Автор умалчивает о структуре параметров, которая необходима для корректного создания документов, например, в конфигурации БП 3.0.
15. MasterIt 29.09.14 15:41 Сейчас в теме
Мне, как новичку в программировании 1С было очень интересно, спасибо!
16. SemenovaMarinaV 22.10.14 18:21 Сейчас в теме
а как посмотреть структуру подчиненности в ЗУП 3.0
17. kudim 28.11.14 11:08 Сейчас в теме
Спасибо! информация полезная еще бы то же самое, но для форм с программным формированием колонок в табличных частях создаваемого документа.
18. evg_m 9 23.01.15 09:36 Сейчас в теме
Подскажите пожалуйста. Сделала я обработку по вашему примеру. В отладке работает как надо. При регистрации обработки в поле показывать указываю "В формах элементов справочников и документов", т.е. не в списке команд. В документе появляется моя команда, но создается только пустая форма документа. А если в списке команд, тогда открывается форма с командой и от туда все заполняется. Как сделать чтобы работало из формы???
19. vadyasty 26.02.16 08:20 Сейчас в теме
Спасибо, с Вашей помощью заполняем требование-накладную по инвентаризации
20. DrDrew34 24.05.16 09:02 Сейчас в теме
21. bestboroda 02.08.21 12:20 Сейчас в теме
Спасибо! Полезно, доступно и понятно!
Оставьте свое сообщение