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

12.04.11

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

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

Скачать файлы

Наименование Файл Версия Размер
Создать счет-фактуру выданный аванс на основании поступления безналичных денежных средств
.epf 7,57Kb
257
.epf 7,57Kb 257 Скачать

Условия:

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

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

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

Решение:

Шаг 1.

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

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

 

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

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

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

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

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

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

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

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

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


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

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

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

Шаг 2.

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

 

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

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

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

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

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

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

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

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


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

 

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 10400 руб.

02.09.2020    122113    670    389    

714

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7286    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3524    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177737    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99344    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18108    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28107    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

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

2400 руб.

24.09.2019    23601    15    15    

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

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

Поступление безналичных денежных средств на основании реализации товаров для Управления торговлей 11
http://infostart.ru/public/83248/
arturlix; 79044970523; +2 Ответить
2. alexk-is 6533 13.04.11 08:19 Сейчас в теме
Программный код в тексте публикации можно раскрасить получше.
ANDRU48DOP; +1 Ответить
3. 79044970523 929 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. Поручик 4670 30.06.12 16:28 Сейчас в теме
(0) Вот вам ещё две работы по теме, если актуально:
http://infostart.ru/public/141777/
http://infostart.ru/public/141765/
9. Yury1001 1470 17.07.12 11:41 Сейчас в теме
Это всё хорошо, а как изменить тот объект из которого вызвал?
Вернее изменить я его могу но форма не видит этих изменений, а если объект записать то нужно форму закрыть и заново открыть.

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

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

а, всё, нашел http://infostart.ru/public/84119/
извиняюсь
10. 79044970523 929 17.07.12 19:05 Сейчас в теме
Я верю что будет другое решение.
11. Вальская Людмила 5 17.10.13 09:42 Сейчас в теме
Спасибо!
Если кто может - подскажите толковую книжку по программированию для управляемого приложения!
(Ажеронок и проч, "Разработка управляемого интерфейса" не предлагать!)
13. AleksSF 222 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 Сейчас в теме
Спасибо! Полезно, доступно и понятно!
Оставьте свое сообщение