"Хочу универсально!" [Часть 1]

Публикация № 1116586

Разработка - Практика программирования

код универсально программирование теория практика

67
Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

 

 

Жил-был начинающий разработчик Вася. И было у него три «пунктика»:

  1. Писать по стандартам

  2. Делать универсально

  3. Перепроверять, что все соответствует п.1 и п.2

 

И в зависимости от расположения звёзд на небе, у Василия активизировались те или иные пункты. Например.

 

Есть на форме обработки таблица с колонками. Разработчик столкнулся с, на первый взгляд, примитивной задачей — сделать кнопку, которая будет открывать значение в текущей колонке. Пользователь становится курсором на валюту «Руб.» и нажимает кнопку. Карточка валюты «руб.» открывается. Пользователь становится на другую ячейку и нажимает на кнопку — открывается значение из этой ячейки.

 

И вот программист Вася, вдохновившись тем, что сможет моментально решить задачу, добавляет команду.

 

- А вдруг пользователь нажмёт кнопку в тот момент, когда в таблице вообще не будет строк?

 

И прилежный программист сразу же (как учили) в процедуре делает стандартную проверку.

 

ТаблицаФормы = Элементы.Валюты;
        
Если ТаблицаФормы.ТекущиеДанные = Неопределено Тогда
        Возврат;
КонецЕсли;

- Ну вот! Уже лучше. Начинаем эксперименты

И вот Василий берётся за определение текущей колонки. А так как наш разработчик любит сначала всё проверять, то выводит её сообщением.

 

ТекущаяКолонка = ТаблицаФормы.ТекущийЭлемент;
Сообщить("Имя текущего поля: " + ТекущаяКолонка.Имя);

Открывает свой любимый тонкий клиент и проверяет:

 


 

- Но ведь сама колонка в таблице называется «Валюта», а не «ВалютыВалюта».

Взмахнув мышкой, Василий открывает редактор формы и видит, что на самом деле происходит.

 

«Валюты» - это имя таблицы, в которой хранятся данные.

«Валюта» - имя колонки этой таблицы.

А «ВалютыВалюта» - это имя поля на форме. Оно не хранит данные, а лишь выводит их. На самом деле данные хранятся в строке таблицы «Валюты» в колонке «Валюта».

 

 


 

 

Так происходит, когда имя поля было сгенерировано автоматически. Например, разработчик вынес его «вручную» на форму обработки. Имя автоматически присвоелось по формуле:

имя таблицы + имя колонки.

 

- И как же мне определить реальное имя колонки у текущего элемента?

Чему зачастую учат программистов в этих ваших интернетах? Прежде чем создавать свой велосипед, нужно поискать чужие. Естественно, в интернете.

 

Недолго думая гугля, Вася находит несколько примеров.

 

- А где-то я уже это видел...

Флэшбеки вспышками имен методов и переменных пролетают в сознании разработчика 1С и, погрузившись в океан жёлтых воспоминаний, он хватает за хвост имя обработки, в которой видел нечто подобное.

 

- Точно, я уже такое видел!

И действительно, в одной из завалявшихся в конфигурации обработок есть это:

 

ТаблицаФормы.ТекущиеДанные[Сред(ТаблицаФормы.ТекущийЭлемент.Имя, СтрДлина(ТаблицаФормы.Имя) + 1)] 

Всё просто. Автор этого кода полагает, что имена элементов в его инструменте всегда будут строиться по приведенной ранее формуле: имя таблицы + имя колонки. И вроде бы ничего страшного, ведь так чаще всего и бывает, но:

 

- Я хочу универсальное решение!

Звёзды сошлись. Сегодня Василий решается на серьёзный поступок — не денег ради, но во имя высокой цели, сделать кнопку не «как можно быстрее», а «как можно круче». Естественно, степень крутости определяется им самим.

 

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

 

Порывшись в гугле синтаксис помощнике, Василий находит свойство у поля: ПутьКДанным

 

ПолеФормы (FormField)

ПутьКДанным (DataPath)

Использование:

Чтение и запись.

Описание:

Тип: Строка.
Содержит путь к реквизиту, с которым связан объект.

Доступность:

Сервер, мобильное приложение(сервер).

 

И вроде бы вот оно решение, однако:

 

Доступность:

Сервер, мобильное приложение(сервер).

 

Есть загвоздка — свойство доступно только на сервере.

 

Можно, конечно, написать серверную функцию, которая будет возвращать путь к данным формы:

 

&НаКлиенте
Процедура ОткрытьЗначениеЯчейки(Команда)
        
        ТаблицаФормы = Элементы.Валюты;
        
        Если ТаблицаФормы.ТекущиеДанные = Неопределено Тогда
                Возврат;
        КонецЕсли;
        
        ТекущаяКолонка = ТаблицаФормы.ТекущийЭлемент;
        Сообщить("Имя текущего поля: " + ТекущаяКолонка.Имя);
        Сообщить("Путь к данным текущего поля: " + ПутьКДаннымЭлементаФормы(ТекущаяКолонка.Имя));
        
КонецПроцедуры


&НаСервере
Функция ПутьКДаннымЭлементаФормы(ИмяЭлемента)
    
        ПутьКДаннымЭлемента = Неопределено;
    НайденныйЭлемент    = Элементы.Найти(ИмяЭлемента);
    Если НЕ НайденныйЭлемент = Неопределено Тогда
            ПутьКДаннымЭлемента = НайденныйЭлемент.ПутьКДанным;
    КонецЕсли;
    
        Возврат ПутьКДаннымЭлемента;
    
КонецФункции

Но...

- Так не пойдёт!

Вспомнив, что каждое излишнее обращение к серверу — это зло, за которое его ругали в Великой Школе Одинэсников Имени Желтого Чайника, разработчик Вася решает попробовать не плодить серверные вызовы. Тем более с передачей всей формы.

 

Программист добавляет на форму обработки реквизит произвольного типа «ПутиКДаннымЭлементовФормы»

 


 

А при создании формы заполняем эту структуру именами полей и адресами их значений, хранящихся в свойстве «ПутьКДанным»

 

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

Теперь остаётся лишь сделать клиентский метод, который будет возвращать соответствующее значение свойства «ПутьКДанным»

&НаКлиенте
Функция ПутьКДаннымЭлементаФормы(ИмяЭлемента)
        
        ПутьКДаннымЭлемента = Неопределено;
        ПутиКДаннымЭлементовФормы.Свойство(ИмяЭлемента, ПутьКДаннымЭлемента);
        Возврат ПутьКДаннымЭлемента;
        
КонецФункции

 

Разработчик оглядывает код и радуется проделанной работе. А заодно и проверяет насколько правильно всё работает:

 

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

&НаКлиенте
Процедура ОткрытьЗначениеЯчейки(Команда)
        
        ТаблицаФормы = Элементы.Валюты;
        
        Если ТаблицаФормы.ТекущиеДанные = Неопределено Тогда
                Возврат;
        КонецЕсли;
        
        ТекущаяКолонка = ТаблицаФормы.ТекущийЭлемент;
        Сообщить("Имя текущего поля: " + ТекущаяКолонка.Имя);
        Сообщить("Путь к данным текущего поля: " + ПутьКДаннымЭлементаФормы(ТекущаяКолонка.Имя));
        
КонецПроцедуры

&НаКлиенте
Функция ПутьКДаннымЭлементаФормы(ИмяЭлемента)
        
        ПутьКДаннымЭлемента = Неопределено;
        ПутиКДаннымЭлементовФормы.Свойство(ИмяЭлемента, ПутьКДаннымЭлемента);
        Возврат ПутьКДаннымЭлемента;
        
КонецФункции

Вернувшись в тонкий клиент, Василий смотрит на результат:

 

 


 

 

 

Уже лучше. Теперь мы можем на клиенте узнать путь к данным формы. Для проверки, что всё на самом деле так, как планировалось, разработчик Вася переименовал элемент формы на «КолонкаСВалютой». Теперь путь к данным и имя элемента непохожи между собой, что поможет понять разницу. Вася любит всё перепроверять.

 


 

 

 

Ну вот. Всё хорошо. Но что теперь делать с этим? Нужно же определить имя колонки из полного пути к данным формы. Василий берёт самый прямой способ - расщепить полный путь на массив и взять его последний элемент:

 


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


&НаКлиенте
Функция ПутьКДаннымЭлементаФормы(ИмяЭлемента)
        
        ПутьКДаннымЭлемента = Неопределено;
        ПутиКДаннымЭлементовФормы.Свойство(ИмяЭлемента, ПутьКДаннымЭлемента);
        Возврат ПутьКДаннымЭлемента;
        
КонецФункции


&НаКлиенте
Процедура ОткрытьЗначениеЯчейки(Команда)
        
        ТаблицаФормы = Элементы.Валюты;
        
        Если ТаблицаФормы.ТекущиеДанные = Неопределено Тогда
                Возврат;
        КонецЕсли;
        
        ИмяПоляКолонки     = ТаблицаФормы.ТекущийЭлемент.Имя;                 //КолонкаСВалютой
    ПутьКДаннымКолонки = ПутьКДаннымЭлементаФормы(ИмяПоляКолонки);        //Валюты.Валюта
    
    СоставПутиКДанным  = СтрРазделить(ПутьКДаннымКолонки, ".", Ложь);     //Валюты; Валюта
    ИмяКолонкиТаблицы  = СоставПутиКДанным[СоставПутиКДанным.ВГраница()]; //Валюта
        
        Сообщить("Имя колонки таблицы: " + ИмяКолонкиТаблицы);
        
КонецПроцедуры

 

- Сейчас проверим

 


 

Осталось немного — просто взять значение из колонки и открыть его:

 

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


&НаКлиенте
Функция ПутьКДаннымЭлементаФормы(ИмяЭлемента)
        
        ПутьКДаннымЭлемента = Неопределено;
        ПутиКДаннымЭлементовФормы.Свойство(ИмяЭлемента, ПутьКДаннымЭлемента);
        Возврат ПутьКДаннымЭлемента;
        
КонецФункции


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

 

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

 

Василий уже прикинул в голове способы применения этого кода. Например, у нас есть табличная часть документа, которую нельзя редактировать. Наш разработчик ставит на таблицу ТолькоПросмотр, а так же подвязывает событие «Выбор», в котором открывает текущее значение.

 

И как только наш начинающий программист подумал об этом, в голову пришла мысль.

 

- Недостаточно удобно!

Да, этого мало. Василий хочет сделать ещё круче! Он решает переспать с этой мыслью, чтобы уже позже продолжить свой путь от простой задачи к универсальному механизму...

 

 

Понравилась статья?

 

Дамы и господа 1Сники. Не будьте равнодушными. Каждая ваша "звёздочка" порадует и автора и программиста Васю. Ведь это показатель того, что кому-то текст зашёл, а значит и время было потрачено не зря. 

 

Ну а после переходите к другим работам.

"Меньше копипаста!", или как Вася универсальную процедуру писал

Сортируем ДанныеФормыДерево на клиенте

Не провоцируйте СКД, или пример "как не надо"

 

 

67

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Дерево
1. serg-lom89 49 03.09.19 08:48 Сейчас в теме
классно написано!)Жду дальше историй про Васю!)
2. genayo 03.09.19 08:57 Сейчас в теме
Нам плюсиков не жалко, они бесплатные :)) Так что пиши ещё :))
3. Arxxximed 9 03.09.19 09:02 Сейчас в теме
Написано классно, стиль повествования понравился... Но , никогда так не буду делать, потому что структура колонок в реквизите формы - это уже костыль.
1. при открытии значения все равно будет обращение к серверу, если это конечно не примитивный тип данных. Так почему просто не обращаться на сервере к ПутьКДанным. Другой вопрос действительно не хочется тянуть на сервер всю форму, но для этого можно поискать обходные пути.
2. универсальность может и появилась. Но не очень... а что будет если программист Петя, у которого нету времени вникать в суть процедур Васи захочет программно добавить колонки, не задумываясь что за переменная ПутиКДаннымЭлементовФормы? Он будет думать над своей логикой, и только потом обнаружит что эта "кнопка" уже не совсем работает...
12. fredly_nightly 03.09.19 10:48 Сейчас в теме
(3) 1. обращение минимальное. Это не тоже самое, что в добавок ещё и форму всю перекидывать ради одной строчки
2. ага, выглядит как костылик. Но я вот помню сталкивался с подобной ситуацией... И что-то подобное только и получилось сделать. Как-то вариантов других не нашли (
27. Arxxximed 9 04.09.19 11:31 Сейчас в теме
(12) Все таки интересно, пример или хотя бы суть такой ситуации, в которой без костылика не обойдешься?
Могу только предоположить , когда данные на форме объемные, и любая отправка формы на сервер вызывает задержку?
4. Arxxximed 9 03.09.19 09:41 Сейчас в теме
А можете мне рассказать суть статьи? Это подход к решению задачи, или описание маленькой задачи?

Извините за критику, надеюсь она будет конструктивной.

1 Если первое: То как то не расскрыто. Не вижу разбора паттерна , да и самого паттерна подхода к решению задачи.
2 Если про саму задачу: решение - так себе... Вроде и работает. Но... писал уже выше.

Пока - статья для статьи.. Что тоже имеет место быть.
CyberCerber; +1 Ответить
5. Rustig 1283 03.09.19 10:20 Сейчас в теме
(0) как-то все сложно...
Прикрепленные файлы:
ПолучениеИмениКолонки.epf
7. Arxxximed 9 03.09.19 10:39 Сейчас в теме
(5) Ну и ? Добавлю колонку со своим именем... Как данные потом найдешь? В статье это как раз и написано. Вот лишь бы написать не почитавши.
9. fredly_nightly 03.09.19 10:45 Сейчас в теме
(5) ну так стоит изменить имя элемента и всё сломается. В этом и вся суть
11. Rustig 1283 03.09.19 10:46 Сейчас в теме
(9) имя какого элемента вы хотите поменять?
13. fredly_nightly 03.09.19 10:51 Сейчас в теме
(11) любого. Если элемент будет называться как угодно, не соответствуя шаблону "Список" + ИмяКолонки, то всё сломается.
14. Rustig 1283 03.09.19 10:53 Сейчас в теме
(13) Название табличной части "Список" можно выделить в переменную
&НаКлиенте
Процедура СообщитьИмяЭлемента(Команда)
ИмяТЧ = "Список";
ТекЭлемент = ЭтаФорма.Элементы[ИмяТЧ ].ТекущийЭлемент;
Сообщить(СтрЗаменить(ТекЭлемент.Имя, "ИмяТЧ ", ""));
КонецПроцедуры
16. fredly_nightly 03.09.19 10:56 Сейчас в теме
(14) с таким подходом лучше уж как в статье:

ТаблицаФормы.ТекущиеДанные[Сред(ТаблицаФормы.ТекущийЭлемент.Имя, СтрДлина(ТаблицаФормы.Имя) + 1)]

но это не меняет сути, что имена элементов должны быть строго стандартизированы.
21. Rustig 1283 03.09.19 11:44 Сейчас в теме
(16)
&НаКлиенте
Процедура СообщитьИмяЭлемента(Команда)
        ИмяТЧ = ЭтаФорма.ТекущийЭлемент.Имя;
        ТекЭлемент = ЭтаФорма.Элементы[ИмяТЧ].ТекущийЭлемент;
        Сообщить(СтрЗаменить(ТекЭлемент.Имя, ИмяТЧ, ""));
КонецПроцедуры
17. fredly_nightly 03.09.19 10:58 Сейчас в теме
(14) а если элемент будет называться не "СписокВалюта", а "ВалютаУчета" ?
Или нужно вынести два элемента, привязанного к одной колонке.
ваш подход работает только с самыми примитивными ситуациями. А тут описывается "универсальное мега супер решение"
Светлый ум; +1 Ответить
22. Rustig 1283 03.09.19 11:45 Сейчас в теме
(17) я не вижу супер-решения.
15. Rustig 1283 03.09.19 10:54 Сейчас в теме
(13) Имя табличной части сможете сами вытащить ? и в переменную передавать и далее в процедуру.
6. Rustig 1283 03.09.19 10:38 Сейчас в теме
(0) вот видео
Прикрепленные файлы:
ScreenCaptureProject2.mp4
8. Arxxximed 9 03.09.19 10:40 Сейчас в теме
(6) еще и с видео заморочились )))... Там в обработке две строчки. можно же было просто сюда код написать!
10. Rustig 1283 03.09.19 10:45 Сейчас в теме
(8) :)))))))))))))))) да уж... вы правы
&НаКлиенте
Процедура СообщитьИмяЭлемента(Команда)
        ТекЭлемент = ЭтаФорма.Элементы.Список.ТекущийЭлемент;
        Сообщить(СтрЗаменить(ТекЭлемент.Имя, "Список", ""));
КонецПроцедуры
18. Arxxximed 9 03.09.19 11:02 Сейчас в теме
По мне так все таки нормальный вариант Получать ПутьКданным на сервере, и там получать сразу данные... Если не нравится идея передавать всю форму на сервер, используйте НаСервереБезконтекста, куда в параметрах передавать ТаблицуФормы и Данныеформыколлекция
19. SeiOkami 1230 03.09.19 11:05 Сейчас в теме
(18) нельзя сделать при помощи &НаСервереБезконтекста
Если у Вас выйдет, поделитесь, пожалуйста - это заметно упростит код.
20. Arxxximed 9 03.09.19 11:20 Сейчас в теме
(19) Да , прошу прощения, Элементы формы не передаются в параметрах на сервер...


Но тут пришла и другая мысль... А зачем боятся вызова этого сервера в контексте этой задачи? Ведь важно что бы не было частых вызовов, а тут тоолько один , по нажатию кнопки... А если предполагается частый контекстный вызов, то наверное нужно использовать другие события ТаблицыФормы
adhocprog; +1 Ответить
24. SlavaKron 03.09.19 12:12 Сейчас в теме
(20) Если говорить об универсальности, хотелось бы найти такое решение, которое подошло бы, например, для этой задачи: Открывашка ячеек таблиц. То есть всё должно быть на клиенте. Менять код формы мы не можем, всё что у нас есть - это текущий элемент и ДанныеФормыСтруктура ДанныеФормыЭлементКоллекции (ТекущиеДанные).
23. Arxxximed 9 03.09.19 12:04 Сейчас в теме
Коллеги, все равно считаю , что данный метод получения значения ячейки таблицы формы или же имени колонки таблицы - костыльный... Не рекомендуйте особенно новичкам так делать! Пользуйтесь по стандарту - на стороне сервера получаете путькданным. Просто , понятно, читабельно , легко! Ваш код всегда будут читать другие, зачем усложнять сложное.
Конечно , все в зависимости от поставленной задачи.
25. Infector 142 03.09.19 18:58 Сейчас в теме
Автор! Вы забыли указать, что Василий это кот :)
Merkalov; Jimbo; cuztam; Rustig; SeiOkami; +5 Ответить
26. ntemny 55 04.09.19 09:32 Сейчас в теме
Не совсем понял задачу. ТекущаяСтрока и НайтиПоИдентификатору() в обработке выбора без использования элементов формы религией запрещены?
30. Arxxximed 9 04.09.19 14:22 Сейчас в теме
(26) А причем тут обработка выбора.. Автор хочет по кнопке получить текущую колонку и текущую строку, а потом по этим данным найти и открыть значение.
31. ntemny 55 04.09.19 17:56 Сейчас в теме
(30)Ну ок, по кнопке, не по обработке выбора. Разницы нет. В любом случае правильнее работать не с элементами формы а с реквизитом типа ДанныеФормыКоллекция.
28. Yashazz 2939 04.09.19 14:11 Сейчас в теме
Вот не лень же людям ерундой заниматься - текущие проблемы, которые по ходу дела решаются, расписывать в виде статей про всяких вась...
29. Yashazz 2939 04.09.19 14:20 Сейчас в теме
А вообще, с возрастом и опытом приходит понимание тонкой грани между решением "по месту", кастомизацией, продиктованной сроками, стоимостью, сложностью, перспективами развития и эксплуатации системы, и универсализацией. И вместо сферических универсалов в вакууме гораздо чаще востребованы и удобны оказываются узкоспециализированные решения. Не говоря уже о том, что универсализация на уровне разработчика частенько "выпихивает" проблему настоящей собственно автоматизации процесса на следующий уровень - уровень админа, продвинутого юзера - того, кто настраивает этот супер-пупер-универсал и рулит им. Универсалам нужна подробная справка, и всё равно не читают; универсалов тупо опасаются; универсалы редко "угадывают" настоящие направления работы и оказываются бесполезны...
vozzhaev; mbalyukin; sergathome; +3 Ответить
32. Leon29 05.09.19 07:52 Сейчас в теме
(29)
и оказываются бесполезны...


