1) До записи нового документа счет-фактура выданный аванс показать его заполненную, по основанию, форму и предложить пользователю интерактивно его записать;
2) Обработку создания документа сделать внешней и подключаемой к форме документа основания.
Нюанс: У документа счет-фактура выданный аванс в конфигурации оснований не задано.
Понятно, что от нас требуется создать внешнюю обработку вида "СозданиеСвязанныхОбъектов" и подключить её в информационную базу.
Приведу код в модуле обработки:
Так как нам придется работать с формами объектов, мы просто вынуждены использовать метод ВызовКлиентскогоМетода для вызова команды внешней обработки.
Напомню, при использовании ВызовСерверногоМетода с формами объектов работать не получится.
Подробнее о типовых принципах создания внешних подключаемых обработок и печатных форм вы можете почитать здесь.
Так как мы использовали ВызовКлиентскогоМетода, то обязательную процедуру, для внешней подключаемой обработки создания связанных объектов, ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт, необходимо выполнять &НаКлиенте в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит, и поместим внутрь модуля формы следующий код:
Ниже приведу код, который у вас может быть совершенно другим, и делать какие-либо другие манипуляции с объектом формы:
В результате наша задача будет выполнена, документ счет-фактура выданный аванс будет создан на основании документа поступление безналичных денежных средств из его же формы. Но при этом созданный документ не будет записан в информационную базу, а будет открыта только его заполненная форма с возможностью интерактивной записи, проведением и возможностью редактирования.
Если есть более оптимальные, более правильные решения поставленной задачи, сообщайте об этом мне или публикуйтесь самостоятельно, не молчите. На данный момент информации о внешних подключаемых обработках на управляемом приложении почти нет, даже книги Радченко М.Г. дают её в ограниченном объеме.
Релиз платформы: 8.2.13.219 Файл-сервер
UPD: Хорошие примеры от Поручик: первый и второй
На этапе создания конфигурации разработчик анализирует предметную область и требования пользователей, создает объекты конфигурации, настраивает связи между ними путем установки их свойств, визуально конструирует экранные формы и макеты отчетов, пишет программные модули в определенных точках конфигурации. В результате получается прикладное решение, призванное облегчить работу конечных пользователей.
Структура прикладного решения (конфигурации) определяется составом объектов конфигурации и взаимосвязями между ними. Под объектами конфигурации понимаются средства 1С:Предприятия, предназначенные для отражения реальных объектов и явлений предметной области, например, справочник "Контрагенты", документ "Счет" и т.д. Разработчик может создавать объекты, не имеющие явного физического воплощения в предметной области, но необходимые для решения задачи, например, регистры сведений, обработки и т.д.
Взаимосвязь объектов
В самом общем виде взаимосвязь всех объектов можно представить следующим образом:
- Блок " Условно-постоянная информаци я " содержит объекты, сохраняемые в базе данных и содержащие данные, меняющиеся сравнительно редко . Например, константа "Название организации", справочник "Сотрудники", перечисление "Тип клиента" и т.д. Можно сказать, что в этот блок данные вводятся один раз и используются много раз, в нескольких хозяйственных операциях, актах расчета.
- Блок " Документы " включает, во-первых, документы, предназначенные для регистрации событий и операций , и, во-вторых, журналы, как средство их смысловой группировки. Например, документы "Приходная накладная", "Расходная накладная" и журнал "Складские документы". Документ характеризуется номером и датой. С помощью служебных объектов "Нумераторы" можно организовать "сквозную" нумерацию документов разных видов. Другой служебный объект "Последовательность" предназначен для поддержания правильности движений по регистрам, путем строгого порядка проведения документов.
- Блок " Регистры " предназначен для хранения информации о состояниях и количествах объектов базы данных, например, регистр сведений "Состояние сотрудников", "Цены товаров", регистры накопления "Продажи", "Остатки товаров" и т.д. В регистрах, кроме фактических данных, могут храниться также плановые данные, например, плановый объем продаж, прогнозируемые курсы валют и т.д.
- Блок " Обработка и вывод информации " включает обработки и отчеты, которые используют уже введенные в базу данные для их обработки и представления пользователю (печати). Обработки предназначены для выполнения действий и расчетов над имеющейся в базе информацией, например, обработка "Закрытие периода", а отчеты формируют различные печатные формы, например, отчет "Анализ продаж".
Объекты конфигурации
В платформе 1С:Предприятия 8 существуют следующие объекты конфигурации (кроме тех, которые располагаются в ветви Общие):
В константах хранятся редко изменяемые значения, например, Название организации, ИНН, ФИО руководителя и т.д. У константы обычно назначен примитивный, ссылочный или составной тип данных.
В справочниках содержится условно-постоянная списковая информация, например, список товаров, список сотрудников. Такие объекты обычно характеризуются кодом и наименованием.
У справочников также могут быть реквизиты, задаваемые разработчиком, и табличные части, что является важным отличием от версии 7.7. Теперь информацию, связанную с объектом, целиком ему принадлежащую и не имеющую объектной сущности, можно хранить в табличных частях.
Также имейте в виду, что периодических реквизитов справочников в версии 8 больше нет и вместо них для хранения истории изменения данных можно использовать периодические регистры сведений. Подробнее о регистрах сведений написано ниже.
Документы хранят информацию о событиях в предметной области, о проведенных или планируемых хозяйственных операциях, например "Приходная накладная", "Платежное поручение", "План продаж" и т.д. Документ характеризуется номером и датой. Обычно при проведении документа изменяется состояние регистров, например, увеличивается количество товара в регистре Остатки при проведении приходной накладной.
У документа может быть несколько табличных частей, что является важным отличием от версии 7.7. Табличные части позволяют сохранить связанную с документом списковую разнородную информацию, например, перечень товаров, график платежей, список дополнительных расходов и т.д.
Журналы — это средство группировки связанных по смыслу документов, например, журнал Склад объединяет приходные и расходные накладные. Аналогично могут быть созданы журналы Банк, Кадры и т.д. Заметьте, что создавать журнал для отображения документов одного вида не нужно, поскольку у каждого документа есть форма списка, которая генерируется автоматически или которую можно создать самостоятельно. Журналы полезны только для группировки документов разного вида.
Нумераторы — это служебные объекты, связанные с документами и предназначенные для единой (сквозной) нумерации документов нескольких видов, например, нумератор "Кадровый", который используется для присвоения номеров всем кадровым приказам. Опять же нумератор имеет смысл, когда требуется присваивать номера по единому правилу документам разных видов.
Предназначены для выстраивания документов в единую хронологическую последовательность, например, "Партионный учет". Последовательности позволяют контролировать дату актуальности итогов регистров. Например, если документ при своем проведении использует итоги какого-либа регистра, то при изменении движений этого регистра, которые были до даты проведения документа, движения документа могут стать некорректными.
Чтобы восстановить правильность движений документа, его нужно перепровести. Последовательность позволяет определить дату (момент времени), на которую итоги регистра являются правильными. При нарушении последовательности пользователь должен ее восстановить путем перепроведения всех документов, входящих в последовательность, начиная от текущей границы актуальности.
В отличие от версии 7.7, в версии 8 у последовательностей могут быть измерения, которые позволяют более точно отследить по каким данным были нарушены итоги, например, по конкретному товару или конкретному контрагенту. Тогда восстановление последовательности будет происходить быстрее за счет того, что будут перепроводиться не все документы, а только те, которые сделали движения по значению данного измерения.
Перечисление — это предопределенный набор значений, заданный еще на этапе разработки приложения, который не редактируется в режиме Предприятие. Конфигурация рассчитывает на определенные значения, например, перечисление ТипКлиента со значениями Обычный и ОченьВажнаяПерсона. Для VIP-клиентов можно предусмотреть скидки.
На основе информации из базы данных отчеты выдают печатные формы, содержащие всевозможные реестры, детальную и сводную информацию, например, отчеты "Оборотно-сальдовая ведомость", "Список сотрудников", "Анализ продаж".
Отчеты, как и многие другие объекты конфигурации, могут иметь реквизиты и табличные части, но их смысл отличается от реквизитов и табличных частей справочников и документов. Дело в том, что отчет (и обработки) — это объекты, которые не сохраняются в базе данных, а существуют только в определенные периоды времени, пока с ними работает пользователь. Поэтому нужно понимать назначение реквизитов и табличных частей отчетов (обработок) — они используются для указания параметров формирования отчетов и выполнения обработок.
Производят некоторую обработку информации, содержащейся в базе данных, например, обработка "Расчет зарплаты", "Закрытие периода".
У обработок могут быть реквизиты и табличные части, их смысл аналогичен реквизитам и табличным частям отчетов, и совершенно отличается от справочников и документов.
Планы видов характеристик
Предназначены для хранения дополнительных характеристик объектов, например дополнительных свойств товаров (вес, цвет, размер). Новые свойства можно вводить в режиме Предприятие. Через этот объект реализован механизм субконто в бухгалтерском учете.
Подробнее о планах видов характеристик можно прочитать в этом разделе.
Предназначены для хранения любой информации об объектах в разрезе заданных измерений, например, "Цены товаров". Особенность регистра сведений от регистра накопления состоит в том, что в регистре сведений каждая запись уникальна и полностью определяется своими измерениями. Например, если регистр сведений "ЦеныТоваров" имеет измерения Номенклатура и ТипЦен, то мы не сможем ввести в этот регистр две цены одного типа по одной номенклатуре, например, две оптовые цены товара "Холодильник Bosh 1232".
Если требуется хранить историю изменения информации, то регистр сведений делается периодическим, например, "Курсы валют". Для таких регистров в ключ уникальности записи, кроме измерений, добавляется поле "Период".
В регистрах сведений, подчиненных регистратору, каждая запись должна быть обязательно связано с документом-регистратором. Это не означает, что она вводится этим документом при своем проведении, но она обязательно должна содержать ссылку на документ в поле "Регистратор".
Предназначены для хранения информации поддающейся суммированию и развернутой по комбинации измерений, например, "Остатки товаров", "Продажи", "Взаиморасчеты". Регистры накопления делятся на регистры остатков и регистры оборотов. Первые выдают информацию на момент времени, а вторые — за период .
Содержат список счетов для бухгалтерского или управленческого учета, например, план счетов "Основной", "Управленческий", "ПланGAAP". Заметьте, что в отличие от версии 7.7, добавление нового плана счетов еще не означает полного разделения учета, поскольку все проводки хранятся в регистрах бухгалтерии , описанных чуть ниже. Поэтому для отделения одних проводок от других нужно завести еще новый регистр бухгалтерии, основанный на определенном плане счетов
Хранят записи (проводки), основанные на определенном плане счетов, например, регистр бухгалтерии "Управленческий" связан с планом счетов "Управленческий" (основан на нем). Регистр бухгалтерии всегда связан только с одним планом счетов, но один план счетов может использоваться в различных регистрах бухгалтерии.
Новым в версии 8 является также то, что бывают регистры бухгалтерии "без поддержки корреспонденции", что отражается на его структуре. Для таких регистров каждая запись (проводка) имеет только одну сторону — дебет или кредит.
В отличие от версии 7.7 измерения и ресурсы регистра бухгалтерии задаются разработчиком самостоятельно. Измерения — это своего рода разделители учета, например, Организация, Подразделение, Валюта. Ресурсы регистра бухгалтерии — это числовые данные, по которым требуется получать остатки и обороты, например, Сумма, Количество, ВалСумма. В регистре бухгалтерии могут быть также и реквизиты, которые содержат дополнительную информацию для каждой записи (проводки), они могут быть практически любого типа, например, строковый реквизит "СодержаниеПроводки".
Планы видов расчета
Содержат виды расчета, имеющие между собой нечто общее, как то: одинаковые базовые виды расчеты, одинаковые правила перерасчета, общие правила вытеснения по периоду. Например, планы "Основные начисления", "Налоги". Затем на основе планов создаются регистры расчета, содержащие непосредственно записи расчетов.
В отличие от версии 7.7, в версии 8 виды расчета хранятся в планах видов расчета как объекты данных, т.е. могут даже вводиться в режиме "Предприятие". Конечно, в версии 8 можно ввести предопределенные виды расчета, на которых будет построена конфигурация, и задать для них правила вытеснения, ведущие и базовые виды расчета.
Предназначены для хранения записей сложных периодических расчетов, например, регистр расчета "Начисления". Регистр расчета всегда основан на определенном плане видов расчета.
Измерения, ресурсы и реквизиты регистра расчета разработчик указывает самостоятельно. Например, в регистре расчета могут быть измерения Физлицо, Подразделение, Организация, ресурс Результат, и реквизиты — комментарий, график и т.д.
Общие объекты
Объекты конфигурации, располагающиеся в ветви "Общие":
Предназначены для группировки других объектов конфигурации, например, Кадры, Торговля, Маркетинг. Каждый объект может входить сразу в несколько подсистем. Подсистемы могут быть вложенными друг в друга. Затем на основе подсистем легко назначать роли (права доступа) и формировать интерфейсы.
Содержат процедуры и функции, используемые в других программных модулях, например, общий модуль "Процедуры обработки документов". В общих модулях не может быть объявлений переменных модуля и нет раздела основной программы, там есть только раздел процедур и функций. Экспортируемые переменные, процедуры и функции модуля приложения не доступны в общих модулях. А экспортируемые процедуры и функции общих модулей доступны в модуле приложения, других общих модулях и остальных программных модулях.
Предназначены для определения прав пользователей конфигурации, например, роли "Кадровик", "Администратор". Особенностью версии 8 по сравнению с версией 7.7 является то, что каждый пользователь может иметь несколько ролей.
Критерии отбора нужны для отбора данных по определенному признаку. Например, по критерию отбора "Контрагент" можно выбрать все документы, относящиеся к заданному контрагенту. Критерии отбора применяются для отбора элементов справочников, документов и других объектов.
Представляют собой совокупность панелей интерфейса: меню и панели инструментов, например, интерфейс "Бухгалтер", "Руководитель". В версии 8 интерфейсы могут переключаться "на лету", без перезапуска программы.
Общие экранные формы не принадлежат конкретному объекту конфигурации, а относятся к конфигурации в целом. Они могут использоваться в разных местах программы, например, форма "Ввод адреса контрагента".
Общие макеты (шаблоны печатных форм) не принадлежат конкретному объекту конфигурации, например, макет "Реестр документов". Они используются из разных программных модулей.
Картинки, используемые на кнопках, формах и других интерфейсных объектах. Например, картинка "Выполнить". Картинки некоторых форматов можно изменять с помощью редактора картинок.
Стили оформления, включающие в себя различные элементы стиля: цвет отрицательных чисел, цвет фона редактирования полей и т.д. Стили позволяют гибко настроить форматирование некоторых частей конфигурации, например, выделить регламентные документы, важные обработки и т.д. В качестве примера можно назвать стили"Основной", "Яркий", "Регламентные процедуры".
Языки конфигурации, например, Русский и Английский. Можно разрабатывать конфигурации, рассчитанные на работу пользователей, говорящих на разных языках. Каждый язык имеет код языка, например, у русского языка код "ru" и т.д.
Не все знают, что конфигурации на основе БСП (УТ 11, БП 3.0, ЗУП 3.0 и т.д.) имеют механизм, который позволяет создавать связанные объекты, что в какой-то мере является аналогом создания на основании.
Понятно, что многие гуру знают об этой возможности, но статья все же не для них. Предупреждаю сразу. 🙂
Есть разные виды внешних отчетов и обработок:
// Вид — строка — возможные значения:
// "ДополнительнаяОбработка"
// "ДополнительныйОтчет"
// "ЗаполнениеОбъекта"
// "Отчет"
// "ПечатнаяФорма"
// "СозданиеСвязанныхОбъектов"
Поговорим о последнем виде. Как оказалось — это достаточно мощная возможность добавить новый функционал без необходимости непосредственного изменения конфигурации. Лучше всего рассмотрим на примере:
Мне была поставлена следующая задача.
Задача: Есть УТ 11, с одним складом и несколькими складскими помещениями и ордерной схемой работы. При закупке имеем следующее:
И все бы хорошо, но на последнем шаге, после того, как товар будет оприходован в центральное помещение, его начинают перемещать в другие помещения в рамках одного склада. Т.е. документ "Перемещение товаров" не сделать, все необходимо делать с помощью "Ордера на перемещение товаров", который выпадает из схемы закупки. И так получается, что этот документ нельзя создать на основании "Приходного ордера", или документа "Поступление товаров". Подходим к вопросу о том, как это сделать.
Необходимо: Добавить возможность создания документа "Ордер на перемещение товаров" на основании "Приходного ордера".
Функция СведенияОВнешнейОбработке () Экспорт
ПараметрыРегистрации = Новый Структура ;
// Добавим куда нужно вставить возможность создания на основании
МассивНазначений = Новый Массив ;
МассивНазначений . Добавить ( "Документ.ПриходныйОрдерНаТовары" );
ПараметрыРегистрации . Вставить ( "Вид" , "СозданиеСвязанныхОбъектов" );
ПараметрыРегистрации . Вставить ( "Назначение" , МассивНазначений );
ПараметрыРегистрации . Вставить ( "Наименование" , "Создать ордер на перемещение товаров на основании приходного ордера" );
ПараметрыРегистрации . Вставить ( "Версия" , "1.0" );
ПараметрыРегистрации . Вставить ( "БезопасныйРежим" , Истина);
ПараметрыРегистрации . Вставить ( "Информация" , "Дополнительная обработка" );
// Добавим команду
ДобавитьКоманду (
ТаблицаКоманд ,
"Ордер на перемещение товаров" ,
"Ордер на перемещение товаров" ,
"ВызовКлиентскогоМетода" ,
Истина
);
ПараметрыРегистрации . Вставить ( "Команды" , ТаблицаКоманд );
Команды = Новый ТаблицаЗначений ;
Команды . Колонки . Добавить ( "Представление" , Новый ОписаниеТипов ( "Строка" ));
Команды . Колонки . Добавить ( "Идентификатор" , Новый ОписаниеТипов ( "Строка" ));
Команды . Колонки . Добавить ( "Использование" , Новый ОписаниеТипов ( "Строка" ));
Команды . Колонки . Добавить ( "ПоказыватьОповещение" , Новый ОписаниеТипов ( "Булево" ));
Команды . Колонки . Добавить ( "Модификатор" , Новый ОписаниеТипов ( "Строка" ));
Процедура ДобавитьКоманду ( ТаблицаКоманд , Представление , Идентификатор , Использование , ПоказыватьОповещение = Истина, Модификатор = "" )
НоваяКоманда = ТаблицаКоманд . Добавить ();
НоваяКоманда . Представление = Представление ;
НоваяКоманда . Идентификатор = Идентификатор ;
НоваяКоманда . Использование = Использование ;
НоваяКоманда . ПоказыватьОповещение = ПоказыватьОповещение ;
НоваяКоманда . Модификатор = Модификатор ;
Добавляем форму, в которой описываем перезаполнение:
&НаКлиенте
Процедура ВыполнитьКоманду ( ИдентификаторКоманды , ОбъектыНазначенияМассив , СозданныеОбъекты ) Экспорт
//Переберем все выбранные документы на основании, которых будет созданы другие новые документы
Для каждого Элемент из ОбъектыНазначенияМассив Цикл
//Получая форму объекта создаваемого документа
ФормаДок = ПолучитьФорму ( "Документ.ОрдерНаПеремещениеТоваров.ФормаОбъекта" );
//Далее мы получаем объект только, что созданной формы и помещаем её в переменную
//В объекте содержатся все реквизиты (элементы) формы
ДанныеФормы = ФормаДок . Объект ;
//Мы помещаем объект формы в переменную,
//так как должны передать её в процедуру на сервере,
//где нельзя изменять объект формы, зато можно править переменную содержащую его
СоздатьНовыйДокумент ( Элемент , ДанныеФормы );
//После выполнения процедуры на сервере мы получаем изменную переменную ДанныеФормы,
//которую необходимо передать в уже созданную нами форму
КопироватьДанныеФормы ( ДанныеФормы , ФормаДок . Объект );
//Открываем результат выполнения обработки
ФормаДок . Открыть ();
&НаСервере
Процедура СоздатьНовыйДокумент ( Элемент , НовыйОбъект )
// Заполняем
Основание = Элемент . Ссылка ;
НовыйОбъект . Дата = ТекущаяДата ();
НовыйОбъект . Склад = Основание . Склад ;
НовыйОбъект . ПомещениеОтправитель = Основание . Помещение ;
// Переносим строки
Для каждого СтрокаТЧ из Основание . Товары Цикл
ЗаполнитьЗначенияСвойств ( НовыйОбъект . Товары . Добавить (), СтрокаТЧ );
КонецЦикла;
Все!
Добавляем в дополнительные отчеты и обработки и можем работать! Все получилось достаточно просто и быстро.
Всем удачи.