Имя: Пароль:
1C
1С v8
Помогите найти ошибку.
0 mila1231
 
20.03.19
10:03
Помогите разобраться почему так происходит, возможно, что всё не правильно в принципе, но проблема такая. Вот код всей процедуры
Код:
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
    
Если Объект.ТЗ.Количество() = 0  Тогда
    сообщить("Нужно заполнить таблицу значений");
    Возврат;
конецЕсли;
ТекущиеДанные = Элементы.ТЗ.ТекущиеДанные;
ТекущийНомер=Строка(Прав(Год(текущиеданные.датаДокумента),2))+"-" + Прав(текущиеданные.ссылка, 6); // не обращаем внимание ссылка-это тип число и это номер
СсылкаТекущиеДанные = текущиеданные.номер; //а это ссылка
ДанныеизЗапроса = ПолучитьДанные(СсылкаТекущиеДанные);




Если строка(текущийНомер) = Строка(НайтиДокумент(ТекущийНомер)) тогда Сообщить(строка(текущийНомер) + строка(НайтиДокумент(ТекущийНомер))) конецЕсли;



ФормаД =ОткрытьФорму( "Документ.ПеремещениеТоваров.Форма.ФормаДокумента");
Для каждого строка из ДанныеизЗапроса Цикл
ФормаД.объект.номер = Строка(Прав(Год(строка.ДатаВходящегоДокумента),2))+"-" + Прав(строка.НомерСчетаПокупателю, 6);
ФормаД.объект.дата = ТекущаяДата();
ТЧ =  ФормаД.Объект.Товары.Добавить();
ТЧ.Номенклатура = строка.Номенклатура;
ТЧ.Количество =строка.Количество;
    
КонецЦикла;

ФормаД.Открыть();


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


меня интересует вот этот кусок
Код:
Если строка(текущийНомер) = строка(НайтиДокумент(ТекущийНомер) )тогда Сообщить(строка(текущийНомер) + строка(НайтиДокумент(ТекущийНомер))) конецЕсли;

НайтиДокумент-это функция, которая смотрит а есть ли уже такой номер и соответственно возвращает его.

код:

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

//Возврат НомерНайтидокумент;

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


А не могу я понять по какой причине два равных значения видятся, как не равные. Т.е я создаю документ с номером, который 100% будет равен номеру, который рассчитывается из текущих данных таблицы значений и он отказывается выполнять условие, хотя проводить документ тоже отказывается, т.к говорит, что номер не уникальный, вот как быть, что не так? Может проблема с типами, если я перевожу в число, при этом убираю из номера (-), то всё работает. но мне нужна строка, т.к мне нужен этот дефис. Как быть?
1 Temai
 
20.03.19
10:47
Пока читал код потекла кровь из глаз, такого говнокода я давно не видел
2 Rico_1C
 
20.03.19
10:49
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоНомеру (FindByNumber)
Синтаксис:
НайтиПоНомеру(<НомерДокумента>, <ДатаИнтервала>)
Параметры:
<НомерДокумента> (обязательный)
Тип: Число; Строка.
Номер искомого документа. Тип передаваемого значения зависит от установки в конфигураторе представления номера документа.
<ДатаИнтервала> (необязательный)
Тип: Дата.
Дата из интервала, в котором проводится поиск по номеру. Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
Параметр используется для документов с периодической нумерацией.
Возвращаемое значение:
Тип: ДокументСсылка.<Имя документа>; Неопределено.
Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.
Если номер не задан (длина = 0), то будет возвращено Неопределено.
Описание:
Осуществляет поиск документа по номеру.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
     Методическая информация
3 Жан Пердежон
 
20.03.19
10:54
посмотри в отладчике, чему равно в выражение:
"2019"= Строка(2019)
4 Rovan
 
гуру
20.03.19
11:41
(+1) Строка(Прав(...,2))
Прав - это и так уже строка !

" // не обращаем внимание ссылка-это тип число и это номер
СсылкаТекущиеДанные = текущиеданные.номер; //а это ссылка "
Блин ! всё наоборот чтобы запутать вероятного врага ?!
Закон Брукера: Даже маленькая практика стоит большой теории.