Три костыля. Сказ про фокусы в коде

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

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

костыль велосипед качество быстрое решение ужас

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

О костыли!

Часто ли Вы делаете "костыли" в решении повседневных задач? Я да. И не стыжусь этого! Мы работаем на результат и главной нашей целью должно быть решение задач бизнеса. Иногда, не смотря на перфекционизм, разработчику приходится жертвовать качеством, порождать технический долг, но идти к поставленной цели.

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

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

Итоги в динамическом списке

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

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

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

  1. В форму списка добавляются реквизиты для хранения итогов и привязываются к подвалу соответствующих колонок списка.
  2. По событию "ПриПолученииДанныхНаСервере", "ПриАктивизацииСтроки" (о ужас!) или с помощью обработчика ожидания выполняем обновлением значений итогов с учетом отборов в динамическом списке.

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

 
 Описание решения с итогами в динамическом списке

Решение не единственное, но достаточно очевидное. Ссылки на другие способы решения этой же задачи:

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

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

Проверка наличия свойства

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

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

Пришло "гениальное" решение - написать функцию, которая бы проверяла наличие поля или свойства у любого типа значения. Сказано - сделано!

Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства)
	
	// Инициализируем структуру для теста 
	// с ключом (значение переменной "ИмяСвойства") 
	// и значением произвольного GUID'а
	GUIDПроверка = Новый УникальныйИдентификатор;
	СтруктураПроверка = Новый Структура;
	СтруктураПроверка.Вставить(ИмяСвойства, GUIDПроверка);
	
	// Заполняем созданную структуру из переданного 
	// значения переменной
	ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная);
	
	// Если значение для свойства структуры осталось 
	// NULL, то искомое свойство не найдено, 
	// и наоборот.
	
	Если СтруктураПроверка[ИмяСвойства] = GUIDПроверка Тогда
		Возврат Ложь;
	Иначе
		Возврат Истина;
	КонецЕсли;
	
КонецФункции

Пример использования функции ниже.

Процедура ПроверитьСвойствоДокумента()
	
	РеквизитыДокумента = Метаданные.Документы.ТестовыйДокумент.Реквизиты;
	ИмяРеквизита = "Комментарий";
	
	Если ПеременнаяСодержитСвойство(РеквизитыДокумента, ИмяРеквизита) Тогда
		Сообщить("Реквизит """ + ИмяРеквизита + """ найден!"); 
	Иначе
		Сообщить("Реквизит """ + ИмяРеквизита + """ НЕ найден!");
	КонецЕсли;	
	
КонецПроцедуры

В тестовой конфигурации, исходный код которой Вы можете найти на GitHub, результатом будет сообщение:

>> Реквизит "Комментарий" найден!

Все взлетело!

В итоге проверку в алгоритмы обмена добавили, и проблема решилась. Спустя неделю добрались до истины - проблема была в плохих данных. Но "костыль" работает до сих пор.

Думаете, что это все? Нет! Эта функция переехала в общий модуль и со временем ее начали использовать другие разработчики! Не важно, позволяет ли платформа проверять наличие свойства для типа или нет, проще использовать универсальную функцию и не беспокоиться!

Сейчас это решение используют до сих пор. "Костыль" стал удобным решением, позволяющим обходить некоторые ограничения платформы. Минусы у этого подхода очевидные:

  • Игнорирование стандартного функционала платформы 1С усложняет сопровождение.
  • Снижение производительности по сравнению со стандартными методами. На сколько происходит замедление зависит от конкретной ситуации.

А Вы используете такую "костылефичу"?

Чтение наборов записей запросом

На одном из проектов по оптимизации производительности также пришлось использовать одно сомнительное решение. Всем известно, что при выполнении конструкции "НаборЗаписей.Прочитать()" в транзакции, платформа 1С устанавливает разделяемую управляемую блокировку на прочитанные данные до конца транзакции. Этот момент отлично описан в статье "Ускорение в 100 раз. Решаем проблему блокировок" от Андрея Бурмистрова. Почему это может быть плохо? При параллельной работе пользователей это может привести к управляемым взаимоблокировкам. Опять же, посмотрите статью.

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

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

Как Вы догадались, времени на исправление всех мест просто не было и было найдено быстрое решение - чтение набора записей с помощью запроса.

 
 Что там за реализация

Фактически, мы получаем данные запросов и на их основе заполняем набор записей. Как это использовать? Например, стандартный способ работы с набором записей такой.

НаборДвиженияНоменклатураНоменклатура = РегистрыНакопления.ДвиженияНоменклатураНоменклатура.СоздатьНаборЗаписей();
// "Документ" - ссылка на документ регистратор
НаборДвиженияНоменклатураНоменклатура.Отбор.Регистратор.Установить(Документ);
НаборДвиженияНоменклатураНоменклатура.Прочитать();

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

НаборДвиженияНоменклатураНоменклатура = РегистрыНакопления.ДвиженияНоменклатураНоменклатура.СоздатьНаборЗаписей();
// "Документ" - ссылка на документ регистратор
НаборДвиженияНоменклатураНоменклатура.Отбор.Регистратор.Установить(Документ);
// Вместо вызова метода "Прочитать()" используем собственную процедуру
ПрочитатьНаборРегистраЗапросом(НаборДвиженияНоменклатураНоменклатура);

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

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

Костыли в оптимизации! Кто бы мог подумать!

Мы человеки!

Считаете, что всегда нужно делать идеальные решения? Качество важнее сроков? Процесс важнее результата?

Мы все ошибаемся, делаем спорные решения и можем сомневаться в их правильности. Уж про себя все это я могу с уверенностью подтвердить.

Будем честными к себе и окружающим.

Если и у Вас есть истории о "костылях" и готовность ими поделиться - добро пожаловать в комментарии!

Какой самый "лучший костыль" был у тебя!?

Другие ссылки

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. nvv1970 03.09.19 08:43 Сейчас в теме
Костыли, если они есть, должны быть тоже качественные. Например, выноситься в функции, в общие модули и т.п. Если так будет - то все норм.
Основная беда - именно структуризация кода. Именно она позволяет делать быстрые и удобные модификации и откаты.
ПС: недавно видел процедуру на несколько тысяч строк. И это в решении, которое висит на releases.1c. А количество повторов кусков кода - десятки. Совместимо, чё ((
shushik; wowik; DrAku1a; Kaval88; lebedovskiy; alest; trickster; AllexSoft; Yashazz; fancy; bulpi; zqzq; CyberCerber; user1275368; davdykin; Артано; YPermitin; +17 Ответить
2. YPermitin 7831 03.09.19 08:46 Сейчас в теме
(1) костыли, косиыли они повсюду)
13. Артано 667 03.09.19 10:11 Сейчас в теме
(1) Золотые слова. По этому поводу я всегда говорю "хорошо структурированный говнокод намного лучше, чем бессвязный набор идеальных алгоритмов". Можно брать вмемориз при условии сохранения копирайта =)
darkultro37; serg_gres; bsturtle; user687999_lil_pivo; hohaspb; trickster; A_Max; bulpi; MsDjuice; CyberCerber; davdykin; +11 Ответить
56. Yashazz 3130 04.09.19 19:02 Сейчас в теме
(1) Я видел совершенно чудовищные фрагменты кода и в типовых конфигурациях. То есть ужасающие и уродливые. Дублирующие друг друга или работающие едва на треть. Адски нерациональные по производительности, немасштабируемые итд. Чо, нормуль, стандарты такие стандарты...
3. mvk4d 03.09.19 09:01 Сейчас в теме
(0), так проверка наличия свойства или реквизита есть в БСП в базовой функциональности.

ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита)

Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт

КлючУникальности = Новый УникальныйИдентификатор;
СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);

Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;

КонецФункции
Arxxximed; Jimbo; unknown181538; Serg O.; AllexSoft; Yashazz; alexander-pro; A_Max; ybatiaev; CyberCerber; YPermitin; +11 Ответить
4. YPermitin 7831 03.09.19 09:05 Сейчас в теме
(3) во времена, когда этот костыль появился - такого еще не было в БСП. В старом блоге писал о нем еще в 2013 году.

Потом это появилось БСП. Это настоящий вирусный костыль!
16. fredly_nightly 03.09.19 10:43 Сейчас в теме
(3) тот же костыль, только в БСП))
bulpi; YPermitin; +2 Ответить
5. json 2605 03.09.19 09:06 Сейчас в теме
При общении с начальством слово "костыль" выгодно заменять на синоним "крайняя мера". Особенно когда речь о твоём коде
shushik; wowik; Rabot; Cерый; bugtester; AllexSoft; Romakon92; Krio2; bulpi; davdykin; Артано; alex-l19041; YPermitin; +13 Ответить
6. YPermitin 7831 03.09.19 09:07 Сейчас в теме
(5) ага, или "быстрое решение", "некоторая реализация", "прототип" или просто "нестандартный подход". :)
tolyan_ekb; bugtester; kentavr27; Romakon92; rintik; bulpi; davdykin; Артано; json; alex-l19041; +10 Ответить
7. brr 179 03.09.19 09:24 Сейчас в теме
(6)эвфемизмы, они повсюду :)
YPermitin; +1 Ответить
14. Evil Beaver 6646 03.09.19 10:32 Сейчас в теме
(6) ну и для ачивки "мозго*б 80 уровня" - применяем термин "ад-хок солюшен"
Serg O.; Артано; Krio2; BiTwaR; zqzq; YPermitin; +6 Ответить
15. YPermitin 7831 03.09.19 10:38 Сейчас в теме
(14) запомнил на случай важных переговоров :)
AllexSoft; +1 Ответить
22. Synoecium 675 03.09.19 12:10 Сейчас в теме
(6) еще вариант "острая производственная необходимость" :)
19. fredly_nightly 03.09.19 11:00 Сейчас в теме
(5)
годно заменять на синоним "



баги порождают костыли
особенности платформы позволяют воспользоваться нетипичными решениями
8. alex-l19041 8 03.09.19 09:26 Сейчас в теме
мне кажется что для вида сравнения Содержит

надо добавить "%" перед и после ЭлОтбора.Имя
YPermitin; +1 Ответить
9. YPermitin 7831 03.09.19 09:27 Сейчас в теме
(8) вероятно. Или же это было сделано в "костыле" намеренно.

Но для корректной и ожидаемой функционалности нужно конечно было бы предусмотреть варианты.
10. Kutuzov 612 03.09.19 09:42 Сейчас в теме
Не полностью по теме, но тоже описал несколько найденных "фишек"
Неожиданности при работе с УТ 11 и платформой
WhiteDragon; YPermitin; +2 Ответить
11. YPermitin 7831 03.09.19 09:43 Сейчас в теме
63. ignor 222 08.09.19 11:51 Сейчас в теме
Вспоминая о костылях времён молодости:
1)В девяностые приходилось переносить файлы с компа на комп на дискетах и, порою, в виде многотомных архивов. Между дисководами часто наблюдался момент частичной несовместимости, то есть непереносимости того или иного файла (ну не читается). Компы источник и приёмник зачастую бывали разнесены в разные концы города и не имели ни общей сети естественно ни интернета никакого (а то бы зачем переносить на дискетах). Приходилось записывать какой из файлов или томов архива не скопировался на машину приемник и приехав к компу источнику опять его переписывать. В 1988 ом году на одной из первых ввезённых в СССР IBM XT коллега владевший в отличии от меня английским показал функцию Нортон Командера сравнивающую панели директорий между собой и выделяющих отличия, то есть те файлы которых нет во второй папки. Под это я и написал на своём любимом ассемблере костылик. Моя программа генерировала пустые файлы нулевой длинны по входящему перечню файлов, то есть строго говоря одни имена по списку того что удалось перекопировать на компьютер приемник. В итоге на все доступные дискеты с приемника переписывались эти пустые списки. Придя на компьютер с которого ты копировал исходные файлы ты тупо сравнивал в Нортон Командере папки с исходными файлами компьютера источника с тем перечнем который тебе сгенерировала моя утилита. В итоге у тебя в папке источнике на компьютере источнике тупо выделялось автоматом средствами Нортона то что ранее не удалось перенести на приёмник.
2)Вот многие не помнят раздрай и сыр бор по проблеме 2000. Какая была повсеместная паника и как те же американцы вербовали к себе в америцу для решения проблемы 2000 всех до кого могли дотянуться. Меня в тот период пригласили на семинар который проходил в два дня с участием компаний Microsoft и Novell в налоговой с привлечением представителей всех налоговых инспекций с присутствием зам министра. Контора которая мен туда протащила представляла налоговой проекционный монитор которого у той не было для проведения семинара, ну вот нас в благодарность и позвали тоже на первый день. Когда представитель Майкрософта спрашивал есть ли те кто считает что проблема надуманная поднялось всего две руки одна из которых была моя. Тем не менее. С проблемой 2000 я столкнулся на одном из старых компьютеров несколько позже. БИОС компьютера ничего не знал о следующем веке и тупо пересчитывал дату в начало века перед этим, но дата была верна и время верное. В итоге я написал на том же ассемблере маленький костылик. Логика поведения костылика зависела, как сейчас помню, от его командной строки - если строка была пустая, то программа посылала в консоль enter, а в противном случае пыталась проинтерпретировать цифры как цифры начала века, на всякий случай (а вдруг и ещё через сто лет компьютером будут пользоваться). В итоге у компьютера в autoexec.bat была записана последовательность команд с использованием моего пача которая корректировала дату операционной системы с выводом команды date и перенаправлением ей же исходной даты с подменой века

Ну и возвращаясь к костылям 1С. Давеча разрабатывал довольно таки объёмный запрос, ну как объёмный, всё ж относительно, ну примерно 1200 строк и 48 Кб соответственно. Дело шло туго ибо много всяких промежуточных таблиц и значений в итоге и мозги уже не те и проблемно было в голове всё это ворочать. К слову сказать данный приём/костыль хорош и для работы со всяческими типорвыми и их запросами когда проблемно скормить запрос отладочной команды консоли
	НужныеПакеты=Новый Массив;
	НужныеПакеты.Добавить(11);
	НужныеПакеты.Добавить(12);
	НужныеПакеты.Добавить(17);
	Для СчПакет=0 По НужныеПакеты.Количество()-1 Цикл
		РезультатПакета = МВТ.Таблицы.Получить(НужныеПакеты.Получить(СчПакет)).ПолучитьДанные();
		Подстрочник=Новый ТабличныйДокумент;
		КолонкаИнд=0;
		Линия=Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,2);
		Для Каждого Колонка из РезультатПакета.Колонки Цикл
			КолонкаИнд=КолонкаИнд+1;
			Обл=Подстрочник.Область(1,КолонкаИнд,1,КолонкаИнд);
			Обл.Текст=Колонка.Имя;
			Обл.Обвести(Линия,Линия,Линия,Линия);
		КонецЦикла;
		Выборка=РезультатПакета.Выбрать();
		Строка=2;
		Пока Выборка.Следующий() Цикл
			Для Инд=1 по КолонкаИнд Цикл
				//Выборка.Получить(Инд);
				Обл=Подстрочник.Область(Строка,Инд,Строка,Инд);
				Обл.Текст=Выборка[Инд-1];
				Обл.Обвести(Линия,Линия,Линия,Линия);
			КонецЦикла;
			Строка=Строка+1;
		КонецЦикла;
		Подстрочник.Показать("Подстрочник "+НужныеПакеты.Получить(СчПакет)+" = "+МВТ.Таблицы.Получить(НужныеПакеты.Получить(СчПакет)).ПолноеИмя);
		Подстрочник=Неопределено;
		
	КонецЦикла;
Показать


Таким образом мы выводим интересующую нас временную таблицу в табличный документ. Далее табличный документ мы можем сохранить в екселевском формате и работать с интересующей нас временной таблицей в екселе. С несложной модификацией данного кода мы получим вариант вывода не временной таблицы в ексель, а скажем подзапроса. Прекрасная альтернатива использованию консоли запросов для просмотра временных таблиц и подзапросов
Прикрепленные файлы:
75. DrAku1a 1313 20.02.20 04:00 Сейчас в теме
(63) Если есть герб, то должен быть и гимн. Пожалуй, вот: Научно-технический рэп –Костыль и велосипед
12. imh9305 10 03.09.19 09:55 Сейчас в теме
вчера сделал проверку заполнения в самой форме в расширении. быстро, работает, заявитель доволен, задача сама по себе была несколько странной.
YPermitin; +1 Ответить
17. Rustig 1369 03.09.19 10:43 Сейчас в теме
(0) а что за комплексы у вас?- называете программирование "костылями", боитесь использовать ПриАктивизацииСтроки() ("о, ужас!")
Yashazz; CyberCerber; YPermitin; +3 Ответить
18. YPermitin 7831 03.09.19 10:44 Сейчас в теме
(17) о комплексах не говорят вслух! :)
20. Infector 148 03.09.19 11:54 Сейчас в теме
На мой вкус - костыли это что-то нелепое, несуразное и не вписывающееся в общую концепцию разработки. История их появления часто достойна отдельной статьи. А автор приводит вполне себе приличные приемы, разве что "итоги" у динамического списка штука очень специфическая. Насчет прочтения набора записей запросом и проверки существования свойства составного значения - вопросов по части адекватности совсем нет.
Yimaida; rintik; bulpi; CyberCerber; YPermitin; +5 Ответить
21. YPermitin 7831 03.09.19 12:06 Сейчас в теме
(20) благодарю.

Но чувство, что я накостылил в прошлом все равно со мной.
76. Yashazz 3130 24.02.20 12:04 Сейчас в теме
(21) Я вот другого не понимаю. Ну костыли, ну нафига это публиковать - вот чтоб публично опозориться?.. Или чтоб "показали-научили", аккуратно собрать более другие решения? Или просто, пардон, профессиональный эксгибиционизм?

Приём с выводом временной таблицы по-быстрому в моксель я сделал хз сколько лет назад (и кстати не областями, а через ПостроительОтчета, оно быстрее в разы), но я же этот жуткий костылище не публиковал...
77. user633166 6 25.02.20 20:14 Сейчас в теме
(76) Как мне кажется автор захотел :) автор сделал. В противовес, или в поддержку другой своей публикации. А Вы же тоже подвержены :) этой же "болезни" :) у автора "костыли", а у Вас "нюансы" "ПОДОБНО" https://infostart.ru/public/1199572/ "Таблица значений" https://infostart.ru/public/1128903/.
И Ваши публикации, и автора ИМХО "популяризируют" внимательное отношение к инструменту.
78. Yashazz 3130 25.02.20 20:40 Сейчас в теме
(77) Это да, грешен аз. Да я и свои разработки обычно "поделками" называю.
23. Maxisussr 03.09.19 12:36 Сейчас в теме
(0)
Да, согласен с тем, что код на 1С писать так уж и трудно, но более ценное качество это умение за ограниченный срок и бюджет на изначально кривом решении решить поставленную задачу, ничего сильно сразу не поломав и чтобы потом оно работало. И отлично, что у автора есть чувство "что накостылил". Это позволяет двигаться вперед! Все мы иногда "костылим", что уж там!

Но то, что многие не изучают, например, подсистемы и функции БСП, а фигачат свои сомнительные аналоги, не изучают хотя бы типовые решения с их архитектурой, чтобы оттуда что-нибудь скопировать (хотя бы проверенную идею), а также костылят без зазрения совести - это плохой знак!
CyberCerber; YPermitin; +2 Ответить
26. sergathome 03.09.19 13:41 Сейчас в теме
(23) с БСП, увы, не всё так однозначно. Культура разработки БСП далека от идеала. Часто надёжнее написать своё, чем использовать весьма сомнительное готовое - меньше гимора при поддержке ;)
Yimaida; Videon; Yashazz; bulpi; +4 Ответить
30. VmvLer 03.09.19 13:43 Сейчас в теме
(26) методы в секциях ПрограммныйИнтерфейс вроде заслуживают доверия как 2*2 = 4
методы БСП из остальных секций необходимо использовать осторожнее.
33. Maxisussr 03.09.19 14:21 Сейчас в теме
(23)
Не могу спорить на счет каких-то специфических функций, просто нужно знать, что есть готовые простые функции, которые нормально работают. А вот поиск функций в БСП - часто проблема, что-то просто запоминаешь, но если тебе нужно найти какую-то вроде простую ф-ю, порой это очень непросто сделать.

(30)
Верно, методы не из "интерфейса", строго говоря, запрещено использовать.
AllexSoft; Rustig; sergathome; +3 Ответить
34. sergathome 03.09.19 14:30 Сейчас в теме
(33)
А вот поиск функций в БСП - часто проблема

И это тоже. Ещё момент - если видишь "велосипед" у кого-то, то совсем не факт, что это он его повторно изобрёл, а не в БСП наконец включили аналог :)) как у автора, кстати
43. Aggressorak 03.09.19 17:21 Сейчас в теме
(23) БСП у 1С в состоянии вечной бэты, если не альфы. Ей пользоваться ваобще страшно. По хорошему надо в свои общие модули копипастить код из БСП чтобы случайно не удалили полностью в очередной версии или не изменили до неработоспособности.
Артано; Yashazz; sergathome; +3 Ответить
64. Rustig 1369 09.09.19 11:19 Сейчас в теме
(43) можно заглушку написать:
Если ВерсияБСП() = "...." Тогда
 //используем процедуры БСП
Иначе
//используем свой алгоритм
КонецЕсли;
65. Aggressorak 09.09.19 12:25 Сейчас в теме
(64) Да как угодно, только не отдавать все карты в руки разрабам.
24. sergathome 03.09.19 13:33 Сейчас в теме
Мой самый позорный костыль был в одном отраслевом решении. Архитектор никак не мог грамотно сформулировать, как будут работать отборы в одной ну очень сложной форме. Пришлось вместо компоновки одного общего запроса, возвращающего сразу готовый набор, организовать несколько циклических переборов... Зато в эти переборы можно было быстро вносить новые хотелки.
YPermitin; +1 Ответить
25. fixin 3958 03.09.19 13:33 Сейчас в теме
Люблю костыли.
Знаю, умею, применяю.
Гриффин; Aggressorak; YPermitin; +3 Ответить
28. YPermitin 7831 03.09.19 13:42 Сейчас в теме
57. Yashazz 3130 04.09.19 19:42 Сейчас в теме
(25) Клиент попросил распечатки яндекс-карт, успешно работавших в системе, для курьеров, с точкой на карте. И тут выяснилось, что на тот момент API 2.Х яндекса не умеет это делать, от слова ваще. А умеет только 1.1, и то кривовато, они аж конференцию на эту тему делали. Что изобрёл: карта помещалась на отдельную форму (были только обычные формы), форма раскрывалась в режиме рабочего стола на весь экран, заслоняя ваще всё, с неё делался скриншот, картинка скриншота уходила курьеру на мыло. Форма сразу закрывалась. Один из самых моих жутких костылей)

А изложенное тут - ну, кое-что платформа уже научилась делать, но так очень многое можно счесть костылями. Сколько ухищрений я делал ради оптимизации запросов динамических списков, которые не понимали составные запросы и временные таблицы - да полно. Сколько чисто архитектурных решений родилось, потому что иначе платформа не позволяла... Пока функций СКД и вызова общих модулей не было... Пока управляемые формы развивались... Да любой наверняка выкручивался как мог. Сейчас это кажется постыдными костылями, но тогда ведь помогло решить задачу, и не всегда было непроизводительным... Чего стыдиться-то? Некоторые вещи в рамках одного события УФ нельзя сделать, приходится запускать одноразовую обработку ожидания на 0.1 секунды, это, к примеру, костыль?)

Стыдиться надо криворуким кодерам, которые простейшие вещи сделать не могут нормально, и авторам типовых, которые собственные стандарты не соблюдают.
Jestery; zqzq; Артано; +3 Ответить
79. Evilgrym 173 21.03.20 01:23 Сейчас в теме
(57) На счет 0.1 секунды это у меня на 7.7 была пестня с припевом. Конфа на dllке- генераторе событий. Кассовый модуль. 3 месяца отлаживал чтоб все работало, но влетело так что хрен посадишь. Пахал модуль на 300 кассовых местах без нареканий. Это не костыль был а целый экзоскелет на паровой тяге.
27. VmvLer 03.09.19 13:42 Сейчас в теме
ретрограды!
костыли уже не модно.

я использую в коде экзоскелеты.
Terve!R; veretennikoff; the1; black_elephant; Perfolenta; Aggressorak; acanta; CyberCerber; YPermitin; +9 Ответить
29. zqzq 19 03.09.19 13:43 Сейчас в теме
Костыль "Итоги в динамическом списке" уже (большей частью) встроили в платформу: https://wonderland.v8.1c.ru/blog/poluchenie-dannykh-dinamicheskogo-spiska/?sphrase_id=108208
Terve!R; Albert_2008; the1; ogoneksergei; rusmil; Rustig; +6 Ответить
35. Rustig 1369 03.09.19 15:12 Сейчас в теме
44. ogoneksergei 3 03.09.19 17:52 Сейчас в теме
(29)Таким способом делал итоги в ДС. Очень быстро и ном отрабатывает.
31. bulpi 169 03.09.19 14:09 Сейчас в теме
Статья понравилась, плюс поставил. Но ужасно не понравилась реализация первого костыля. Автор тут же ссылается на других авторов, у которых костыль красивее, современнее и легче!
Rustig; YPermitin; +2 Ответить
32. YPermitin 7831 03.09.19 14:10 Сейчас в теме
(31) мне он и самому не нравится. Это был 2013 год, я выживал как мог :)

Сейчас бы я все сделал по другому. И другие статьи я привел как-раз для контраста.
36. Sergey.Noskov 1129 03.09.19 15:18 Сейчас в теме
Поддерживаю вброс)) Увидел пересечение с парой тем своего доклада в 2017м году.
Заказчику требуется работающее решение, а не идеальное.
YPermitin; +1 Ответить
37. YPermitin 7831 03.09.19 15:20 Сейчас в теме
(36) а можно ссылочки на доклады для прочмотра?) Воспользуюсь случаем и попрошу, чтобы посмотреть потом :)
39. Sergey.Noskov 1129 03.09.19 15:36 Сейчас в теме
41. YPermitin 7831 03.09.19 15:37 Сейчас в теме
38. ybatiaev 50 03.09.19 15:29 Сейчас в теме
Не из мира 1С. Как то бухгалтерия, в 1992 году, используя ДОСовую программу, захотела печатать сложные отчёты в MS Word. Задача решена была следующим образом:
1. ДОСовая программа собирала нужные данные и выкладывала в определённую папку с набором данных для каждого отчёта;
2. Были написаны несколько макросов(по количеству отчётов) в MS WORD;
2. На DELPHI была написана прога, висевшая в трее, которая "слушала" этот каталог, если что ))) - запускала WORD с нужным макросом;

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

Прям сейчас - задание написать простой для пользователей-администраторов баз и файлов "архиватор-администратор-обновлятор" с максимальными данными на главной форме для оперативного принятия решений с минимальным количеством кликов. Вот уж пришлось костылей нагородить от души )))) Ни одна существующая прога им не подошла. Просили попроще и чтобы всё было максимально автоматизировано(больше интеллекта). Написал КАК ХОТЕЛИ пользователи ))))
Perfolenta; YPermitin; +2 Ответить
40. YPermitin 7831 03.09.19 15:37 Сейчас в теме
46. Fox-trot 112 03.09.19 18:09 Сейчас в теме
(38) делал примерно тож самое в бородатом... не помню каком году
из доса печатали в файлы, а другая прога отправляла все на новехонький лазерный притер
а вот чем все закончилось не знаю. может до сих пор пользуют ))
такие дела
Perfolenta; YPermitin; +2 Ответить
67. Perfolenta 186 10.09.19 10:30 Сейчас в теме
(38) да, в досовские времена мне многое приходилось делать через слежение за папкой... тогда стандартных интерфейсов и технологий взаимодействия между программами почти не было...
42. alex_bitti 76 03.09.19 16:06 Сейчас в теме
качество кода напрямую зависит от качества заказчика, когда видишь лицо не отягощенное мыслями человека с кошельком, не надо перед ним метать бисер
ybatiaev; YPermitin; +2 Ответить
45. korelski 8 03.09.19 17:54 Сейчас в теме
на сайте 1С есть статья о том как костыли к динамическому списку превращаются в реанимационную каталку

"5.3.1. Временные таблицы в динамических списках рекомендуется использовать только тогда, когда они содержат заведомо небольшое количество записей. Иначе их использование неэффективно, т.к. значения временных таблиц в динамическом списке НЕ кешируются, а формируется при каждом считывании данных для заполнения списка."
YPermitin; +1 Ответить
47. YPermitin 7831 03.09.19 18:59 Сейчас в теме
(45)
на сайте 1С есть статья о том как костыли к динамическому списку превращаются в реанимационную каталку


В некоторых случаях это может быть спасением. Но не костыль ли это? :)
80. Evilgrym 173 21.03.20 01:31 Сейчас в теме
(45) ИСТИННО ТАК. Перекостыливается следующим образом - пишем динамический список со временными таблицами, ибо так удобней, а потом в финальном запросе меняем ИЗ ВременнаяТттт на (Выбрать ..... ну собственно запрос построения этой ВТ) как ВременнаяТттт т.е. один жирный запрос получается и все чудесным образом пытается как-то работать. А вообще, если уж совсем беда-беда, то я применяю регистры сведений ускорители ( постоянные кэши фактически) . В них пишу данные по ходу работы, а в динамических списках их джойню.
Пример такого безобразия - управление холдингом , журнал заявок на расход. с добавленными к нему колонками дополнительной инфы собранной по оплатам. В стандарте худо бедно еле еле работает, а как добавишь инфы -дохнет. на 20000 заявок уже прикидывается трупиком.
48. script 215 03.09.19 23:04 Сейчас в теме
Я боюсь даже представить что случится, если в 1С добавят полноценное ООП. Костыли станут многомерными - это будет круче обфускации кода.
zqzq; YPermitin; +2 Ответить
49. MikhailDr 04.09.19 07:52 Сейчас в теме
В свое время так и не смог донести до руководства, что итоги в динамическом списке это хрень и их надо смотреть в отчете.
YPermitin; +1 Ответить
50. YPermitin 7831 04.09.19 08:09 Сейчас в теме
(49) у меня это вообще ни разу не получалось, когда такой вопрос вставал.
Красноречие недостаточно прокачано :)
51. МимохожийОднако 130 04.09.19 08:47 Сейчас в теме
(50) В подобных случаях я использую фразу:"Я Вас пЕредупредил!" и клепаю, как заказали. В случае последующего запроса отвечаю:" Я Вас пЕредупреждал" и переделываю как надо за дополнительный гонорар. Доступно и всерьёз )
Jestery; pavlov_dv; script; YPermitin; +4 Ответить
52. YPermitin 7831 04.09.19 10:33 Сейчас в теме
53. MikhailDr 04.09.19 11:52 Сейчас в теме
(51) вариант для фриланса, но не для фикса
55. МимохожийОднако 130 04.09.19 14:37 Сейчас в теме
58. Артано 667 05.09.19 04:22 Сейчас в теме
(53) Для фикса тоже годится как средство экономии нервов в споре с заказчиком. Или предупреждаешь или договариваешься выделить время на преобразование костыля в нормальное решение, если доработка будет использоваться.
AllexSoft; YPermitin; +2 Ответить
54. Liogon 8 04.09.19 12:58 Сейчас в теме
Сам не делал, но поддерживал.
Компания с территориально удалёнными розничными точками. Нетиповая конфигурация на обычном приложении. При открытии очередного магазина обнаружилось, что чек на ккм Печатается неприемлемо долго. На исправление ситуации была ночь до открытия. В итоге: толстый клиент запускается в сервисе терминалов. При необходимости печати чека, нужные данные формируются в текстовый файл, который кладётся в специальную папку на клиентской машине. На клиентской машине запускается самописная конфигурация, которая умеет работать с ккм. Она периодически смотрит папку на наличие файла, и если находит, запускает процедуру печати. Данные файла сохраняет в себя, сам файл после этого удаляется.

Это уже костылил сам
Та же компания, та же конфигурация. Удалённые магазины работают через сервер терминалов. Возникла задача заполнять накладные из ТСД, через атоловский драйвер. Причём взаимодействие с ТСД должно быть по сети. В документации к драйверу жирным по белому написано, что использовать на сервере терминалов не рекомендуется. Но деваться опять было некуда. Для работы с ТСД драйвер стартует службу, которая уже общается непосредственно с аппаратом. Соответственно схема выгрузки выглядела так. Толстый клиент 1С -> Служба Драйвера -> ТСД. Причём служба драйвера стартует под каждым пользователем, начавшим сеанс в машине. На сервере терминалов привело к эффекту, что запрос на получение данных отправлял один экземпляр службы, а получить мог совсем другой. Тогда закостылил батник, который с правами администратора убивал все процессы службы драйвера, кроме того, что запустился от текущего пользователя. Выгрузка должна была пройти, пока процессы не перезапустились. Так работало пока пользователей, которые работали с выгрузкой, не отселили на персональные виртуалки.
59. lmnlmn 58 05.09.19 14:40 Сейчас в теме
Сейчас работаю с УПП доработанным под нужды предприятия. Надо сделать АРМы которые агрегируют данные чуть ли не по принципу OLAP так чтоб это было актуально, оперативно, да еще и редактировать можно с сохранением обратно в базу. Так что с ноября прошлого года я генератор костылей. Про парочку уже рассказывал. Возможно что некоторыми поделюсь позже.
Один из последних костылей это "квазиасинхронная" свертка/развертка до нужного уровня дерева значений на управляемой форме без блокирования работы пользователя и выводом индикатора прогресса))
YPermitin; +1 Ответить
60. YPermitin 7831 05.09.19 15:26 Сейчас в теме
(59) статьи интересные.

Возможно, это даже не костыли, а реальная производственная необходимость.
61. AllexSoft 05.09.19 19:15 Сейчас в теме
Итоги в динамическом списке то же делал, точно так же пользователи хотят, хоть что делай. В итоге сделал итоги которые работали только по отдельной кнопке "Показать итоги в списке", для большинства пользователей она не нужна была и те работали с привычным дин. списком, а те кто пользовал итоги нажимали кнопку, появлялся подвал с итогами (у них разумеется медленнее работало).

Костыль из необычного если так можно назвать делал такой:
Задача сделать справочник цветов (в RGB), он по большей части статический (pantone можете посмотреть что такое), но цветов там прям много, порядка 10тыс! Самое главное что в форме выбора в динамическом списке должна была показываться колонка с визуальным отображением этого цвета (реального цвета). В итоге решил через библиотеку картинок, сделал обработку которая по заполненному справочнику цветов, брала RGB каждого цвета, рисовала картинку 16х16, далее следующий элемент, опять картинку 16х16, далее склеивала эти тысячи картинок в одну огромную картинку 16хNNNNNNN, индекс картинки соответствовал коду элемента справочника цветов, далее картинка загружалась в библиотеку картинок, в форме выбора вывести картинку по индексу - штатный механизм.

Еще один костыль, то же картинки в динамическом списке, только на этот раз это прикрепленные картинки к элементам справочника. Когда пользователь открывает справочник (это справочник всякой фурнитуры для одежды), он должен увидеть название (код) фурнитуры и ее картинку в отдельной колонке, задача что бы получить сразу все картинки. Оказалось что достаточно в колонку дин списка передавать навигационную ссылку, и все выводит. В итоге написаная процедура по массовому получению навигационных ссылок картинок всего справочника, которая записывала их во временный кэш в регистре, а дин список уже просто выгребал данные из регистра кэша. На удивление работало довольно шустро )
62. tmn72.1C 108 06.09.19 07:22 Сейчас в теме
Костыли имеют место быть. но костыль должен лишь дополнять типовой механизм, а не изменять его, тогда имеет место костыль. А если уже изменить типовой механизм тогда это уже не костыль а серьезная доработка, со всеми рисками и т.п.
YPermitin; +1 Ответить
66. Indgo 09.09.19 22:09 Сейчас в теме
Я то думал "я программист" - а оказывается 15 лет костыли вытачиваю в токарном конфигураторе
68. Cyberhawk 118 13.10.19 11:07 Сейчас в теме
// Если значение для свойства структуры осталось
// NULL
Видимо, ранее в структуре-зонде использовался НУЛЛ, но затем он был заменен на УИД.
69. Glebis 11 26.11.19 11:49 Сейчас в теме
При этом никаких блокировок в транзакции платформа не установит, ведь все записи прочитаны запросом

Тогда вообще можно не вклинивать в транзакцию запрос, прочитав набор для движения в процедуре "ПередЗаписью" (проверив что РежимЗаписи = Проведение) и сохранив его в дополнительные свойства Объекта.
70. lolmatrix 23.01.20 15:11 Сейчас в теме
еще вариант итогов
СхемаКомпоновкиДанных = элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
НастройкиКомпоновкиДанных = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпановщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиКомпоновкиДанных,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

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

и выводим в реквизит формы, а реквизит в путьКПодвалу
74. VladimirElohov 98 19.02.20 22:26 Сейчас в теме
(70) Я схожий алгоритм использую для получения данных динамического списка в виде таблицы значений. Выглядит сильно компактней, а работает стабильней, чем программный обход произвольных отборов.
71. OksDallas 22 19.02.20 07:14 Сейчас в теме
Скромненький костылек, даже, наверное, тросточка.
"ИЛИ" в запросе, действительно тормозит выполнение. 1с предлагает через ОБЪЕДИНИТЬ. Хотя надо заметить в типовых сплошь и рядом используется "ИЛИ".
Выбрала другой вариант. Вместо
Условие1 или Условие2
Делаю
Выбрать
Когда Условие1 Тогда Истина
Когда Условие2 Тогда Истина
Иначе Ложь
Конец :)
73. vasilev2015 1720 19.02.20 16:47 Сейчас в теме
(71) Здравствуйте !

Оператор "ИЛИ" не всегда тормозит выполнение запроса.
Для условий одного типа данных оптимизатор понимает.

Напротив, конструкция "Выбрать" в условии соединения всегда провоцирует Nested Loops Join,
что на больших таблицах ощутимо медленнее, чем MERGE JOIN или HASH JOIN.

В условии "ГДЕ" конструкция "Выбрать" всегда провоцирует Table Scan.

Проверьте еще раз свои расчеты ?
72. shard 251 19.02.20 13:33 Сейчас в теме
буквально вчера столкнулся с костылями от 1с: в конфигурации УТ 11.4.10.62 при формировании УПД трижды читаются данные о КПП грузоотправителя (2 раза из сведений об организации, 1 раз из регистрации в налоговом органе), при этом возможный переезд организации не предусматривается.
Оставьте свое сообщение

См. также

Программная работа с настройками СКД

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    9273    ids79    26       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

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

5500 рублей

[СКД] Программное создание схемы компоновки данных

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

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

15.01.2020    10741    John_d    22       

Последовательности событий. Шпаргалка

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    6915    kuzyara    33       

DevOps для 1С. Онлайн-курс проходит с 16 апреля по 11 июня 2020 года. Промо

Данный онлайн-курс предусматривает изучение процессов DevOps, их применение при разработке на платформе 1С. В результате прохождения онлайн-курса вы сможете: настроить ПО необходимое для проведения проверок и тестирования, создавать сценарии тестирования и объединять их в комплексные процессы, создавать скрипты для автоматизации процессов DevOps.

12000 рублей

Активный 2019 год на Инфостарт

Статья no Нет файла Бесплатно (free) О сообществе О жизни

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    2932    YPermitin    24       

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    10841    YPermitin    72       

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса - повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

40000 рублей

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

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

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

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

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

05.09.2019    30841    ids79    50       

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

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

Отслеживание выполнения фонового задания

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

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

17.08.2019    21941    ids79    16       

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

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

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

08.08.2019    43027    ids79    36       

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

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

9000 рублей

Фоновое выполнение кода в 1С - это просто

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

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    21919    avalakh    21       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

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

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    33779    ids79    11       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

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

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    23471    ids79    27       

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

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

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

Регистры сведений. За кулисами

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

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

09.07.2019    17920    YPermitin    12       

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

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

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    14558    SeiOkami    49       

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

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

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

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

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

25.06.2019    36395    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Производительность и оптимизация (HighLoad)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    18992    dmurk    144       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

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

4900 рублей

Регистры накопления. Структура хранения в базе данных

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

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    31378    YPermitin    30       

Выполнение внешней обработки в фоновом задании

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    20537    Eret1k    23       

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

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

4500-9500 рублей

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

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

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

25.04.2019    11768    m-rv    2       

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

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

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

16.04.2019    15164    m-rv    16       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

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

4900 рублей

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    26072    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    20874    ellavs    83