Индивидуальные ограничения (RLS) на план счетов
Регистр сведений «ДоступКБухгалтерскимСчетам» Измерения Пользователь Счет Ресурсы Чтение #ЧтениеСчет(«Ссылка») ЧтениеСчет
Читать далееАвтоматизация бизнес-процессов
Регистр сведений «ДоступКБухгалтерскимСчетам» Измерения Пользователь Счет Ресурсы Чтение #ЧтениеСчет(«Ссылка») ЧтениеСчет
Читать далееДобавляем реквизит объекта “ДанныеКартинки” тип ХранилищеЗначения Добавляем в реквизит формы реквизи “СсылкаНаКартинку”, типа неограниченная строка Переносим его на форму и меняем вид на “Поле картинки”, свойство “РазмерКартинки”=АвтоРазмер Добавляем команду “ВыбратьИзображение”, переносим на форму и прописываем код обработки команды. пример:
Читать далееУ измерений регистра в свойствах проставить галку “Заполнять из данных заполнения” Примерный программный код:
Читать далее
1 |
ТекущаяСтрока.ТехническоеСостояние = ПредопределенноеЗначение("Перечисление.ЛТПС_ТехническиеСостояния.Исправен"); |
Описание: Возвращает ссылку на предопределенный элемент из предопределенных данных, прикладных перечислений и точек маршрута бизнес-процессов, а также значения системных перечислений. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Примечание: Результат выполнения кэшируется при первом обращении до изменения конфигурации или версии платформы.
Читать далееОбычно, в большинстве случаев когда объект вводится на основании, нужно открыть пользователю форму нового объекта, который введен на основании какого-то объекта. В этом случае достаточно просто передать параметр Основание в процедуру открытия формы:
1 2 |
ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка); ОткрытьФорму("Документ.ПриходТовара.ФормаОбъекта", ПараметрыФормы); |
При этом отработает процедура ОбработкаЗаполнения в модуле объекта и, соответственно, те алгоритмы заполнения, которые в ней описаны.
Читать далееСКД не позволяет выводить картинки штатными средствами. Картинку можно добавить после того как отработал СКД.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); НовыйРисунок=ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); НовыйРисунок.Картинка=БиблиотекаКартинок.Логотип; НовыйРисунок.РазмерКартинки=РазмерКартинки.АвтоРазмер; НовыйРисунок.ГраницаСверху=Ложь; НовыйРисунок.ГраницаСлева=Ложь; НовыйРисунок.ГраницаСправа=Ложь; НовыйРисунок.ГраницаСнизу=Ложь; НовыйРисунок.Расположить(ТабличныйДокумент.Область("R1C2:R9C8")); |
Проверка принадлежности классу метаданных
1 2 3 4 5 6 7 8 |
Функция ПринадлежностьКлассуМетаданных(Класс, Объект) Экспорт Для Каждого МДОбъект Из Метаданные[Класс] Цикл Если МДОбъект = Объект Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции // ПринадлежностьКлассуМетаданных() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
Запрос.Текст = "ВЫБРАТЬ | усЕдиницыХранения.Ссылка |ИЗ | Справочник.усЕдиницыХранения КАК усЕдиницыХранения // Пример 1. сравнение с не заполненным булевым значением: |ГДЕ | усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь // Пример 2. но если это булево определено, то лучше так: // условие на отрицательное булево: |ГДЕ | НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны // Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа" |ГДЕ | усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка) // Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа" |ГДЕ | НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка) // Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле) |ГДЕ | (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка) | ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка) | ИЛИ ...(и т.д. - последовательно перечисляем условия для всех возможных типов этого составного поля)) // Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие: |ГДЕ | усЕдиницыХранения.Наименование > """" // Пример 5. если нужно выбрать документы конкретного типа, при составном типе данных, например в регистре "ВыполняемыеЗадания" ресурс "Задание" имеет составной тип, среди значений которого возможен документ "Отбор" |ГДЕ | ВЫРАЗИТЬ(РегистрСведенийВыполняемыеЗадания.Задание КАК Документ.Отбор) ССЫЛКА Документ.Отбор // Пример 5а. Еще аналогичный пример, когда нужно выбрать документы конкретного типа | ВЫБОР | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг | ТОГДА ""ПоступлениеТоваровУслуг"" | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг | ТОГДА ""РеализацияТоваровУслуг"" | ИНАЧЕ """" | КОНЕЦ КАК ВидДокумента // Пример 6. выбор по условию не определенного значения: |ГДЕ | СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО // Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" - аналогично): |ГДЕ | РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) // Пример 8. Как в запросе указать, что выполнять запрос не нужно (например, нужно программно в зависимости от какого-то условия вернуть пустой результат запроса - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");). Для этого достаточно добавить условие "Где Ложь". Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно. |ГДЕ ЛОЖЬ // Пример 9. Проверка на то, что результат выполнения запроса содержит данные: Если НЕ Запрос.Выполнить().Пустой() Тогда // Пример 10. выбор по условию не заполненной даты: |ГДЕ | тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1) |
Разместить в общем модуле сервера (ОбщийМодульСервер) функцию, пример:
1 2 3 4 5 6 |
Функция ПолучитьОсновнойДоговор(Знач Контрагент) Экспорт СтруктураДанных=ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контрагент, "ОсновнойДоговор");//для нескольких: "Наименование, ИНН, КПП, ОсновнойДоговор" Возврат СтруктураДанных.ОсновнойДоговор; КонецФункции |
Через объект XDTO достаточно просто со схемой работать. По крайней мере, достаточно наглядно код выглядит. При этом главное добавить точки, их расположение и координаты линий, а всякие цвета/шрифты можно и непосредственно в графической схеме задавать. Зато можно шестиугольные точки действия делать, например, если линий более 4 в point добавить 🙂
Читать далееСсылка и UUID — это разные вещи. Но при этом существует однозначное преобразование UUID в ссылку и наоборот. Ссылка представляет собой массив из 16 байт. Если рассматривать UUID как последовательность байт, то получается что в ссылке те же самые байты переставлены в другом порядке. Определение структуры GUID можно найти в файле Guiddef.h Windows SDK. Выглядит она следующим образом:
Читать далееclearcache.bat If Exist %USERPROFILE%\AppData\Roaming\1C\1Cv82 ( rem Удаляем все файлы в 7 Del /F /Q %USERPROFILE%\AppData\Roaming\1C\1Cv82\*.* Del /F /Q %USERPROFILE%\AppData\Local\1C\1Cv82\*.*
Читать далее
1 2 3 4 5 |
ОбъектXDTO=СериализаторXDTO.ЗаписатьXDTO(ТаблицаЗначений); ЗаписьХМЛ= Новый ЗаписьXML; ЗаписьХМЛ.УстановитьСтроку(); ФабрикаXDTO.ЗаписатьXML(ЗаписьХМЛ, ОбъектXDTO); ТекстXML=ЗаписьХМЛ.Закрыть(); |
Следует загасить сервер приложений 1С. Зайти на сервер под администратором Открываем реестр regedit и идем по пути HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/WINDOWS NT/CURENT VERSION/PROFILELIST Ищем папку с настройками данного пользователя, и находим параметр ProfileImagePath который содержит текущий полный путь к профилю пользователя Изменяем этот стандарный путь на нужный (куда перенесли учетную запись) Из папки C:/USERS можно удалить папку пользователя (если она была скопирована) Выставляем необходимые права на папку на Ramdrive Сервер 1С можно запустить.
Читать далее
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
&НаСервереБезКонтекста Процедура УстановитьНаСервере() ОписанияОтказВДоступе=Новый Массив; ОтказВДоступе = Новый ОписаниеИспользованияСобытияОтказВДоступеЖурналаРегистрации; ОписанияОтказВДоступе.Добавить(ОтказВДоступе); ИспользованиеСобытия = Новый ИспользованиеСобытияЖурналаРегистрации; ИспользованиеСобытия.Использование = Истина; ИспользованиеСобытия.ОписаниеИспользования = ОписанияОтказВДоступе; УстановитьИспользованиеСобытияЖурналаРегистрации( "_$Access$_.AccessDenied", ИспользованиеСобытия); КонецПроцедуры |