/// Вх Параметры: Например Объект - Документ,Контрагент,КонтактноеЛицоКонтрагнета,КонтактноеЛицо /// Тип - тип контактной информации , Вид - вид контактной информации , /// Вых Параметры: Массив Структур , возращает массив с структурой Объект,Вид_КИ,Значение_КИ Функция Получить_Все_ВозможныеВиды_КИ_Объекта(СсылкаЗнч,Тип_КИ,Вид_КИ = Неопределено) Экспорт //// В документе ищет свойства и если в свойстах есть имеил тогда п ЭтоДокумент = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(СсылкаЗнч)); МассивВозврата = Новый Массив; СоотвествияЗнч = Новый Соответствие; ТекКонтрагент = Неопределено; ТекКонтактноеЛицоКонтрагнета = Неопределено; ТекКонтактноеЛицо = Неопределено; Если ЭтоДокумент Тогда ///// Пока только для документа ЗаказПокупателя Если ТипЗнч(СсылкаЗнч) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда ТаблицаПустая = Ложь; Запрос = Новый Запрос("ВЫБРАТЬ | ЗначенияСвойствОбъектов.Свойство, | ЗначенияСвойствОбъектов.Значение, | ЗначенияСвойствОбъектов.Свойство.Наименование КАК Наименование_Свойства, | ЗначенияСвойствОбъектов.Свойство.ТипЗначения КАК ТипЗначения |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект"); Запрос.УстановитьПараметр("Объект",СсылкаЗнч); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() = 0 Тогда ТаблицаПустая = Истина; КонецЕсли; СоотвествиеСвойств = Новый Соответствие; Пока Выборка.Следующий() Цикл СоотвествиеСвойств.Вставить(Выборка.Свойство,Выборка.Значение); КонецЦикла; ТаблицаСоотвествий = Константы.Простир_СоотвествиеСвойствЗаказу_РеквизитамКонтрагента.Получить(); Если Не ЗначениеЗаполнено(ТаблицаСоотвествий) Тогда ТаблицаПустая = Истина; КонецЕсли; ТаблицаСоотвествий = ЗначениеИзСтрокиВнутр(ТаблицаСоотвествий); Если ТаблицаСоотвествий.Количество() = 0 Тогда ТаблицаПустая = Истина; КонецЕсли; Если НЕ ТаблицаПустая Тогда Для Каждого Стр Из ТаблицаСоотвествий Цикл Если ЗначениеЗаполнено(Вид_КИ) Тогда Если Стр.РеквизитКонтрагента = Вид_КИ Тогда ЗначениеСвойства = СоотвествиеСвойств.Получить(Стр.РеквизитКонтрагента); Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда МассивВозврата.Добавить(Новый Структура("Объект,Вид_КИ,Значение_КИ",СсылкаЗнч,Стр.РеквизитКонтрагента,ЗначениеСвойства)); КонецЕсли; КонецЕсли; ИначеЕсли ТипЗнч(Стр.РеквизитКонтрагента) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") И Стр.РеквизитКонтрагента.Тип = Тип_КИ Тогда ЗначениеСвойства = СоотвествиеСвойств.Получить(Стр.ИмяСовойстваЗаказа); Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда МассивВозврата.Добавить(Новый Структура("Объект,Вид_КИ,Значение_КИ",СсылкаЗнч,Стр.РеквизитКонтрагента,ЗначениеСвойства)); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; Если СсылкаЗнч.Метаданные().Реквизиты.Найти("Контрагент") <> Неопределено Тогда ТекКонтрагент = СсылкаЗнч.Контрагент; КонецЕсли; КонецЕсли; Если ТипЗнч(СсылкаЗнч) = Тип("СправочникСсылка.Контрагенты") Тогда ТекКонтрагент = СсылкаЗнч; КонецЕсли; Если ЗначениеЗаполнено(ТекКонтрагент) Тогда МассивОбъектов_КИ = Новый Массив; МассивОбъектов_КИ.Добавить(ТекКонтрагент); Выборка_КонтактныеЛица_Контрагентов = Справочники.КонтактныеЛицаКонтрагентов.Выбрать(,ТекКонтрагент); Пока Выборка_КонтактныеЛица_Контрагентов.Следующий() Цикл Если Выборка_КонтактныеЛица_Контрагентов.ПометкаУдаления Тогда Продолжить; КонецЕсли; МассивОбъектов_КИ.Добавить(Выборка_КонтактныеЛица_Контрагентов.Ссылка); Если НЕ Выборка_КонтактныеЛица_Контрагентов.КонтактноеЛицо.Пустая() Тогда МассивОбъектов_КИ.Добавить(Выборка_КонтактныеЛица_Контрагентов.КонтактноеЛицо); КонецЕсли; КонецЦикла; Запрос = Новый Запрос("ВЫБРАТЬ | КонтактнаяИнформация.Представление, | КонтактнаяИнформация.Объект, | КонтактнаяИнформация.Вид |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект В(&Объект) | И КонтактнаяИнформация.Тип = &Тип"); Запрос.УстановитьПараметр("Объект",МассивОбъектов_КИ); Запрос.УстановитьПараметр("Тип",Тип_КИ); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МассивВозврата.Добавить(Новый Структура("Объект,Вид_КИ,Значение_КИ",Выборка.Объект,Выборка.Вид,Выборка.Представление)); КонецЦикла; КонецЕсли; Возврат МассивВозврата; КонецФункции МассивКонтактнойИнформации = Получить_Все_ВозможныеВиды_КИ_Объекта(пДокументСсылка, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, );
9 июл. 2019 г.
Получить контактную информацию
Автор не я.
Отобразить тип \ спрятать типы по кнопке выбрать
Задача: “реквизит имеет неоднозначный тип т.е. (СправочникСсылка, ДокументСсылка), при нажатии кнопки выбора нужно спрятать \ отобразить нужные типы”.
МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты")); МассивТипов.Добавить(Тип("СправочникСсылка.Организации")); ГрузоотправительТипы = Новый ОписаниеТипов(МассивТипов); Элементы.Грузоотправитель.ОграничениеТипа = ГрузоотправительТипы; Элементы.Грузоотправитель.ВыбиратьТип = Истина; Если ВидОперации = Перечисления.Инт_ВидыОперацийЗаявкаНаПеревозку.Поставка Тогда Элементы.Грузоотправитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Контрагенты"); Элементы.Грузоотправитель.ВыбиратьТип = Ложь; КонецЕсли;
8 июл. 2019 г.
Открыть форму с отбором по владельцу (программно)
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Владелец", "Объект.Грузоотправитель"); НовыйМассив = Новый Массив(); НовыйМассив.Добавить(НоваяСвязь); Элементы.ПунктПогрузки.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыйМассив);
Программное добавление отборов (ИЛИ)
Форма = ПолучитьФорму("РегистрСведений.Долги.ФормаСписка"); ГруппаОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора.Использование = Истина; ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; ЭлементОтбора1 = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора1.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДокументРаботы"); ЭлементОтбора1.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора1.Использование = Истина; ЭлементОтбора1.ПравоеЗначение = Объект.Ссылка; ЭлементОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора2.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДокументОснование"); ЭлементОтбора2.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора2.Использование = Истина; ЭлементОтбора2.ПравоеЗначение = Объект.Ссылка; Форма.Открыть();
Программное добавление\удаление обязательных для заполнения реквизитов
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ТипЗнч(Грузоотправитель) = Тип("СправочникСсылка.Организации") Тогда ПроверяемыеРеквизиты.Добавить("Бухгалтер"); ПроверяемыеРеквизиты.Добавить("Отпустил"); КонецЕсли; Если инт_СтороннийПеревозчик Тогда ПроверяемыеРеквизиты.Очистить(); ПроверяемыеРеквизиты.Добавить("Грузоотправитель"); ПроверяемыеРеквизиты.Добавить("Подразделение"); ПроверяемыеРеквизиты.Добавить("Дата"); ПроверяемыеРеквизиты.Добавить("Грузополучатель"); КонецЕсли; КонецПроцедуры
Сохранить файлы в ХранилищеЗначений (Сохранение \ Восстановление)
&НаКлиенте Процедура Завантажити(Команда) ИмяФайла = ""; ПутьФайла = ""; НачатьПомещениеФайла(Новый ОписаниеОповещения("ПослеЗавершенияПомещения",ЭтаФорма),ПутьФайла,ИмяФайла,Истина); КонецПроцедуры &НаКлиенте Процедура ПослеЗавершенияПомещения(Результат,Адрес, ВыбранноеИмяФайла,ДопПараметры) Экспорт Если Результат Тогда Файл = Новый Файл(ВыбранноеИмяФайла); ДопПараметры = Новый Структура; ДопПараметры.Вставить("Файл",Файл); ДопПараметры.Вставить("ИмяБезРасширения",Файл.ИмяБезРасширения); ДопПараметры.Вставить("ВыбранноеИмяФайла",ВыбранноеИмяФайла); ДопПараметры.Вставить("Расширение",Файл.Расширение); Файл.НачатьПроверкуСуществования(Новый ОписаниеОповещения("НачатьПроверкуСуществованияЗавершение",ЭтаФорма,ДопПараметры)) КонецЕсли; КонецПроцедуры &НаКлиенте Процедура НачатьПроверкуСуществованияЗавершение(Существует,ДопПараметры) Экспорт Если Существует Тогда ДопПараметры.Файл.НачатьПолучениеРазмера(Новый ОписаниеОповещения("НачатьПолучениеРазмераЗавершение",ЭтаФорма,ДопПараметры)); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура НачатьПолучениеРазмераЗавершение(Размер, ДопПараметры) Экспорт Если Размер > 10000000 Тогда Сообщить("Розмір файлу не повинен бути більше 10 МБ!"); Объект.Розширення = ""; Объект.Наименование = ""; Возврат; КонецЕсли; ДопПараметры.Удалить("Файл"); НачатьСозданиеДвоичныхДанныхИзФайла(Новый ОписаниеОповещения("ДДЗавершение",ЭтаФорма,ДопПараметры),ДопПараметры.ВыбранноеИмяФайла); КонецПроцедуры &НаСервере Процедура ДДЗавершение(ДД,ДопПараметры) Экспорт _Объект = РеквизитФормыВЗначение("Объект"); _Объект.Файл = Новый ХранилищеЗначения(ДД,Новый СжатиеДанных(9)); _Объект.Наименование = ДопПараметры.ИмяБезРасширения; _Объект.Розширення = ДопПараметры.Расширение; _Объект.Записать(); ЗначениеВРеквизитФормы(_Объект,"Объект"); КонецПроцедуры &НаКлиенте Процедура Вивантажити(Команда) Если ЭтаФорма.Модифицированность Тогда Сообщить("З початку потрібно зберегти об'єкт"); Возврат; КонецЕсли; ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДиалогСохраненияФайла.Заголовок = "Зберегти файл"; ДиалогСохраненияФайла.Показать(Новый ОписаниеОповещения("ПослеЗавершенияИзвлечения",ЭтаФорма)); КонецПроцедуры &НаКлиенте Процедура ПослеЗавершенияИзвлечения(СписокФайлов,ДопПараметры) Экспорт ДД = ПолучитьФайл(); Если ДД = Неопределено Или ТипЗнч(ДД) <> Тип("ДвоичныеДанные") Тогда Сообщить("Помилка при зберіганні"); Возврат; КонецЕсли; Путь = СписокФайлов[0] +"\"+ Объект.Наименование + Объект.Розширення; ДД.НачатьЗапись(Новый ОписаниеОповещения("ДДНачалоЗапись",ЭтаФорма),Путь); ПоказатьПредупреждение(Новый ОписаниеОповещения("ПоказатьПредупреждениеПриЗавершении",ЭтаФорма),"Збережено по шляху " + Путь,,"Увага"); КонецПроцедуры &НаСервере Функция ПолучитьФайл() Возврат Объект.Ссылка.Файл.Получить(); КонецФункции &НаКлиенте Процедура ПоказатьПредупреждениеПриЗавершении(ДопПараметры) Экспорт КонецПроцедуры &НаКлиенте Процедура ДДНачалоЗапись(ДопПараметры) Экспорт КонецПроцедуры
Отбор в выпадающем списке
Задача: “сделать, чтобы при выпадающем списке не показывало одно значение перечисление”
Добавить реквизит на форму


Добавить реквизит на форму
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Инт_ВидыОперацийЗаявкаНаПеревозку.Ссылка |ИЗ | Перечисление.Инт_ВидыОперацийЗаявкаНаПеревозку КАК Инт_ВидыОперацийЗаявкаНаПеревозку |ГДЕ | Инт_ВидыОперацийЗаявкаНаПеревозку.Ссылка <> ЗНАЧЕНИЕ(Перечисление.Инт_ВидыОперацийЗаявкаНаПеревозку.Перемещение)"; Элементы.инт_ВидОперации.СписокВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); КонецПроцедуры
Получить ближайшую рабочую дату от произвольной даты
&НаКлиенте Процедура Команда1(Команда) Сообщить(ПолучитьБлижайшуюРабочуюДатуОтИсходнойДаты(ДатаКалендаря)); КонецПроцедуры Функция ПолучитьБлижайшуюРабочуюДатуОтИсходнойДаты(Знач ИсходнаяДата) ИсходнаяДата = НачалоДня(ИсходнаяДата); ИсходнаяДата = ИсходнаяДата + 24 * 60 * 60; Пока Истина Цикл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ВидДня |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = &ДатаКалендаря"; Запрос.УстановитьПараметр("ДатаКалендаря", ИсходнаяДата); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидДня = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий") Тогда Возврат ИсходнаяДата; Иначе ИсходнаяДата = НачалоДня(ИсходнаяДата); ИсходнаяДата = ИсходнаяДата + 24 * 60 * 60; КонецЕсли; КонецЦикла; КонецЦикла; КонецФункции
Ввести на основании (на клиенте)
&НаКлиенте Процедура ТранспортнаяНакладная(Команда) Форма = ПолучитьФорму("Документ.ТранспортнаНакладна.Форма.ФормаДокумента"); ДанныеФормы = Форма.Объект; ТранспортнаяНакладнаяСервер(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервере Процедура ТранспортнаяНакладнаяСервер(ДанныеФормы) текДок = Элементы.Список.ТекущаяСтрока.Ссылка; Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ТранспортнаНакладна")); Док.Заполнить(текДок); ЗначениеВДанныеФормы(Док, ДанныеФормы); КонецПроцедуры
Записать документ без проведения
ДокОбъект = Ссылка.ПолучитьОбъект(); Если ДокОбъект.Проведен Тогда ДокОбъект.Проведен = Истина; ИначеЕсли ДокОбъект.Проведен = Ложь Тогда ИначеЕсли ДокОбъект.ПомеченНаУдаления Тогда ДокОбъект.ПомеченНаУдаление = Истина; КонецЕсли; ДокОбъект.ОбменДанными.Загрузка = Истина; ДокОбъект.Записать();
Подписаться на:
Сообщения (Atom)