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

Заблокировать ячейку в табличной форме документа

Автор 3030, 08 ноя 2012, 11:30

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

3030

Доброго времени суток! Задача состоит в следующем: в форме документа есть колонка Номенклатура. Нужно сделать так, чтобы после выбора из списка какой-либо номенклатуры данная ячейка блокировалась.

Что я пробовал:

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


Данный вариант не подходит, так как блокируется вся колонка "Номенклатура", и при добавлении новой строки эта колонка уже недоступна.

Пробовал организовать цикл, но ничего не вышло. Прошу помощи)

Конфигурация прилагается.

mixqn

Все будет несколько сложнее. И код у вас неправильный. ЭлементыФормы.ПереченьНоменклатуры.Колонки.Номенклатура никогда не будет равно Неопределено, поскольку это колонка табличного поля, Неопределено она не будет ни при каких условиях.
Скачал вашу конфигурацию, сейчас посмотрю.
Добавлено: 08 ноя 2012, 13:48


P.S. в следующий раз, если выкладываете cf сразу пишите, что платформа 8.1. Хорошо я у себя не снес еще )) А то не смог бы восстановить :)

cska-fanat-kz

Попробуйте обработать событие ПриВыводеСтроки()
например так:


Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
     ОформлениеСтроки.Ячейки.Номенклатура.ТолькоПросмотр = Истина;
КонецЕсли;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

mixqn

cska-fanat-kz, я так понимаю, это вариант не пойдет, поскольку доступность надо снимать сразу же после выбора номенклатуры. То есть, я себе решение вижу так: будет связка из обработчиков 2-ух событий - при изменении номенклатуры и при выводе строки (либо при активации). Первое, чтобы снять доступность сразу же, второе, чтобы это дело отрабатывалось при открытии сохраненного документа. 
Добавлено: 08 ноя 2012, 14:08


хотя наверно при выводе строки вызывается при изменении значения в ячейки. туплю наверно... сейчас проверю.

3030

Вариант от cska-fanat-kz работает. Спасибо)
Я вообще думал каким нибудь образом запустить цикл, чтобы каждая строка пропускалась через цикл, но вроде как в табличном поле так делать нельзя, или я прочитал что то неправильно?

mixqn

Цитата: 3030 от 08 ноя 2012, 14:08работает
а почему у меня не работает? :dfbsdfbsdf:
или задача снять доступность сразу же после заполнения значения не стоит? можно это сделать после завершения редактирования ячейки (то бишь после перехода в другую ячейку)?
Цитата: 3030 от 08 ноя 2012, 14:08табличном поле так делать нельзя
почему же нельзя, можно. стандартный цикл Для Каждого

3030

Пробовал вот такой вот цикл, писал что-то про итератор.
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = ЭлементыФормы.ПереченьНоменклатуры.ТекущаяСтрока;
Таблица = ПереченьНоменклатуры;
Для Каждого ТекущаяСтрока ИЗ Таблица Цикл
Если ЭлементыФормы.ПереченьНоменклатуры.Колонки.Номенклатура = Неопределено Тогда
   СтрокаТабличнойЧасти = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные;
   СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Дата,Элемент.Значение);
   РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
   Иначе
   ЭлементыФормы.ПереченьНоменклатуры.Колонки.Номенклатура.Доступность = Ложь;
   КонецЕсли;
   КонецЦикла;



Да,да, знаю, лишние переменные, но мне так привычнее, не узнал еще возможности 1с))

Цитироватьзадача снять доступность сразу же после заполнения значения не стоит?
верно, такая задача не стоит

mixqn

Цитата: 3030 от 08 ноя 2012, 14:21Если ЭлементыФормы.ПереченьНоменклатуры.Колонки.Номенклатура = Неопределено Тогда
про это я уже писал. условие никогда не примет значение ЛОЖЬ.
А в целом, вообще не понял, что вы хотели этим циклом сделать. Вы просто повторили действия внутри цикла столько раз, сколько строк в вашей таблице, вот и все.

Добавлено: 08 ноя 2012, 14:51


Поправка: конечно условие никогда не примет значение ИСТИНА. Там всегда ЛОЖЬ. Поскольку ЭлементыФормы.ПереченьНоменклатуры.Колонки.Номенклатура не равно Неопределено

cska-fanat-kz

3030, что должно выполниться в этом страшном цикле?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

3030

Работало, только после заполнения первой строки в следующих строках уже изначально блочило колонку "номенклатура". А циклом я хотел пройтись по каждой строке. В общем, ошибка моя в том, что не знал, как добраться только до ячейки, и добирался и блочил сразу всю колонку. В общем, чувствую, еще всем я тут надоем своими вопросами)

Цитата: cska-fanat-kz от 08 ноя 2012, 14:54
что должно выполниться в этом страшном цикле?
Тоже, что и у вас (как я думал). Но ваш ход гораздо проще, разумнее и изящнее. Спасибо)

Теги:

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

Рейтинг@Mail.ru

Поиск