fixin (fixin) wrote,
fixin
fixin

Обработка табличных частей в УФ

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

При этом должна была открываться форма с выбором файла.

Пришлось повозиться.

На клиент добавляется команда:


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    Для каждого
Элемент из ОбъектыНазначенияМассив Цикл
       
ВыбДокумент = Элемент;
    КонецЦикла;
   
ОткрытьФорму("ВнешняяОбработка.ЗагрузкаПодтвержденияЗаказаПоставщику.Форма.Форма");
КонецПроцедуры

Блок описания внешней обработки выглядит так:


#Область ВнешняяОбработка

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

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

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

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

   
ДобавитьКоманду(ТаблицаКоманд,
   
"Подтверждение заказа поставщику",
   
"ПодтверждениеЗаказаПоставщику",
   
"ВызовКлиентскогоМетода",
    Истина);

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

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

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

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

#КонецОбласти

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

После изменения объекта нужно найти его форму и перезагрузить её, иначе при попытке редактирования будет выдаваться ошибка, что данные объекта уже изменены. Возможно, можно как-то стандартно завершить обработку формы, чтобы БСП поняла, что работа с формой завершена, но я не нашел как, поэтому перезагружаю данные формы:


&НаКлиенте
Процедура ЗагрузитьФайл() Экспорт

   
ОбработатьФайл();


   
//Находим окно формы и обновляем...
   
ТекОкна = ПолучитьОкна();
    Для каждого
ТекОкно из ТекОкна Цикл
        Для Каждого
Форма ИЗ ТекОкно.Содержимое Цикл
            Попытка
               
СсылкаФормы = Форма.Объект.Ссылка;
            Исключение
                Продолжить;
            КонецПопытки;
            Если
СсылкаФормы = Объект.ВыбДокумент Тогда
               
Форма.Прочитать();
               
Форма.ОбновитьОтображениеДанных()
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
   
Закрыть(ложь);
КонецПроцедуры

В принципе, таким образом можно изменять форму объекта и сам объект, не сохраняя его в базе данных, как в обычных формах.

 

Tags: #КонецОбластиРежим, #Область,
Subscribe

Posts from This Journal “1С” Tag

  • Как обмануть макет 1с?

    В 1С можно менять макеты в режиме 1с Предприятия. Но 1с-овцы не подумали, что пользователи не захотят видеть некоторые поля. Если просто удалить…

  • Корректировка регистра на 80 документов

    Мне прислали список из 80 документов, суммы которых нужно было внести в УПП в документ корректировки записей регистров для того, чтобы закрыть…

  • Ручной способ получить список реквизитов справочников

    Была поставлена задача расписать реквизиты справочника договоров и контрагентов в двух базах, написать соответствия между ними. Для начала нужно…

  • Открытие файла с нужным именем

    Небольшой гуру-тест. При сохранении файла в базу 1С сохраняется его первоначальное имя, например «Договор ННН.PDF». Задача – при открытии файла из…

  • Перемещение по строкам документа

    Перемещение на предыдущую-следующую строку в 1С УФ. Казалось бы, реализация таких простых кнопок, как переход к предыщей/следующей строке в списке…

  • Гипер-рефакторинг силами Гения 1С

    У клиента, к которому я пришел делать доработки по бизнес-процессам на УПП, вскрылось, что архитектура изуродована множественными копипастами, на…

  • Хитрый двухуровневый кэш

    Как вам такой хитрый двухуровневый кэш? Первый уровень – ДатаПотребности, второй – Номенклатура, на третьем – массив Заказов. Искать можно без учета…

  • Косячок с областями 1С

    Мне нужно было разукрашивать ячейку в четвертой колонке строки, по определенному условию, в красный цвет. Код был такой: Область = Макет…

  • Парадокс: Читаемость кода за счет лишних прогонов

    У меня был вот такой код, где выполнялось по выбору пользователя N обработок. И в конце нужно было выдать пользователю подтверждение, какие…

promo fixin декабрь 28, 2020 16:57 1380
Buy for 30 tokens
Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект " Секс за Ваши". Если вы хотите написать пост обо мне или почитать, что пишут…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments