Имя: Пароль:
1C
1С v8
Проверка правильности ввода номенклатуры в расходном ордере в УНФ
0 amadeus2010
 
09.01.14
12:16
Добрый день подскажите пожалуйста можно ли в УНФ при заполнении документа Расходная накладная на основании документа Заказ сделать подобную проверку
Если Объект.Номенклатура<> Заказ.Номенклатура тогда
Сообщить "Введите правильное значение"
КонецЕсли;

У заказчика дело обстоит так складчик получает документ Заказ и на его основании заполняет документ Расходная накладная или с помощью сканера штрихкода забивает товар в документ, тогда в этом случае есть риск что он может считать или забить не тот товар который указан в Заказе, как можно сделать проверку которая сообщит что он забил не тот товар что надо?
1 Wobland
 
09.01.14
12:18
тч1 полное тч2 где тч1 есть нулл или тч2 есть унлл
2 amadeus2010
 
09.01.14
12:33
т.е
Если
РасходнаяНакладная.Запасы.Номенклатура.НаименованиеПолное<>РасходнаяНакладная.Заказ.Запасы.Номенклатура.НаименованиеПолное тогда Сообщить "Введите номенклатуру"

правильно я понял? Теперь это надо будет ввести как проверку в НоменклатураПриИзменении?
3 Wobland
 
09.01.14
12:34
(2) это тебе идея запроса на разность двух таблиц
4 amadeus2010
 
09.01.14
12:53
(3) можно сделать проверку в процедуре  ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
или обработкапроведения на правильность заполнения реквизитов с включением проверки (2)только вот как правильно создать условие проверки?
5 Wobland
 
09.01.14
13:02
если не заполненохорошо() тогда
отказ=истина;
возврат;
6 amadeus2010
 
09.01.14
13:09
по (5) не совсем понял, можете уточнить пожалуйста
7 Wobland
 
09.01.14
13:12
уточняю. почему бы не внедрить в обработку проведения вот такую проверку?
8 amadeus2010
 
09.01.14
13:18
а что тогда включить в заполненохорошо()?
9 Wobland
 
09.01.14
13:19
(8) запрос с обходом результата и матерной руганью
10 amadeus2010
 
09.01.14
15:54
создал подобную процедуру для проверки номенклатуры
//////////////////////////////////////////////////////
Процедура ПроверкаНоменклатуры()


    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РасходнаяНакладнаяЗапасы.Номенклатура.НаименованиеПолное,
        |    ЗаказПокупателяЗапасы.Номенклатура.Наименование
        |ИЗ
        |    Документ.РасходнаяНакладная КАК РасходнаяНакладная,
        |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
        |ГДЕ
        |    РасходнаяНакладная.Запасы.Номенклатура.НаименованиеПолное ЕСТЬ NULL
        |    Или ЗаказПокупателяЗапасы.Номенклатура.Наименование ЕСТЬ НЕ NULL ";

    Запрос.УстановитьПараметр("NULL", NULL);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Номенклатура.НаименованиеПолное<> ВыборкаДетальныеЗаписи.Номенклатура.Наименование Тогда
             Сообщить("Введенная номенклатура не соответствует Заказу");
        КонецЕсли;    
        
    КонецЦикла;
///////////////////////////////////////////////////
11 amadeus2010
 
09.01.14
16:33
есть кто-нибудь?
12 amadeus2010
 
09.01.14
16:51
Немного изменил прежний запрос на такой
///////////////////////////////////////////////////
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РасходнаяНакладнаяЗапасы.Номенклатура.Наименование,
        |    ЗаказПокупателяЗапасы.Номенклатура.Наименование
        |ИЗ
        |    Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы
        |        ПО РасходнаяНакладнаяЗапасы.Номенклатура.Наименование = ЗаказПокупателяЗапасы.Номенклатура.Наименование
        |ГДЕ
        |    РасходнаяНакладнаяЗапасы.Номенклатура.НаименованиеПолное ЕСТЬ NULL
        |    Или ЗаказПокупателяЗапасы.Номенклатура.Наименование ЕСТЬ НЕ NULL ";

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Номенклатура.Наименование<> ВыборкаДетальныеЗаписи.Номенклатура.Наименование Тогда
             Сообщить("Введенная номенклатура не соответствует Заказу");
        КонецЕсли;
    КонецЦикла;
/////////////////////////////////////////////////////
13 Wobland
 
09.01.14
17:06
даю справку. внутреннее соединение не может выдать нулл по определению
14 Wobland
 
09.01.14
17:07
даю ещё одну справку. разные элементы справочника с одинаковыми наименованиями в общем случае возможны
15 amadeus2010
 
09.01.14
17:11
я в Процедура ЗапасыНоменклатураПриИзменении(Элемент) добавил такой код
//////////////////////////////////////////////////////
Если СтрокаТабличнойЧасти.Номенклатура<> Объект.Заказ Тогда
        Сообщить("Номенклатура отличается от указанной в заказе покупателя, пожалуйста еще раз внимательно посмотрите заявку");
КонецЕсли;
/////////////////////////////////////////////////
после этого при введении новой номенклатуры отличной от в документе Заказ покупателя выходит сообщение об ощибке. Возможно ли блокировать запись документа на основе этого условия?
16 Wobland
 
09.01.14
17:18
>СтрокаТабличнойЧасти.Номенклатура<> Объект.Заказ
переменные, конечно, можно любыми словами называть, но сдаётся мне, тут всегда будет истина
17 amadeus2010
 
09.01.14
17:33
(16) считаете что в независимости от вводимой номенклатуры всегда будет выдаваться подобное сообщение?
если так тогда как посоветуете изменить запрос в (12)
18 Wobland
 
09.01.14
17:38
>СтрокаТабличнойЧасти.Номенклатура<> Объект.Заказ
ну не равна ж-па силе тяжести, хоть ты тресни. всегда

советую употребить полное соединение, обходить результат с руганью и отказывать. или не отказывать