Добавим новые справочники Контрагенты и КонтактныеЛица, а также два вспомогательных справочника ФизическиеЛица и Должности. Для справочника КонтактныеЛица указываем владельца (справочник Контрагенты) и добавляем четыре реквизита: ФизическоеЛицо (тип: СправочникСсылка.ФизическиеЛица), Должность (СправочникСсылка.Должности), ДеньРождения (Дата) и Телефон (Строка).
Добавляем новые справочники Номенклатура (на закладке Иерархия устанавливаем флажок Иерархический справочник) и КлассификаторЕдиницИзмерения, а также новое перечисление ВидыНоменклатуры с заданными значениями перечисления. В справочник Номенклатура добавляем реквизиты ВидНоменклатуры (перечисление ВидыНоменклатуры) и БазоваяЕдиницаИзмерения (справочник КлассификаторЕдиницИзмерения). Для проверки заполненности для реквизита Вид Номенклатуры можно в палитре свойств установить свойство Проверка заполнения в значение Выдавать ошибку, т.к. нет дополнительных проверок; а для реквизита БазоваяЕдиницаИзмерения нужно добавить код в модуль объекта, который проверит, что номенклатура не является услугой:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если НЕ ЭтоГруппа Тогда
Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
Если ВидНоменклатуры<>Перечисления.ВидНоменклатуры.Услуга Тогда
Сообщить("Укажите базовую единицу измерения!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В модуле формы добавляем код для заполнения вида номенклатуры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ВидНом = Объект.Родитель.ВидНоменклатуры;
Если ЗначениеЗаполнено(ВидНом) Тогда
Объект.ВидНоменклатуры = ВидНом;
КонецЕсли;
КонецПроцедуры
Добавляем новый справочник ЕдиницыИзмерения, подчиненный Номенклатуре (с реквизитом Коэффициент (Число, 15, 3)), после чего добавим реквизит в справочник Номенклатура – ОсновнаяЕдиницаИзмерения (тип: ЕдиницыИзмерения). В модуле объекта прописываем заполнение основной единицы с соблюдением поставленных условий:
Процедура ПередЗаписью(Отказ)
Если НЕ ЭтоГруппа Тогда
Если ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
Если НЕ ЗначениеЗаполнено(ОсновнаяЕдиницаИзмерения) Тогда
СпрЕдиницы = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
СпрЕдиницы.Наименование = СокрЛП(БазоваяЕдиницаИзмерения);
СпрЕдиницы.Владелец = Ссылка;
СпрЕдиницы.Коэффициент = 1;
СпрЕдиницы.Записать();
ОсновнаяЕдиницаИзмерения = СпрЕдиницы.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Пока не сообразила, как можно решить задачу поиска контрагентов без контактных лиц с помощью одного запроса, поэтому пришлось использовать два отдельных запроса:
&НаСервереБезКонтекста
Процедура ПроверитьНаСервере()
З_1 = Новый Запрос;
З_1.Текст= "ВЫБРАТЬ
| КонтактныеЛица.Владелец
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|
|СГРУППИРОВАТЬ ПО
| КонтактныеЛица.Владелец
|АВТОУПОРЯДОЧИВАНИЕ";
Результат_1 = З_1.Выполнить().Выгрузить();
З_2 = Новый Запрос;
З_2.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ЭтоГруппа = ЛОЖЬ
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.Ссылка
|АВТОУПОРЯДОЧИВАНИЕ";
Результат_2 = З_2.Выполнить();
ВыборкаДетальныеЗаписи = Результат_2.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ТипЗнч(Результат_1.Найти(ВыборкаДетальныеЗаписи.Ссылка)) = Тип("Неопределено") Тогда
сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ПроверитьНаСервере()
Вход
Важно!
Для новых покупателей Базового курса - с чего начать
...........................................................
Все контакты Саппорта Spec8.ru
...........................................................
Как задавать вопросы по материалам курса и ДЗ
...........................................................
Что такое Мастер-группа
...........................................................
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Добавим новые справочники Контрагенты и КонтактныеЛица, а также два вспомогательных справочника ФизическиеЛица и Должности. Для справочника КонтактныеЛица указываем владельца (справочник Контрагенты) и добавляем четыре реквизита: ФизическоеЛицо (тип: СправочникСсылка.ФизическиеЛица), Должность (СправочникСсылка.Должности), ДеньРождения (Дата) и Телефон (Строка).
Добавляем новые справочники Номенклатура (на закладке Иерархия устанавливаем флажок Иерархический справочник) и КлассификаторЕдиницИзмерения, а также новое перечисление ВидыНоменклатуры с заданными значениями перечисления. В справочник Номенклатура добавляем реквизиты ВидНоменклатуры (перечисление ВидыНоменклатуры) и БазоваяЕдиницаИзмерения (справочник КлассификаторЕдиницИзмерения). Для проверки заполненности для реквизита Вид Номенклатуры можно в палитре свойств установить свойство Проверка заполнения в значение Выдавать ошибку, т.к. нет дополнительных проверок; а для реквизита БазоваяЕдиницаИзмерения нужно добавить код в модуль объекта, который проверит, что номенклатура не является услугой:
Если НЕ ЭтоГруппа Тогда
Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
Если ВидНоменклатуры<>Перечисления.ВидНоменклатуры.Услуга Тогда
Сообщить("Укажите базовую единицу измерения!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В модуле формы добавляем код для заполнения вида номенклатуры:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ВидНом = Объект.Родитель.ВидНоменклатуры;
Если ЗначениеЗаполнено(ВидНом) Тогда
Объект.ВидНоменклатуры = ВидНом;
КонецЕсли;
КонецПроцедуры
Добавляем новый справочник ЕдиницыИзмерения, подчиненный Номенклатуре (с реквизитом Коэффициент (Число, 15, 3)), после чего добавим реквизит в справочник Номенклатура – ОсновнаяЕдиницаИзмерения (тип: ЕдиницыИзмерения). В модуле объекта прописываем заполнение основной единицы с соблюдением поставленных условий:
Если НЕ ЭтоГруппа Тогда
Если ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
Если НЕ ЗначениеЗаполнено(ОсновнаяЕдиницаИзмерения) Тогда
СпрЕдиницы = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
СпрЕдиницы.Наименование = СокрЛП(БазоваяЕдиницаИзмерения);
СпрЕдиницы.Владелец = Ссылка;
СпрЕдиницы.Коэффициент = 1;
СпрЕдиницы.Записать();
ОсновнаяЕдиницаИзмерения = СпрЕдиницы.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Пока не сообразила, как можно решить задачу поиска контрагентов без контактных лиц с помощью одного запроса, поэтому пришлось использовать два отдельных запроса:
Процедура Проверить(Команда)
ПроверитьНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьНаСервере()
З_1 = Новый Запрос;
З_1.Текст= "ВЫБРАТЬ
| КонтактныеЛица.Владелец
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|
|СГРУППИРОВАТЬ ПО
| КонтактныеЛица.Владелец
|АВТОУПОРЯДОЧИВАНИЕ";
Результат_1 = З_1.Выполнить().Выгрузить();
З_2 = Новый Запрос;
З_2.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ЭтоГруппа = ЛОЖЬ
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.Ссылка
|АВТОУПОРЯДОЧИВАНИЕ";
Результат_2 = З_2.Выполнить();
ВыборкаДетальныеЗаписи = Результат_2.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ТипЗнч(Результат_1.Найти(ВыборкаДетальныеЗаписи.Ссылка)) = Тип("Неопределено") Тогда
сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ПроверитьНаСервере()