В постах автор приводит вырезки из кода, поэтому Copy-Paste в 1С:Конфигуратор не всегда работает. Предварительно надо определить необходимые переменные и т.д.
Данные посты сделаны в виде заметок, они охватывают моменты, которые, по моему мнению, слабо описаны в документации и вызвали некоторую потерю времени на поиски.
Управляемые Формы:
на клиенте доступны только данные форм в универсальных структурах;
на сервере доступны данные БД и есть возможность преобразования этих данных в универсальные структуры форм;
управлять элементами форм можно и на клиенте и на сервере.
Дополнительные преобразования:
Форма -> Объект прикладного типа - ДанныеФормыВЗначение / РеквизитФормыВЗначение("ИмяРеквизита");
Объект прикладного типа -> Форма - ЗначениеВДанныеФормы(Знач, "Объект") / ЗначениеВРеквизитФормы(Знач, "ИмяРеквизита");
Типы данных Управляемой формы:
ДанныеФормыСтруктура;
ДанныеФормыКоллекция;
ДанныеФормыДерево;
ДанныеФормыСтруктураСКоллекцией.
Сохранение/восстановление переменной в форме документа пользователя
&НаСервере
Процедура СохрНастр(имя,зн)
УстановитьПривилегированныйРежим(Истина);
ХранилищеОбщихНастроек.Сохранить("РасходнаяНакладная",
имя,
зн,
,
Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор) );
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Функция ВостНаст(имя)
УстановитьПривилегированныйРежим(Истина);
зн = ХранилищеОбщихНастроек.Загрузить("РасходнаяНакладная",
Имя,
,
Строка(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор) );
УстановитьПривилегированныйРежим(Ложь);
Возврат зн;
КонецФункции
&НаКлиенте
Процедура сохр(Команда)
СохрНастр("Имя1",123);
Сообщить(ВостНаст("Имя1"));
КонецПроцедуры
Документ Сторнирование (идея взята из УПП 1.3)
Создать документ Сторнирование по записям в любом регистре и любого документа. Данный пример сторнирует регистры Накопления.
1.Создать Документы.Сторнирование:
Движения -> Проведение = Запрещено;
Добавить сторнируемые регистры; Данные -> Сторнируемый Документ.
2.Код в МодулеОбъекта:
Функция ПринКлассуМД(Класс,Объект)
Для каждого мдОб Из Метаданные[Класс] Цикл
Если мдОб = Объект Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Процедура ЗаполнитьЗаписьСторно(дв, сДВ, рег)
Для каждого мдОб Из рег.Измерения Цикл
дв[мдОб.Имя] = сДВ[мдОб.Имя];
КонецЦикла;
Для каждого мдОб Из рег.Ресурсы Цикл
дв[мдОб.Имя] = -сДВ[мдОб.Имя];
КонецЦикла;
Для каждого мдОб Из рег.Реквизиты Цикл
дв[мдОб.Имя] = сДВ[мдОб.Имя];
КонецЦикла;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СторнируемыйДокумент.Ссылка
|ИЗ
| Документ."+СторнируемыйДокумент.Метаданные().Имя+" КАК СторнируемыйДокумент
|ГДЕ
| СторнируемыйДокумент.Ссылка = &Ссылка
| И СторнируемыйДокумент.МоментВремени < &МоментВремени";
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", СторнируемыйДокумент);
Если Запрос.Выполнить().Пустой() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Несторнируемый документ!";
Сообщение.Сообщить();
отказ = Истина;
Возврат;
КонецЕсли;
Для каждого сРег Из СторнируемыйДокумент.Метаданные().Движения Цикл
Если Не Метаданные().Движения.Содержит(сРег) Тогда
Продолжить;
КонецЕсли;
этоРР = Ложь; этоРН = Ложь; этоРБ = Ложь;
Если ПринКлассуМД("РегистрыРасчета",сРег) Тогда
этоРР = Истина;
нз = РегистрыРасчета[сРег.Имя].СоздатьНаборЗаписей();
ИначеЕсли ПринКлассуМД("РегистрыНакопления",сРег) Тогда
этоРН = Истина;
нз = РегистрыНакопления[сРег.Имя].СоздатьНаборЗаписей();
ИначеЕсли ПринКлассуМД("РегистрыБухгалтерии",сРег) Тогда
этоРБ = Истина;
нз = РегистрыБухгалтерии[сРег.Имя].СоздатьНаборЗаписей();
КонецЕсли;
нз.Отбор.Регистратор.Значение = СторнируемыйДокумент;
нз.Прочитать();
Для каждого сДВ Из нз Цикл
дв = Движения[сРег.Имя].Добавить();
ЗаполнитьЗаписьСторно(дв,сДВ,сРег);
Если этоРН Тогда
дв.Период = Дата;
Если сРег.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
дв.ВидДвижения = сДВ.ВидДвижения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Запись в РегистрСведений
Записать одну запись в РегистрСведений.Штрихкоды Конфигурация УТ 10.3
1-й Способ
зап = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
2-й Способ
нб = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
нб.Отбор.Штрихкод.Установить(шк);
нб.Отбор.Владелец.Установить(нмСсылка);
нб.Отбор.ЕдиницаИзмерения.Установить(еиСсылка);
нб.Отбор.ТипШтрихкода.Установить(вшкСсылка);
нб.Отбор.Качество.Установить(качествоТовара);
зап = нб.Добавить();
Далее общий код:
зап.Штрихкод = шк;
зап.Владелец = нмСсылка;
зап.ЕдиницаИзмерения = еиСсылка;
зап.ТипШтрихкода = вшкСсылка;
зап.Качество = качествоТовара;
зап.ПредставлениеШтрихкода = шк;
Попытка
зап.Записать();
Исключение
КонецПопытки;
Easy OS Tricks & Programs
How to automatically logon to Windows 7 - run netplwiz or control userpasswords2 (Advanced User Accounts)
slmgr /rearm - restart Widows 7 test period
msconfig- Microsoft configuration utility
winrs /? - remote windows administration in cmd
mmc devmgmt.msc - to start Device Manager
Monitor your bandwidth from the Linux shell (bmon nload speedometer)
.dmrc - initialization file. (cat >> ./.dmrc <EOT export LANG=en_US.UTF-8 EOT)
HTML Editors
HTML Debugging https://getfirebug.com/
«Горячие» клавиши в «1С:Предприятии 8» или Конфигуратор: Содержание справки (Shift-F1) - Сочетания клавиш (Конфигуратор)
Встроенная система печати в Управлении Торговлей 11
Задача:
Создать и зарегистрировать внешний отчет
Решение:
Создать epf + Макеты (названия в дереве метаданных типа ПФ_MXL_ИмяОбработки).
Описать функции и процедуры: СведенияОВнешнейОбработке(), Печать(), СформироватьПечатнуюФормуИмяОбработки()
Программный код поместить в менеджер обработки.
Зарегистрировать обработку в Администрирование -> Дополнительные отчеты и обработки
Функция СведенияОВнешнейОбработке() Экспорт - передает описание, привязки к дереву метаданных, создает комманду для вызова
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - точка входа
Функция СформироватьПечатнуюФормуИмяОбработки(МассивОбъектов, ОбъектыПечати) - заполнение ТабличныйДокумент
// Интерфейс для регистрации обработки.
// Вызывается при добавлении обработки в справочник "ВнешниеОбработки"
//
// Возвращаемое значение:
// Структура:
// Вид - строка - возможные значения: "ДополнительнаяОбработка"
// "ДополнительныйОтчет"
// "ЗаполнениеОбъекта"
// "Отчет"
// "ПечатнаяФорма"
// "СозданиеСвязанныхОбъектов"
//
// Назначение - массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]
// Например, "Документ.СчетЗаказ" или "Справочник.*"
// Прим. параметр имеет смысл только для назначаемых обработок
//
// Наименование - строка - наименование обработки, которым будет заполнено
// наименование справочника по умолчанию - краткая строка для
// идентификации обработки администратором
//
// Версия - строка - версия обработки в формате <старший номер>.<младший номер>
// используется при загрузке обработок в информационную базу
// БезопасныйРежим – Булево – Если истина, обработка будет запущена в безопасном режиме.
// Более подбробная информация в справке.
//
// Информация - Строка- краткая информация по обработке, описание обработки
//
// Команды - ТаблицаЗначений - команды, поставляемые обработкой, одная строка таблицы соотвествует
// одной команде
// колонки:
// - Представление - строка - представление команды конечному пользователю
// - Идентификатор - строка - идентефикатор команды. В случае печатных форм
// перечисление через запятую списка макетов
// - Использование - строка - варианты запуска обработки:
// "ОткрытиеФормы" - открыть форму обработки
// "ВызовКлиентскогоМетода" - вызов клиентского экспортного метода из формы обработки
// "ВызовСерверногоМетода" - вызов серверного экспортного метода из модуля объекта обработки
// - ПоказыватьОповещение – Булево – если Истина, требуется оказывать оповещение при начале
// и при окончании запуска обработки. Прим. Имеет смысл только
// при запуске обработки без открытия формы.
// - Модификатор – строка - для печатных форм MXL, которые требуется
// отображать в форме ПечатьДокументов подсистемы Печать
// требуется установить как "ПечатьMXL"
//
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Печатная форма: Имя Обработки'"));
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Обработка формирования печатной формы: ""ИмяОбработки""'"));
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду( ТаблицаКоманд, НСтр("ru = 'Имя Обработки''"), "ИмяОбработки", "ВызовСерверногоМетода",
Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ИмяОбработки") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ИмяОбработки",
"ИмяОбработки",
СформироватьПечатнуюФормуИмяОбработки(МассивОбъектов, ОбъектыПечати) );
КонецЕсли;
КонецПроцедуры
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
Функция ПолучитьНазначениеОбработки()
Назначение = Новый Массив;
Назначение.Добавить("Документ.ИмяДокумента"); // объект для печати, привязки к метаданным
Возврат Назначение;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование,
ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Функция РазложитьМассивПоТипамОбъектов(МассивОбъектов)
СтруктураТипов = Новый Структура;
Для Каждого Объект Из МассивОбъектов Цикл
Если ТипЗнч(Объект) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Если НЕ СтруктураТипов.Свойство("ЗаказКлиента") Тогда
МассивПоступлений = Новый Массив;
СтруктураТипов.Вставить("ЗаказКлиента", МассивПоступлений);
КонецЕсли;
СтруктураТипов.ЗаказКлиента.Добавить(Объект);
КонецЕсли;
КонецЦикла;
Возврат СтруктураТипов;
КонецФункции
Методика переопределения хранения механизма печатной формы в отдельной обработке
Создать внутреннюю печатную форму.
Перенести из процедуры "Печать" модуля менеджера документа в процедуру "Печать" модуля менеджера обработки печати фрагмент, посвященный новой печатной форме.
Переопределить вызов вспомогательного функционала для перенесенного фрагмента на вызов из модулей менеджеров соответствующих документов, если оставляете его там. Или перенести вспомогательный функционал в модуль менеджера обработки, но тогда запросы должны стать универсальными для всех видов используемых в печатной форме документов (т.е. например, должны строиться объединением данных разных видов документов).
В модуле команды параметр "имя макета" написать через обращение к обработке.
Например, вместо:
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ._ДемоСчетНаОплатуПокупателю",
"СчетЗаказ",
ПараметрКоманды,
ПараметрыВыполненияКоманды.Источник,
ПараметрыПечати);
должно быть:
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ._ДемоСчетНаОплатуПокупателю",
"Обработка._ДемоПечатнаяФорма.СчетЗаказ",
ПараметрКоманды,
ПараметрыВыполненияКоманды.Источник,
ПараметрыПечати);
Методика подключения новой внутренней печатной формы
Создать новую печатную форму;
Заменить содержимое команды печати на вызов процедуры «ВыполнитьКомандуПечати» (при этом первым параметром надо будет указать имя объекта, в модуле менеджера которого будет исполняющая процедура «Печать», а вторым – имена макетов, для которых должны быть сформированы табличные документы);
Добавить префикс ПФ_MXL_ к имени сформированного конструктором макета;
Добавить в процедуре «Печать» модуля менеджера документа фрагмент, посвященный формированию табличного документа для новой печатной формы и вызову процедуры «ВывестиТабличныйДокументВКоллекцию» с передачей ей этого табличного документа;
Процедуру, формирующую новый табличный документ, превратить в функцию и точечно поправить в ней (по аналогии с подобными функциями):
параметры в заголовке;
объявление табличного документа и установка уникального значения КлючПараметровПечати табличного документа;
получение макета по имени с префиксом через функцию УправлениеПечатью.ПолучитьМакет();
в выходной таблице запроса обязательно должно быть поле Ссылка (содержащее ссылку на печатаемый документ)
определение номера строки начала табличного документа;
задание областей печати;
возврат табличного документа.
Методика подключения печати комплектом
Создать внутренние печатные формы;
В процедуре-обработчике команды печати, при вызове "УправлениеПечатьюКлиент.ВыполнитьКомандуПечати" второй параметр (ИменаМакетов) должен содержать через запятую, но без пробелов, все имена макетов документов комплекта.
Количество экземпляров конкретной печатной формы заказывается указанием имени нужного макета через запятую в вышеприведенном параметре.
Процедура "Печать" в модуле менеджера документа, указанного в первом параметре вышеприведенной процедуры, должна содержать абзацы обработки каждого из вышеприведенных имен макетов.
Если необходимо запретить изменение количества копий при печати комплекта - надо задействовать элемент параметров печати с ключом "ФиксированныйКомплект".
Если необходимо при закрытии печатной формы каждый раз сбрасывать измененное пользователем количество копий документов комплекта - надо задействовать элемент параметров печати с ключом "ПереопределитьПользовательскиеНастройкиКоличества".
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ПереопределитьПользовательскиеНастройкиКоличества", Истина);
//ПараметрыПечати.Вставить("ФиксированныйКомплект", Истина);
Если УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ПараметрКоманды) Тогда
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ._ДемоСчетНаОплатуПокупателю",
"СчетЗаказ,СчетЗаказ,Акт",
ПараметрКоманды, ПараметрыВыполненияКоманды.Источник, ПараметрыПечати );
КонецЕсли;
КонецПроцедуры
Вызов обработки печати каждого из видов печатных форм ("СчетЗаказ" и "Акт") должен располагаться в процедуре "Печать" модуля менеджера документа.
Методика подключения новой внутренней печатной формы с быстрой печатью
Создать новую печатную форму;
Заменить содержимое команды печати на вызов процедуры «ВыполнитьКомандуПечатиНаПринтер» (при этом первым параметром надо будет указать имя объекта, в модуле менеджера которого будет исполняющая процедура «Печать», а вторым – имена макетов, для которых должны быть сформированы табличные документы);
Добавить префикс ПФ_MXL_ к имени сформированного конструктором макета;
Добавить в процедуре «Печать» модуля менеджера документа фрагмент, посвященный формированию табличного документа для новой печатной формы и вызову процедуры «ВывестиТабличныйДокументВКоллекцию» с передачей ей этого табличного документа;
Процедуру, формирующую наш табличный документ, превратить в функцию и точечно поправить в ней (по аналогии с подобными функциями):
параметры в заголовке;
объявление табличного документа;
получение макета по имени с префиксом;
определение номера строки начала табличного документа;
задание областей печати;
возврат табличного документа.
Методики печати "в файл", работа через "COM-объекты"
Методика разработки печатной формы с печатью "в файл"
1) Разработать внутреннюю печатную форму по методике подключения новых внутренних печатных форм (см. материалы 3 занятия).
2) В процедуре обработки команды печати использовать параметр печати с ключом "ФорматСохранения" и значением из системного перечисления "ТипФайлаТабличногоДокумента".
Например:
ПараметрыПечати.Вставить("ФорматСохранения", ТипФайлаТабличногоДокумента.PDF);
На текущем этапе развития платформы возможно сохранение в файлы следующих форматов:
ANSITXT
DOCX
HTML
HTML3
HTML4
MXL
MXL7
ODS
PDF
TXT
XLS
XLS95
XLS97
XLSX
Методика подключения печатных форм на основе офисных макетов
1) Создать и разместить в конфигурации макет, созданный в офисном приложении (Microsoft Word или OpenOffice.org Writer), включающего в себя все необходимые области. Макет размещать в конфигурации только посредством конструктора макета "Двоичные данные"
2) Создать в дереве метаданных команду печати. Для этой команды задать следующие свойства:
● тип параметра команды – включить ссылку на нужный объект;
● режим использования параметра – «Множественный»;
● группа – группа команд «Печать».
В модуле команды сразу поместить код на основе файла шаблона "ШаблонОбработкиКомандыПечатиОфиснДок.txt" и внести исправления в фрагменты, помеченные угловыми скобками < >.
3) Внести коррективы в функцию "ПолучитьДанныеПечати" модуля менеджера документа и в обслуживающие ее функции:
ПолучитьДанныеОбъекта;
ПолучитьОписаниеОбластейМакетаОфисногоДокумента
4) Вернуться в модуль команды и отработать заполнение формируемого документа нужными областями.
Методика подключения внешней печатной формы при помощи файла шаблона
1) Сделать клон из файла шаблона "ШаблонВнешнейОбработкиПечатиНаОсновеТабличногоДокумента.epf", переименовав и сохранив его посредством пункта меню "Файл/Сохранить как";
2) Внести изменения в модуле объекта полученной обработки:
2.1) Исправить параметры функции "СведенияОВнешнейОбработке";
2.2) Исправить параметры в процедуре "Печать";
2.3) В функции "СформироватьПечатнуюФорму" воспользоваться "Конструктором запроса с обработкой результата" для формирования печатной формы (при составлении запроса не забудьте про необходимость выходного поля "Ссылка" и наложение условия "В" по этому полю);
2.4) Использовать закомментированные фрагменты функции для подключения к стандарту.
Методика подключения внешней печатной формы на основе офисного документа при помощи файла шаблона
1) Сделать клон из файла шаблона "ШаблонВнешнейОбработкиФормированияОфисногоДокумента.epf", переименовав и сохранив его посредством пункта меню "Файл/Сохранить как";
2) Внести изменения в модуле объекта полученной обработки:
2.1) Исправить параметры функции "СведенияОВнешнейОбработке";
3) Заменить макет в обработке
4) Внести правки в модуле формы обработки, используя закомментированные фрагменты в качестве примеров
4.1) в функцию "ПолучитьДанныеДокументов";
4.2) в функцию "ПолучитьДанныеОбъекта";
4.3) в функцию "ПолучитьОписаниеОбластейМакетаОфисногоДокумента";
4.4) в процедуру "Печать".
Обыкновенные формы (примеры)
Связь в выборе по типу документа в обычной форме
Дано: Документ "РучнаяОперация" по регистру Бухгалтерии
Субконто меняются на разных Счетах. Выбирается комбинация:
Субконто1 = Контрагент
Субконто2 = Документ (движение по контрагенту)
Надо: Наложить ограничение по выбору субконто2 из списка документов только по Контрагент.
Решение (Передать параметр для настройки фильтра в ФормуВыбора):
1. Обработка события НачалоВыбора, ДокументРучнаяОперация:
СтандартнаяОбработка = Ложь;
фр = Документы[Элемент.Значение.Метаданные().Имя].ПолучитьФормуВыбора(,ЭтаФорма,);
со = Новый Структура;
со.Вставить("Организация",Организация);
со.Вставить("Контрагент",ТекДан.СубконтоКт1);
фр.СтруктураОтбора = со;
фр.Открыть();
Где СтруктураОтбора - Ревизит в получаемой форме выбора.
2. ФормаВыбора:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Для Каждого ТекЭлемент Из СтруктураОтбора Цикл
Отбор[ТекЭлемент.Ключ].Установить(ТекЭлемент.Значение);
КонецЦикла;
КонецПроцедуры
Ограничение по допустимым типам субконто
Дано: Документ "РучнаяОперация" по регистру Бухгалтерии
Счет = Любой счет из плана счетов
Надо: Наложить ограничение по выбору на
Субконто1 =
Субконто2 =
Субконто2 =
Решение:
Процедура СчетПриИзменении(Элемент)
Для йй=1 По 3 Цикл
ЭлементыФормы["Субконто"+йй].ВыбиратьТип = Истина;
ЭлементыФормы["Субконто"+йй].Значение = Неопределено;
ЭлементыФормы["Субконто"+йй].Доступность = Ложь;
КонецЦикла;
Для йй=1 По СчетСписания.ВидыСубконто.Количество() Цикл
ТипСубк = СчетСписания.ВидыСубконто[йй-1].ВидСубконто.ТипЗначения;
ЭлементВвода = ЭлементыФормы["Субконто"+йй];
ЭлементВвода.ОграничениеТипа = Новый ОписаниеТипов(ТипСубк.Типы());
й1 = ЭлементВвода.Значение;
ЭлементВвода.Значение = ЭлементВвода.ОграничениеТипа.ПривестиЗначение(й1);
ЭлементВвода.ВыбиратьТип = (ТипСубк.Типы().Количество()>1);
ЭлементВвода.Доступность = (ТипСубк.Типы().Количество()>0);
КонецЦикла;
КонецПроцедуры
1С: Предприятие 8.3 Сервер приложение Оптимизация Microsoft SQL сервера
/* Раз в день */
use db_name
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
GO
use db_name
DBCC FREEPROCCACHE
GO
/* Раз в неделю */
sp_msforeachtable N'DBCC INDEXDEFRAG (db_name, ''?'')'
GO
sp_msforeachtable N'DBCC DBREINDEX (''?'')'
GO
/* Изменение таблицы кодировки */
USE master;
GO
ALTER DATABASE MySchema COLLATE Cyrillic_General_CI_AS ;
GO
--Verify the collation setting.
SELECT name, collation_name FROM sys.databases WHERE name = N'MySchema';
GO
/* Backup средствами MS SQL */
cat 1.sql <<EOF
DECLARE @pn NVARCHAR(512)
SET @pn = 'xxx\dd' + Convert(varchar(8), GETDATE(), 112) + '.bak'
BACKUP DATABASE dd TO DISK = @pn WITH NOFORMAT, NOINIT, NAME = N'bla-bla-bla',
SKIP, NOREWIND, NOUNLOAD, STATS = 10 /* Differential */
EOF
cat 1.bat <<EOF
sqlcmd -S ss -U uu -P pp -i 1.sql
EOF
Сервер приложение и SQL сервер требует от 300 до 500 Мб ОЗУ на одного клиента.
При существенном увеличении памяти разумен переход на 1С сервер приложение 64 бита.
1С: Предприятие 8.3 Сервер приложение Linux (UBUNTU)
Управление 1С:сервером
Серверная часть:
/opt/1C/v8.3/x86_64/ras --daemon cluster
Клиент:
/opt/1C/v8.3/x86_64/rac cluster list
/opt/1C/v8.3/x86_64/rac help
/opt/1C/v8.3/x86_64/rac help cluster
/opt/1C/v8.3/x86_64/rac help infobase
/opt/1C/v8.3/x86_64/rac infobase --cluster=<uuid> summary list
Активация лицензий
apt-get install default-jre
cd /opt/1C/v8.3/x86_64/ExtDst/
dpkg -i 1c-enterprise-license-tools_0.1.0-22_amd64.deb
dpkg -i 1c-enterprise-ring_0.6.0-15_amd64.deb
Пример команды активации:
/opt/1C/1CE/x86_64/ring/ring license activate \
--country \
--first-name \
--house \
--last-name \
--pin \
--serial \
--street \
--town \
--zip-code
help
/opt/1C/1CE/x86_64/ring/ring help
/opt/1C/1CE/x86_64/ring/ring license help
Очистка Cache 1C: 8.2 Platform
del \users\<user name>\AppData\Local\1C\1C82\*del \users\<user name>\AppData\Roaming\1C\1C82\*; кроме ExtCompT\*; 1cv8strt.pflЗапуск Регламентного задания (Файловый вариант)
1.Создать обработку ПланировщикЗаданий
2.Код в Модуле Формы
//ДЛЯ ТОГО ЧТОБЫ РАБОТАЛО В ФАЙЛ-СЕРСЕРНОМ ВАРИАНТЕ
//ДАННАЯ ОБРАБОТКА ДОЛЖНА ВИСЕТЬ В ОТКРЫТОМ ПРИЛОЖЕНИИ, В КЛИЕНТ-СЕРВЕРНОМ ЭТА ОБРАБОТКА НЕ НУЖНА
&НаКлиенте
Процедура ОбработкаЗаданий()
#Если ТолстыйКлиентУправляемоеПриложение Тогда
ВыполнитьОбработкуЗаданий();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
ПодключитьОбработчикОжидания("ОбработкаЗаданий", 15);
#Иначе
Предупреждение("Обработка может быть запущена только в толстом клиенте!");
Закрыть();
#КонецЕсли
КонецПроцедуры
Число в строку и дополнить нулями слева
Формат( 123,"ЧЦ=9;ЧВН=;ЧГ=0")
Результат - 000000123
1С: Предприятие 8.3 Сервер приложение Включить отладку
WINDOWS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)
ImagePath + "-debug"
restart 1C Server Agent.
LINUX
service srv1cv83 stop
edit srv1cv83: SRV1CV8_DEBUG=1
service srv1cv83 start