Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Документ "Поступление товаров и услуг"          
MH.z Подменю пользователя
сообщение 03.05.12, 14:03
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день. Конфигурация Ут 11
Проблема в следующем, есть документ Поступление товаров и услуг. Товара заказывалось к примеру 5 штук карандашей. Поставщик привез 7 штук.Документ сканируют и проганяют в 1С. Как сделать так, чтобы когда товара приехало больше в одной строке табличной части показывало 5 штук одним цветом(неважно каким) А в следующей строке показывало лишнии 2 штуки товара и другим цветом.
Все что я смог сделать так это просто поменять цвет текста во всех строках sad.gif Может нужно сделать какое нибудь условие? Если так , то подскажите какое.
Спасибо!

alex040269 Подменю пользователя
сообщение 03.05.12, 14:10
Сообщение #2

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки);

ОформлениеСтроки отвечает за вывод, в т.ч. и цвет строки.

Ну а для разделения нужно анализировать РегистрНакопления.ЗаказыПоставщикам.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Vofka Подменю пользователя
сообщение 03.05.12, 14:11
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Можно писать код из 1С 6.0 ?

MH.z Подменю пользователя
сообщение 03.05.12, 14:22
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Версия 1С 8.2 Ничего не понял если честно. Я сделал следующее :

&НаСервере
Функция ИзменитьЦвет(Номенклатура)
    ЭтаФорма.УсловноеОформление.Элементы.Очистить();
    ЦветКрасный = Новый Цвет(255,0,0); //красный
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
       ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Номенклатура;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветКрасный);    
КонецФункции

И соответственно вызвал функцию в процедуре "ТоварыНоменклатураПриИзменении(Элемент)"

Vofka Подменю пользователя
сообщение 03.05.12, 14:26
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Цитата(MH.z @ 03.05.12, 15:22) *
Версия 1С 8.2

Так зачем вы изначально создаете тему в разделе "Вся1С"? icon_cuss.gif Вторая ваша тема за сегодня! Прочтите правила! Следующие ваши темы будут лететь в корзину, если будут оформлены не по правилам!

Batchir Подменю пользователя
сообщение 03.05.12, 15:05
Сообщение #6

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Ну и раз УТ 11, то это управляемые формы, так что переезжаем ещё разок

Sharki Подменю пользователя
сообщение 03.05.12, 16:18
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 47
Спасибо сказали: 12 раз
Рейтинг: 0

Для начала нужно определить по какому признаку(условию) надо выделять те или иные строки(какое-то колво больше чего-то или одна из колонок равна чему-то одному).
Далее писать ваш код
Функция ИзменитьЦвет(Номенклатура)
    ЭтаФорма.УсловноеОформление.Элементы.Очистить();
    ЦветКрасный = Новый Цвет(255,0,0); //красный
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Номенклатура;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветКрасный);    
КонецФункции


НО верно установить ключевые элементы:
 ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Номенклатура;


Левое значение поле для сравнение, правое значение с которым сравнивают.
Выполнять этот код при изменении не даст нужного результата, выполнять его следует один раз например в событие ПриСозданииНаСервере.
Так же стоит отметить это поле
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");

Здесь задается поле для которого будет использоваться условное оформление. Не уверен что поле для оформления лучше ставить всю таблицу.

Пример моего использования такого кода
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаЗначенийНаименованиеCCS");//одна колонка таблицы именно элемент формы а не реквизит объекта формы.
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЗначений.Наименование1");//реквизит [объекта] формы
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
    ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаЗначений.Наименование2"); //условие: если одна колонка не равна второй тогда выделять красным
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);


з.ы. Ваш код будет менять менять цвета строк таблицы только тех у которых задана указанная номенклатура

пример моего кода устанавливает цвет для одной ячейки таблицы если одна колонка строки не равна второй.

Спасибо сказали: MH.z,