Я же правильно Вас понял, что учитывая тонкую грань бесполезны бывают лишь в некоторых случаях, а не всегда.

Ведь много идёт по пути универсальности. Например, платформа 1С. Уже есть готовые объекты и действительно надо знать как ими пользоваться. И всякие универсальные вещи ускоряют работу. Например, автомобильные детали используются в различных брендах и надо знать их качество, надежность, крепления, параметры.
vozzhaev; +1 Ответить
33. Yashazz 2939 05.09.19 22:54 Сейчас в теме
(32) Разумеется. Нигде нет смысла бросаться в крайности и возводить в абсолюты. Программирование или нет, тут не суть.
vozzhaev; +1 Ответить
34. Jimbo 6 06.09.19 11:04 Сейчас в теме
Что за критика ? Универсальное ради универсального. Просто читать - бальзам на душу. Разобран конкретный пример, все с этим столкнутся. Васе зачёт и молочка.
35. mbalyukin 26.09.19 15:05 Сейчас в теме
Для чего вообще делать кнопку и все это? Я правильно понимаю, что задача программиста в данном случае открывать значение из ячейки в таблице? Но из-за того, что установлено свойство "ТолькоПросмотр" = Истина в самой ячейке таблицы не работает кнопка "Открыть"? А почему нельзя убрать "ТолькоПросмотр", тогда естесственное открытие ведь станет работать. Потому что тогда пользователь сможет менять значение в колонке, а это плохо? На мой взгляд решение есть проще.

Имеем:
0. Таблица значений на форме, нужно открывать любое значение из колнки стандартной "лупой", но не иметь возможности менять элемент.
1. У всех ссылочных полей таблицы ставим свойство "Редактирование текста" = Ложь.
2. У тех же полей создаем событие "Начало выбора", в котором ставим "СтандартнаяОбработка" = Ложь.
3. У тех же полей создаем событие "Очистка, в котором ставим "СтандартнаяОбработка" = Ложь.
4. "Только просмотр" не ставим.

Все. Теперь любое ссылочное значение из таблицы можно открыть без доп. кнопок и кучи кода, простой кнопкой "открыть" из ячейки. А также поменять или очистить значение тоже никак не получится.
user708468_v781345; +1 Ответить
Оставьте свое сообщение

