Архив рубрики: 1C

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

1С: Генератор строки из случайных символов

Задача: с генерировать строку длинной N из случайных символов.

Решение:

Функция ГенерацияСлучайногоСимвола(длн)
    ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());    
    СлучайнаяСтрока = "";
    // генерируем случайное число из 6-ти символов, например "d0c8Yf"
    Для Сч = 1 по длн Цикл        
        Набор = ГСЧ.СлучайноеЧисло(1,3);    
        Если Набор = 1 Тогда
            // это число
            СлучайныйСимвол = ГСЧ.СлучайноеЧисло(0,9);    
        ИначеЕсли Набор = 2 Тогда
            // это Большая буква латиницы
            СлучайныйСимвол = Символ(ГСЧ.СлучайноеЧисло(65,90));
        ИначеЕсли Набор = 3 Тогда
            // это маленькая буква латиницы
            СлучайныйСимвол = Символ(ГСЧ.СлучайноеЧисло(97,122));
        КонецЕсли;
        СлучайнаяСтрока = СлучайнаяСтрока + СлучайныйСимвол;
    КонецЦикла;      
    Возврат(СлучайнаяСтрока);    
КонецФункции

Сообщить(ГенерацияСлучайногоСимвола(10));

1С: Приведение номера документа к числу

Задача: преобразовать номер документа вида ТП1-000234 в число 234. Т.е. убрать префикс и лидирующие нули.

Решение:

&НаСервере
 Функция УбратьЛидирующиеНули(НомерДокумента)    
    Попытка
        НомерДокумента = Формат(Число(НомерДокумента), "ЧГ=");
    Исключение
        НомерДокумента = СтрЗаменить(СокрЛ(СтрЗаменить(СокрП(НомерДокумента), "0", " ")), " ", "0");
        Префикс = "";
        Пока КодСимвола(НомерДокумента) < 48 Или КодСимвола(НомерДокумента) > 57 Цикл
            Префикс = Префикс + Лев(НомерДокумента, 1);
            НомерДокумента = Сред(НомерДокумента, 2);
        КонецЦикла;
        Если Не ПустаяСтрока(Префикс) Тогда
            НомерДокумента = Префикс + УбратьЛидирующиеНули(НомерДокумента);
        КонецЕсли;
    КонецПопытки;
    Возврат НомерДокумента;
    
КонецФункции   
&НаСервере
функция ИзвлечьНомерДоговора(номер)
	 мм=СтрРазделить(номер,"-");	 
	 возврат УбратьЛидирующиеНули(мм[1]); 
конецфункции

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

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

Решение:

При открытии документа его необходимо блокировать следующим образом:

&НаСервере
Процедура ПриОткрытииНаСервере()
	ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор);	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПриОткрытииНаСервере();
КонецПроцедуры

1C ошибка синхронизации между ЗУП и Бухгалтерия 3.0

Собственно сиё случилось как всегда неожиданно. После штатного (ну почти) обновления конфигурации 1С Бухгалтерия. А именно отвалилась синхронизация между оной и ЗУП. Обновление до «наипоследнейших» версий конфигурации ничего не дало. При синхронизации продолжала вываливаться ошибка:

Недопустимое значение параметра (параметр номер '1')
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(8160)}:		СсылкаНаОбъект = СтруктураСвойств.Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СвойствоУникальныйИдентификатор));
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(7381)}:			Значение = НайтиОбъектПоСсылке(Тип,
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9529)}:			Значение = ПрочитатьСвойство(ТипСвойства, ЭтоПустойНабор, СвойствоНеНайденоПоСсылке, ИмяПКО);
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(16391)}:			ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра();
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(2697)}:		ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(6700)}:		ОбработкаОбменаДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных);
{ОбщийМодуль.ОбменДаннымиСервер.Модуль(3856)}:			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ,
{Обработка.ВыполнениеОбменаДанными.МодульМенеджера(34)}:	ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(
{(1)}:Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(4879)}:	Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(969)}:		ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(959)}:		ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);

по причине:
Недопустимое значение параметра (параметр номер '1')

Расследование и гугленье дало следующее: ошибка происходит из-за нарушении в регистре сведений «СоответствияОбъектовИнформационныхБаз». А именно у части данных в этом регистре соответствие стало NULL.

Решение: просто стереть всё содержимое этого регистра (Все функции -> Регистры сведений -> СоответствияОбъектовИнформационныхБаз -> CTRL-A -> DEL)

Далее в настройках синхронизации достаточно выгрузить-загрузить «данные для сопоставления». И собственно после этого у меня всё штатно заработало.

 

1С: Ошибка при выполнении файловой операции 1cv8.cfu. Неожиданный вызов метода MemoryMappedFileObject :: write

Неожиданно при попытке обновления вылезла такая ошибка. Гугленье давало противоречивые результаты. Как лечил?

1) Достал оригинальный cf файл от релиза совпадающего с тем, который хотел обновлять (orig.cf)

2) Выгрузил в файл cf текущую конфигурацию (cur.cf)

3) Создал Новую БД, загрузил в неё orig.cf, объеденил, предварительно сняв с поддержки, с cur.cf, выгрузил файл cur_orig.cf

4) В текущую базу БД загрузил файл cur_orig.cf

5) Поставил на поддержку, изменив комментарий в любом реквизите, и обьеденив с конфигурацией orig.cf Перед началом объединения будет вопрос «поставить на поддержку?». Отвечаем Да, и выбираем галочки «Объект редактируется с сохранением поддержки»

6) Штатно обновил до следующего релиза..

Надеюсь косяков и глюков не будет.. Сильно надеюсь…