Новая страница
Изучение модулей разработки информационной базы в 1С по всем направлениям
Процедура по переносу данных из реквизитов справочника в реквизиты документа
Необходимо перенести номер мобильного телефона, который хранится в справочнике Физические Лица. Этот перенос будет осуществляться при изменении реквизита ФИО в документе. Процедура создается и на клиенте и на сервере, потому что обращение к реквизитам справочника идет через сервер.
&НаКлиенте
Процедура ФИОПриИзменении(Элемент)
ФИОПриИзмененииНаСервере ();
КонецПроцедуры
&НаСервере
Процедура ФИОПриИзмененииНаСервере()
Объект.Телефон=Справочники.ФизическиеЛица.НайтиПоНаименованию(Объект.ФИО).ТелефонМобильный;
КонецПроцедуры
где,
Телефон – название реквизита документа куда необходимо поместить номер телефона из справочника ФизическиеЛица. Реквизит справочника в котором хранится номер телефона ТелефонМобильный - откуда.
Если необходимо перенести информацию из реквизита справочника в реквизит документа, строка выглядит следующим образом:
Объект.Телефон=Справочники.ФизическиеЛица.НайтиПоНаименованию(Объект.ФИО).ТелефонМобильный; где,
Объект.Телефон – Объект(обращение к объекту, стандартное слово).Телефон – название реквизита документа куда надо поместить информацию(меняется в зависимости от названия реквизита).
Справочники – общее название объектов, откуда берется информация (в нашем случае из Справочника)
ФизическиеЛица – название справочника из которого будет браться информация(меняется в зависимости от названия справочника откуда берется информация).
НайтиПоНаименованию(Объект.ФИО) – метод для поиска информации в зависимости от наименования (наименование пишется в заголовке процедуры, то есть при изменении чего работает данная процедура, в нашем случае «Процедура ФИОПриИзмененииНаСервере()» при изменении ФИО.
ТелефонМобильный – название реквизита справочника откуда берется информация.
Все что выделено серым цветом, является постоянными словами при написании модуля по переносу данных из реквизита справочника в реквизит документа.
Процедура по переносу данных из реквизитов справочника в реквизиты табличной части документа.
Необходимо перенести номер мобильного телефона при выборе определенного человека. Этот перенос будет осуществляться при изменении реквизита ФИО табличной части ТабличнаяЧасть1 в документе. Процедура создается и на клиенте, и на сервере, потому что обращение к реквизитам справочника идет через сервер, но, чтобы получить конкретное значение телефона для определенного человека, создаем функцию.
&НаКлиенте
Процедура ТабличнаяЧасть1ФИОПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.ТабличнаяЧасть1.ТекущиеДанные;
СтрокаТабличнойЧасти.Телефон=ПолучитьТелефон(СтрокаТабличнойЧасти.ФИО); КонецПроцедуры
&НаСервере
Функция ПолучитьТелефон(Элемент)
А=Справочники.ФизическиеЛица.НайтиПоНаименованию(Элемент).ТелефонМобильный; Возврат А;
КонецФункции
где,
СтрокаТабличнойЧасти=Элементы.ТабличнаяЧасть1.ТекущиеДанные; - дополнительная переменная при работе с табличной частью.
ТабличнаяЧасть1 – название табличной части где происходит действие.
СтрокаТабличнойЧасти.Телефон=ПолучитьТелефон(СтрокаТабличнойЧасти.ФИО);
Телефон – название реквизита табличной части ТабличнаяЧасть1, куда необходимо поместить данные по мобильному телефону
ПолучитьТелефон – название функции
ФИО – при изменении этого реквизита происходит событие по переносу данных А=Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИО).ТелефонМобильный; А – произвольная переменная, которой присваивается значение мобильного телефона Возврат А; - Возврат – служебное слово по возврату значения.
Все что выделено серым цветом, является постоянными словами при написании модуля по переносу данных из реквизита справочника в реквизиты табличной части документа.
Процедура расчета суммы в табличной части
Необходимо рассчитать сумму в табличной части ТабличнаяЧасть1. Сумма считается, как Цена умножить на Количество. Действия в табличной части пишутся на клиенте. Процедуры прописываются и при изменении цены, и при изменении количества.
&НаКлиенте
Процедура ТабличнаяЧасть1ЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти=Элементы.ТабличнаяЧасть1.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма=СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество; КонецПроцедуры
Процедура по расчету общей суммы документа
Необходимо рассчитать общий итог документа, как сумма всех колонок «Сумма» в табличной части «ТабличнаяЧасть1» и поместить полученный результат в реквизит документа «ОбщаяСумма». Процедура пишется на клиенте.
&НаКлиенте
Процедура ТабличнаяЧасть1СуммаПриИзменении(Элемент)
Объект.ОбщаяСумма=Объект.ТабличнаяЧасть1.Итог("Сумма");
КонецПроцедуры
где,
Объект.ОбщаяСумма=Объект.ТабличнаяЧасть1.Итог("Сумма");
ОбщаяСумма – название реквизита куда надо поместить расчетное значение общей суммы документа ТабличнаяЧасть1 – название табличной части по которой будет считаться общая сумма документа Сумма – название колонки в табличной части по которой будет считаться общая сумма документа.
Все что выделено серым цветом, является постоянными словами при написании модуля по расчету общей суммы документа.
Функция по поиску нужной переменной, которая хранится в регистре сведений.
Функция ПолучитьЦену(АктуальнаяДата, Элемент)
Отбор=Новый Структура("Товар", Элемент);
ЗР=РегистрыСведений.ЦенаНаТовар.ПолучитьПоследнее(АктуальнаяДата, Отбор); Возврат ЗР.Цена;
КонецФункции
Где,
ПолучитьЦену – произвольное название функции
(АктуальнаяДата, Элемент) – переменные, которые нужны чтобы узнать нужное значение. В примере находим цену на товар. Чтобы узнать нужную цену, необходимо знать дату, на которую ищется цена и название товара.
Отбор – произвольная переменная для хранения структуры
Новый Структура – создание новой структуры. Если информация хранится в регистре сведений, то создание структуры является обязательным.
"Товар" – название измерения регистра сведений.
ЗР – произвольная переменная, при помощи которой указывается путь и метод для поиска нужной информации.
ЦенаНаТовар – название регистра сведений Цена – название ресурса из регистра сведений.
Функция пишется на сервере.
Пример: из регистра сведений «АктуальнаяДолжность» нужно выбрать должность сотрудника. В регистре есть измерение «ФИО» и ресурс «Должность». Решение:
Функция ПолучитьДолжность(АктуальнаяДата, Элемент)
Отбор=Новый Структура("ФИО", Элемент);
ЗР=РегистрыСведений.АктуальнаяДолжность.ПолучитьПоследнее(АктуальнаяДата, Отбор); Возврат ЗР.Должность;
КонецФункции
Пример по поиску остатков материалов на складе и подстановке их в определенное поле с дополнительной проверкой продается товар сотруднику или нет
&НаКлиенте
Процедура ТЧНазваниеПриИзменении(Элемент)
СтрокаТЧ = Элементы.ТЧ.ТекущиеДанные;
СтрокаТЧ.ЕдиницаИзмерения = ПолучитьЕдИзм(СтрокаТЧ.Название);
СтрокаТЧ.ВНаличии = ПолучитьОстаток(СтрокаТЧ.Название, Объект.Дата);
Если Объект.Сотрудник=Истина Тогда
СтрокаТЧ.Цена = ПолучитьЦену(Объект.Дата,СтрокаТЧ.Название)*1.05;
Иначе СтрокаТЧ.Цена = ПолучитьЦену(Объект.Дата,СтрокаТЧ.Название)*1.4;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьЕдИзм(Элемент)
А=Справочники.Товары.НайтиПоНаименованию(Элемент).ЕдиницаИзмерения;
Возврат А;
КонецФункции
Функция ПолучитьОстаток(Элемент,АктуальнаяДата)
ОстаткиНаСкладе = РегистрыНакопления.ТоварыНаСкладе;
Отбор = Новый Структура ("Товар", Элемент);
ТабОстатков = ОстаткиНаСкладе.Остатки(АктуальнаяДата, Отбор, "Товар", "Колво");
Возврат ТабОстатков.Итог("Колво");
КонецФункции
Проверка на наличие нужного товара на складе
&НаКлиенте
Процедура ТЧКолвоПриИзменении(Элемент)
СтрокаТЧ = Элементы.ТЧ.ТекущиеДанные;
СтрокаТЧ.Сумма = СтрокаТЧ.Колво * СтрокаТЧ.Цена;
Объект.ОбщаяСуммаДокумента=Объект.ТЧ.Итог("Сумма");
Если СтрокаТЧ.Колво>СтрокаТЧ.ВНаличии Тогда
СтрокаТЧ.Колво=0;
ПоказатьПредупреждение (,"Данного товара нет в таком количестве!",20,);
Иначе
КонецЕсли;
КонецПроцедуры
Проверка дня рождения сотрудника
Модуль приложения:
Процедура ПриНачалеРаботыСистемы()
ОбщийМ.СформироватьНаСервере();
КонецПроцедуры
Общий модуль, сервер, вызов сервера
Процедура СформироватьНаСервере() Экспорт
Выборка=Справочники.Сотрудники.Выбрать();
Пока Выборка.Следующий() Цикл
Если Месяц(ТекущаяДата())= Месяц(Выборка.ДатаРождения) И День(ТекущаяДата())=День(Выборка.ДатаРождения) Тогда
Сообщить("Сегодня день рождения у сотрудника:"+Выборка.Наименование);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Модуль по загрузке данных из Excel.
&НаСервере
Процедура ЗагрузитьПользователейНаСервере(ВыбранноеИмяФайла)
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ВыбранноеИмяФайла);
Исключение
Сообщить("Файл не выбран");
Возврат;
КонецПопытки;
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область("Пользователи"));
ПостроительЗапроса.Выполнить();
ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
ТаблицаДанных.Количество();
Пользователи = Справочники.Пользователи;
Для Каждого Строка Из ТаблицаДанных Цикл
Если Пользователи.НайтиПоНаименованию(Строка.ФИО).Пустая() Тогда
НовыйЭлемент = Пользователи.СоздатьЭлемент();
НовыйЭлемент.Наименование = Строка.ФИО;
НовыйЭлемент.Логин = Строка.Логин;
НовыйЭлемент.Пароль = Строка.Пароль;
Пер1 = Перечисления.Роль.Администратор;
Пер2 = Перечисления.Роль.МенеджерПоЗакупкам;
Пер3 = Перечисления.Роль.МенеджерПоПродажам;
Пер4 = Перечисления.Роль.Мастер;
Если Строка.Роль = "Администратор" Тогда
НовыйЭлемент.Роль = Пер1; Иначе
Если Строка.Роль = "Менеджер по закупкам" Тогда
НовыйЭлемент.Роль = Пер2; Иначе
Если Строка.Роль = "Менеджер по продажам" Тогда
НовыйЭлемент.Роль = Пер3; Иначе
Если Строка.Роль = "Мастер" Тогда
НовыйЭлемент.Роль = Пер4;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
//ссылка на справочник
НовыйЭлемент.ГОСТ = Справочники.ГОСТ.НайтиПоНаименованию(Строка.ГОСТ);
Если НовыйЭлемент.ГОСТ.Пустая() Тогда
ГОСТОбъект = Справочники.ГОСТ.СоздатьЭлемент();
ГОСТОбъект.Наименование = Строка.ГОСТ;
ГОСТОбъект.Записать();
НовыйЭлемент.ГОСТ = ГОСТОбъект.Ссылка;
КонецЕсли;
НовыйЭлемент.Записать();
КонецЕсли;
КонецЦикла;
Сообщить("Загрузка завершена");
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьПользователей(Команда)
НачатьПомещениеФайла(Новый ОписаниеОповещения("ПослеВыбораФайла",ЭтотОбъект));
КонецПроцедуры
Процедура ПослеВыбораФайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
Если Не ПустаяСтрока(ВыбранноеИмяФайла) Тогда
ЗагрузитьПользователейНаСервере(ВыбранноеИмяФайла);
КонецЕсли;
КонецПроцедуры
Перерасчет регистра бухгалтерии
Процедура ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт
// Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:
// записи документа1 для сотрудников из списка,
// записи документа2 для сотрудников из списка и т. д.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| НачисленияПерерасчет.ОбъектПерерасчета,
| НачисленияПерерасчет.Сотрудник
|ИЗ
| РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет
|ГДЕ
| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета
|ИТОГИ ПО
| НачисленияПерерасчет.ОбъектПерерасчета");
Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);
СписокСотрудников = Новый СписокЗначений;
// Перебрать группировку по регистратору.
ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоРегистратору.Следующий() Цикл
Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;
// Перебрать группировку по сотрудникам для выбранного регистратора
// и создать список сотрудников.
ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();
СписокСотрудников.Очистить();
Пока ВыборкаПоСотрудникам.Следующий() Цикл
СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);
КонецЦикла;
// Получить набор записей регистра расчета для выбранного регистратора.
НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;
НаборЗаписей.Прочитать();
РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);
НаборЗаписей.Записать( , Истина);
// Очистить перерассчитанные записи в перерасчете.
НаборЗаписейПерерасчета =
РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();
НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;
НаборЗаписейПерерасчета.Записать();
КонецЦикла;
КонецПроцедуры
Добавление картинки
реквизит ДанныеКартинки, реквизит на форме СсылкаНаКартинку (поле надписи), кнопка ВыбратьФайлКартинки
Модуль планировщика с измерениями
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Дата = ТекущаяДата();
СоздатьИзмеренияПланировщика();
ОбновитьПериодОтображенияПланировщика();
ЗаполнитьЖурналЗаписей();
КонецПроцедуры
&НаКлиенте
Процедура ПланировщикПередСозданием(Элемент, Начало, Конец, ЗначенияИзмерений, Текст, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗначенияЗаполнения = Новый Структура;
ЗначенияЗаполнения.Вставить("Дата", Начало);
ЗначенияЗаполнения.Вставить("ДатаОкончания", Конец);
ЗначенияЗаполнения.Вставить("Группа", ЗначенияИзмерений["Группа"]);
СтруктураПараметров = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.ПланируемыеМероприятия.ФормаОбъекта", СтруктураПараметров);
КонецПроцедуры
&НаКлиенте
Процедура ПланировщикПередНачаломРедактирования(Элемент, НовыйЭлемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыделенныеЭлементы = Элемент.ВыделенныеЭлементы;
ЭлементПланировщика = ВыделенныеЭлементы[0];
СтруктураПараметров = Новый Структура("Ключ", ЭлементПланировщика.Значение);
ОткрытьФорму("Документ.ПланируемыеМероприятия.ФормаОбъекта", СтруктураПараметров);
КонецПроцедуры
&НаКлиенте
Процедура ПланировщикПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПланировщикПриОкончанииРедактирования(Элемент, НовыйЭлемент, ОтменаРедактирования)
ВыделенныеЭлементы = Элемент.ВыделенныеЭлементы;
ЭлементПланировщика = ВыделенныеЭлементы[0];
ЗначенияРеквизитов = Новый Структура;
ЗначенияРеквизитов.Вставить("Дата", ЭлементПланировщика.Начало);
ЗначенияРеквизитов.Вставить("ДатаОкончания", ЭлементПланировщика.Конец);
ЗначенияРеквизитов.Вставить("Группа", ЭлементПланировщика.ЗначенияИзмерений["Группа"]);
ОбновитьДанныеЗаписи(ЭлементПланировщика.Значение, ЗначенияРеквизитов);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ОбновитьПериодОтображенияПланировщика();
ЗаполнитьЖурналЗаписей();
КонецПроцедуры
&НаСервере
Процедура ОбновитьПериодОтображенияПланировщика()
Начало = НачалоДня(Дата) + 9*3600;
Конец = НачалоДня(Дата) + 19*3600;
Планировщик.ТекущиеПериодыОтображения.Очистить();
Планировщик.ТекущиеПериодыОтображения.Добавить(Начало, Конец);
КонецПроцедуры // ОбновитьПериодОтображенияПланировщика()
&НаСервере
Процедура ЗаполнитьЖурналЗаписей()
Планировщик.Элементы.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПланируемыеМероприятия.ДатаИВремяПроведения КАК ДатаИВремяПроведения,
| ПланируемыеМероприятия.Группа КАК Группа,
| ПРЕДСТАВЛЕНИЕ(ПланируемыеМероприятия.ВидМероприятия) КАК ВидМероприятия,
| ПланируемыеМероприятия.Длительность КАК Длительность,
| ПланируемыеМероприятия.Тема КАК Тема,
| ПланируемыеМероприятия.Ссылка КАК Ссылка
|ИЗ
| Документ.ПланируемыеМероприятия КАК ПланируемыеМероприятия
|ГДЕ
| ПланируемыеМероприятия.Проведен
| И ПланируемыеМероприятия.ДатаИВремяПроведения МЕЖДУ &ДатаНачала И &ДатаОкончания";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Дата));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Дата));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЗначенияИзмерений = Новый Соответствие;
ЗначенияИзмерений.Вставить("Группа", Выборка.Группа);
ЖирныйШрифт = Новый Шрифт(,,Истина);
ПредставлениеТемы = Выборка.ВидМероприятия + ", " + Выборка.Тема;
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ПредставлениеТемы, ЖирныйШрифт));
МассивСтрок.Добавить(Символы.ПС);
ЭлементПланировщика = Планировщик.Элементы.Добавить(Выборка.ДатаИВремяПроведения, Выборка.ДатаИВремяПроведения+Выборка.Длительность);
ЭлементПланировщика.ЗначенияИзмерений = Новый ФиксированноеСоответствие(ЗначенияИзмерений);
ЭлементПланировщика.Значение = Выборка.Ссылка;
ЭлементПланировщика.Текст = Новый ФорматированнаяСтрока(МассивСтрок);
Цвет = WebЦвета.БледноЛиловый;
ЭлементПланировщика.ЦветФона = Цвет;
КонецЦикла;
КонецПроцедуры // ЗаполнитьПланировщикПоМероприятиям()
&НаСервере
Процедура СоздатьИзмеренияПланировщика()
Измерение = Планировщик.Измерения.Добавить("Группа");
Выборка = Справочники.Группы.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Тогда
Продолжить;
КонецЕсли;
ЗначениеИзмерения = Измерение.Элементы.Добавить(Выборка.Ссылка);
ЗначениеИзмерения.Текст = Выборка.Наименование;
ЗначениеИзмерения.ЦветРамки = WebЦвета.Синий;
КонецЦикла;
КонецПроцедуры // СоздатьИзмеренияПланировщика()
&НаСервереБезКонтекста
Процедура ОбновитьДанныеЗаписи(Мероприятие, ЗначенияРеквизитов)
ОбъектЗаписи = Мероприятие.ПолучитьОбъект();
ЕстьИзмения = Ложь;
Для каждого Реквизит Из ЗначенияРеквизитов Цикл
Если ОбъектЗаписи[Реквизит.Ключ] <> Реквизит.Значение Тогда
ЕстьИзмения = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьИзмения Тогда
ЗаполнитьЗначенияСвойств(ОбъектЗаписи, ЗначенияРеквизитов);
ОбъектЗаписи.Длительность = (ОбъектЗаписи.ДатаОкончания - ОбъектЗаписи.Дата) / 60;
ОбъектЗаписи.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецПроцедуры // ОбновитьДанныеЗаписи()
Модуль обычного планировщика
&НаСервере
Процедура СотрудникПриИзмененииНаСервере()
Планировщик.Элементы.Очистить();
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПланируемыеМероприятия.Ссылка КАК Ссылка,
| ПланируемыеМероприятия.ДатаИВремяПроведения КАК ДатаИВремяПроведения,
| ПланируемыеМероприятия.Сотрудник КАК Сотрудник,
| ПланируемыеМероприятия.Группа КАК Группа,
| ПланируемыеМероприятия.ВидМероприятия КАК ВидМероприятия,
| ПланируемыеМероприятия.Длительность КАК Длительность,
| ПланируемыеМероприятия.Тема КАК Тема
|ИЗ
| Документ.ПланируемыеМероприятия КАК ПланируемыеМероприятия
|ГДЕ
| ПланируемыеМероприятия.Сотрудник = &Сотрудник
|
|УПОРЯДОЧИТЬ ПО
| ДатаИВремяПроведения
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НовыйЭлемент=Планировщик.Элементы.Добавить(ВыборкаДетальныеЗаписи.ДатаИВремяПроведения,ВыборкаДетальныеЗаписи.ДатаИВремяПроведения+60*60);
Если ВыборкаДетальныеЗаписи.ДатаИВремяПроведения>ТекущаяДата() Тогда
НовыйЭлемент.Текст="Группа: "+Строка(ВыборкаДетальныеЗаписи.Группа)+" Вид: "+Строка(ВыборкаДетальныеЗаписи.ВидМероприятия)+" Тема: "+ВыборкаДетальныеЗаписи.Тема;
НовыйЭлемент.Значение=ВыборкаДетальныеЗаписи.Ссылка;
НовыйЭлемент.ЦветФона=WebЦвета.БледноЗеленый;
НовыйЭлемент.ЦветТекста=WebЦвета.Синий;
Иначе
НовыйЭлемент.Текст="Группа: "+Строка(ВыборкаДетальныеЗаписи.Группа)+" Вид: "+Строка(ВыборкаДетальныеЗаписи.ВидМероприятия)+" Тема: "+ВыборкаДетальныеЗаписи.Тема;
НовыйЭлемент.Значение=ВыборкаДетальныеЗаписи.Ссылка;
НовыйЭлемент.ЦветФона=WebЦвета.СеребристоСерый;
НовыйЭлемент.ЦветТекста=WebЦвета.Синий;
КонецЕсли;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
&НаКлиенте
Процедура СотрудникПриИзменении(Элемент)
СотрудникПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПланировщикПередНачаломРедактирования(Элемент, НовыйЭлемент, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
ПараметрыФормы=Новый Структура("Ключ",Элемент.ВыделенныеЭлементы[0].Значение);
ОткрытьФорму("Документ.ПланируемыеМероприятия.ФормаОбъекта",ПараметрыФормы);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
Планировщик.ЕдиницаПериодическогоВарианта=ТипЕдиницыШкалыВремени.Час;
Планировщик.КратностьПериодическогоВарианта=24;
Планировщик.ОтступСНачалаПереносаШкалыВремени=8;
Планировщик.ОтступСКонцаПереносаШкалыВремени=7;
Планировщик.ВыравниватьГраницыЭлементовПоШкалеВремени=Ложь;
КонецПроцедуры
Загрузка из Веб-сервиса
Создание WS-Ссылки, команды и группы. У команды проставить группу отображения (Панель навигации.Общие).
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ЗагрузитьКурсыВалют();
Сообщить("Курсы валют загружены");
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьКурсыВалют()
Прокси = WSСсылки.КурсыВалютЦБ.СоздатьWSПрокси("http://web.cbr.ru/","DailyInfo","DailyInfoSoap12"); ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDate");
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.On_Date = ТекущаяДата();
КурсыВалют = Прокси.GetCursOnDate(WSПараметр);
Для каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate
Цикл Валюта = СоздатьПолучитьВалюту(Элемент);
Если Валюта <> Неопределено Тогда МенеджерКурсыВалют =
РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерКурсыВалют.Валюта = Валюта;
МенеджерКурсыВалют.Курс = Элемент.Vcurs;
МенеджерКурсыВалют.Период = ТекущаяДата();
МенеджерКурсыВалют.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЗагрузитьКурсыВалют()
&НаСервере
Функция СоздатьПолучитьВалюту(Элемент)
Валюта = Справочники.Валюта.НайтиПоКоду(Элемент.Vcode);
Если Валюта <> Неопределено И Валюта = Справочники.Валюта.ПустаяСсылка() Тогда
ВалютаОбъект = Справочники.Валюта.СоздатьЭлемент();
ВалютаОбъект.Наименование = Элемент.Vname;
ВалютаОбъект.Код = Элемент.Vcode;
ВалютаОбъект.Записать();
Возврат ВалютаОбъект.Ссылка;
ИначеЕсли ЗначениеЗаполнено(Валюта) Тогда
Возврат Валюта;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции // СоздатьПолучитьВалюту()
Фильтрация в форме списка
Реквизит формы списка Фильтрация с типом ПеречислениеСсылка.КачествоМатериаловИФурнитуры.
Всего материалов, количество, общая стоимость – только просмотр.
&НаКлиенте
Процедура ФильтрацияПриИзменении(Элемент)
Список.Отбор.Элементы.Очистить();
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Качество");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Фильтрация;
ПолучитьИтог();
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьВсе(Команда)
Список.Отбор.Элементы.Очистить();
Фильтрация = "";
ПолучитьИтог();
КонецПроцедуры
&НаСервере
Процедура ПолучитьИтог()
Если НЕ Фильтрация.Пустая() Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(Материал.Количество) КАК Количество,
| СУММА(Материал.ЗакупочнаяСтоимость) КАК ЗакупочнаяСтоимость,
| КОЛИЧЕСТВО(Материал.Код) КАК ВсегоМатериалов
|ИЗ
| Справочник.Материал КАК Материал
|ГДЕ
| Материал.Качество = &Качество";
Запрос.УстановитьПараметр("Качество", Фильтрация);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ВсегоМатериалов = РезультатЗапроса[0].ВсегоМатериалов;
ОбщаяЗакупочнаяСтоимость = РезультатЗапроса[0].ЗакупочнаяСтоимость;
КоличествоМатериалов = РезультатЗапроса[0].Количество;
Иначе
Запрос = Новый Запрос; Запрос.Текст =
"ВЫБРАТЬ
| СУММА(Материал.Количество) КАК Количество,
| СУММА(Материал.ЗакупочнаяСтоимость) КАК ЗакупочнаяСтоимость,
| КОЛИЧЕСТВО(Материал.Код) КАК ВсегоМатериалов
|ИЗ
| Справочник.Материал КАК Материал";
Запрос.УстановитьПараметр("Качество", Фильтрация);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ВсегоМатериалов = РезультатЗапроса[0].ВсегоМатериалов;
ОбщаяЗакупочнаяСтоимость = РезультатЗапроса[0].ЗакупочнаяСтоимость;
КоличествоМатериалов = РезультатЗапроса[0].Количество;
КонецЕсли;
КонецПроцедуры // ПолучитьИтог()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПолучитьИтог();
КонецПроцедуры
Загрузка файла в табличную часть (Из документа Заказ)
Справочник. Изделие
Реквизиты: Файл (хранилище значений), имя файла, расширение (строка, неогр.) Реквизиты формы: Путь к файлу,Имя файла диалог, расширение файла диалог Команды: Загрузить файл, открыть файл.

