Флаг "Использовать ПОЧТИ всегда", или Нюанс динамических списков

Публикация № 1379838 11.02.21

Разработка - Механизмы платформы 1С

УФ ДС Управляемые формы Динамический список Стандарты Правила ТекущиеДанные СтрокаГруппировкиДинамическогоСписка Группировка Баг Ошибка Код Программирование

Небольшая пятничная история по программной работе со строкой динамического списка.

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

Элементы.Список.ТекущиеДанные

 

Возьмём обычного новичка, который только начинает свой путь в 1С. Некий программист Вася.

 

 

Одним прекрасным вечером нашему разработчику понадобилось побыстрее оказаться дома. Но тут пользователь: 

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

Звучит просто. И Вася сел за работу. 

В первую очередь он "покрасил" кнопку. 

 

Ну вот! Уже половина задания сделана.

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

 

Вася создаёт обработчик события ПриАктивизацииСтроки(). И вносит свой несложный код:

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	Элементы.СделатьВсеХорошо.Видимость = ЗначениеЗаполнено(Элементы.Список.ТекущиеДанные.Сумма);
	
КонецПроцедуры

 

Ну вот, можно запускать!

 

 

Первая ошибка не заставила себя долго ждать. Оказалось, что если в форме списка нет ни одной строки (например, нет подходящих документов по отборам), то в Список.ТекущиеДанные содержится Неопределено. Пришлось срочно дорабатывать код.

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Элементы.СделатьВсеХорошо.Видимость = ЗначениеЗаполнено(ТекущиеДанные.Сумма);
	
КонецПроцедуры

 

Вася спокойно отдал свою доработку и уже собрался идти домой, но

 

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

Пользователь отключил колонку через "Изменить форму" со словами "меньше знаю - лучше сплю". 

И в результате - колонка перестала быть доступной в ТекущиеДанные. Это хорошо видно в отладке:

 

Наш Вася хоть и не силён в 1С, но гуглить умеет. И он быстро нашёл решение - установить напротив поля "Сумма" флаг "Использовать всегда":

 

Теперь поле всегда будет доступно в ТекущиеДанные. И можно не опасаться за свой код.

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

 

И тут:

 

Что опять сломалось?

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

 

Вася залез в отладку и увидел, что в ТекущиеДанные нет обычных для данной формы свойств. Вместо них - описание группировки. 

 

А в ТекущаяСтрока хранится не ссылка на документ, а "СтрокаГруппировкиДинамическогоСписка"

 

Выходит, что "использовать всегда" не означает, что свойство всегда будет в ТекущиеДанные...

Пояндексив, Вася нашёл самый простой вариант - проверять ТекущиеДанные не только на Неопределено, но и на группировку.

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено 
		ИЛИ ТипЗнч(ТекущиеДанные) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
		Возврат;
	КонецЕсли;
	
	Элементы.СделатьВсеХорошо.Видимость = ЗначениеЗаполнено(ТекущиеДанные.Сумма);
	
КонецПроцедуры

 

Теперь точно идеально!

Программист быстро направился к выходу, на этот раз уже не оглядываясь.

А вот ещё это поправьте

Расстроенный Вася снова приступил к анализу. Оказывается, что теперь, когда пользователь нажимал на группировку, то видимость кнопки не менялась. И, если до этого кнопка была видна, то на группировке она так же оставалась доступной. 

А на самом деле кнопка должна быть недоступна, ведь это не "документ с заполненной суммой". 

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

 

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

Оказалось, что есть БСПшный метод СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка()

Спойлер СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка
// Проверяет, что текущие данные определены и не являются группировкой.
// Предназначена для обработчиков таблиц формы динамических списков.
//
// Параметры:
//  ТаблицаИлиТекущиеДанные - ТаблицаФормы - таблица формы динамического списка для проверки текущих данных.
//                          - Неопределено
//                          - ДанныеФормыСтруктура
//                          - Структура - текущие данные для проверки.
//
// Возвращаемое значение:
//  Булево
//
Функция ЭтоЭлементДинамическогоСписка(ТаблицаИлиТекущиеДанные) Экспорт
	
	Если ТипЗнч(ТаблицаИлиТекущиеДанные) = Тип("ТаблицаФормы") Тогда
		ТекущиеДанные = ТаблицаИлиТекущиеДанные.ТекущиеДанные;
	Иначе
		ТекущиеДанные = ТаблицаИлиТекущиеДанные;
	КонецЕсли;
	
	Если ТипЗнч(ТекущиеДанные) <> Тип("ДанныеФормыСтруктура")
	   И ТипЗнч(ТекущиеДанные) <> Тип("Структура") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если ТекущиеДанные.Свойство("ГруппировкаСтроки") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции

 

И если использовать его, то код будет такой

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные    = Элементы.Список.ТекущиеДанные;
	
	ОтображатьКнопку = СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(ТекущиеДанные) И ЗначениеЗаполнено(ТекущиеДанные.Сумма);
	
	Элементы.СделатьВсеХорошо.Видимость = ОтображатьКнопку;
	
КонецПроцедуры

 

А если использовать ещё один типовой метод, то можно сделать и так:

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

 

А ещё, можно и не проверять на поле группировки, а использовать метод ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры()

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

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

 

Василий ещё решит, какой код самый "красивый" и "правильный". Кстати, напишите в комментариях, как, по Вашему мнению, лучше всего?

 

Уже перед сном нашего разработчика заинтересовал другой вопрос. А есть ли в типовых какие-то примеры ошибок? И он начал копаться...

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

Вот несколько примеров из ERP 2.5.6.98 :

 

 

 

 

Всё это по той причине, что при обращении к свойствам ТекущиеДанные нет проверки на то, является ли данная строка реальной строчкой списка, а не группировкой.

И таких ошибок очень много. Ведь разработчик, когда нажимает галочку "Использовать всегда" предполагает, что это является гарантией наличия свойства в ТекущиеДанные. Но, как видите, это не совсем так. 

Теперь я буду всегда проверять не только на Неопределено, но и на СтрокаГруппировкиДинамическогоСписка. 

Гордый проделанным исследованием и своими решительными выводами юный разработчик Вася блаженно уснул.
Ему снились воздушные динамические списки, крылатые группировки, вкусные свойства и лавандовые проверки на ошибки.
Он ещё не знает, что рано утром в понедельник ему придётся изучить ещё одну статью про его доработку: Серверные вызовы, которые нельзя вызывать
Вася снова перепишет свою форму списка ещё более "правильно". Но это будет в понедельник. А пока что впереди целые выходные. Можно отдохнуть.

 

 

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

Не будьте равнодушными! Поставьте лайк плюс, оставьте комментарий. Ещё много в 1С неизведанного!

И переходите к другим публикациям:

 

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

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1691 11.02.21 18:39 Сейчас в теме
2. RustIG 1691 11.02.21 18:40 Сейчас в теме
забирай вознаграждение :)
A_Max; vld_dmn; sosaria; DrAku1a; SeiOkami; +5 Ответить
3. SeiOkami 2909 11.02.21 18:44 Сейчас в теме +2 $m
4. PerlAmutor 129 11.02.21 18:51 Сейчас в теме
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
    Элементы, "СделатьВсеХорошо", "Видимость", ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
        ОбщегоНазначенияКлиентСервер.ЗначениеСвойстваЭлементаФормы(Элементы, "СписокДокументыЗакупки", "ТекущиеДанные"), "Сумма", Неопределено))); 
Merkalov; kaliuzhnyi; +2 Ответить
5. SeiOkami 2909 11.02.21 18:55 Сейчас в теме
(4)

ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
    Элементы, "СделатьВсеХорошо", "Видимость", 
		ЗначениеЗаполнено(
			ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
        		ОбщегоНазначенияКлиентСервер.ЗначениеСвойстваЭлементаФормы(
					Элементы, "СписокДокументыЗакупки", "ТекущиеДанные"
				), "Сумма", Неопределено
			)
		)
); 

Показать
Merkalov; Поручик; Jimbo; +3 Ответить
6. Merkalov 8 12.02.21 06:17 Сейчас в теме
(4) Через полгода следующий программист такой:
Че?

К такому коду нужно в комментарий ссылку на данный топик скидывать)

Минимизация кода - не всегда хорошо.
user754943; +1 Ответить
7. rabid_otter 134 12.02.21 08:41 Сейчас в теме
в ОбщийМодуль.ОбщегоНазначенияКлиентСервер все уже есть, и если программист открывает модуль формы какого-нибудь документа, он рано или поздно обнаруживает подобные функции в этом модуле.
минимизация кода - это очень хорошо.
при клиент-серверных вызовах, код модуля также передается на сервер, поэтому и придуманы общие модули с типом "Клиент".
на ИС теперь принято писать статью из-за одной функции общего модуля БСП?
ТекущиеДанные могут быть равны неопределено, это еще с 8.1 плетется, про группировку строки тоже наткнулся лет 5 назад, когда ушел с типовых в разработку самописных конфигураций.
а вот вы знаете, что в веб-клиенте новый цвет с дробными значениями компонент R, G, B приводит к веселым и неожиданным последствиям? хотя, может быть уже пофиксили, это было в 15-й версии платформы.
Yashazz; Поручик; rpgshnik; +3 2 Ответить
8. RustIG 1691 12.02.21 10:36 Сейчас в теме
(7)
на ИС теперь принято писать статью из-за одной функции общего модуля БСП?

если в виде исследовательской публикации, то "да".
автор обнаружил в разных конфах, что не все этих стандартов придерживаются, о которых вы упомянули...
mrChOP93; nekit_rdx; vld_dmn; +3 Ответить
9. rabid_otter 134 12.02.21 11:21 Сейчас в теме
(8) ладно, если это разбор механизма 1С, про который не написано в открытых источниках, типа структуры байт-кода 1С, соглашусь.
но на одну типовую функцию БСП, которая довольно часто используется - исследование? вы смеетесь?
хотя после графоманов типа Ивана забыл как его фамилия, можно ожидать каких угодно статей.
7OH; Yashazz; +2 Ответить
10. SeiOkami 2909 12.02.21 11:36 Сейчас в теме
(9) не стоит так сурово.

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

Если вы уже достаточно опытный разработчик, чтобы знать в том числе и эту тему, то не стоит забывать, что когда-то это было не так. Да и вообще не понимаю о какой именно "одной типовой функции" вы говорите.
12. rabid_otter 134 12.02.21 12:55 Сейчас в теме
(10) ок, не одна функция, но по сути для корректного получения текущих значений достаточно сделать 2 проверки:

1) галочка у реквизита таблицы "использовать всегда" установлена.
2) ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные) = Тип("СтрокаГруппировкиДинамическогоСписка")

или я что-то еще упустил?
если нет, то ребята, вы серьезно - 2 ифа и целая статья?????

по поводу того, что в ERP (или как мне на собесе спросили - ЕРП знаете?) такие ошибки - а кто говорит, что ЕРП пишут боги 1С? всегда можно забыть какие-то мелкие детали.
14. SeiOkami 2909 12.02.21 13:05 Сейчас в теме
(12) вы просто перечислили действия. Начинающему разработчику это ничего не говорит.
В отличии от статьи, где наглядно показаны всё необходимое, а главное - почему именно нужно и что будет, если это не сделать.
А так же показаны разные примеры работы.
Если же упрощать по вашему принципу, то большинство образовательной информации будет сводится к "делай так". Без ответов "почему", "зачем", "а что если не сделаю". Без примеров, без объяснения. И бесполезно.

Вся проблема в том, что вы считаете, будто все вокруг должны мыслить так же как вы. И знать то, что знаете вы. И удивляетесь, когда сталкиваетесь с примерами обратного.
vl_vedernikov; starponyx; nekit_rdx; VAAngelov; alevnev; Azamatex; +6 Ответить
15. rabid_otter 134 12.02.21 13:11 Сейчас в теме
(14)
Начинающему разработчику это ничего не говорит

а у него отняли отладчик?
Если же упрощать по вашему принципу, то большинство образовательной информации будет сводится к "делай так". Без ответов "почему", "зачем", "а что если не сделаю". Без примеров, без объяснения. И бесполезно.

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

ахахах, в треде объявился диванный психиатр.
ну что ж, коллега, раз уж мы про такой позорный кейс говорим:
был бы рад, если вы добавите в свою статью заметочку про поведение дин. списка в веб-клиенте.
оно подглюкивает, вот мой костыль в одной из последних моих самописочек (не совсем само-, т. к. используется БСП):

Если ТипЗнч(ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда 
			
			СтандартнаяОбработка = Ложь;
			
			Если ЗначениеЗаполнено(ТекущаяСтрока.Ключ) Тогда 
				
				#Если ВебКлиент Тогда
					
					//ИмяГруппировки в веб-клиенте на 8.3.15.1656 пустое
					
					ВыбраноПредставление = 
					(ЭлементФормы.Имя = Элементы.Список.Имя) 
					И (ПустаяСтрока(ТекущаяСтрока.ИмяГруппировки) 
					Или ТекущаяСтрока.ИмяГруппировки = "Представление");
					
				#Иначе
					
					ВыбраноПредставление = (ТекущаяСтрока.ИмяГруппировки = "Представление");
					
				#КонецЕсли
Показать

может быть в более поздних релизах зафиксили.

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

получается, что не все ошибки объединены
30. 7OH 68 16.02.21 20:33 Сейчас в теме
(15) вот про отладку - в самое оно.
Большинство знакомых брезгуют этим инструментом пользоваться.
Отсюда и результат.
25. Yashazz 4506 16.02.21 14:21 Сейчас в теме
(10) Всё это можно было уложить в 10 строчек, а не устраивать камеди-клаб с картинками. Вы б ещё мультфильмов сюда напихали. Воды множество, по делу мало что. Ну и конечно, БСП, которая переделывается до неузнаваемости раз в полгода, подана как панацея. Зато плюсиков нагребли и в топ вылезли со всей этой разлюли-трепологией.
11. RustIG 1691 12.02.21 12:26 Сейчас в теме
(9)имхо, озвучены многочисленные подводные камни, прояснена тема настолько глубоко, что исходная первоначальная задача на управляемых формах в разных конфах на БСП теперь кажется лишь верхушкой айсберга, а не малой локальной доработкой...
скажем так, на обычных формах решается все гораздо легче....
13. rabid_otter 134 12.02.21 12:55 Сейчас в теме
(11) ага, история про 2 ифа. лол кек.
16. Dzenn 808 12.02.21 14:57 Сейчас в теме
Сама постановка задачи содержит ошибку. Нужно сделать просто кнопку, и при нажатии уже проверять, можно ли вывести результат, и если можно, то какой. То есть, не нужно трогать ни видимость, ни доступность кнопки, что бы там пользователь не утверждал.
nekit_rdx; rpgshnik; +2 Ответить
17. SeiOkami 2909 12.02.21 17:20 Сейчас в теме
(16) в рамках контекста статьи это не принципиально. Можно было сделать так. И тогда все проверки, описываемые в статье, были бы на нажатии кнопки. Посыла не меняет.
18. TMV 14 13.02.21 08:39 Сейчас в теме
(16) Отнюдь. По-вашему пользователь получит сильно перегруженный интерфейс с невероятным количеством кнопок и меню, нажимая на большую часть которых, он получит что-то вроде "Не заполнено то-то", "Не используется то-то" или "Не хватает прав".
Если пользователю в данный момент какая-то команда не нужна, ее и не должно быть видно, ИМХО.
SeiOkami; +1 Ответить
19. Dzenn 808 13.02.21 09:33 Сейчас в теме
(18)
(16) Отнюдь. По-вашему пользователь получит сильно перегруженный интерфейс с невероятным количеством кнопок и меню, нажимая на большую часть которых, он получит что-то вроде "Не заполнено то-то", "Не используется то-то" или "Не хватает прав".


Так не делайте перегруженный интерфейс ;-)

Если пользователю в данный момент какая-то команда не нужна, ее и не должно быть видно, ИМХО.


Как все программисты пишут своё приложение для учёта финансов, так и все программисты пытаются переигрывать с видимостью/доступностью.
20. TMV 14 13.02.21 11:03 Сейчас в теме
(19)
Так не делайте перегруженный интерфейс ;-)
Вот конкретно на этом примере вы предложили оставить кнопку видимой, хотя очевидно, что в описанных в примере случаях нажатие на нее ни к чему не приведет.
Так зачем же пользователю ее видеть?!

Другой пример. В ЗУП3 в документах отпуск и БЛ куча печ.форм, но для кадровика половина из них не нужна, и (о чудо!) для кадровиков этих пунктов в меню печати нет.
По-вашему их нужно было оставить, но при попытке печати выдавать "Нет прав"?!

Как все программисты пишут своё приложение для учёта финансов, так и все программисты пытаются переигрывать с видимостью/доступностью.
Это вообще не понятно к чему и о чем.
21. ilp06 14.02.21 13:26 Сейчас в теме
(20)
Другой пример. В ЗУП3 в документах отпуск и БЛ куча печ.форм, но для кадровика половина из них не нужна, и (о чудо!) для кадровиков этих пунктов в меню печати нет.
По-вашему их нужно было оставить, но при попытке печати выдавать "Нет прав"?!

Это не всегда правильно. Если касается безопасности, то правильно. Если для построения типа, удобного итерфейса, то вопрос спорный. Попробуйте на своем ФИ́ЗИЧЕСКОМ рабочем столе динамически менять видимость и порядок расположенных там предметов. Вас это взбесит через минуту. Но подобные приёмы постоянно используют программисты. Помню и в windows и в ms office меню постоянно перестраивались. Кроме доведения пользователя до бешенства, это ничего более не решало. Человек помнит место, это проще чем каждый раз искать.
22. Пудель 14.02.21 13:53 Сейчас в теме
Хороший слог, забавно и назидательно! )
23. sulfur17 42 15.02.21 12:43 Сейчас в теме
Отличный пример как надо писать технические статьи)) Браво!
24. triviumfan 79 15.02.21 23:36 Сейчас в теме
Было интересно. Не знал.
26. Yashazz 4506 16.02.21 14:27 Сейчас в теме
Ну, собственно, если за описание такой элементарной ерундистики столько плюсов дают... То это красноречиво свидетельствует о нынешнем уровне ИС. Проще говоря, из профессионального сайта он превратился чёрт знает во что, зато с котиками. Из серьёзного ресурса успешно сделали стендап-шоу и даже простенькие вещи разжёвывают с шутками-прибаутками, дабы Вася не перенапрягся.
KRJ; rabid_otter; +2 Ответить
27. SeiOkami 2909 16.02.21 14:30 Сейчас в теме
(26) о, мой старый-добрый хейтер
Вы постоянно жалуетесь на то, что статья недостаточно сложная для вашего уровня ?)
28. Yashazz 4506 16.02.21 14:36 Сейчас в теме
(27) Нет, я просто и тупо завидую количеству плюсиков)))
Я-то свои зарабатывал делом, достаточно тяжёлым трудом, старался, подсистемы писал, блоки тестировал, обработки готовил. А надо-то было, оказывается, просто запилить прикольные картинки, написать забавный текстик и слегка разбавить эту ботву простейшими советами по 1С. Вот и завидую, что не знал секрета)
29. Yashazz 4506 16.02.21 14:40 Сейчас в теме
(27) И, этсамое, это не статья. Это свежий выпуск шоу "Вася Тупицын и 1С", которое пипл с удовольствием хавает.
Причём, судя по рынку труда, это реалити-шоу.
KRJ; rabid_otter; +2 Ответить
31. Yashazz 4506 25.02.21 20:43 Сейчас в теме
Кстати, на самом-то деле, если очень домой хотелось, можно было схалявить:
Попытка <Действие с ТекущиеДанные> Исключение КонецПопытки
И всё. Дёшево и сердито, и иногда эффективно.
32. Yashazz 4506 11.03.21 12:02 Сейчас в теме
А, ну и ещё. В этом жалком подобии технической статьи совершенно не упомянуты такие азы, как существующий со времён 8.2 метод динамического списка "ДанныеСтроки", и специфика его работы.
Зато многочисленные васи радуются легкоусвояемой кашке с картиночками, и плюсят, дааа)
33. SeiOkami 2909 11.03.21 12:03 Сейчас в теме +1 $m
(32) вы всё никак не угомонитесь)
Лучше бы пошли и написали статью
34. Yashazz 4506 12.03.21 17:39 Сейчас в теме
(33) Ага, всё никак не угомонюсь. Всё никак не пойму, почему моя, гораздо более серьёзная и подробная, статья https://infostart.ru/1c/articles/1276140/ про "ТекущиеДанные" получила гораздо меньше плюсов, чем ваша, кхм, публикация... Вот невдомёк мне.
35. SeiOkami 2909 12.03.21 17:45 Сейчас в теме
(34) статья интересная, поставил плюс, спасибо 👍
36. user591389_aska_rabota 14.06.21 21:11 Сейчас в теме
(34)
Да просто потому, что каждый в Васе увидел себя, каким когда то был )
И потому, что ситуация, когда ты вроде сделал задачку, а тебе вдогонку - "минуточку, а вот тут еще не работает", и так 10 раз подряд
тоже всем до боли знакома
Эмоции,Yashazz - эта статья вызывает живейший эмоциональный отклик..
Оставьте свое сообщение

См. также

Снова об использовании ТекущаяДата() на клиенте и на сервере и о работе в разных часовых поясах

БСП (Библиотека стандартных подсистем) Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Можно ли применять ТекущаяДата() вопреки требованиям стандартов 1С? Безопасно ли использование функции ОбщегоНазначенияКлиент.ДатаСеанса() из БСП? Как правильно поступать при работе пользователей в разных часовых поясах?

24.04.2023    4006    Alxby    26    

40

Самодельный обработчик ПослеЗаписи объекта

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Иногда при записи объекта хочется обработчик ПослеЗаписи, который бы выполнялся всегда после успешного завершения транзакции записи объекта. Статья описывает способ реализации такого обработчика.

03.04.2023    2809    tormozit    63    

39

Расширение глобального поиска 1С, или Глобальный поиск "на максималках"

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Мало кто знает, что поле "Глобального поиска" в 1С можно доработать. Добавить свои варианты поиска, кнопочки в результатах и даже целые пользовательские меню.

27.03.2023    4171    SeiOkami    9    

121

Postgres как предчувствие. Вычисляем процент импортозамещения в режиме Highload от 1С

HighLoad оптимизация Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

1С работает с СУБД Postgres более 10 лет, а сейчас это единственный легальный вариант для инсталляций в России. Много ли мы потеряем в производительности по сравнению с MS SQL? Выдержит ли Postgres 15.2 жесткий Highload со стороны 1С? Цель этой статьи - ответить на данные вопросы, с цифрами, которые можно использовать при расчете архитектуры.

23.03.2023    1636    1CUnlimited    9    

28

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    5816    dsdred    37    

124

Оператор GOTO в 1С - табу или волшебная палочка?

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В ежедневной практике программирования на платформе 1С оператор Goto (Перейти) практически не встречается. Не удивительно, что половина специалистов даже не подозревает о существовании данного оператора. Ну, а знающим он внушает ужас, и его стараются избегать. Так что же это за редкий оператор, и для чего он нужен?

19.02.2023    5679    Dementor    72    

43

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    12842    dsdred    15    

68

Маленькие хитрости большой платформы (часть 1)

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

29.12.2022    4219    zeltyr    25    

41

Практическая шпаргалка по новым возможностям языка запросов 1С

Механизмы платформы 1С Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

В предлагаемой статье решил привести примеры применения новых возможностей языка запросов 1С, начиная с версии платформы 8.3.20.

21.11.2022    16298    quazare    34    

113

Создаем периодические реквизиты или привет из 1С 7.7

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Конечно же, платформа 1С:Предприятие 8 не поддерживает периодические реквизиты, в статье описано использование типовой методики периодических сведений в коробочных решениях от 1С.

26.10.2022    1301    morin    4    

26

Асинхронное нечто, или так, как раньше!

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

23.10.2022    4767    starik-2005    38    

40

О цикле обратном замолвите слово...

Механизмы платформы 1С Языки и среды Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

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

08.09.2022    6448    DrAku1a    71    

31

1С и Unicode

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Разбираемся, как 1С работает с текстом и отдельными символами в контексте Unicode.

05.09.2022    4710    Irwin    30    

80

Шпаргалка по функциям АСИНХ

Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

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

29.07.2022    17031    zeltyr    17    

146

Экспертный кейс. История расследования одного небыстрого закрытия месяца в 1C:ERP. Пример неочевидных путей расследования в виде детективной истории

HighLoad оптимизация Механизмы платформы 1С Запросы Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

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

11.07.2022    5743    it-expertise    27    

57

Состав индексов с дополнительным упорядочиванием на уровне СУБД (MS SQL) при индексации реквизитов

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В момент обсуждения с коллегами работы индексов в 1С был затронут один из вопросов, который касался темы - каким образом происходит построение индексов при индексации реквизитов у объектов 1С (конкретнее, когда свойство реквизита "Индексировать" устанавливается в "Индексировать с доп. упорядочиванием"). Ранее я всегда опирался на знания, полученные в процессе чтения официальной документации от компании 1С, опубликованной на ITS. Наши мнения в этом вопросе разошлись и, как оказалось позже, мои знания не были актуальными, в итоге было проведено некоторое исследование по данному вопросу, чтобы выяснить истину.

15.06.2022    3066    sinichenko_alex    9    

34

Динамическое обновление - это зло?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

09.05.2022    18218    Infostart    79    

229

Об одной неочевидной проблеме перехода на версию платформы 8.3.20

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

При переходе на платформу 8.3.20 мы столкнулись с ошибкой "Повторяющийся псевдоним "Ссылка" Ссылка AS Ссылка,Presentation AS Presentation,Ссылка AS Ссылка" в ряде типовых конфигураций. Причём, эта проблема оказались неизвестна ни Яндексу, ни Гуглу. Путём мучительных экспериментов нам удалось найти решение. Пока я ещё не уверен, действительно это решение или обходной костыль, а настоящая проблема -- в чём-то другом, но это решение работает в ситуации, когда всё сломалось, а проблему надо решать срочно. Предположительная причина: платформа 8.3.20 более строго относится к типизации данных в запросах, чем предыдущие версии, вываливая в случае несоблюдения новшеств малопонятные ошибки.

08.04.2022    6869    Kernelbug    26    

34

Отборы динамического списка

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Динамический список предоставляет несколько объектов "Отбор". В статье разбирается, какой для чего нужен и как их использовать на форме. Рассматриваются только возможности платформы (без БСП).

28.03.2022    28804    Gladkov_Anton    7    

72

Фишки платформы 1С 8.3 для начинающего разработчика

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В данной заметке рассмотрены вспомогательные инструменты платформы, которыми часто пренебрегают начинающие программисты 1С.

11.03.2022    11177    Dimbayyyy    98    

61

Экспертный кейс. Расследование деградации производительности системы. Проведение документа “Поступление товаров и услуг” (1С:ERP 2)

Механизмы платформы 1С Запросы HighLoad оптимизация Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В ходе проведения нагрузочного тестирования одним из наших клиентов была выявлена сильная деградация производительности системы в целом и, в частности, выполнения ключевой операции “Проведение документа поступление товаров и услуг” в течение выполнения теста. Согласно данным подсистемы БСП “Оценка производительности”, время выполнения ключевой операции “Проведение документа поступление товаров и услуг” возрастало в процессе тестирования с 15-20 секунд в начале тестирования до 150-200 секунд в его финале.

02.03.2022    4290    it-expertise    50    

31

Модульная архитектура или пара слов о расширениях. Часть I (мысли, рассуждения)

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Статья-размышление о том, какое может быть применение технологии расширений 1С и зачем нам, разработчикам/программистам на 1С, знать общепринятые паттерны проектирования приложений. Итак, а что если я вам скажу, что технология расширений 1С - это одно из прекрасных новшеств компании 1С? Пусть эта статья будет хвалебной одой расширениям 1С.

14.02.2022    6853    amon_ra    67    

25

Синхронный и асинхронный вызов в новых версиях платформы

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Начиная с платформы 8.3.18.1128 переработана технология работы с асинхронными вызовами. В данной статье хочу описать новые асинхронные вызовы и сравнить их с предыдущими на примере функции - Вопрос на клиенте.

31.01.2022    7074    Shining_ninja    17    

36

Несколько простых приемов для удобной работы в конфигураторе

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    13514    acces969    95    

142

Как спроектировать структуру регистра сведений

Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

«Что может быть проще?» — это первое, что приходит в голову. Но что, если это не так? В этой статье мы попробуем затронуть некоторые вопросы, которые могут возникнуть при проектировании больших регистров.

08.11.2021    9166    Neti    60    

108

