Работа с контактной информацией в типовых конфигурациях Код 1C v 8.х
Функция ОчиститьEmail(
Контрагент,
ТипКонтактнойИнформации,
ВидКонтактнойИнформации,
Представление
)
НаборЗаписей = РегистрыСведений. КонтактнаяИнформация. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Объект. Установить( Контрагент) ;
НаборЗаписей. Отбор. Тип. Установить( ТипКонтактнойИнформации) ;
НаборЗаписей. Отбор. Вид. Установить( ВидКонтактнойИнформации) ;
НаборЗаписей. Прочитать( ) ;
Для каждого СтрНабЗап Из НаборЗаписей Цикл
СтрНабЗап. Представление = "" ;
сообщить( "" + Контрагент + " | "
+ ТипКонтактнойИнформации + " | "
+ ВидКонтактнойИнформации + " | "
+ Представление + " -> " + СтрНабЗап. Представление + " [Ok!]" ) ;
КонецЦикла ;
НаборЗаписей. Записать( ) ;
КонецФункции
функция ПолучитьТЗ()
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000000
| КонтактнаяИнформация.Объект,
| КонтактнаяИнформация.Тип,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление,
| (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000))) как стрПредставление
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Тип = &Тип
| //И КонтактнаяИнформация.Вид = &Вид
| И (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000))) <> &ПустоеЗначение
| И НЕ КонтактнаяИнформация.Представление ПОДОБНО &ШаблонEmail" ;
Запрос. УстановитьПараметр( "Тип" , Перечисления. ТипыКонтактнойИнформации. АдресЭлектроннойПочты) ;
Запрос. УстановитьПараметр( "ПустоеЗначение" , "" ) ;
Запрос. УстановитьПараметр( "ШаблонEmail" , "%@%" ) ;
Результат = Запрос. Выполнить( ) ;
ПлохиеEmailТЗ = Результат. Выгрузить( ) ;
Возврат ПлохиеEmailТЗ;
КонецФункции
Категория:
1С Общие вопросы - Обычные формы Программное изменение записей регистра сведений Код 1C v 8.х НаборЗаписей = РегистрыСведений. КонтактнаяИнформация. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Объект. Установить( Контрагент) ;
НаборЗаписей. Прочитать( ) ;
Для каждого Запись из НаборЗаписей Цикл
Если Запись. Вид = Справочники. ВидыКонтактнойИнформации. НайтиПоНаименованию( "Телефон контрагента" ) Тогда
Запись. Представление = ЭлементыФормы. ПолеВводаТелефона. Значение;
КонецЕсли ;
КонецЦикла ;
НаборЗаписей. Записать( ) ;
Категория:
Регистры сведений Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация)
1. Создание реквизита:
Добавляем новый реквизит формы (!!! не путать с реквизитом справочника !!!) с типом "ДинамическийСписок"
В поле "Основная таблица" выбираем нужный регистр сведений.
2. Отображение на форме:
Перетащить реквизит формы в элементы формы (c права налево
.
Так же для отображения необходимо задать хотя-бы одну колонку для вывода.
3. Настройка отбора:
В процедуре ПриСозданииНаСервере вручную устанавливаем необходимый отбор.
Пример:
Код 1C v 8.2 УП &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = КонтактнаяИнформация. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "Контрагент" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
ЭлементОтбора. ПравоеЗначение = Объект. Ссылка;
КонецПроцедуры
Решение явно не единственное, так что если кто что накопает ещё - пишите ;)
Категория:
Работа с Формой (Диалог) и её элементами Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе? Использовать конструкцию «
ВЫРАЗИТЬ »:
Код 1C v 8.х Запрос. Текст = "
…
|ГДЕ
| (ВЫРАЗИТЬ(ЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) <> &Груз" ;
Запрос. УстановитьПараметр( "Груз" , "Тонн" ) ;
С целью приведения строк неограниченной длины к строкам ограниченной длины рекомендуется использовать операцию приведения типа ВЫРАЗИТЬ() :
Код 1C v 8.х
ВЫБРАТЬ
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ВЫРАЗИТЬ( Представление КАК Строка( 200 ) )
ИНАЧЕ NULL
КОНЕЦ КАК Представление,
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ВЫРАЗИТЬ( Представление КАК Строка( 200 ) )
ИНАЧЕ NULL
КОНЕЦ КАК Представление1
ИЗ
РегистрСведений. КонтактнаяИнформация КАК КонтактнаяИнформация
УПОРЯДОЧИТЬ ПО
Представление,
Представление1
Категория:
Запросы Функция ЗНАЧЕНИЕ Функция ЗНАЧЕНИЕ - Позволяет использовать прямо в текстах запроса предопределенные в конфигураторе данные. (т.е. позволяет избавиться от необходимости передавать их параметрами к запросу).
Использование предопределенных данных конфигурации
Например:
можно было бы написать в запросе:
Код 1C v 8.х | ВзаиморасчетыСПокупателямиОстатки.Проект = &ПроектыПустаяСсылка
а потом передать в запрос параметр:
Код 1C v 8.х Запрос. УстановитьПараметр( "ПроектыПустаяСсылка" , Справочник. Проекты. ПустаяСсылка( ) ) ;
А при помощи
ЗНАЧЕНИЕ будет так:
Код 1C v 8.х | ВзаиморасчетыСПокупателямиОстатки.Проект = ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка)
Примеры использования:
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Физлицо" , Физлицо) ;
Запрос. Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПаспортныеДанныеФизЛицСрезПоследних.ДокументВид,
| ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия,
| ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер,
| ПаспортныеДанныеФизЛицСрезПоследних.ДокументДатаВыдачи,
| ПаспортныеДанныеФизЛицСрезПоследних.ДокументКемВыдан,
| ПаспортныеДанныеФизЛицСрезПоследних.ДокументКодПодразделения,
| "" ,"" + АдресаФактические.Поле1 + "" ,"" + АдресаФактические.Поле2 + "" ,"" + АдресаФактические.Поле3 + "" ,"" + АдресаФактические.Поле4 + "" ,"" + АдресаФактические.Поле5 + "" ,"" + АдресаФактические.Поле6 + "" ,"" + АдресаФактические.Поле7 + "" ,"" + АдресаФактические.Поле8 + "" ,"" + АдресаФактические.Поле9 КАК АдресФактический,
| "" ,"" + АдресПрописки.Поле1 + "" ,"" + АдресПрописки.Поле2 + "" ,"" + АдресПрописки.Поле3 + "" ,"" + АдресПрописки.Поле4 + "" ,"" + АдресПрописки.Поле5 + "" ,"" + АдресПрописки.Поле6 + "" ,"" + АдресПрописки.Поле7 + "" ,"" + АдресПрописки.Поле8 + "" ,"" + АдресПрописки.Поле9 КАК АдресПоПрописке,
| ДомашниеТелефоны.Поле3 КАК ТелефонДомашний
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(, ФизЛицо = &ФизЛицо) КАК ПаспортныеДанныеФизЛицСрезПоследних
| ПО ФизическиеЛица.Ссылка = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ДомашниеТелефоны
| ПО ФизическиеЛица.Ссылка = ДомашниеТелефоны.Объект
| И (ДомашниеТелефоны.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонФизЛица))
| И (ДомашниеТелефоны.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресаФактические
| ПО ФизическиеЛица.Ссылка = АдресаФактические.Объект
| И (АдресаФактические.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресФизЛица))
| И (АдресаФактические.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресПрописки
| ПО (ФизическиеЛица.Ссылка = АдресаФактические.Объект)
| И (АдресаФактические.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресФизЛица))
| И (АдресаФактические.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
|ГДЕ
| ФизическиеЛица.Ссылка = &Физлицо" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
АдресПроживания = Выборка. АдресФактический;
УдостоверениеЛичности = Строка( Выборка. ДокументВид) + "; " + Выборка. ДокументСерия+ "; " + Выборка. ДокументНомер+ "; " + Формат( Выборка. ДокументДатаВыдачи, "ДЛФ=D" ) ;
Телефон = Выборка. ТелефонДомашний;
КонецЕсли ;
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
| ВидыНоменклатуры.Ссылка как ссылка,
| ВидыНоменклатуры.Порядок
|ИЗ
| Перечисление.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| ВидыНоменклатуры.Ссылка = Значение(Перечисление.ВидыНоменклатуры.Услуга) " ;
ТЗ = Новый ТаблицаЗначений;
ТЗ = запрос. Выполнить( ) . Выгрузить( ) ;
ЭлементыФормы. ТабличноеПоле1 . Значение = ТЗ;
ЭлементыФормы. ТабличноеПоле1 . СоздатьКолонки( ) ;
Категория:
Запросы Как проверить Тип поля в запросе? При составлении запроса для полей, имеющих составной тип данных, например, измерение "Объект" в регистре сведений "Контактная информация", часто возникает необходимость проверить тип значения этого поля.
Проверку можно выполнить с помощью оператора
ССЫЛКА
Код 1C v 8.х ВЫБРАТЬ Представление
ИЗ РегистрСведений. КонтактнаяИнформация
ГДЕ КонтактнаяИнформация. Объект ССЫЛКА Справочник. Контрагенты
Категория:
Запросы Функция ПОДСТРОКА() В языке запросов 1С:Предприятия функция
ПОДСТРОКА() в
формате ПОДСТРОКА(<Исходная строка>, <Начало>, <Длина>) может применяться к данным строкового типа и позволяет выделить фрагмент <Исходной строки>, начинающийся с символа номер <Начало> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции ПОДСТРОКА() имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Исходная строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024.
Вычисление функции ПОДСТРОКА() на SQL сервере:
В клиент-серверном варианте работы функция ПОДСТРОКА() реализуется при помощи функции SUBSTRING() соответствующего оператора SQL, передаваемого серверу баз данных SQL Server, который вычисляет тип результата функции SUBSTRING() по сложным правилам в зависимости от типа и значений ее параметров, а так же в зависимости от контекста, в котором она используется.
В большинстве случаев эти правила не оказывают влияния на выполнение запроса 1С:Предприятия, однако есть случаи, когда для исполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса.
Например, запрос:
Код 1C v 8.х ВЫБРАТЬ
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ПОДСТРОКА( Представление, 0 , 200 )
ИНАЧЕ NULL
КОНЕЦ КАК Представление,
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ПОДСТРОКА( Представление, 0 , 200 )
ИНАЧЕ NULL
КОНЕЦ КАК Представление1
ИЗ
РегистрСведений. КонтактнаяИнформация КАК КонтактнаяИнформация
УПОРЯДОЧИТЬ ПО
Представление,
Представление1
завершается аварийно с сообщением Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, native=8618
Это происходит потому, что вычисленная Microsoft SQL Server максимальная длина строки, которая является результатом выражения:
Код 1C v 8.х ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ПОДСТРОКА( Представление, 0 , 200 )
ИНАЧЕ NULL
КОНЕЦ КАК Представление,
равна 4000 символов. Поэтому длина записи, состоящей из двух таких полей превышает 8000 байт, разрешенные для выполнения операции сортировки.
В связи с описанной особенностью исполнения функции SUBSTRING() на SQL Server использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ(). В частности, приведенный пример можно переписать в виде:
Код 1C v 8.х ВЫБРАТЬ
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ВЫРАЗИТЬ( Представление КАК Строка( 200 ) )
ИНАЧЕ NULL
КОНЕЦ КАК Представление,
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ВЫРАЗИТЬ( Представление КАК Строка( 200 ) )
ИНАЧЕ NULL
КОНЕЦ КАК Представление1
ИЗ
РегистрСведений. КонтактнаяИнформация КАК КонтактнаяИнформация
УПОРЯДОЧИТЬ ПО
Представление,
Представление1
Категория:
Запросы Как выбрать записи из регистра сведений? Код 1C v 8.х
Отбор = Новый Структура( "Сотрудник" ) ;
Отбор. Сотрудник = Результат. Сотрудник;
ВыборкаОКЛАД = РегистрыСведений. ПлановыеНачисленияРаботниковОрганизаций. Выбрать( Результат. Период, ТекДата, Отбор) ;
ВыборкаОКЛАД = РегистрыСведений. ПлановыеНачисленияРаботниковОрганизаций. Выбрать( Результат. Период, ТекДата, Новый Структура( "Сотрудник" , Результат. Сотрудник) ) ;
СумОкл= 0 ;
Пока ВыборкаОКЛАД. Следующий( ) Цикл
СумОкл= СумОкл+ ВыборкаОКЛАД. Показатель1 ;
КонецЦикла ;
ВыборкаОРГ = РегистрыСведений. КонтактнаяИнформация. Выбрать( Новый Структура( "Объект" , Организация) ) ;
Пока ВыборкаОРГ. Следующий( ) Цикл
Если Строка( ВыборкаОРГ. Вид) = "Юридический адрес организации" Тогда
ЮрАдрес = ВыборкаОРГ. Представление;
ИначеЕсли Строка( ВыборкаОРГ. Вид) = "Телефон организации" Тогда
Телефон = ВыборкаОРГ. Представление;
КонецЕсли ;
КонецЦикла ;
Категория:
Регистры сведений Получить запросом контактную информацию одной строкой по Физ. лицу Для тех, кто мучается с получением сведений из регистра сведений КонтактнаяИнформация в стандартных конфигурациях.
Код 1C v 8.х
Запрос= Новый Запрос;
Запрос. Текст= "
|ВЫБРАТЬ
| ВЗАдрес.Ссылка КАК ФизЛицо,
| ВЗАдрес.Адрес,
| ВЗТелефон.Телефон
|ИЗ
| (ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Ссылка,
| КонтактнаяИнформация.Представление КАК Адрес
| ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
| ПО ФизическиеЛица.Ссылка = КонтактнаяИнформация.Объект
| ГДЕ
| КонтактнаяИнформация.Вид = &АдрПоПрописке
| И КонтактнаяИнформация.Тип = &Адрес) КАК ВЗАдрес
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Ссылка,
| КонтактнаяИнформация.Представление КАК Телефон
| ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
| ПО ФизическиеЛица.Ссылка = КонтактнаяИнформация.Объект
| ГДЕ
| КонтактнаяИнформация.Вид = &ВидТелеф
| И КонтактнаяИнформация.Тип = &Телефон) КАК ВЗТелефон
| ПО ВЗАдрес.Ссылка = ВЗТелефон.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо
|АВТОУПОРЯДОЧИВАНИЕ
|" ;
Запрос. УстановитьПараметр( "Адрес" , Перечисления. ТипыКонтактнойИнформации. Адрес) ;
Запрос. УстановитьПараметр( "АдрПоПрописке" , Справочники. ВидыКонтактнойИнформации. ЮрАдресФизЛица) ;
Запрос. УстановитьПараметр( "ВидТелеф" , Справочники. ВидыКонтактнойИнформации. ТелефонФизЛица) ;
Запрос. УстановитьПараметр( "Телефон" , Перечисления. ТипыКонтактнойИнформации. Телефон) ;
Результат = Запрос. Выполнить( ) ;
Результат = Результат. Выбрать( ) ;
Пока Результат. Следующий( ) Цикл
КонецЦикла ;
Категория:
Запросы