gifts2017

Ввод на основании любого объекта

Опубликовал Александр Большаков (BACbKA666) в раздел Программирование - Практика программирования

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

Немного поискав в истории не нашел ничего похожего. Возможно плохо искал.

Это только идея. Ее можно развивать дальше. но я ограничился простым механизмом.

Для управляемых форм можно придумать более изящное решение.

Проблема:

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

Описание идеи:

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

Что решил сделать:

1 Я решил добавить свой справочник "Дополнительный ввод на основании".

2 Для него указываю на основании каких объектов он должен создаваться

3 Добавляю предопределенные значения в справочник. Они означают конкретный вид Ввода на основании

4 Для справочника добавил табличную часть "Объекты". В ней указывается перечень видов объекта для которых используется заполнение. Используется как ограничение.

 

Если НЕ Предопределенный Тогда

        Отказ = Истина;

        Возврат;

КонецЕсли;

 

5 В обработке заполнения написал:

5.1 Выборку заполнения для конкретного объекта

 

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| AVA_ДополнительныйВводНаОснованииОбъекты.Ссылка,

| AVA_ДополнительныйВводНаОснованииОбъекты.Ссылка.Наименование КАК Наименование

|ИЗ

| Справочник.AVA_ДополнительныйВводНаОсновании.Объекты КАК AVA_ДополнительныйВводНаОснованииОбъекты

|ГДЕ

| ТИПЗНАЧЕНИЯ(AVA_ДополнительныйВводНаОснованииОбъекты.ПустаяСсылкаОбъекта) = ТИПЗНАЧЕНИЯ(&Объект)";

Запрос.УстановитьПараметр("Объект", ДанныеЗаполнения);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Сообщить("Для данного вида объекта нет дополнительного ввода на основании", СтатусСообщения.Внимание);

Возврат;

КонецЕсли;

 

 5.2 Открыть форму выбора вида ввода на основании

 

Выборка = Результат.Выбрать();

спВвода = Новый СписокЗначений;

Пока Выборка.Следующий() Цикл

             спВвода.Добавить(Выборка.Ссылка, Выборка.Наименование);

КонецЦикла;

ВыборПунктаВводНаОсновании = спВвода.ВыбратьЭлемент("Что хотите ввести на основании?");

Если ВыборПунктаВводНаОсновании <> Неопределено Тогда

           ОсуществитьДополнительныйВводНаОсновании(ДанныеЗаполнения, ВыборПунктаВводНаОсновании.Значение);

КонецЕсли;

 

5.3 Ну и процедура обработки выбранного вида ввода на основании


Процедура ОсуществитьДополнительныйВводНаОсновании(ДанныеЗаполнения, ВидЗаполненияСсылка)


предСсылки = Справочники.AVA_ДополнительныйВводНаОсновании;

Если ВидЗаполненияСсылка = предСсылки.АС_ВременноЗамещающие Тогда

        ВременноЗамещающие_ВводНаОсновании(ДанныеЗаполнения);

КонецЕсли;


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


Процедура ВременноЗамещающие_ВводНаОсновании(ДанныеЗаполнения)


//Документ Кадровое пермещение

//Документ Прием на работу в организацию

//Документ Увольнение из организации

Форма = РегистрыСведений.АС_ВременноЗамещающие.ПолучитьФорму("ФормаГрупповогоДобавления");

Форма.Основание = ДанныеЗаполнения; Форма.Открыть();


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


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

- Чтение

- Добавление

а то не хватит прав


Тут возможные ошибки, к примеру: если заполнение будет с сервера, то ни о каком открытии формы не может быть речи.

Возможны и другие ошибки. Это только идея. Возможно, кому-нибудь пригодится.

 


См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алекс Ю (AlexO) 22.03.13 16:39
(0)
Работают на обычных формах.

Не знаю никого, кто бы работал в УПП на управялемых формах.
Только тру-1сники на форумах :)
2. Алекс Ю (AlexO) 22.03.13 16:44
Или я не понял, или:
вы сделали только ОБОЩАЮЩУЮ кнопку, которую также будете переносить из релиза в релиз вручную. А по кнопке вполне можно было вызывать обработку (внешнюю причем).
И там - форму ввода на основании. А там - список, чего надо ввести.
Причем список - можно динамически формировать, в зависимости от того, какой док его вызвал.
Так зачем тут нужен еще один справочник? :)
3. Алекс Ю (AlexO) 22.03.13 16:50
На основании документов необходимо вводить запись в регистре. Ну франч соответственно сделал кнопку в меню Ввод на основании.

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

Какой пункт и где заполняет платформа? Судя по цитате выше - у вас вводится на "основании документов - запись регистра".
4. Александр Большаков (BACbKA666) 22.03.13 17:23
(2) AlexO,
вы сделали только ОБОЩАЮЩУЮ кнопку, которую также будете переносить из релиза в релиз вручную. А по кнопке вполне можно было вызывать обработку (внешнюю причем).
И там - форму ввода на основании. А там - список, чего надо ввести.
Причем список - можно динамически формировать, в зависимости от того, какой док его вызвал.
Так зачем тут нужен еще один справочник? :)


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

Проведение по регистру какое отношение имеет к вводу на основании? Что на основании чего вводится?

Это приведен как пример. В конфигураторе для регистра сведений нельзя указать на основании какого документа может происходить заполнение записей.

Какой пункт и где заполняет платформа? Судя по цитате выше - у вас вводится на "основании документов - запись регистра".

Стандартный пункт меню на форме "Ввести на основании"
Возможно написал не очень понятно. С изложением мыслей беда. :)
5. Антон Ширяев (Антон Ширяев) 22.03.13 17:32
(0) Идея отличная.
Думаю объединить в одном служебном справочнике с http://infostart.ru/public/155418/.
Главное при обновлении у каждого объекта не появляются лишние различия.
Некоторые добавляют регистр сведений подчиненный регистратору для получения новой кнопки в меню "Перейти", но этот регистр очень мешается при обновлении, так как по всем его регистратором вылезает различия в движениях.
6. Алекс Ю (AlexO) 22.03.13 17:51
Обломитесь, ребята :)
Как и для аналогичных "плясок" с документами НаОсновании - если вы впихнете ВО ВСЕ ДОКУМЕНТЫ свой справочник как "основание для этого документа", то вторым концом "палки" будет то, что она "стукнет" по каждому вписанному доку и впишется ему в поле "на основании" в свойствах, что вызовет цепную реакцию и обновление свойств и всякой связанных структур у доков.
7. Алекс Ю (AlexO) 22.03.13 17:54
(4) BACbKA666,
Возможно написал не очень понятно. С изложением мыслей беда.

Ну да :)
Я теперь понял смысл работы - но, увы. 1С не обманешь :)
Невозможно использовать платформенное "вписывание на основании" только с одного конца (в данном случае - с конца справочника).
(платформенное - это под "синей стрелочкой" и в контекстном меню в списке).
Работать-то работает, но так, как я описал выше - шило на мыло: здесь получаем, но и все доки переобновляются, т.е. нет отвязки от обновления. А потому - нет и смысла: обновлять так или эдак.
Или я в форме впишу НаОсновании, или вот таким "типовым" образом.
8. Алекс Ю (AlexO) 22.03.13 17:55
А что такое вообще "Ввод н а основании" у справочников - я до сих не понимаю :)
Оно вообще зачем там нужно? Да еще и конструктор есть...опупеть... на основании дока заполняешь реквизиты элемента справочника..
9. Алекс Ю (AlexO) 22.03.13 17:58
Сделал сравнение с конфой поставщика. Отличий не выявил по основанию.
А вот почему не показывает сие отличие сравнение с конфой поставщика - это вопрос к 1С.
ЗДЕСЬ не показывает.
А при установке обновления - покажет. Здесь же свойства дока типового изменяются ("второй конец палки" :) ).
10. Алекс Ю (AlexO) 22.03.13 18:13
Ну и, как я и говорил всегда, Справочник - это недоделанная связка РегистрСведений+Документ.
Видимо, оттуда и "перехала" вкладка ВводНаОсновании :)
11. Александр Большаков (BACbKA666) 23.03.13 21:39
AlexO, Именно я использовал данную возможность, чтобы избежать сравнение форм на отличие. Так как при обновление типовой конфигурации с изменениями львиная доля времени уходит на сравнение форм. А данная возможность позволяет вынести некоторые кнопки за рамки типовой формы.
12. Алекс Ю (AlexO) 25.03.13 15:54
(11) BACbKA666,
чтобы избежать сравнение форм на отличие

Видимо, у вас ну огромное количество уникальных нетиповых вводов на основании :)
13. andrey dyak (dyak84) 24.07.13 11:17
Интересная обработка. как раз то что искал. Как появятся день обязательно скачаю. автору спасибо так держать.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа