Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 01:15

Помогите связать переменную с текстом в ТЧ

Автор Rapage, 11 апр 2018, 17:52

0 Пользователей и 1 гость просматривают эту тему.

Rapage

Добрый день.
Прошу помощи.
Начну с начала. Дали задание в ПКО после ввода "Заказа покупателя" в поле "Основание" (вкладка "Печать") автоматически выставлялся текст. Если в заказе только Товары - Текст1, если только Услуги - Текст2, а если и Товары и Услуги - Текст3.
Я сделал, все работает, но теперь хотят, чтобы при разных услугах, был разный текст.
Я пытаюсь связать переменную с Номенклатурой услуги, но у меня не очень получается.
Код прилагаю:
Процедура СделкаПриИзменении(Элемент)
   
   ПродажаМеталла   =   Ложь;
   ПродажаУслуг   =   Ложь;
   Номенклатура1 = Неопределено;
   Номенклатура2 = Неопределено;
   Номенклатура3 = Неопределено;
   Номенклатура4 = Неопределено;
   Номенклатура5 = Неопределено;
   РезкаМеталлопроката = "услуги резки металлопроката";
   ПротяжкаМеталлопроката = "услуги протяжки металлопроката";
   РезкаЛиста = "услуги резки листа на гильотине";
   Доставка = "услуги доставки товара";
   Прочие = "прочие услуги";
   
   Для Каждого Строка Из РасшифровкаПлатежа Цикл
      
      НомерБезПрефикса = Строка.Сделка.Ссылка.Номер;
      Пока Найти(НомерБезПрефикса,"0") <> 1 Цикл
         НомерБезПрефикса = Сред(НомерБезПрефикса,2);
      КонецЦикла;
      
      НомерБезНулей = НомерБезПрефикса;
      Пока Найти(НомерБезНулей,"0") = 1 Цикл
         НомерБезНулей = Сред(НомерБезНулей,2);
         
      КонецЦикла;
      Номер = НомерБезНулей;
      
      
      Если ТипЗнч(Строка.Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
         Если Строка.Сделка.Товары.Количество() > 0 Тогда
            ПродажаМеталла = Истина;
         Иначе
            ПродажаУслуг = Истина;
         КонецЕсли;
         
         Если Строка.Сделка.Услуги.Количество() > 0 Тогда
            ПродажаУслуг = Истина;
         Иначе
            ПродажаМеталла = Истина;
         КонецЕсли;
         
         
      КонецЕсли;
   КонецЦикла;
   
    //Это не работает
   Если ТипЗнч(Строка.Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
      Если Номенклатура1 = Строка.Сделка.Услуги.Найти("Услуги резки металлопроката",) Тогда
         Номенклатура1 = РезкаМеталлопроката
      
      
      ИначеЕсли Номенклатура2 = Строка.Сделка.Услуги.Найти("Услуги протяжки металлопроката",) Тогда
         Номенклатура2 = ПротяжкаМеталлопроката
      
      
   
      ИначеЕсли Номенклатура3 = Строка.Сделка.Услуги.Найти("Услуги резки листа на гильотине",) Тогда
         Номенклатура3 = РезкаЛиста
      
      
      ИначеЕсли Номенклатура4 = Строка.Сделка.Услуги.Найти("Доставка товара",) Тогда
         Номенклатура4 = Доставка
      

      ИначеЕсли Номенклатура5 = Строка.Сделка.Услуги.Найти("Прочие услуги",) Тогда
         Номенклатура5 = Прочие
      КонецЕсли;


   КонецЕсли;
   
      
         
   
   Если ПродажаМеталла И ПродажаУслуг Тогда
      
      ЭтотОбъект.Основание = "Оплата за металл и услуги резки металлопроката по счету № "+Номер+"от " + Формат(Строка.Сделка.Ссылка.Дата,"ДФ=dd.MM.yyyy");
      
   ИначеЕсли ПродажаМеталла Тогда
      
      ЭтотОбъект.Основание = "Оплата за металл по счету № "+Номер+"от " + Формат(Строка.Сделка.Ссылка.Дата,"ДФ=dd.MM.yyyy");
      
   ИначеЕсли ПродажаУслуг Тогда
      
      ЭтотОбъект.Основание = "Оплата за " + Номенклатура1 + " " + Номенклатура2 + " " + Номенклатура3 + " " + Номенклатура4 + " " + Номенклатура5 + " по счету № "+Номер+"от " + Формат(Строка.Сделка.Ссылка.Дата,"ДФ=dd.MM.yyyy");
                                         
   КонецЕсли;

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


Спасибо!


oleg-x

Я бы на твоем месте поменял бы подход, прописывать для каждой услуги текст не комильфо, завтра появится новая услуга и будет новый текст.
Либо заведи реквизит в номенклатуре или доб реквизит (сложнее вытаскивать, но без изменения структуры базы). И брать надпись из данного реквизита. и пусть сами пишут что они хотят видеть.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Rapage

oleg-x, Да я уже думал через "Комментарий" каждой услуги, но мне все равно как-то до нее достучаться надо и сравнить в Заказе, ведь в одной ТЧ могут быть и услуги по резке и по протяжки.
А так вообще оставил бы как есть, но не дают.

Sandi

Цитата: Rapage от 11 апр 2018, 17:52
Процедура СделкаПриИзменении(Элемент)

    //Это не работает
   Если ТипЗнч(Строка.Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
      Если Номенклатура1 = Строка.Сделка.Услуги.Найти("Услуги резки металлопроката",) Тогда
         Номенклатура1 = РезкаМеталлопроката


По-моему, тут ошибка.
Если я правильно поняла, вы пытаетесь найти номенклатуру, которая называется "Услуги резки металлопроката", в табличной части "Услуги" у сделки.
Но, у вас в коде, ищется не ссылка на номенклатуру, а строка "Услуги резки металлопроката".
И сравнивать надо не с результатом поиска (в случае успешного поиска это будет строка табличной части), а с содержимым колонки "Номенклатура" в найденной строке.

Попробуйте так;


//находим ссылку на нужную номенклатуру по наименованию
НоменклатураУслугиРезкиМеталлопроката = Справочники.Номенклатура.НайтиПоНаименованию("Услуги резки металлопроката");

// ищем в табличной части строку, содержащую данную номенклатуру в колонке "Номенклатура"
НайденнаяСтрокаУслуг =Строка.Сделка.Услуги.Найти(НоменклатураУслугиРезкиМеталлопроката,"Номенклатура");
// Проверяем результат поиска
Если НайденнаяСтрокаУслуг<>Неопределено тогда
.............


П.С. ссылку на номенклатуру лучше не искать в процедуре  по названию или коду, а передавать в нее в качестве параметра.
Добавлено: 11 апр 2018, 18:17


Цитата: oleg-x от 11 апр 2018, 18:07
Я бы на твоем месте поменял бы подход, прописывать для каждой услуги текст не комильфо, завтра появится новая услуга и будет новый текст.
Либо заведи реквизит в номенклатуре или доб реквизит (сложнее вытаскивать, но без изменения структуры базы). И брать надпись из данного реквизита. и пусть сами пишут что они хотят видеть.

По-моему, это наиболее правильное решение

Rapage

Sandi, Спасибо) Все заработало, осталось только отшлифовать)

Я и сам согласен с oleg-x, но они наставивают.

Теги:  8.3 ут 10.3 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск