Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Наболело...или "товарищи, не злоупотребляйте комментариями!"

    • #1
    • 22.01.2013 01:17
    0
    Уже третий раз за всю практику попадается мне конфигурация, доработанная "неизвестным коллегой". Все бы ничего, да только комментариев в конфигурации НЕМЕРЯНО и выглядят они как "операторные скобки" в коде.
    Комментарии скорее всего автогенерятся с подачи какого-нить ОпенКонфа.
    Читать такой код просто невозможно.

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

    Бытует такое выражение не "ср*ть в комментах", я хотел бы его перефразировать - "не ср*те комментами!", помните о том, что возможно кому-то придется работать с этим после Вас.

    Может у кого-то были подобные случаи доработок "нечитаемого" или "иррационального" кода? Было бы интересно послушать...

    Ниже пример одной из процедур в "злополучной" конфигурации, чтобы можно было оценить масштаб трагедии (в подобном виде находится весь код 1С). Всего в конфигурации более 16000(!) подобных строк.
    • #2
    • 22.01.2013 01:17
    0
    //******************************************************************************
    // ЗаписатьЕдиницу(ВидЕдиницы)
    //
    // Параметры:
    //  ВидЕдиницы - определяет вид записываемой единицы - основная или базовая.
    //
    // Возвращаемое значение:
    //}}MRG[ <-- ]
    //  0 - произошла ошибка
    //  1 - единица успешно записана
    //
    // Описание:
    //
    //{{MRG[ <-> ]
    //Функция ЗаписатьБазовуюЕдиницу()
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    Функция ЗаписатьЕдиницу(ВидЕдиницы = "Базовая")
    //}}MRG[ <-> ]
    	
        ЗаписатьЕдиницу = 1;
    	СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
    	
    //{{MRG[ <-> ]
    // 	Если ПустоеЗначение(БазоваяЕдиница) = 0 Тогда
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    	Если ВидЕдиницы = "Базовая" Тогда
    		Единица = 	   БазоваяЕдиница;
    		РеквЕдиница =  РеквБазоваяЕдиница;
    		РеквШтрихкод = РеквШтрихкодБазовой;
    		РеквВес =	   РеквВесБазовой;
    		РеквКоэффициент = 1;
    		Описатель =    "базовой";
    	Иначе
    		Если (ОсновнаяЕдиница = БазоваяЕдиница)
    		   и (ФлагОсновнойЕдиницы = 0) Тогда
    			// очищаем основную единицу		
    			ОсновнаяЕдиница = "";
    		
    		КонецЕсли;
    			
    		Единица = 	   ОсновнаяЕдиница;
    		Если Единица.Выбран() = 0 Тогда
    			// Пытаемся найти единицу измерения с такими же параметрами
    			СпрЕдиницы.ИспользоватьВладельца(ТекущийЭлемент());
    			СпрЕдиницы.ВыбратьЭлементы();
    			Пока (СпрЕдиницы.ПолучитьЭлемент() = 1)
    			   и (Единица.Выбран() = 0) Цикл
    				Если (СпрЕдиницы.ТекущийЭлемент() <> БазоваяЕдиница) Тогда
    					Если (СпрЕдиницы.ОКЕИ = РеквОсновнаяЕдиница)
    					   и (СпрЕдиницы.Вес =  РеквВесОсновной)
    					   и (СпрЕдиницы.Коэффициент = РеквКоэффициентОсновной)
    					   и (СпрЕдиницы.ШтрихКод    = РеквШтрихкодОсновной) Тогда
    							// Если в справочнике нашли единицу с идентичными параметрами
    							// то создавать новую единицу измерения не будем а используем 
    							// существующую в качестве основной
    							ОсновнаяЕдиница = СпрЕдиницы.ТекущийЭлемент();
    							Единица = 		  ОсновнаяЕдиница;
    						
    					КонецЕсли;
    				КонецЕсли;
    			КонецЦикла;
    			
    		КонецЕсли;
    		РеквЕдиница =  РеквОсновнаяЕдиница;
    		РеквШтрихкод = РеквШтрихкодОсновной;
    		РеквВес =	   РеквВесОсновной;
    		РеквКоэффициент = РеквКоэффициентОсновной;
    		Описатель =    "основной";
    	КонецЕсли;
    //}}MRG[ <-> ]
    		
    //{{MRG[ <-- ]
    	Если ПустоеЗначение(Единица) = 0 Тогда
    //}}MRG[ <-- ]
    		// проверить, изменил ли пользователь реквизиты единицы
    //{{MRG[ <-> ]
    //		Если (БазоваяЕдиница.ОКЕИ = РеквБазоваяЕдиница) И
    //		     (БазоваяЕдиница.Вес = РеквВесБазовой) И
    //			 (БазоваяЕдиница.ШтрихКод = РеквШтрихкодБазовой) Тогда
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    		Если (Единица.ОКЕИ = РеквЕдиница) И
    		     (Единица.Вес =  РеквВес) И
    		     (Единица.Коэффициент = РеквКоэффициент) И
    			 (Единица.ШтрихКод = РеквШтрихкод) Тогда
    //}}MRG[ <-> ]
    			ЗаписатьЕдиницу	= 0; // ничего не изменилось
    		Иначе
    			// проверим, а не изменили ли единицу из вне.
    //{{MRG[ <-> ]
    //			СпрЕдиницы.НайтиЭлемент(БазоваяЕдиница);
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    			СпрЕдиницы.НайтиЭлемент(Единица);
    //}}MRG[ <-> ]
    			
    //{{MRG[ <-> ]
    //			Если глСравнитьЭлементыСправочника(СпрЕдиницы.ТекущийЭлемент(), БазоваяЕдиница) = 1 Тогда
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    			Если глСравнитьЭлементыСправочника(СпрЕдиницы.ТекущийЭлемент(), Единица) = 1 Тогда
    //}}MRG[ <-> ]
    				
    				// единица измерения изменена извне. Спросим, нужно ли накатить изменения
    //{{MRG[ <-> ]
    //				Ответ = Вопрос("Реквизиты базовой единицы измерения """ +
    //				               СокрЛП(БазоваяЕдиница.Наименование) + """" +
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    				Ответ = Вопрос("Реквизиты " + Описатель + " единицы измерения """ +
    				               СокрЛП(Единица.Наименование) + """" +
    //}}MRG[ <-> ]
    				               " изменились за время редактирования позиции номенклатуры """ +
    				               СокрЛП(Наименование) +
    //{{MRG[ <-> ]
    //				               """. Сохранить изменения реквизитов базовой единицы измерения """ +
    //				               СокрЛП(БазоваяЕдиница.Наименование)+"""?","Да+Нет", 60);
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    				               """. Сохранить изменения реквизитов для " + Описатель + " единицы:""" +
    				               СокрЛП(Единица.Наименование)+"""?","Да+Нет", 60);
    //}}MRG[ <-> ]
    							   
    				Если Ответ = "Нет" Тогда
    					ЗаписатьЕдиницу = 0;
    				ИначеЕсли Ответ = "Таймаут" Тогда
    					// вышел таймаут. ничего не записываем
    					Возврат 0;
    				КонецЕсли;
    				
    			КонецЕсли;
    //{{MRG[ --> ]
    //			
    //}}MRG[ --> ]
    		КонецЕсли;
    //{{MRG[ <-- ]
    //}}MRG[ <-- ]
    	КонецЕсли;
    	
    	Если ЗаписатьЕдиницу = 1 Тогда
    		// проверить заполнение обязательных полей
    //{{MRG[ <-> ]
    //		
    //		Если (ПустоеЗначение(РеквШтрихкодБазовой) = 0) И (Весовой = 0) Тогда
    //			
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    		Если ПустоеЗначение(РеквШтрихкод) = 0 Тогда
    //}}MRG[ <-> ]
    			// проверяем уникальность только для невесового товара
    //{{MRG[ <-- ]
    			ШКУникален = 1;
    //}}MRG[ <-- ]
    			
    			СпрПоискЕдиницы = СоздатьОбъект("Справочник.Единицы");
    			
    //{{MRG[ <-> ]
    //			ШКУникален = 1;
    //			Если СпрПоискЕдиницы.НайтиПоРеквизиту("Штрихкод", РеквШтрихкодБазовой, 1) <> 0 Тогда
    //				Если ПустоеЗначение(БазоваяЕдиница) = 1 Тогда
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    			Если СпрПоискЕдиницы.НайтиПоРеквизиту("Штрихкод", РеквШтрихкод, 1) <> 0 Тогда
    				Если ПустоеЗначение(Единица) = 1 Тогда
    //}}MRG[ <-> ]
    					ШКУникален = 0;
    				Иначе
    //{{MRG[ <-> ]
    //					Если БазоваяЕдиница <> СпрПоискЕдиницы.ТекущийЭлемент() Тогда
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    					Если Единица <> СпрПоискЕдиницы.ТекущийЭлемент() Тогда
    //}}MRG[ <-> ]
    						ШКУникален = 0;
    					КонецЕсли;
    				КонецЕсли;
    				
    			КонецЕсли;
    			
    			Если ШКУникален = 0 Тогда
    //{{MRG[ <-> ]
    //				Предупреждение("Штрихкод базовой единицы не уникален!", 60);
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    				Предупреждение("Штрихкод " + Описатель + " единицы не уникален!", 60);
    //}}MRG[ <-> ]
    				Возврат 0;
    			КонецЕсли;
    //{{MRG[ <-- ]
    //}}MRG[ <-- ]
    		КонецЕсли;
    		
    //{{MRG[ <-> ]
    //		// Если новый элемент номенклатуры, то его необходимо записать перед записью базовой единицы
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    		// Если новый элемент номенклатуры, то его необходимо записать перед записью единицы
    //}}MRG[ <-> ]
    		Если Выбран() = 0 Тогда
    			Записать();
    		КонецЕсли;
    		
    //{{MRG[ <-> ]
    //		Если ПустоеЗначение(БазоваяЕдиница) = 1 Тогда
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    		Если ПустоеЗначение(Единица) = 1 Тогда
    //}}MRG[ <-> ]
       			СпрЕдиницы.ИспользоватьВладельца(ТекущийЭлемент());
    			СпрЕдиницы.Новый();
    		Иначе 
    //{{MRG[ <-> ]
    //			СпрЕдиницы.НайтиЭлемент(БазоваяЕдиница);
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    			СпрЕдиницы.НайтиЭлемент(Единица);
    //}}MRG[ <-> ]
    		КонецЕсли;
    			
    //{{MRG[ <-> ]
    //		
    //		СпрЕдиницы.Наименование = РеквБазоваяЕдиница.Наименование;
    //		СпрЕдиницы.Вес			= РеквВесБазовой;
    //		СпрЕдиницы.Коэффициент	= 1;
    //		СпрЕдиницы.ОКЕИ			= РеквБазоваяЕдиница;
    //		СпрЕдиницы.ШтрихКод		= РеквШтрихкодБазовой;
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    		СпрЕдиницы.Наименование = РеквЕдиница.Наименование;
    		СпрЕдиницы.Вес			= РеквВес;
    		СпрЕдиницы.Коэффициент	= РеквКоэффициент;
    		СпрЕдиницы.ОКЕИ			= РеквЕдиница;
    		СпрЕдиницы.ШтрихКод		= РеквШтрихкод;
    //}}MRG[ <-> ]
    
    		Попытка
    			СпрЕдиницы.Записать();
    		Исключение
    //{{MRG[ <-> ]
    //		    Предупреждение( "Не удалось сохранить ""базовую единицу"": " + ОписаниеОшибки() +
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    		    Предупреждение( "Не выполнено сохранение " + Описатель + " единицы: " + ОписаниеОшибки() +
    //}}MRG[ <-> ]
    			                 РазделительСтрок + "Элемент не сохранен!", 60);
    			Возврат 0;
    		КонецПопытки;
    	
    //{{MRG[ <-- ]
    		Если  ВидЕдиницы = "Базовая"  Тогда
    //}}MRG[ <-- ]
    		УстановитьАтрибут("БазоваяЕдиница", "");
    		ПолучитьАтрибут("БазоваяЕдиница");
    		УстановитьАтрибут("БазоваяЕдиница", СпрЕдиницы.ТекущийЭлемент());
    //{{MRG[ <-- ]
    		Иначе
    			УстановитьАтрибут("ОсновнаяЕдиница", "");
    			ПолучитьАтрибут("ОсновнаяЕдиница");
    			УстановитьАтрибут("ОсновнаяЕдиница", СпрЕдиницы.ТекущийЭлемент());
    		КонецЕсли;
    //}}MRG[ <-- ]
    	КонецЕсли;
    		
    //{{MRG[ <-> ]
    //	Если (ПустоеЗначение(ОсновнаяЕдиница) = 1) ИЛИ (ОсновнаяЕдиница = БазоваяЕдиница) Тогда
    //		// обновим основную единицу
    //}}MRG[ <-> ]
    //{{MRG[ <-> ]
    	Возврат 1;
    	
    КонецФункции // ЗаписатьЕдиницу()
    
    • #3
    • 22.01.2013 01:53
    0
    это при объединении конфигураций, в режиме когда не совпадающий код комментируется, не очень качественно обновленная нетиповая конфа
    • #4
    • 22.01.2013 02:03
    0
    Забавно... Работаю с 1С уже более 8 лет, но у самого никогда не было подобных косяков при объединении. Правду говорят "век живи-век учись".
    Спасибо за справку.
    В таком случае, другое пожелание коллегам-программистам - друзья, обновляйте конфигурации КАЧЕСТВЕННО (как заметил Руслан)!
    • #5
    • 22.01.2013 06:12
    0
    Ну, Николай, ну, насмешили..
    • #6
    • 22.01.2013 11:20
    • Отредактировано: 22.01.2013 11:34:30
    0
    Николай,
    в нашем деле важно НЕ "ср*ть в комментах", как Вы выразились, а совсем другое...

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

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

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

    ЗЫ.
    Если НайденнаяСтрока.Количество > Разница и Разница <> 0 И Разница > 0 Тогда 
    // Какой-то код ...
    ИначеЕсли Разница <> 0 И Разница > 0 И НайденнаяСтрока.Количество <> 0 Тогда 
    // Какой-то код ...
    КонецЕсли
    ;)
    • #7
    • 22.01.2013 13:58
    • Отредактировано: 22.01.2013 13:59:16
    0
    mamanelli

    Если НайденнаяСтрока.Количество > Разница и Разница <> 0 И Разница > 0 Тогда
    // Какой-то код ...
    ИначеЕсли Разница <> 0 И Разница > 0 И НайденнаяСтрока.Количество <> 0 Тогда
    // Какой-то код ...
    КонецЕсли

    Улыбнуло)))


    TMV
    Ну, Николай, ну, насмешили..

    А чего смешного-то? Плакать надо, что некоторые горе-кодеры после себя оставляют такое... ;)
Яндекс-директ
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться