Версия для печати темы (https://pro1c.org.ua/index.php?s=6ce4f9c0468e007f9857d8d5af719605&showtopic=41145)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Контроль при записи документа

Автор: Noviscok 19.10.17, 7:32

Стоит задача: что нельзя записывать более одного документа за одну дату. (Выдавать предупреждение и не позволять записывать). Как это сделать?

Автор: Bernet 19.10.17, 8:09

Noviscok @ Сегодня, 8:32 * ,
В модуле объекта в обработчике "ПередЗаписью" добавляете такое:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВАШДОКУМЕНТ.Ссылка) КАК Колво
    |ИЗ
    |    Документ.ВАШДОКУМЕНТ КАК ВАШДОКУМЕНТ
    |ГДЕ
    |    ВАШДОКУМЕНТ.Дата МЕЖДУ &НачалоДня И &КонецДня
    |";
    
    Запрос.УстановитьПараметр("НачалоДня", НачалоДня(Дата));
    Запрос.УстановитьПараметр("КонецДня", КонецДня(Дата));
    
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда // раз есть результат значит уже есть документ
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Сообщить("В этот день уже есть "+Строка(Выборка.Колво)+" документов.");
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    
КонецПроцедуры

Автор: Noviscok 19.10.17, 8:48

Bernet @ Сегодня, 13:09 * ,
Не могу понять пишет что поле Дата не найде

Вот дурак, разобрался. СПАСИБО ОГРОМНОЕ

Автор: logist 19.10.17, 9:24

Мне больше такой вариант нравится

   Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |  ВАШДОКУМЕНТ.Ссылка



Это не имеет смысла, т.к. документа никогда не будет больше одного.
     Выборка = Результат.Выбрать();
        Выборка.Следующий();

Автор: Noviscok 19.10.17, 15:29

Цитата(logist @ 19.10.17, 14:24) *
Если НЕ Результат.Пустой() Тогда // раз есть результат значит уже есть документ

Почему пишем ЕСЛИ НЕ Результат.Пустой?

Автор: salton 19.10.17, 15:52

Цитата(Noviscok @ 19.10.17, 16:29) *
Почему пишем ЕСЛИ НЕ Результат.Пустой?


ну если написать:

Если Результат.Пустой() Тогда


Тогда весь код будет выглядеть как:

Если Результат.Пустой() Тогда
  //ничего не происходит, можно
  Сообщить("Документов нет");
Иначе
  Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Сообщить("В этот день уже есть "+Строка(Выборка.Колво)+" документов.");
КонецЕсли;


громоздко как-то... зачем нам обрабатывать ситуацию когда нет документа?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua