Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 июл 2024, 06:34

Проверка наличия записи в подчиненном справочнике

Автор Алмаз, 10 июл 2018, 19:19

0 Пользователей и 1 гость просматривают эту тему.

Алмаз

Здравствуйте, форумчане!
Прошу не кидаться помидорами, а помочь со следующей проблемой:
Есть справочник клиента, и ему подчиненные справочник документов и адресов.
После заполнения формы клиента и до ее закрытия необходимо проверить заполнен ли у него адрес и документы, если нет - задать вопрос пользователю и в зависимости от ответа перейти на форму адреса и заполнить или закрыть форму без сохранения клиента.

Что пробовали на текущий момент:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   ЕСЛИ ПроверитьАдрес() = Ложь Тогда       
      Сообщение = Новый СообщениеПользователю();
      Сообщение.Текст = "Не задан адрес.";
      Сообщение.УстановитьДанные(ЭтотОбъект);
      Сообщение.Сообщить();
      //ЗаполнитьАдрес();
      Отказ = Истина;
   КонецЕсли;
КонецПроцедуры
данный вариант, к сожалению, не подходит т.к. при переходе на форму адреса происходит попытка записать уже введенные данные по справочнику клиента и запускается ПриЗаписиНаСервере, где в свою очередь - Отказ = истина.

Другие варианты, как бился головой об эту стену скидывать не буду, т.к. они так же оказались нежизнеспособны....

Алмаз

Прошу прощения. Создал не в той ветке, модератору написал с просьбой перенести в ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 » Конфигурирование, программирование в "1С - Предприятие 8"
Цитата: Алмаз от 10 июл 2018, 19:19
Здравствуйте, форумчане!
Прошу не кидаться помидорами, а помочь со следующей проблемой:
Есть справочник клиента, и ему подчиненные справочник документов и адресов.
После заполнения формы клиента и до ее закрытия необходимо проверить заполнен ли у него адрес и документы, если нет - задать вопрос пользователю и в зависимости от ответа перейти на форму адреса и заполнить или закрыть форму без сохранения клиента.

Что пробовали на текущий момент:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   ЕСЛИ ПроверитьАдрес() = Ложь Тогда       
      Сообщение = Новый СообщениеПользователю();
      Сообщение.Текст = "Не задан адрес.";
      Сообщение.УстановитьДанные(ЭтотОбъект);
      Сообщение.Сообщить();
      //ЗаполнитьАдрес();
      Отказ = Истина;
   КонецЕсли;
КонецПроцедуры
данный вариант, к сожалению, не подходит т.к. при переходе на форму адреса происходит попытка записать уже введенные данные по справочнику клиента и запускается ПриЗаписиНаСервере, где в свою очередь - Отказ = истина.

Другие варианты, как бился головой об эту стену скидывать не буду, т.к. они так же оказались нежизнеспособны....

bsn-chita


&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Если НЕ АдресКлиентаЗаполнен(Объект.Ссылка) Тогда
//Адрес не заполнен
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция АдресКлиентаЗаполнен(Владелец)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Владелец", Владелец);
Запрос.Текст =
"ВЫБРАТЬ
| Адреса.Ссылка КАК Ссылка
|ИЗ
| Справочник.Адреса КАК Адреса
|ГДЕ
| Адреса.Владелец = &Владелец";
РезультатЗапроса = Запрос.Выполнить();
Возврат НЕ РезультатЗапроса.Пустой()
КонецФункции

Но логику вашу с не сохранением клиента не получится реализовать с подчиненным справочником. Пока не сохранен клиент нельзя добавить данные в подчиненный справочник.
Возможно проще сделать табличную часть для документов и реквизит для адреса(или тоже табличную часть) и установить проверку заполнения. В итоге ни чего не придется писать дополнительно.

alex0402

Цитата: bsn-chita от 11 июл 2018, 02:57Пока не сохранен клиент нельзя добавить данные в подчиненный справочник.

Можно!!!

Объект.УстановитьСсылкуНового(Справовчник.Имя.ПолучитьСсылку());
и затем использовать объект.ссылка или Объект.ПолучитьСсылкуНового() для формирования подчиненного справочника.
Спасибо за Сказать спасибо

bsn-chita

Программного создания или в интерактивном режиме пользователь сможет ввести данные в подчиненный справочник не сохранясь?

alex0402

Цитата: bsn-chita от 11 июл 2018, 08:28
Программного создания или в интерактивном режиме пользователь сможет ввести данные в подчиненный справочник не сохранясь?
подчиненный справочник можно записать до записи владельца. Это полезно, когда нужно создать подчиненный справочник, за тем модифицировать владельца. Таким образом можно записывать владельца один раз, а не два!
Спасибо за Сказать спасибо

Алмаз

Выходит, что в справочнике клиента правильнее завести табличные части для адресов и документов?
и тогда проще будет просто проверить заполнены ли эти табличные части и все... спасибо большое =) где-то я увидел просто эти самые подчиненные справочники и уж очень мне понравился интерфейс в виде вкладок... жаль, не всегда можно такое использовать.

bsn-chita

Цитата: Алмаз от 11 июл 2018, 08:34
Выходит, что в справочнике клиента правильнее завести табличные части для адресов и документов?
Думаю в данном случае с технической точки зрения это будет проще. Можно на табличные части и на ее реквизиты установить проверку и сама платформа будет следить чтобы все было заполнено и выдавать ошибки.
Цитировать
alex0402
Немного поигрался с СсылкамиНовых. Как я понял для уникального идентификатора всегда получается одна и та же ссылка, а уникальные идентификаторы в пределах одной системы не повторяются и можно сказать что на любой момент мы всегда получим одну и ту же ссылку.
Если брать данный пример как бы вы реализовали? Мне видится алгоритм так:
1 Создаем реквизит формы в который при создании помещается уникальный идентификатор
2 При закрытии главной формы и отсутствии записей в подчиненных справочниках открываем созданную нами форму с блокировкой владельца где пользователь заполняет таблицу значений(с адресами)
3 При закрытии подчиненной формы таблица значений перегоняется на главную форму и происходит запись всего и закрытие главной формы.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск