К основному контенту

Расширение конфигурации + Связанные документы (Режим совместимости 8.3.12)

Вводная: реализовать ввод Заказа поставщику на основании Заказа на Ремонт. решить через расширения конфигурации.

Хочу обратить ваше внимание, не нужно добавлять в расширение критерий отбора, для 8.3.12 нам не доступно добавление\изменение состава критерия. Более того может зависать конфигуратор (столкнулся с последней версией 8.3.14 + ERP)

Разработку рекомендую вести с применением хранилища и для расширения. Иначе устанете потом выгребать чего лишнего включили в расширение при добавлении таких или схожих обектов с составными типами и подобное.

Все текущие типовые решения сейчас идут в режиме совместимости 8.3.12, в прочем и для 8.3.14 (и даже 8.3.15 ничего не поменялось).

Что нам нужно было бы сделать при отказе от поддержки:

1) добавить наш документ в Критерий отбора (состав, реквизиты);
2) в раздел Ввод на основании целевого документа.

И что с целью сохранения поддержки. Как сделать это же для расширения:

1) Добавить реквизит расширения Документы.ЗаказПоставщику._ЗаказНаРемонт (ДокументСсылка.ЗаказНаРемонт)

2) Добавить команду расширения Документы.ЗаказНаРемонт.Команды._СоздатьЗаказПоставщику (группа: форма \ ввести на основании, параметр: ДокументСсылка.ЗаказНаРемонт)

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

3) Переопределить метод модуля объекта Документы.ЗаказПоставщику

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

4)  Переопределить методы общей формы СтруктураПодчиненности

&НаСервере &Вместо("ВывестиРодительскиеОбъекты") Процедура _ВывестиРодительскиеОбъекты(ТекущийОбъект, ДеревоРодитель) // Типовой код, актуально для ERP 2.4.9.91 // делаем примеси для включения реквизитов расширения СтрокиДерева = ДеревоРодитель.ПолучитьЭлементы(); МетаданныеОбъекта = ТекущийОбъект.Метаданные(); СписокРеквизитов = Новый СписокЗначений; //( РасширенныйСостав = Новый Массив; РасширенныйСостав.Добавить(Метаданные.Документы.ЗаказПоставщику.Реквизиты._ЗаказНаРемонт); //) Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл //( Если РасширенныйСостав.Найти(Реквизит) = Неопределено Тогда //) Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда Продолжить; КонецЕсли; //( КонецЕсли; //) КонецПроцедуры &НаСервере &Вместо("ОбъектыПоКритериюОтбора") Функция _ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора) Результат = ПродолжитьВызов(ЗначениеКритерияОтбора); // делаем примеси для включения реквизитов расширения Если ТипЗнч(ЗначениеКритерияОтбора) = Тип("ДокументСсылка.ЗаказНаРемонт") Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ЗначениеКритерияОтбора); Запрос.Текст = "ВЫБРАТЬ | ЗаказПоставщику.Ссылка КАК Ссылка |ИЗ | Документ.ЗаказПоставщику КАК ЗаказПоставщику |ГДЕ | ЗаказПоставщику._ЗаказНаРемонт = &ЗначениеКритерияОтбора"; ОбщегоНазначенияКлиентСервер. ДополнитьТаблицу(Запрос.Выполнить().Выгрузить(), Результат); КонецЕсли; Возврат Результат; КонецФункции



Комментарии

  1. 8.3.15.1778 - платформа. Все вроде норма но не записывает Ссылка в НоваяСтрока - Строка ДереваПодчиненные. Т.е. оставляет в неопределено.

    ОтветитьУдалить
  2. Скажите, как у вас работает аннотация &Вместо("ВывестиРодительскиеОбъекты")
    В режиме совместимости 8.3.12 ?
    У меня не перехватывает (

    ОтветитьУдалить
    Ответы
    1. Отбой. всё работает на режиме совместимости 8.3.12

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

      Мой код:

      &НаСервере
      &Вместо("ОбъектыПоКритериюОтбора")
      Функция _ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора)

      _Результат = ПродолжитьВызов(ЗначениеКритерияОтбора);
      _РезультатПоРасширению = Неопределено;

      Если ТипЗнч(ЗначениеКритерияОтбора) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда

      Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ЗначениеКритерияОтбора);
      Запрос.Текст =
      "ВЫБРАТЬ
      | ПриходныйКассовыйОрдер.Ссылка КАК Ссылка
      |ИЗ
      | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
      |ГДЕ
      | ПриходныйКассовыйОрдер._ОтчетОРозничныхПродажах = &ЗначениеКритерияОтбора";

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

      КонецЕсли;

      Если _РезультатПоРасширению <> Неопределено Тогда

      _ОписаниеТипов = Новый ОписаниеТипов(_Результат.Колонки.Ссылка.ТипЗначения, _РезультатПоРасширению.Колонки.Ссылка.ТипЗначения);

      _РезультатОбщий = Новый ТаблицаЗначений;
      _РезультатОбщий.Колонки.Добавить("Ссылка", _ОписаниеТипов);

      ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(_Результат , _РезультатОбщий);
      ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(_РезультатПоРасширению, _РезультатОбщий);

      _Результат = _РезультатОбщий;

      КонецЕсли;

      Возврат _Результат;

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

      Удалить

Отправить комментарий

Популярные сообщения из этого блога

СписокВыбора. Показать Представление вместо Значения

Вводная Если на форме есть элемент управления со списком выбора, в моем конкретном примере это Колонка Значение (Число (3,0)) с настроенным списком выбора. По умолчанию платформа отображает именно строковое значения, а не текст представления  из списка выбора (когда как при выборе значения из списка показываются именно представления). Решение Для Управляемых форм необходимо настроить правила условного оформления, для обычных форм - оформление ячеек при выводе данных.

Табличный Документ. Разная ширина колонки в строках

Когда нужно в макете (табличном документе) изменить ширину колонки  для конкретных строк: 1. Выделить всю строку (строки). Именно всю, фокус для выделенной области не работает. 2. Нажимаем и не отпускает Ctrl 3. С помощью мыши изменяют ширину любой из колонок - будет задан вопрос об создании нового формата строк - соглашаемся. Как же прекрасен мир, где для модификаций не достаточно просто использовать контекстное меню и диалог редактора свойств, где нужно знать заветные слова и таинства танца. 90ые, моё почтение. UPD Программно, тоже самое, можно сделать через ТабДок = Новый ТабличныйДокумент(); ТабДок.Область(1,,1,).СоздатьФорматСтрок(); ТабДок.Область(1,1).ШиринаКолонок = 70; ТабДок.Область(1,2).ШиринаКолонок = 30; ТабДок.Область(2,,2,).СоздатьФорматСтрок(); ТабДок.Область(2,1).ШиринаКолонок = 30; ТабДок.Область(2,2).ШиринаКолонок = 70; ТабДок.Показать();