Косяк 1С.

Аватар пользователя
Администратор
Сообщений: 161
Зарегистрирован: 27 фев 2011, 17:40
Откуда: откуда и все :)
СообщениеДобавлено: 26 сен 2018, 11:49
Проблема:
При обновлении УПП 1С на релиз 1.3.112.3 с ядром 8.3.12.1412 объединение выдало ошибки дублирования функций:
Код: выделить все
{ОбщийМодуль.РегламентированнаяОтчетность.Модуль(26674,9)}: Процедура или функция с указанным именем уже определена (СтрНачинаетсяС)
Функция <<?>>СтрНачинаетсяС(Стр, Подстр) Экспорт (Проверка: Толстый клиент (обычное приложение))
{ОбщийМодуль.РегламентированнаяОтчетность.Модуль(26680,9)}: Процедура или функция с указанным именем уже определена (СтрРазделить)
Функция <<?>>СтрРазделить(ИсходнаяСтрока, Разделитель, ВключатьПустые = Истина) Экспорт (Проверка: Толстый клиент (обычное приложение))
{ОбщийМодуль.РегламентированнаяОтчетность.Модуль(26686,9)}: Процедура или функция с указанным именем уже определена (СтрСоединить)
Функция <<?>>СтрСоединить(Строки, Разделитель) Экспорт (Проверка: Толстый клиент (обычное приложение))

Модуль не обновился при накатывании обновлений, т.е. по сути вендор не удосужился поправить код модуля. :ymdevil: :ymdevil: :ymdevil:
Поиск дублей в составе модуля ни к чему не привел.
Текст модуля копировался в сторонний редактор для верности и осуществлялся поиск там - совпадений нет.

... и это еще не всё.
Начал проверять наличие подобных описаний в других модулях и ох... нул.
Еще к редактированию:
ИнтеграцияЕГАИСУТКлиентСерверГлобальный.Модуль(50, 9) : Функция СтрРазделить(Строка, Разделитель, ВключатьПустые = Ложь) Экспорт

Вот как выглядят описания функций в модулях:
Код: выделить все
Функция СтрНачинаетсяС(Стр, Подстр) Экспорт
   
   Возврат (Подстр = Лев(Стр, СтрДлина(Подстр)));
   
КонецФункции

Функция СтрРазделить(ИсходнаяСтрока, Разделитель, ВключатьПустые = Истина) Экспорт
   
   Возврат РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока, Разделитель);
   
КонецФункции

Функция СтрСоединить(Строки, Разделитель) Экспорт
   
   РезСтрока = "";
   
   Для каждого ЭлМассива Из Строки Цикл
      РезСтрока = РезСтрока + ЭлМассива + Разделитель;
   КонецЦикла;
   
   Возврат РезСтрока;
   
КонецФункции


И это еще не всё!
Перенесенные в прикладную часть функции не работают (попросту недоступны) в режиме совместимости!
Вот так, ненавязчиво, вендор как бы намекает о переходе на более новые продукты.

Пояснение причины возникновения ошибки:
Функции (СтрНачинаетсяС, СтрРазделить, СтрСоединить) реализованы в прикладном языке 1С и не требуют отдельного описания - http://v8.1c.ru/o7/201408str/index.htm
Атавизм описания следовало убрать из общего модуля.
После проверки использования данных функций в составе конфигурации закомментировал нафиг. :-bd \m/

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

Для того чтобы всё работало в режиме совместимости, сделайте следующее:
В своём общем модуле добавляем следующий код:
Код: выделить все
#ОБЛАСТЬ СохраненныеФунции
//Вынесенные функции
//Сделано после того как вендор увел одноименные (убрать справа 82) функции в прикладной язык и сделал доступными только в режиме управляемых форм
// У нас используется режим совместимости
Функция СтрНачинаетсяС82(Стр, Подстр) Экспорт
   
   Возврат (Подстр = Лев(Стр, СтрДлина(Подстр)));
   
КонецФункции

Функция СтрЗаканчиваетсяНа82(Стр, Подстр) Экспорт
   
   Возврат (Подстр = Прав(Стр, СтрДлина(Подстр)));
   
КонецФункции

Функция СтрРазделить82(ИсходнаяСтрока, Разделитель, ВключатьПустые = Истина) Экспорт
   
   Возврат РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока, Разделитель, ВключатьПустые);
   
КонецФункции

Функция СтрСоединить82(МассивСтрок, Разделитель) Экспорт
   
   ДлинаРазделителя = СтрДлина(Разделитель);
   
   СтрокаРезультат = "";
   Для каждого ЭлМассива Из МассивСтрок Цикл
      СтрокаРезультат = СтрокаРезультат + ЭлМассива + Разделитель;
   КонецЦикла;
   
   ДлинаРезультирующейСтроки = СтрДлина(СтрокаРезультат);
   ДлинаРезультирующейСтрокиБезРазделителяВКонце = ДлинаРезультирующейСтроки - ДлинаРазделителя;
   СтрокаРезультат = Лев(СтрокаРезультат, ДлинаРезультирующейСтрокиБезРазделителяВКонце);
   
   Возврат СтрокаРезультат;
   
КонецФункции

Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",", ВключатьПустые = Истина) Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
      Стр = СокрЛП(Стр);
      Пока 1=1 Цикл
         Поз = Найти(Стр,Разделитель);
         Если Поз=0 Тогда
            МассивСтрок.Добавить(Стр);
            Прервать;
         КонецЕсли;
         МассивСтрок.Добавить(Лев(Стр,Поз-1));
         Стр = СокрЛ(Сред(Стр,Поз));
      КонецЦикла;
   Иначе
      ДлинаРазделителя = СтрДлина(Разделитель);
      Пока 1=1 Цикл
         Поз = Найти(Стр,Разделитель);
         Если Поз=0 Тогда
            МассивСтрок.Добавить(Стр);
            Прервать;
         КонецЕсли;
         МассивСтрок.Добавить(Лев(Стр,Поз-1));
         Стр = Сред(Стр,Поз+ДлинаРазделителя);
      КонецЦикла;
   КонецЕсли;
   
   Если НЕ ВключатьПустые Тогда
      Пока МассивСтрок.Найти("") <> Неопределено Цикл
         МассивСтрок.Удалить(МассивСтрок.Найти(""));
      КонецЦикла;
   КонецЕсли;
   
   Возврат МассивСтрок;
   
КонецФункции
#КОНЕЦОБЛАСТИ   //СохраненныеФунции


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

Еще...
Все последующие обновления будут приходить с учетом того, что ваша конфигурация не работает в режиме совместимости.
Чувствуем куда идём?
Поэтому, у кого много времени, юзаем статью вендора - https://its.1c.ru/db/metod8dev#content:5293:hdoc и отключаем режим совместимости.
Проблема, это задача в решении которой никто не заинтересован.
СВС
Цитата

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

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Яндекс.Метрика
cron