Имя: Пароль:
1C
1С v8
Обратиться к доп.реквизиту номенклатуры в общем модуле
0 HeartQuake-Z
 
15.12.16
14:31
подскажите плиз как
создал подписку, обработка проведения
создал общий модуль, в подписке указал
создал доп реквизит номенклатуры
мне надо сделать: если допреквизит истина тогда отказ
доп реквизит создал в 1с предприятии
1 HeartQuake-Z
 
15.12.16
15:01
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Запрет штучного товара");
         Отбор =  Источник.Товары[0].Номенклатура.ДополнительныеРеквизиты.НайтиСтроки(Новый структура("Свойство",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Запрет штучного товара")));
         Для каждого Строка из отбор цикл
             Если Строка.Свойство = Истина Тогда
                 Отказ = Истина
             КонецЕсли;
             КонецЦикла;
2 HeartQuake-Z
 
15.12.16
15:01
пишет, что Строка.Свойство = ложь
хотя в предприятии галка стоит
3 HeartQuake-Z
 
15.12.16
15:07
а нет, бред какой то вообще написал
4 azernot
 
15.12.16
15:11
Строка.Свойство - это у тебя
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Запрет штучного товара")

Очевидно, тебе надо что-то типа

Строка.Значение

Но правильнее проверять запросом.
5 HeartQuake-Z
 
15.12.16
15:13
(4) Сейчас надо так сделать
я просто помощник
6 HeartQuake-Z
 
15.12.16
15:22
(4) чот не соображу как правильно наисать
7 azernot
 
15.12.16
15:23
Для каждого Строка из отбор цикл
             Если Строка.ЗНАЧЕНИЕ= Истина Тогда
                 Отказ = Истина
             КонецЕсли;
             КонецЦикла;
8 HeartQuake-Z
 
15.12.16
15:29
(7) Спасибо, а от куда взялось значение?
9 azernot
 
15.12.16
15:37
(8) "Значение" - это реквизит табличной части "ДополнительныеРеквизитыИСведения" справочника "Номенклатура"

Мне кажется, проверять только первую строку документа - контрпродуктивно.

Попробуй вот такую конструкцию:


    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РеализацияТоваровУслугТовары.НомерСтроки,
        |    РеализацияТоваровУслугТовары.Номенклатура,
        |    ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Номенклатура)
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
        |        ПО РеализацияТоваровУслугТовары.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка
        |            И (НоменклатураДополнительныеРеквизиты.Свойство = &Свойство)
        |            И (НоменклатураДополнительныеРеквизиты.Значение = ИСТИНА)
        |ГДЕ
        |    РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаДокумент";
    
        
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "РеализацияТоваровУслуг", Источник.Метаданные().Имя);    
    Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Запрет штучного товара"));
    Запрос.УстановитьПараметр("СсылкаНаДокумент", Источник.Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ТекстСообщения = "В строке №"+ВыборкаДетальныеЗаписи.НомерСтроки+ " обнаружена номенклатура "+ВыборкаДетальныеЗаписи.НоменклатураПредставление+" с запретом штучного товара"+
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Источник.Ссылка,,, Отказ);
    КонецЦикла;
10 HeartQuake-Z
 
15.12.16
15:50
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1591)}: Ошибка при вызове метода контекста (Записать)
    Результат = Форма.Записать(ПараметрыЗаписи);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{ОбщийМодуль.ОбщийМодуль1.Модуль(34)}: Обращение к процедуре объекта как к функции (СообщитьПользователю)
    Результат = Форма.Записать(ПараметрыЗаписи);

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{ОбщийМодуль.ОбщийМодуль1.Модуль(34)}: Обращение к процедуре объекта как к функции (СообщитьПользователю)

{ОбщийМодуль.ОбщийМодуль1.Модуль(34)}: Обращение к процедуре объекта как к функции (СообщитьПользователю)
        ТекстСообщения = "В строке №"+ВыборкаДетальныеЗаписи.НомерСтроки+ " обнаружена номенклатура "+ВыборкаДетальныеЗаписи.НоменклатураПредставление+" с запретом штучного товара"+
11 azernot
 
15.12.16
15:53
ТекстСообщения = "В строке №"+ВыборкаДетальныеЗаписи.НомерСтроки+ " обнаружена номенклатура "+ВыборкаДетальныеЗаписи.НоменклатураПредставление+" с запретом штучного товара"+

Заменить на
ТекстСообщения = "В строке №"+ВыборкаДетальныеЗаписи.НомерСтроки+ " обнаружена номенклатура "+ВыборкаДетальныеЗаписи.НоменклатураПредставление+" с запретом штучного товара";
12 HeartQuake-Z
 
15.12.16
15:57
(11) миллион сообщений одинаковых с текстом)) из-за цикла
13 azernot
 
15.12.16
16:03
(12) Одинаковых быть не должно. Они должны отличаться номером строки документа и номенклатурой.
14 azernot
 
15.12.16
16:10
+(13)
Впрочем, если не нужны никакие сообщения, то вот


    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Истина КАК НаличиеНоменклатурыСЗапретом
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
        |        ПО РеализацияТоваровУслугТовары.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка
        |            И (НоменклатураДополнительныеРеквизиты.Свойство = &Свойство)
        |            И (НоменклатураДополнительныеРеквизиты.Значение = ИСТИНА)
        |ГДЕ
        |    РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаДокумент";
    
        
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "РеализацияТоваровУслуг", Источник.Метаданные().Имя);    
    Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Запрет штучного товара"));
    Запрос.УстановитьПараметр("СсылкаНаДокумент", Источник.Ссылка);
    
    Отказ = НЕ Запрос.Выполнить().Пустой();
15 HeartQuake-Z
 
16.12.16
07:33
(14) СОри, вчера ответить не успел, выгоняют ровно в 18 00 :)
спасибо!
16 HeartQuake-Z
 
16.12.16
07:52
Если кому не трудно, подскажите примерно как это сделать:
При набивании заказа через подбор товара необходимо по умолчанию, чтобы выбиралась единица измерения отличная от единицы хранения
так и не сообразил)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.