Имя: Пароль:
1C
1С v8
Проверка уникальности Номера счета фактур при записи в документе
,
0 natsad
 
26.08.17
13:50
Подскажите пжл,
Как сделать проверку на уникальность номера счета фактуры в документе? Чтобы если номер существует, то сообщить и Запись=Отказ.
1 ribuh
 
26.08.17
14:09
Какой интересный вопрос... Нехорошо, конечно, отвечать вопросом, но всё же. О чём собственно сабж? Речь о выданных или полученных, и когда возникает гнусное подозрение, что номер не уникальный?
2 natsad
 
26.08.17
14:15
Документ Реализация, Хочу проверить колонку НомерСчетФактуры на совпадение когда человек вводит новое, или же когда изменяет существующий НомерСчетФактуры. Если есть, то отказать запись и выдать сообщение.
3 ribuh
 
26.08.17
14:24
(2) Как - то странно это, счет-фактура  - это документ, у которого должен быть нумератор с уникальностью, или у Вас это просто строка или число? Если да, то сделайте запрос к реализациям, отловите максимальный номер счет-фактуры и сформируйте новый, чтобы не вводить. Проверить на уникальность в принципе также - формируете запрос к реализациям, с параметром введённый номер - если находим - сообщаем и отказываем в записи.
4 Lama12
 
26.08.17
14:29
(0) А какова причина возникновения с/ф с не уникальными номерами? Зачем вообще править номер выданной с/ф?
5 natsad
 
26.08.17
14:31
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    номсф = МетаДанные.Документы.Реализация.Формы.ФормаДокумента.Элементы.Поле2.ТекстРедактирования;
    Если ЗначениеЗаполнено(номсф) И Не АртикулУникален(номсф) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Элемент с таким артикулом уже есть в справочнике.";
        Сообщение.Поле = "Объект.Артикул";
        Сообщение.Сообщить();
        Отказ = Истина;
        Возврат;
    КонецЕсли;

КонецПроцедуры

Функция АртикулУникален(парам1)

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

КонецФункции

В модуле объекте пишу.
6 natsad
 
26.08.17
14:32
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{Документ.Реализация.МодульОбъекта(74)}: Поле объекта не обнаружено (Элементы)
    номсф = МетаДанные.Документы.Реализация.Формы.ФормаДокумента.Элементы.Поле2.ТекстРедактирования;
7 ribuh
 
26.08.17
14:51
номсф = МетаДанные.Документы.Реализация.Формы.ФормаДокумента.Элементы.Поле2.ТекстРедактирования; - это звучит как полёт шмеля над гранатом, за секунду до пробуждения у Сальвадора Дали, но там хоть красиво))) Что мешает обратиться к реквизиту документа через Объект.НомСФ, если таковой реквизит у документам есть?
8 natsad
 
26.08.17
15:01
Я же должен сравнить введенное значение в ПолеВвода со значением реквизита Объект.НомерСчетФактуры. Как получить значение которое находится в ПолеВвода?
9 h-sp
 
26.08.17
15:17
(8) это оно и есть. Объект.НомерСчетФактуры - это то что в поле ввода.
10 h-sp
 
26.08.17
15:18
(8) а если в модуле объекта, то просто

НомерСчетФактуры.
11 natsad
 
26.08.17
15:30
А как мне теперь сравнивать значения уникальны они или нет? Подскажите пжл...
12 ribuh
 
26.08.17
15:35
(11) В Вашем запросе в функции АртикулУникален уберите параметр Ссылка, не нужен он там, но, я бы ввел отбор по периоду, т.к. номера документов, счетов-фактур в частности, чаще всего имеют периодичность год (т.е. номер 1 будет в 2014 оду, и в 2015, и в 2016, итд), поэтому надо искать документы в пределах этой периодичности
13 h-sp
 
26.08.17
15:37
(11) напишите номсф = НомерСчетФактуры;
14 natsad
 
26.08.17
16:21
Спасибо всем большое! Особенно  h-sp  , помогло :-)
15 breezee
 
26.08.17
23:10
А зачем?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший