Задача 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с специалист)