См. также

"Хочу универсально!" [Часть 2] 22

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Продолжение истории про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма.

25.09.2019    3655    SeiOkami    4       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

[Шпаргалка] Программное создание элементов формы 338

Статья Программист Стажер Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом Разработка

Программное создание практически всех популярных элементов формы.

06.09.2019    16706    rpgshnik    43       

Агрегатные функции СКД, о которых мало кто знает 386

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    19811    ids79    45       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 17 февраля по 13 марта 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

Обмен данными. Консистентность vs Многопоточность 29

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Интеграция

Рассмотрим теоретические основы обмена данными. Какие бывают обмены, какие гарантии при этом даются, зачем идти на компромиссы и что при этом может пойти не так. Есть ли идеальная схема?

03.09.2019    5882    m-rv    1       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 285

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    24611    ids79    34       

Открыто голосование за доклады на INFOSTART MEETUP Krasnodar Промо

Выбирайте и голосуйте за самые интересные доклады, лучшие из них попадут в окончательную программу митапа. Голосование продлится до 30 января 2020 года.

Обработчики событий при записи объектов. Зачем и что за чем? 247

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    18983    4    AlbinaAAA    24       

Создание отчетов с помощью СКД - основные понятия и элементы 225

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    27707    ids79    17       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

Подсистема "Варианты отчетов". Используете ли Вы ее правильно? 228

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом БСП (Библиотека стандартных подсистем)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    22549    YPermitin    49       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    8605    m-rv    2       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Как настроить правильную техподдержку (helpdesk, service desk на коленке) 40

Статья Программист Бизнес-аналитик Руководитель проекта Нет файла v8 УУ Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени Бесплатно (free) Управление услугами и сервисом

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

24.04.2019    10263    siddy    0       

Преобразование EXCEL в таблицу значений без COM и других извращений 219

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Загрузка и выгрузка в Excel

Получение таблицы значений из excel в 1С v8, без COM, внешних источников данных и т.д. EXCELВТаблицуЗначений() - За 10 строчек кода! Реализация протестирована на 1С 8.3.12.1714 (x64).

18.04.2019    16360    9    Eret1k    43       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.130.х, КА 2.4.11.х и ERP 2.4.11.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    11490    m-rv    16       

Excel vs 1С: битва с неожиданным исходом 43

Статья no Нет файла v8 1cv8.cf Россия Бесплатно (free) Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Финансовые Управленческие

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    29052    bolefirenko    109       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Копирование числовых ячеек из 1С в Excel 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Загрузка и выгрузка в Excel Администрирование данных 1С

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

15.01.2019    14233    itriot11    21       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке 529

Статья Программист Нет файла v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Универсальные функции

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    44344    GeterX    94       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 132

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    25019    ids79    40       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git 285

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Инструментарий разработчика Управление проектом

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    43441    stas_ganiev    72       

Вспомогательные инструкции в коде 1С 108

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    22903    tormozit    100       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Из Excel в 1С запросом 33

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Загрузка и выгрузка в Excel

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

14.08.2018    15956    m-rv    5       

Тестер: частые вопросы 159

Статья Программист Бизнес-аналитик Нет файла v8 Бесплатно (free) Практика программирования

Ошибкам бой - тесты норма жизни!

25.07.2018    22850    grumagargler    24       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Повышаем эффективность разработки правил обмена 127

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    22433    olegtymko    47       

Как сделать запрос на изменение данных 76

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    23952    m-rv    21       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

Данный онлайн-курс предусматривает изучение базовых принципов создания приложений для операционной системы Android, работающих на мобильной платформе “1С:Предприятие”. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие” при разработке прикладных решений для “обычных” компьютеров, но пока ещё не занимался разработкой 1С-приложений, предназначенных для работы на мобильных устройствах.

7500 рублей

Строим графы средствами 1С (без GraphViz) 46

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    19812    slozhenikin_com    20       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    13939    Rustig    9