понедельник, 30 марта 2015 г.

Задачи по Управляемым формам 5.1- 5.4

5.1) Необходимо добавить кнопку в форме списка документа, с помощью которой можно просмотреть какие движения делает текущий документ.


Реализация изображена с помощью скриншота




5.2) Задание про фотки сотрудников.

  Скачать решение задачи 5.2 


5.3)  В справочнике «Контрагенты» необходимо создать управляемую основную форму элемента, в которой пользователь сможет увидеть все движения с участием этого контрагента по регистру бухгалтерии. Доступ к этой информации должен осуществляться из панели навигации.


1)  Добавляем форму списка регистра бухгалтерии
2) Добавляем параметр "Контрагент"в эту форму.
3) Делаем произвольный запрос для динамического списка, в нем добавляем условие на субконто.
4) Устанавливаем параметр запроса динамического списка

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

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

5) Добавляем команду в справочник контрагенты





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

Скачать решение задачи 5.3 (на базе задачи 2.25)

5.4) Организовать хранение продажных цен деталей в разрезе типов цен (оптовые, розничные и т.д.). В документе «Расходная накладная» необходимо иметь возможность указывать тип цен, по которым осуществляется отпуск товара. В форме выбора деталей, для каждой детали, дополнительно необходимо отображать ее цену (согласно указанному в документе типу цен), а также текущий остаток на складе. Склад, как и тип цен, указывается в шапке документа «Расходная накладная». При выборе детали в документ должна добавляться не только сама деталь, но и соответствующая цена


1) Добавляем в РН необходимые реквизиты (Склад, ВидЦены).
2) Добавляем на форму команду подбора.
Процедура Подбор(Команда)
Парам = Новый Структура("ДатаСреза, ВидЦены,Склад", Объект.Дата,Объект.ВидЦены,Объект.Склад); 
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", Парам, Элементы.СписокНоменклатуры);
КонецПроцедуры

3)Добавляем форму выбора справочника "Номенклатура" и добавляем необходимые параметры на форму.
4) Для динамического списка изменяем запрос на произвольный.
Соединяем таблицу номенклатуры с регистрами накопления(для получения остатков и регистром сведений для получения цены).
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.ПометкаУдаления,
СправочникНоменклатура.Родитель,
СправочникНоменклатура.ЭтоГруппа,
СправочникНоменклатура.Код,
СправочникНоменклатура.Наименование,
СправочникНоменклатура.ТипТовара,
СправочникНоменклатура.Предопределенный,
СправочникНоменклатура.ИмяПредопределенныхДанных,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Остаток,
ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК Цена
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(&ДатаСреза, Склад = &Склад) КАК ОстаткиНоменклатурыОстатки
ПО СправочникНоменклатура.Ссылка = ОстаткиНоменклатурыОстатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура

5) Заполняем параметры в форме выбора.

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

6) Обрабатываем выбор значения.

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекДанные = Элемент.ТекущиеДанные;
СтруктураЗначений = Новый Структура("Номенклатура, Цена", Значение, ТекДанные.Цена);
ОповеститьОВыборе(СтруктураЗначений);
КонецПроцедуры

7) В Расходной накладной
&НаКлиенте
Процедура СписокНоменклатурыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если  ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
СтандартнаяОбработка = Ложь;
НоваяСтрока = Объект.СписокНоменклатуры.Добавить();
НоваяСтрока.Номенклатура = ВыбранноеЗначение.Номенклатура;
НоваяСтрока.Цена = ВыбранноеЗначение.Цена;
КонецЕсли;
КонецПроцедуры




2 комментария:

  1. Задача 5.4: 1) Запись в Список номенклатуры у меня почему-то стала добавляться только после того, как перенес ее добавление из Процедуры "СписокНоменклатурыНоменклатураОбработкаВыбора" в процедуру "СписокНоменклатурыОбработкаВыбора" .
    2) Форму выбора в Спрвочнике Номенклатура не стал делать Основной, т.к. ,например, при добавлении записи в Приходной накладной она вообще перестает работать.

    ОтветитьУдалить
  2. В задаче 5.1 кнопку надо добавить в форму списка....
    &НаКлиенте
    Процедура ПросмотрДвижений(Команда)
    Элементы.РегистрОстатки.Видимость= Не Элементы.РегистрОстатки.Видимость;
    Элементы.РегистрПродажи.Видимость= Не Элементы.РегистрПродажи.Видимость;
    КонецПроцедуры

    &НаКлиенте
    Процедура СписокПриАктивизацииСтроки(Элемент)

    //программное создание отбора
    ПросмотрПродажи.Отбор.Элементы.Очистить();
    ЭлементОтбора = ПросмотрПродажи.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Регистратор");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = Элемент.ТекущаяСтрока;
    ПросмотрОстатки.Отбор.Элементы.Очистить();
    ЭлементОтбора = ПросмотрОстатки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Регистратор");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = Элемент.ТекущаяСтрока;
    КонецПроцедуры

    ОтветитьУдалить