День добрый.
Много шерстил Сеть в поиске решения проблемы.
Знающим известно, что этот документ в УТ 11, КА 2 и Рознице 2 выглядит не так, как хранится его содержимое.
На первой вкладке у нас все виды цен, их зависимости и настройки формирования. Выставив галочки на нужном виде цен и перейдя в таблицу товаров, мы переходим в Дерево товаров, который формируется при открытии на основе записанных данных, либо перестраивается при изменении содержания таблицы товаров.
Изначально я использовал стандартный способ создания документа - на клиенте вызывал форму, брал объект, заполнял его на сервере и копировал в объект вызванной формы, потом уже открывал форму.
Но с этим документом такое не сработало. Все необходимые методы формы по заполнению элементов это самой формы сработали при вызове этой же пресловутой формы. Дальнейшее заполнения данных объекта никак не влияли на содержание элементов формы. И открывалась форма так же, как если бы мы создали новый документ.
У меня была задачка загрузить цены из внешнего источника и открыть документ. Сама задача тут не рассматривается. Будет показан вариант, как я решил задачу открытия формы еще не записанного документа с заполненными данными.
Она оказалась не настолько сложна, просто надо было изучить метод заполнения документа в модуле объекта.
Там идет сравнение типа данных для заполнения и в самом низу была проверка на тип Структура. От нее и решил отталкиваться.
Структура там простая - два поля с именами Дата и ТаблицаНоменклатуры. Если Дата может содержать в себе просто дату будущего документа, то поле Таблица Номенклатуры должна содержать в себе адрес данных во временном хранилище
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
//...
//несколько проверок на типы документов
//...
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("ТаблицаНоменклатуры") Тогда
ЗаполнитьПоТаблицеНоменклатуры(
ДанныеЗаполнения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Тут вызывается метод ЗаполнитьПоТаблицеНоменклатуры
Процедура ЗаполнитьПоТаблицеНоменклатуры(ДанныеЗаполнения)
ТаблицаНоменклатуры = ПолучитьИзВременногоХранилища(ДанныеЗаполнения.ТаблицаНоменклатуры);
Товары.Загрузить(ТаблицаНоменклатуры);
ТаблицаНоменклатуры.Свернуть("ВидЦены");
ВидыЦен.Загрузить(ТаблицаНоменклатуры);
Дата = ДанныеЗаполнения.Дата;
КонецПроцедуры
Вот из этих знаний и было найдено решение.
Просто покажу код заполнения, думаю, многие поймут, что тут. Переменная ТипЦеныДокумента - реквизит формы для подстановки нужного вида цены. ДатаДокумента - также реквизит, взятый из внешнего источника.
&НаСервере
Функция ПолучитьАдресТаблицыТоваров()
ТаблицаНоменклатуры = новый ТаблицаЗначений;
ТаблицаНоменклатуры.Колонки.Добавить("Номенклатура");
ТаблицаНоменклатуры.Колонки.Добавить("Характеристика");
ТаблицаНоменклатуры.Колонки.Добавить("ВидЦены");
ТаблицаНоменклатуры.Колонки.Добавить("Цена");
Для каждого Товар из Товары Цикл
НоваяСтрока = ТаблицаНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, товар);
НоваяСтрока.ВидЦены = ТипЦеныДокумента;
КонецЦикла;
Адрес = ПоместитьВоВременноеХранилище(ТаблицаНоменклатуры, ЭтаФорма.УникальныйИдентификатор);
Возврат Адрес
КонецФункции
&НаКлиенте
Процедура ЗагрузитьЦены(Команда)
Для каждого Товар из Товары Цикл
Если Товар.Номенклатура.Пустая() или (Товар.Характеристика.Пустая() и НЕ ПустаяСтрока(Товар.ХарактеристикаИзФайла)) Тогда
ПоказатьПредупреждение(,"Есть незаполненные строки");
Возврат
КонецЕсли;
КонецЦикла;
СтруктураЗаполнения = Новый Структура;
СтруктураЗаполнения.Вставить("Дата", ДатаДокумента);
Адрес = ПолучитьАдресТаблицыТоваров();
СтруктураЗаполнения.Вставить("ТаблицаНоменклатуры", Адрес);
П = Новый Структура("ЗначенияЗаполнения", СтруктураЗаполнения);
ОткрытьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта", П, ЭтаФорма);
КонецПроцедуры
После выполнения данного кода форма документа открывается в готовом виде и можно только нажать Провести и закрыть.
Возможно, я не открыл америку и не изобрел велосипед, но несколько часов серфинга по различным форумам в поиске решения проблемы мне не помогли.
Я не претендую на уникальность решения (повторюсь - искал долго) и прошу не обращать внимания на вероятные ляпы в алгоритме. Я просто хотел поделиться готовым решением поставленной задачи.
Проверил функционал на УТ 11.4.13.71 и КА 2.4.13.96. Как будет работать механизм с другими конфигурациями, не берусь сказать. К примеру, в конфигурации Розница:Аптека 2.6 нет такого заполнения, в типовой Рознице не проверял. Если в методе ОбработкаЗаполнения есть проверка на структуру и далее заполнение будет так же, как указано выше - механизм сработает.
Надеюсь, кому-нибудь будет полезно.
Всем добра!