О вложенных попытках, исключениях и о представлении ошибок

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье, на небольшом примере, мне бы хотелось показать, как себя ведут вложенные "Попытка-Исключение". А также о том, чем отличаются методы ОписаниеОшибки() и ИнформацияОбОшибке().

07.11.2021    14062    Nicholas    22    

47

Обработчик ожидания. Нюансы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

ПодключитьОбработчикОжидания: некоторые подробности и особенности работы

24.08.2021    27093    Yashazz    26    

65

Прогресс-бар в поле динамического списка

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Изображаем прогресс-бары в колонке динамического списка

23.08.2021    4693    Yashazz    13    

39

ПриПолученииДанныхНаСервере + Контекст формы. Лайфхак

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Передать свои произвольные данные в событие, которое "без контекста"? Легко!

13.08.2021    7669    Yashazz    16    

44

Новичок новичку: как добавить программно кнопку на форму путем расширения

Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

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

13.05.2021    44645    user1312100    29    

73

Программное создание расширения

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Создание нового расширения "на лету", только штатными средствами 1С.

06.04.2021    7384    Yashazz    16    

77

Советы из Желтой тетради 📒 #1

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В этой публикации я собрал в одном месте часть советов и лайфхаков, которые открыл для себя в последнее время. Регулярно я публикую их в своём телеграм-блоге "Жёлтая тетрадь 📒 Блог программиста 1С", здесь же - дайджест этих публикаций.

15.03.2021    6587    builin    120    

53

Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Началось все с того, что штатный автоподбор при вводе по строке в поле ввода для некоторых больших справочников устраивать перестал. Вообще, для способа поиска строки "Любая часть" он работает на первый взгляд очень хорошо: работает как полнотекстовый (т.е. по нескольким словам) даже без активации полнотекстового поиска, красиво подсвечивает слова поиска в результатах. Казалось бы, все отлично. Но есть неприятное ограничение - всего лишь 10 значений в результирующем списке (у вас может быть несколько больше, так как платформа неявно добавляет результаты поиска по истории ввода). Для небольших справочников или справочников с разнородным ассортиментом все хорошо. Но не в моей ситуации. А простых путей увеличить количество выдаваемых строк на момент написания статьи мне обнаружить не удалось. Пришлось полностью переопределять автоподбор. Ниже речь пойдет именно об этом. И, к слову, в типовых конфигурациях для некоторых справочников используются похожие приемы для увеличения количества строк результата автоподбора.

21.01.2021    11298    herfis    9    

52

О формах 1С замолвите слово... Необычное использование знакомого всем объекта

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Неочевидно, но форму 1С можно использовать как универсальный объект, который доступен на клиенте и имеет уникальный набор свойств, методов, событий и конструктор, принимающий параметры. При этом у формы может не быть интерфейса, и ее можно даже не открывать. О реальных примерах применения такого подхода пойдет рассказ.

13.01.2021    10841    CyberCerber    46    

101

Наследование свойств элементов, или Как пользователь может сломать вашу форму

Механизмы платформы 1С Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Бесплатно (free)

В 1С можно установить свойства ТолькоПросмотр, Доступность и Видимость не только на элементы формы, но и на группы элементов. Но стоит ли так делать? Оказывается, пользователь может обойти запреты, которые установлены на папку. Об этом подробнее в видео.

12.01.2021    6805    SeiOkami    27    

112

Ускоряем медленный/долгий и тормозной стандартный поиск по динамическому списку, настраиваем его под себя

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Пользователи привыкли искать на форме списка, но, вбивая в поиск некорректные данные, могут завесить всю систему, а если еще искать нужно по НЕ полям списка, то решение только в своём поиске - все это решим в публикации с открытым кодом.

14.12.2020    41355    SizovE    2    

40

Передача параметров по значению в языке 1С

Механизмы платформы 1С Платформа 1С v8.3 ИТ-компания Бесплатно (free)

Все мы знаем, что в 1С можно написать такое: Процедура ОбработатьОбъект(Знач Объект) КонецПроцедуры Т.е. тем самым мы передаем в процедуру параметр по значению Далее в статье будут рассмотрены некоторые особенности передачи по значению объектов НЕпримитивных типов.

26.11.2020    6593    direktorSan    9    

29