1С: Поиск элемента справочника с одинаковыми кодами.

1С позволяет создавать элементы справочника (да и документа) с одинаковыми кодами (номерами), в этом случае поиск элемента по типичному:

 справочники.ГруппыПользователей.НайтиПоКоду("123");

Становится невозможным. Есть несколько вариантов решения данной проблемы:

1) Можно поискать по заведомо уникальному реквизиту (если есть):

 справочники.ГруппыПользователей.НайтиПоРеквизиту("Артикул","123");

2) Можно поискать по уникальному идентификатору (если известен):

доко.ТекущийЭтап=Справочники.itilprofЭтапыМаршрутов.ПолучитьСсылку(Новый УникальныйИдентификатор("149e1ab6-325f-11ec-9560-005056be733d"));

3) Можно поискать по сочетанию факторов, которые сделают элемент уникальным (в данном случае по владельцу):

ТекДок.ТекущийЭтап			= справочники.itilprofЭтапыМаршрутов.НайтиПоКоду("Регистрация",,,Справочники.itilprofМаршруты.НайтиПоНаименованию("Инцидент"));

1С: Явное указание даты в запросе

Очень бы хотелось в запросе указывать явную дату как во многих SQL, что-то типа:

И ДатаЗапуска='2025.07.16 12:13:14'

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

справа="ДатаВремя("+Формат(Год(справа),"ЧГ=0")+","+Месяц(справа)+","+День(справа)+")";	
....
sql=sql+"и ДатаЗапуска>"+справа

1С: Тип не определен (Addln.КартинкаШтрихкода.BarCode)

Такая ошибка возникает в 1С на Linux если не установлена библиотека libpng.so Чтоб не гадать что именно нужно доустановить, можно сделать так:

apt install libpng*

UPDATE: Иногда это не помогает, или ошибка возвращается на некоторых ПК спустя несколько дней. Почему, вопрос открытый. Грешу на несколько кривые корпоративные обновления ОС. Второй способ решить проблему: найти в конфигураторе макет «КомпонентаПечатиШтрихкодов» и загрузить в него последнюю версию компонента скачанного с сайта 1С (на 10.06.2025 это BarcodeLibNative_10_0_10_5.zip). Да, прямо бинарник, прямо архив.

1С: Длина имени файла превысила 8 символов

При работе с файлами dbf, может возникать такая ошибка, если для генерации временного файла используется стандартная конструкция вида:

ПолучитьИмяВременногоФайла(".dbf")

И по слухам это не ошибка 1С, а особенность работы с файлами DBF — в самом формате файла не предусмотрен размер файла более 8 символов. Поэтому функцию «ПолучитьИмяВременногоФайла», можно заменить следующей конструкцией:

ИмяВременногоФайлаХар = КаталогВременныхФайлов()+Лев(Новый УникальныйИдентификатор(),8)+".dbf";

Ну и далее работать как-то так:

		Таблица = Новый XBase;     		
     	        Таблица.ОткрытьФайл(ИмяВременногоФайлаХар);
		Таблица.Первая();    
		Пока Не Таблица.ВКонце() Цикл
                  Если Не Таблица.ЗаписьУдалена() Тогда
		    Сообщить(Таблица.ACCOUNT);
                  конецесли;
                  Таблица.Следующая();
                конеццикла;	
	       Таблица.ЗакрытьФайл();

1с: Открытие формы для выбора дополнительных параметров из обработки

Задача: открыть дополнительную форму и обработать выбор параметра.

Решение: сделаем эту задачу, используя «оповещения». А именно откроем форму, а при завершении выбора параметров, создадим оповещение для основной формы в котором обработаем что собственно было выбрано на дополнительной форме.

Основная форма:

&НаКлиенте
Процедура ПоменятьИсполнителя(Команда)
	П = Новый Структура("НовыйИсполнительОграничения",объект.НовыйИсполнительОграничения);	
	ОткрытьФорму("ВнешняяОбработка.МастерРаспределенияЗаявкоНаОтключение.Форма.ФормаВыбораИсполнителя",П,ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры   


&НаКлиенте
 Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ВыбранНовыйИсполнитель" Тогда
        объект.НовыйИсполнительОграничения=Параметр;
    КонецЕсли;
 КонецПроцедуры

Дополнительная форма:


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	объект.НовыйИсполнительОграничения=Параметры["НовыйИсполнительОграничения"];
КонецПроцедуры
Дополнительная форма в обработке
1 2 3 4 5 6 52