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

Как подставить в табл.часть значение реквизита выбранного элемента справочника?

Автор detka_cccp, 21 фев 2012, 11:00

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

detka_cccp

Блин не влезла (((
Функция НезаполненыОбязательныеПоля(Форма) Экспорт
   Для каждого ЭлементФормы Из Форма.ЭлементыФормы Цикл
      Если ТипЗнч(ЭлементФормы) = Тип("Полеввода") Тогда
         Если ЭлементФормы.АвтоОтметкаНезаполненного Тогда
            Если НЕ ЗначениеЗаполнено(Форма.ЭлементыФормы[ЭлементФормы.Имя].Значение) Тогда
               Предупреждение("Не заполнено обязательное поле """ + ЭлементФормы.Имя + """", 10);
               Форма.ТекущийЭлемент = ЭлементФормы;
               Возврат Истина;
            КонецЕсли;   
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
   Возврат Ложь;
КонецФункции // НезаполненыОбязательныеПоля()

Потом в каждом модуле формы писать

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   Отказ = НезаполненыОбязательныеПоля(ЭтаФорма);
КонецПроцедуры


detka_cccp

Вобщем я ее воткнул в свою форму и жизнь теперь мне кажется просто сказкой.
Спасибо огромное тем пацанчикам кто уже покумекал за меня над кодами к 1с.
И спасибо всем кто помогает друг другу.

cska-fanat-kz

Цитата: detka_cccp от 16 мар 2012, 00:00
Вобщем я ее воткнул в свою форму и жизнь теперь мне кажется просто сказкой.
Спасибо огромное тем пацанчикам кто уже покумекал за меня над кодами к 1с.
И спасибо всем кто помогает друг другу.



Как мало вам надо для сказки )
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

detka_cccp

Да, порой мелочь над которой бьешься долгое время способна сделать человека счастливым на какое то время.
Однако, эйфория длилась недолго.
Оказывается для Документа это волшебство не работает.
Вот думаю теперь в чем могут быть отличия и что нужно поменять в коде чтобы и для формы документа выполнялась эта функция.
Если есть ссображения - буду весьма признателен.

detka_cccp

Ура я оказывается не такой тупой, сам докумекал что к чему.
Оказывается Функция норм работала но только для полей в шапке документа, а для Табл части надо было писать другую функцию, ведь путь к данным табл частей описывается подругому нежели просто к данным шапки документа.
Переписал функцию таким макаром:
Функция НезаполненыПоляТаблицы(Форма) Экспорт
   Для каждого Строка из Стоимостьработ Цикл
      Если НЕ ЗначениеЗаполнено(ЭлементыФормы.Стоимостьработ.ТекущиеДанные.Услуга) Тогда
         Предупреждение("Не заполнено обязательное поле Услуга", 10);
         Возврат Истина;
      КонецЕсли;
      Если НЕ ЗначениеЗаполнено(ЭлементыФормы.Стоимостьработ.ТекущиеДанные.Исполнитель) Тогда
         Предупреждение("Не заполнено обязательное поле Исполнитель", 10);
         Возврат Истина;
      КонецЕсли;
   КонецЦикла;
   Возврат Ложь;
    
КонецФункции

Думаю многим ламерам типа меня это может быть полезным.

cska-fanat-kz

Рано обрадовались ))

Не
Если НЕ ЗначениеЗаполнено(ЭлементыФормы.Стоимостьработ.ТекущиеДанные.Услуга) Тогда

а надо:
Если НЕ ЗначениеЗаполнено(Строка.Услуга) Тогда

иначе проверяется только текущая строка, да еще и в цикле...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

detka_cccp

Спасибо, что подметили!
Я даже и не подумал это проверить.. буду бдительнее, скоро исправлю.
Еще вот такой вопрос меня мучает: хочу считать количество документов, проведенных с клиентом.
Вот например заполняем документ Накладная, выбираем клиента, а у справочника Клиенты есть реквизит Посещения, дак вот надо чтобы с каждой новой проводкой Накладной посещения прибавлялись на 1. Кароче типа счетчик посещений.
Пишу такой код:
Процедура ПослеЗаписи()
КодКлиента = Клиент.Код;
Справочники.Клиенты.НайтиПоКоду(КодКлиента).Посещения = 0 + 1;
КонецПроцедуры;

Но выдает ошибку, поле обьекта не доступно для записи.

Подскажите плиз, в чем я ошибаюсь и как надо написать ?

sergejK74

Клиент - реквизит типа СправочникСсылка. От него нужно методом ПолучитьОбъект() получить объект, напр. ОбъектКлиент. Вот его можно модифицировать, и у него есть метод Записать().
Кнопочка Спасибо - слева!

detka_cccp

Написал вот таким макаром:

КодКлиента = Клиент.Код;
ОбьектКлиент = Справочники.Клиенты.НайтиПоКоду(КодКлиента).ПолучитьОбъект();
ОбьектКлиент.Посещения = ОбьектКлиент.Посещения + 1;
ОбьектКлиент.Записать();

Все получилось, только вот после того как накладную провел, если ее еще раз открыть и нажать снова на кнопку ЗаписатьИЗакрыть (она единственная в документе) то посещение вновь прибавится, чего нам совсем не надо!
Подскажите, как быть ?
В процедуру проведения пробовал вставлять, думал она не используется при открытии уже проведенного документа, ан нет ! тоже добавляет посещение ((.

Теги:

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

Рейтинг@Mail.ru

Поиск