Показаны сообщения с ярлыком Управляемые формы. Показать все сообщения
Показаны сообщения с ярлыком Управляемые формы. Показать все сообщения

пятница, 15 мая 2015 г.

1c специалист. Задача 5.17.

Решение:
1) Добавляем в справочник "Физические лица" необходимые реквизиты и таб. часть "Образование"
2) На форму добавляем страницы на страницах размещаем группы, по группам распределяем элементы
3) Для того чтобы выполнить часть относительно личных данных необходимо в свойствах группы свойство "Поведение" изменить на "свертываемая".
4) Данные на закладке "Начисление ЗП" выводятся с помощью динамического списка, при создании на сервере устанавливаем параметр "Сотрудник" значением текущего сотрудника.

Скачать решение задачи 5.17 (1с специалист).


понедельник, 27 апреля 2015 г.

1c специалист задачи 5.10-5.14

Задача 5.10.

Для того чтобы отличать ссылки от других (например, "http" или "file") используется идентификатор схемы "e1cib".
Саму навигационную ссылку в режиме предприятия можно получить с помощью CTRL+F11.
Таким образом остается только "вычленить" из комментария  ссылку и открыть ее с помощью команды ПерейтиПоНавигационнойСсылке
&НаКлиенте
Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекстСсылки = Элемент.ТекстРедактирования;
Если Не ЗначениеЗаполнено(ТекстСсылки) Тогда
Возврат;
КонецЕсли;
ПервыйСимволССылки = Найти(ТекстСсылки, "e1cib");
Если ПервыйСимволССылки = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Комментарий не содержит навигационной ссылки!";
Сообщение.Поле = "Объект.Комментарий";
Сообщение.Сообщить();
Возврат;
КонецЕсли;

// урезаем 
ТекстСсылки = Сред(ТекстСсылки, ПервыйСимволССылки);
ПоследнийСимволССылки = Найти(ТекстСсылки," ");
НавигационнаяСсылка = Сред(ТекстСсылки, 1, ПоследнийСимволССылки-1 );
Попытка
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка перехода по ссылке: "+ОписаниеОшибки();
Сообщение.Поле = "Объект.Комментарий";
Сообщение.Сообщить();
Возврат;
КонецПопытки;

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


Скачать решение задачи 5.10(1с специалист)


Задача 5.11.

  • Добавляем произвольную форму в справочник "Номенклатуры".
  • Из документа вызываем открытие этой формы
  • Обрабатываем перетаскивание.



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

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

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

Скачать решение задачи 5.11 (1с специалист)




Задача 5.12.
Основной момент - открытие форм.
Для решения потребуется создать 2 формы справочника "Номенклатура", а в обработке выбора первым этапом открываем форму  со сроками годности  и остатками, вторым этапом заполняем строку  таб. части переданными значениями.


&НаКлиенте
Процедура СписокНоменклатурыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

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


Скачать решение задачи 5.12 (1с специалист)


Задача 5.13.
Решается аналогично  задаче 5.12, единственное отличие нужно обработку выбора нужно "повесить" на колонку "Срок годности" (Если я правильно нашел отличие).
Скачать решение задачи 5.13 (1с специалист)


Задача 5.14.

Основной момент задачи - вывод сообщения пользователю с привязкой к реквизиту табличной части.



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

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = ТабличнаяЧасть;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Контрагент", "Контрагент");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Договор", "Договор");
Блокировка.Заблокировать();

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


Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(),ВидГраницы.Включая));
Запрос.УстановитьПараметр("Ссылка", Ссылка);


РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой()  Тогда
Отказ = Истина;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий()  Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "По договору "+ Выборка.Договор +" сумма оплаченного товара > суммы проданного на "+(-Выборка.СуммаОстаток);
Сообщение.Поле = "ТабличнаяЧасть["+(Выборка.НомерСтроки-1)+"].СуммаОплаты";
Сообщение.УстановитьДанные(ЭтотОбъект); 
Сообщение.Сообщить();
КонецЦикла; 
КонецЕсли; 
КонецПроцедуры

Скачать решение задачи 5.14 (1с специалист)


среда, 22 апреля 2015 г.

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


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

Задача 5.6
Для решение потребуется:

  • Добавить регистр сведений с периодичностью = "день" с измерением сотрудник и ресурсом типа булево
  • Добавить реквизиты "Старший менеджер" в документы.
  • Добавить ФО  и заполнить ее состав
  • Добавить Параметр ФО "Сотрудник".
  • Добавить несколько пользователей.
  • В модуле сеанса установим параметр "ТекПользователь"
  • При начале работы установим параметры ФО.


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

Функция ПолучитьТекПользователя() Экспорт
Возврат ПараметрыСеанса.ТекПользователь;
КонецФункции

  • В документах установим видимость реквизита "Менеджер" при смене даты.

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
УстановитьВидимостьМенеджера()
КонецПроцедуры

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


Задача 5.7

Разделим область формы списка на 2 части: в левой будет список документов, во второй движения по регистрам  выбранного документа. Для этого добавим 3 группы, в группу 2 переместим  основной реквизит "список". Добавим  реквизиты (тип динамический список) для каждого из регистров расчета, с помощью конструктора выбираем необходимые таблицы и задаем условие на регистратор.
В форме списка добавим процедуры

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

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

Через Сервис-Параметры устанавливаем режим "Управляемое и обычное приложение", добавляем обычную форму и устанавливаем ее основной. В свойствах конфигурации должен быть установлен флаг "Использовать обычные формы в управляемом приложении".

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

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

Задача 5.9
Нужно, чтобы пользователь из формы мог сразу получить доступ к разделу справки.




пишем текст что-то типа: "Справка для вызова раздела Справочники"
с ссылкой  "v8help://1cv8/EnterprWorkingWithCatalogs"

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


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