MH.z Подменю пользователя
сообщение 07.05.12, 19:46
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Я сделал следующим образом, но у меня не меняет цвет sad.gif
Может подскажите где ошибся?!
&НаСервере
Функция ИзменитьЦвет(Номенклатура, Цвет)
    ЭтаФорма.УсловноеОформление.Элементы.Очистить();
    ЦветФиолетовый = Новый Цвет(128, 0, 255); // серый
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
       ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Номенклатура;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Цвет);    
КонецФункции


&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
    Для каждого Стр ИЗ Объект.Товары  Цикл
    Для Каждого Стр2 ИЗ Объект.Расхождения Цикл
        Если Стр.Номенклатура <> Стр2.Номенклатура  Тогда
            ИзменитьЦвет(Стр.Номенклатура,);
                      
            КонецЕсли;
    КонецЦикла;    
    КонецЦикла;
КонецПроцедуры


И добавил Цикл в модуль формы ПриОткрытии

logist Подменю пользователя
сообщение 07.05.12, 23:26
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(MH.z @ 07.05.12, 20:46) *
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Цвет);

Судя по коду, значение Цвет отсутствует.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: MH.z,

MH.z Подменю пользователя
сообщение 08.05.12, 9:02
Сообщение #10

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

И правда smile.gif Спасиб!

MH.z Подменю пользователя
сообщение 16.05.12, 15:14
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Уважаемые помогите пожалуйста еще. С изменением цвета все отлично, только вот теперь документы при открытии грузятся по пол часа. Как можно от этого избавиться? Происходит это из-за того, что я цикл добавил в процедуру ПриОткрытии. Но надо же чтобы было видно при открытии изменение цвета.
Спасибо!

Vofka Подменю пользователя
сообщение 16.05.12, 15:35
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Попробуйте функцию ИзменитьЦвет перенести в контекст клиента.

MH.z Подменю пользователя
сообщение 17.05.12, 11:03
Сообщение #13

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

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

    Запрос.УстановитьПараметр("ВариантРасхождений", Перечисления.ВариантыРасхождений.Излишки);
    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Для каждого Стр ИЗ Объект.Товары  Цикл
            Если Стр.Номенклатура = Выборка.Номенклатура Тогда
                 ИзменитьЦвет(Стр.Номенклатура);
              КонецЕсли;
          КонецЦикла;
          КонецЦикла;
КонецФункции

Ну и вызвал эту функцию в процедуре ПриОткрытии. Ошибок нет, но вот цвет не изменяется. Ткните носом в ошибку! Спасибо!

Все, разобрался. Спасибо за помощь!

Vofka Подменю пользователя
сообщение 17.05.12, 11:24
Сообщение #14

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Цитата(MH.z @ 17.05.12, 12:03) *
Все, разобрался.

И?

Спасибо сказали: MH.z,

MH.z Подменю пользователя
сообщение 17.05.12, 12:20
Сообщение #15

Говорящий
***
Группа: Пользователи
Сообщений: 75
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Закоментировал строчку и все работает:
&НаСервере
Функция ИзменитьЦвет(Номенклатура)
    //ЭтаФорма.УсловноеОформление.Элементы.Очистить();
    ЦветФиолетовый = Новый Цвет(128, 0, 255); // серый
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
       ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Номенклатура;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Цвет);    
КонецФункции

Sharki Подменю пользователя
сообщение 18.05.12, 13:56
Сообщение #16

Общительный
**
Группа: Пользователи
Сообщений: 47
Спасибо сказали: 12 раз
Рейтинг: 0

Для меня лично всё-равно не понятно зачем изменять цвет для каждой номенклатуры ведь вы получаете столько одинаковых условных оформлений сколько нужно указать с неверным количеством. Думаю при наличии 1000 таких номенклатур может возникнуть сильная нагрузка, ведь на каждую будет свое условное оформление. Напрашивается изменение условия получаемых лишних единиц товаров.

Пример решения - добавить в таблицу признак - "Излишки" - булевый
и при создании формы сделать одно условное оформление с условием:
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Излишки");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Истина;


а так у вас задача будет показывать не корректно если будет два поступления одной номенклатуры, одно с излишком другой без и все будут отображаться с оформлением

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 12.06.24, 11:50
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!