8.х Проверка заполнения элементов и таблиц печатной формы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Pavel2009, 31 мар 2011.

  1. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Привет!
    Подскажите, как в печатной форме документа где, Реквизиты:
    Контрагент,
    Склад.
    и ТабличнаяФорма Товары:
    Номенклатура,
    Количество,
    Цена.
    Сделать проверку на пустые значения этих реквизитов!
    Набрасал не большой код, но не пойму как проверить Реквизит Склад и как добраться до ТабличнойЧасти
    - номенклатура!

    Код:
    Процедура ПриЗаписи(Отказ)
    Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
    Иначе 
    Предупреждение("Не заполнены поля");
    Отказ=Истина;
    
    
  2. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Код:
    Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("123").ПолучитьОбъект();
    Для Каждого Товар из Док.Товары Цикл
    Номенклатура = Товар.Номенклатура;
    КонецЦикла;
    
  3. Diego
    Offline

    Diego Любитель 1С Команда форума

    Регистрация:
    3 апр 2009
    Сообщения:
    966
    Симпатии:
    2
    Баллы:
    29
    Код:
    Процедура ПриЗаписи(Отказ)
    Если Не ЗначениеЗаполнено(Контрагент) или
    Не ЗначениеЗаполнено(Склад) Тогда
    Предупреждение("Не заполнены поля");
    Отказ=Истина;
    КонецЕсли;
    
    НеЗаполнено = 0;
    Для Каждого Строка из Номенклатура Цикл
    Если Не ЗначениеЗаполнено(Строка.Количество) Тогда 
    НеЗаполнено = НеЗаполнено +1;
    КонецЕсли;
    КонецЦикла;
    
    Если НеЗаполнено > 0 Тогда
    Предупреждение("Не заполнены строки в табличной части");
    Отказ=Истина;
    КонецЕсли;
    
    
    
    Как то так...
  4. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    А если проверка, не для конкретного документа, а для всех - тогда так?
    Код:
    Док=Документы.РеализацияТоваровУслуг.Выбрать().ПолучитьОбъект();
    
  5. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Это уже из области легких извращений
    Код:
    // выборка документов
    ДокументыВыборка = Документы.РеализацияТоваровУслуг.Выбрать();
    // обход всех документов
    Пока ДокументыВыборка.Следующий() Цикл
    // обход строк документа
    Для каждого СтрокаТоваров Из ДокументыВыборка.Товары Цикл
    // проверка заполнения ре6квизита
    Если Не ЗначениеЗаполнено(СтрокаТоваров.Номенклатура) Тогда
    Сообщить("Какой кошмар");
    КонецЕсли; 
    КонецЦикла; 
    КонецЦикла; 
    
  6. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Вот спасибо! :angry:
  7. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    тогда уж запросом по таблице табличной части документа с условием на null.

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

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Хорошо! А если, документ имеет несколько табличных частей, как сделать проверку? Только запросом?
  9. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Можно запросом, а можно и так, как Вы делали (выборкой).
    Код:
    // выборка документов
    ДокументыВыборка = Документы.РеализацияТоваровУслуг.Выбрать();
    // обход всех документов
    Пока ДокументыВыборка.Следующий() Цикл
    // обход строк табличной части Товары
    Для каждого СтрокаТоваров Из ДокументыВыборка.Товары Цикл
    // проверка заполнения реквизита
    Если Не ЗначениеЗаполнено(СтрокаТоваров.Номенклатура) Тогда
    Сообщить("Какой кошмар в товарах");
    КонецЕсли;
    КонецЦикла;
    
    //обход строк табличной части Услуги
    Для каждого СтрокаУслуг Из ДокументыВыборка.Услуги Цикл
    // проверка заполнения реквизита
    Если Не ЗначениеЗаполнено(СтрокаУслуг.Номенклатура) Тогда
    Сообщить("Какой кошмар в услугах");
    КонецЕсли;
    КонецЦикла;
    
    КонецЦикла;
    
    

Поделиться этой страницей