i Как добавить запись в периодический независимый регистр сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта);
НаборЗаписей.Отбор.Период.Установить(ТекущаяДата);
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Валюта = ТекущаяВалюта;
НовЗапись.Период = ТекущаяДата;
НовЗапись.Курс = ТекущийКурс;
НовЗапись.Кратность = ТекущаяКратность;
НаборЗаписей.Записать(Истина);
i Как прочитать (изменить) записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.Валюты.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(ДатаЗаписи);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.Валюта) + " " + Строка(Запись.Курс));
// Изменение данных полей записи.
Запись.Курс = 0;
КонецЦикла;
НаборЗаписей.Записать();
i Как удалить записи в периодическом независимом регистре сведений?
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
Как в периодическом независимом регистре сведений "КурсыВалют" удалить все записи по валютам с наименованиями "EUR" и "USD", период которых меньше 01 января 2005 года?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| *
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| (КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1)
| ИЛИ
| НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"")
| И
| НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))";
ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
НаборЗаписей.Записать();
Как прочитать данные, актуальные на определенную дату, из регистра сведений "Курсы валют" с отбором по нескольким валютам (отбор по измерениям)?
Запрос = Новый Запрос;
МассивВалют = Новый Массив;
МассивВалют.Добавить(Валюта1);
МассивВалют.Добавить(Валюта2);
Запрос.УстановитьПараметр("МассивВалют", МассивВалют);
Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения);
Запрос.Текст = "
|ВЫБРАТЬ
| ВалютыСрезПоследних.Валюта,
| ВалютыСрезПоследних.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В (&МассивВалют)) КАК ВалютыСрезПоследних";
ТаблицаКурсов = Запрос.Выполнить().Выгрузить();
Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?
Процедура ЗаменаПериода()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОтветственныеЛицаОрганизации.Период,
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница,
| ОтветственныеЛицаОрганизации.ОтветственноеЛицо
|ИЗ
| РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации
|ГДЕ
| ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1)
| И
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование | ПОДОБНО "Групп-Трейдинг"
| И
| (ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL
| ИЛИ
| НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Продавец"
| ИЛИ
| ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Кладовщик"))";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи();
Пока Выборка.Следующий() Цикл
Запись.Период = Выборка.Период;
Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница;
Запись.ОтветственноеЛицо = Выборка.ОтветственноеЛицо;
Запись.Прочитать();
Если Запись.Выбран() Тогда
Запись.Период = Дата(2004, 1, 1);
Запись.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры;
Как "сделать периодическим" реквизит уже заполненного справочника?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| &ДатаУстановки КАК Период,
| Проекты.Ссылка КАК Проект,
| Проекты.Ответственный
|ИЗ
| Справочник.Проекты КАК Проекты
|ГДЕ
| (НЕ(Проекты.ЭтоГруппа)) И (НЕ(Проекты.Ответственный = &Ответственный))";
Запрос.УстановитьПараметр("Ответственный", Справочники.Пользователи.ПустаяСсылка());
Запрос.УстановитьПараметр("ДатаУстановки", Дата(2000,1,1));
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.ЗакреплениеПроектов.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаРезультат);
НаборЗаписей.Записать();
i Как добавить записи в регистр сведений, подчиненный регистратору?
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
НоваяЗапись.ЛимитПоставщика = 50;
НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ВыбранныйРегистратор.Дата;
НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура;
НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор;
НоваяЗапись.ЛимитПокупателю = 25;
НаборЗаписей.Записать(Ложь);
i Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) + " " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки));
// Изменение данных полей записи.
Запись.ПроцентСкидкиНаценки = 0;
КонецЦикла;
НаборЗаписей.Записать();
i Как удалить записи из регистра сведений, подчиненного регистратору?
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ЦеныНоменклатурыКонтрагентов.Регистратор
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать();
КонецЦикла;
Бухгалтерский учет
i Как в регистре бухгалтерии сформировать проводки?
// Задать выбираемые значения.
ВыбранныйОтветственный = Справочники.Пользователи.НайтиПоНаименованию("Иванцова");
ВыбранныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("00027");
ВыбранныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00013");
ВыбранныйДокумент = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру(2, '20050101');
ВыбранныйСчет = Справочники.БанковскиеСчета.НайтиПоКоду("00001");
ВыбраннаяСтатья = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00002");
ВыбраннаяОрганизация = Справочники.Организации.НайтиПоКоду("00001");
ВыбраннаяВалюта = Справочники.Валюты.НайтиПоКоду(810);
// Создать будущий регистратор.
ДатаЗаписи = ТекущаяДата();
Документ = Документы.ОперацияБух.СоздатьДокумент();
Документ.Дата = ДатаЗаписи;
Документ.Организация = ВыбраннаяОрганизация;
Документ.Ответственный = ВыбранныйОтветственный;
Документ.Содержание = "Оплата поставщику";
Документ.Записать();
// Создать набор записей.
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Документ.Ссылка);
Движение = НаборЗаписей.Добавить();
Движение.Регистратор = Документ.Ссылка;
Движение.Период = ДатаЗаписи;
// Заполнить счет дебета.
Движение.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
// Заполнить аналитику счета дебета.
Движение.СубконтоДт.Контрагенты = ВыбранныйКонтрагент;
Движение.СубконтоДт.Договоры = ВыбранныйДоговор;
Движение.СубконтоДт.ДокументыРасчетовСКонтрагентами = ВыбранныйДокумент;
// Заполнить счет кредита.
Движение.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("51");
// Заполнить аналитику счета кредита.
Движение.СубконтоКт.БанковскиеСчета = ВыбранныйСчет;
Движение.СубконтоКт.СтатьиДвиженияДенежныхСредств = ВыбраннаяСтатья;
// Балансовое измерение.
Движение.Организация = ВыбраннаяОрганизация;
// Балансовый ресурс.
Движение.Сумма = 300000;
// Реквизиты.Движение.НомерЖурнала = "БК";
Движение.Содержание = "Оплата поставщику";
// Записать набор записей.
НаборЗаписей.Записать();
i Как получить остаток по счету?
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.Организация,
| ХозрасчетныйОстатки.СуммаОстаток,
| ХозрасчетныйОстатки.КоличествоОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", КонецДня(ДатаОтчета));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
РезультатЗапроса = Запрос.Выполнить();
i Как получить обороты по счету?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОбороты.СуммаОборотДт,
| ХозрасчетныйОбороты.СуммаОборотКт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, Период, Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты";
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
РезультатЗапроса = Запрос.Выполнить();
i Как получить остатки по счетам?
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет,
| ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Счет),
| ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт КАК ВалютнаяСуммаОстатокДт,
| ХозрасчетныйОстатки.Счет.Порядок КАК СчетПорядок,
| ХозрасчетныйОстатки.Валюта КАК Валюта,
| ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Валюта)
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет.Валютный И Счет.Вид = &Активный, ,) КАК ХозрасчетныйОстатки
|УПОРЯДОЧИТЬ ПО
| СчетПорядок
|ИТОГИ
| СУММА(ВалютнаяСуммаОстатокДт)
|ПО
| Валюта";
Запрос.УстановитьПараметр("Активный", ВидСчета.Активный);
Запрос.УстановитьПараметр("Дата", Дата);
i Как перенести остаток со счета на счет?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.СуммаОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, ,
| Субконто1 = &Контрагент И Организация = &Организация И Субконто2 = &Договор) КАК ХозрасчетныйОстатки";
// Считаем что на счете ведется аналитика только в разрезе контрагентов
// и договоров.
Запрос.УстановитьПараметр("Период", Период1);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Договор", Договор);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Документ = Документы.ОперацияБух.СоздатьДокумент();
Документ.Дата = РабочаяДата;
Документ.Организация = Организация;
Документ.Содержание = "Погашение дебиторской задолженности";
Проводка = Документ.Движения.Хозрасчетный.Добавить();
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ПрочиеРасходы;
Проводка.СубконтоДт.Контрагенты = Контрагент;
Проводка.СубконтоДт.Договоры = Договор;
Проводка.Сумма = Выборка.СуммаОстатокДт;
Документ.СуммаОперации = Выборка.СуммаОстатокДт;
Форма = Документ.ПолучитьФорму();
Форма.Открыть();
КонецЕсли;
Как найти первый документ, приведший к появлению кредитового остатка на счете?
ВЫБРАТЬ ПЕРВЫЕ 1
ХозрасчетныйОстаткиИОбороты.Регистратор КАК Регистратор
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаН, &ДатаК, Регистратор, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты
ГДЕ
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт > 0
УПОРЯДОЧИТЬ ПО
ХозрасчетныйОстаткиИОбороты.Период,
Регистратор
Как выбрать все счета, в аналитике которых присутствуют либо вид субконто "Контрагент", либо вид субконто "Договор"?
ВЫБРАТЬ
ХозрасчетныйВидыСубконто.Ссылка КАК Счет
ИЗ
ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
ГДЕ
ХозрасчетныйВидыСубконто.ВидСубконто.Наименование В ("Договоры", "Контрагенты")
Как выбрать все счета, в аналитике которых присутствуют как вид субконто "Контрагент", так и вид субконто "Номенклатура"?
ВЫБРАТЬ
ХозрасчетныйВидыСубконто.Ссылка КАК Счет
ИЗ
ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто1
ПО
ХозрасчетныйВидыСубконто.Ссылка = ХозрасчетныйВидыСубконто1.Ссылка
ГДЕ
(ХозрасчетныйВидыСубконто.ВидСубконто.Наименование = "Контрагенты")
И
(ХозрасчетныйВидыСубконто1.ВидСубконто.Наименование = "Номенклатура")
Как добавить новый вид субконто к счету?
ВидМенеджеры = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НайтиПоНаименованию("Менеджеры", Истина);
// Добавить новый вид характеристик.
Если ВидМенеджеры.Пустая() Тогда
ВидМенеджеры = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СоздатьЭлемент();
ВидМенеджеры.Наименование = "Менеджеры";
ВидМенеджеры.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Пользователи");
ВидМенеджеры.Записать();
КонецЕсли;
// Получить нужный счет.
Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
Если (Не Счет.Пустая()) И (Счет.ВидыСубконто.Найти(ВидМенеджеры) = Неопределено) Тогда
// Добавить новый вид субконто к счету.
ОбъектСчета = Счет.ПолучитьОбъект();
НовыйВидСубконто = ОбъектСчета.ВидыСубконто.Добавить();
НовыйВидСубконто.ВидСубконто = ВидМенеджеры;
НовыйВидСубконто.ТолькоОбороты = Истина;
НовыйВидСубконто.Суммовой = Истина;
ОбъектСчета.Записать();
КонецЕсли;
Как из регистра бухгалтерии "Хозрасчетный" получить обороты только по валютным счетам?
ВЫБРАТЬ
ХозрасчетныйОбороты.Организация КАК Организация,
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.Валюта,
ХозрасчетныйОбороты.СуммаОборотДт,
ХозрасчетныйОбороты.ВалютнаяСуммаОборотДт,
ХозрасчетныйОбороты.СуммаОборотКт,
ХозрасчетныйОбороты.ВалютнаяСуммаОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет.Валютный, , , , ) КАК ХозрасчетныйОбороты
УПОРЯДОЧИТЬ ПО
Организация,
ХозрасчетныйОбороты.Счет.Код
Как выбрать в регистре бухгалтерии "Хозрасчетный" обороты по "60-ым" счетам, исключив внутренние обороты между ними?
ВЫБРАТЬ
ХозрасчетныйОбороты.Счет,
ХозрасчетныйОбороты.СуммаОборотДт,
ХозрасчетныйОбороты.СуммаОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон , , Счет В ИЕРАРХИИ (&Счет), , , НЕ(КорСчет В ИЕРАРХИИ (&Счет)), ) КАК ХозрасчетныйОбороты
УПОРЯДОЧИТЬ ПО
ХозрасчетныйОбороты.Счет.Код
Как реализовать метод "красного сторно" для регистра бухгалтерии?
Процедура ОбработкаПроведения(Отказ, Режим)
СторнируемыеДвижения = РегистрыБухгалтерии.Хозрасчетный.ВыбратьПоРегистратору(СторнируемыйДокумент);
Пока СторнируемыеДвижения.Следующий() Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Дата;
Проводка.СчетДт = СторнируемыеДвижения.СчетДт;
Проводка.СчетКт = СторнируемыеДвижения.СчетКт;
Для каждого Субконто Из СторнируемыеДвижения.СубконтоДт Цикл
Проводка.СубконтоДт[Субконто.Ключ] = Субконто.Значение;
КонецЦикла;
Для каждого Субконто Из СторнируемыеДвижения.СубконтоКт Цикл
Проводка.СубконтоКт[Субконто.Ключ] = Субконто.Значение;
КонецЦикла;
Проводка.ВалютаДт = СторнируемыеДвижения.ВалютаДт;
Проводка.ВалютаКт = СторнируемыеДвижения.ВалютаКт;
Проводка.ВалютнаяСуммаДт = - СторнируемыеДвижения.ВалютнаяСуммаДт;
Проводка.ВалютнаяСуммаКт = - СторнируемыеДвижения.ВалютнаяСуммаКт;
Проводка.КоличествоДт = - СторнируемыеДвижения.КоличествоДт;
Проводка.КоличествоКт = - СторнируемыеДвижения.КоличествоКт;
Проводка.НомерЖурнала = СторнируемыеДвижения.НомерЖурнала;
Проводка.Организация = СторнируемыеДвижения.Организация;
Проводка.Содержание = СторнируемыеДвижения.Содержание;
Проводка.Сумма = - СторнируемыеДвижения.Сумма;
КонецЦикла;
Движения.Хозрасчетный.Записать();
КонецПроцедуры
Сложные периодические расчеты
i Как получить сумму начисления по конкретному виду расчета указанному сотруднику в указанном периоде?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| БУОсновныеНачисления.Результат
|ИЗ
| РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления
|ГДЕ
| БУОсновныеНачисления.ПериодРегистрации = &Период
| И
| БУОсновныеНачисления.ФизЛицо = &ФизЛицо
| И
| БУОсновныеНачисления.ВидРасчета = &ВидРасчета";
Запрос.УстановитьПараметр("Период", НачалоМесяца(Период1));
Запрос.УстановитьПараметр("ВидРасчета", ВидРасчета);
Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);
i Как получить сумму всех начислений указанному сотруднику в указанном периоде?
"ВЫБРАТЬ
| БУОсновныеНачисления.Организация КАК Организация,
| ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.Организация),
| БУОсновныеНачисления.ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.ВидРасчета),
| БУОсновныеНачисления.Результат КАК Результат,
| ""Основные"" КАК ВариантНачислений
|ИЗ
| РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления
|ГДЕ
| БУОсновныеНачисления.ПериодРегистрации = &НужныйПериод И БУОсновныеНачисления.ФизЛицо = &ФизЛицо
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| БУДополнительныеНачисления.Организация,
| ПРЕДСТАВЛЕНИЕ(БУДополнительныеНачисления.Организация),
| БУДополнительныеНачисления.ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(БУДополнительныеНачисления.ВидРасчета),
| БУДополнительныеНачисления.Результат,
| ""Дополнительные""
|ИЗ
| РегистрРасчета.БУДополнительныеНачисления КАК БУДополнительныеНачисления
|ГДЕ
| БУДополнительныеНачисления.ПериодРегистрации = &НужныйПериод И БУДополнительныеНачисления.ФизЛицо = &ФизЛицо
|ИТОГИ СУММА(Результат)
|ПО ОБЩИЕ, Организация, ВариантНачислений";
Как получить таблицу перерасчетов по перерасчетам нескольких регистров?
ВЫБРАТЬ
ПерерасчетОсновных.ФизЛицо КАК Работник,
ПерерасчетОсновных.ВидРасчета,
ПерерасчетОсновных.ОбъектПерерасчета КАК Документ
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизации.ПерерасчетОсновныхНачислений КАК ПерерасчетОсновных
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПерерасчетДополнительных.ФизЛицо,
ПерерасчетДополнительных.ВидРасчета,
ПерерасчетДополнительных.ОбъектПерерасчета
ИЗ
РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизации.ПерерасчетДополнительныхНачислений КАК ПерерасчетДополнительных
Как для документа "НачислениеЗарплатыРаботникам" определить номера строк записей полностью вытесненных видов расчета?
ВЫБРАТЬ РАЗРЕШЕННЫЕ
УправленческиеНачисления.НомерСтроки КАК НомерСтроки
ИЗ
РегистрРасчета.УправленческиеНачисления КАК УправленческиеНачисления
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрРасчета.УправленческиеНачисления.ФактическийПериодДействия(Регистратор = &парамСсылка) КАК УправленческиеНачисленияФактическийПериодДействия
ПО
УправленческиеНачисления.НомерСтроки = УправленческиеНачисленияФактическийПериодДействия.НомерСтроки
И
УправленческиеНачисления.Регистратор = УправленческиеНачисленияФактическийПериодДействия.Регистратор
ГДЕ
УправленческиеНачисления.Регистратор = &парамСсылка
И
((УправленческиеНачисленияФактическийПериодДействия.Регистратор) ЕСТЬ NULL )
Как сформировать расчетный листок сотрудника?
"ВЫБРАТЬ
| ВложенныйЗапрос.ФизЛицо,
| ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ФизЛицо),
| ВложенныйЗапрос.ФизЛицоПредставление КАК ФизЛицоПредставление1,
| ВложенныйЗапрос.ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ВидРасчета),
| ВложенныйЗапрос.ВидРасчетаПредставление КАК ВидРасчетаПредставление1,
| ВложенныйЗапрос.Результат КАК Результат,
| ВложенныйЗапрос.ТипРасчета КАК ТипРасчета
|ИЗ
| (ВЫБРАТЬ
| БУОсновныеНачисления.ФизЛицо КАК ФизЛицо,
| ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.ФизЛицо) КАК ФизЛицоПредставление,
| БУОсновныеНачисления.ВидРасчета КАК ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.ВидРасчета) КАК ВидРасчетаПредставление,
| БУОсновныеНачисления.Результат КАК Результат,
| ""Начисления"" КАК ТипРасчета
| ИЗ
| РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления
| ГДЕ
| БУОсновныеНачисления.ФизЛицо = &ФизЛицо И БУОсновныеНачисления.ПериодРегистрации = &НужныйПериод
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| УдержанияРаботниковОрганизаций.ФизЛицо,
| ПРЕДСТАВЛЕНИЕ(УдержанияРаботниковОрганизаций.ФизЛицо),
| УдержанияРаботниковОрганизаций.ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(УдержанияРаботниковОрганизаций.ВидРасчета),
| -УдержанияРаботниковОрганизаций.Результат,
| ""Удержания""
| ИЗ
| РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизаций
| ГДЕ
| УдержанияРаботниковОрганизаций.ФизЛицо = &ФизЛицо И УдержанияРаботниковОрганизаций.ПериодРегистрации = &НужныйПериод) КАК ВложенныйЗапрос
|ИТОГИ СУММА(Результат)
|ПО ОБЩИЕ, ТипРасчета";
Как организовать сторнирование уже произведенных расчетов прошлых периодов?
ТаблицаСторноЗаписей = Движения.ОсновныеНачисленияРаботниковОрганизации.ПолучитьДополнение();
Для каждого СтрокаСторно Из ТаблицаСторноЗаписей Цикл
// Добавить сторно-записи в набор записей регистра.
// Новая запись движений.
Движение = Движения.ОсновныеНачисленияРаботниковОрганизации.Добавить();
// Заполнить свойства.
Движение.ПериодРегистрации = Строка.ПериодРегистрацииСторно;
Движение.ПериодДействияНачало = Строка.ПериодДействияНачалоСторно;
Движение.ПериодДействияКонец = Строка.ПериодДействияКонецСторно;
Движение.БазовыйПериодНачало = Строка.БазовыйПериодНачало;
Движение.БазовыйПериодКонец = Строка.БазовыйПериодКонец;
Движение.ВидРасчета = Строка.ВидРасчета;
Движение.Сторно = Истина;
// Заполнить измерения.
Движение.ФизЛицо = Строка.ФизЛицо;
Движение.Приказ = Строка.Приказ;
Движение.Организация = Строка.Организация;
// Ресурсы не заполнять, потому что здесь не происходит расчет,
// только подготовка новой записи
// Заполнить реквизиты.
Движение.ГрафикРаботы = Строка.ГрафикРаботы;
Движение.Размер = Строка.Размер;
Движение.ВидУчетаВремени = Строка.ВидУчетаВремени;
Движение.ПодразделениеОрганизации = Строка.ПодразделениеОрганизации;
Движение.ПериодРасчетаСреднегоЗаработкаНачало = Строка.ПериодРасчетаСреднегоЗаработкаНачало;
Движение.ПериодРасчетаСреднегоЗаработкаОкончание = Строка.ПериодРасчетаСреднегоЗаработкаОкончание;
КонецЦикла;
Движения.ОсновныеНачисленияРаботниковОрганизации.Записать();
Бизнес-процессы
Как определить бизнес процесс, в котором количество последовательных этапов определяется индивидуально на момент старта экземпляра процесса?
Процедура ПередВыполнением(Отказ)
Если Исполнитель.Пустая() Тогда
Исполнитель = ПараметрыСеанса.ТекущийИсполнитель;
КонецЕсли;
ДатаВыполнения=ТекущаяДата();
КонецПроцедуры
ПолучитьФорму("Маршрут").Открыть();
СтандартнаяОбработка = Ложь;
Если ТочкиМаршрута.Количество() = 0 Тогда
Сообщить("Не определен маршрут!!!");
Отказ = Истина;
КонецЕсли;
Результат = ПолучитьТочкуМаршрута().Пустая();
Функция ПолучитьТочкуМаршрута()
Запрос=Новый Запрос;
Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1
| НаМаршрутеТочкиМаршрута.НомерСтроки КАК НомерСтроки,
| НаМаршрутеТочкиМаршрута.Склад
|ИЗ
| БизнесПроцесс.НаМаршруте.ТочкиМаршрута КАК НаМаршрутеТочкиМаршрута
|ГДЕ
| (НаМаршрутеТочкиМаршрута.Склад НЕ В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЭтапПути.Склад
| ИЗ
| Задача.ЭтапПути КАК ЭтапПути
| ГДЕ
| ЭтапПути.БизнесПроцесс = &БизнесПроцесс ))
| И
| (Ссылка = &БизнесПроцесс)
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат (Выборка.Склад);
Иначе
Возврат(Справочники.Склады.ПустаяСсылка());
КонецЕсли;
КонецФункции
ФормируемыеЗадачи[0].Склад = ПолучитьТочкуМаршрута();
ПолучитьФорму("ПутевойЛист").Открыть();
СтандартнаяОбработка = Ложь;
Если ПоказанияСпидометраКонечные = 0 ИЛИ Ссылка.РасходТоплива = 0 Тогда
Сообщить("Не введены данные по путевому листу!");
Отказ = Истина;
КонецЕсли;
Как при работе с бизнес процессами отказаться от стандартного способа формирования задачи и сформировать ее программно?
Для Каждого Рецензент Из НаСогласование Цикл
НоваяЗадача = Задачи.ЭтапПути.СоздатьЗадачу();
НоваяЗадача.БизнесПроцесс = Ссылка;
НоваяЗадача.Пользователь = Рецензент.Рецензент;
НоваяЗадача.Наименование = "Согласование со специалистом";
НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.НаПараллельноеСогласование.ТочкиМаршрута.Согласование;
НоваяЗадача.Дата = ТекущаяДата();
НоваяЗадача.Записать();
ФормируемыеЗадачи.Добавить(НоваяЗадача);
КонецЦикла;
СтандартнаяОбработка = Ложь;
Прочие прикладные объекты
i Как, не открывая форму внешней обработки, выполнить ее процедуру для определенного объекта?
Обработка = ВнешниеОбработки.Создать(ИмяФайла);
Обработка.Печать(Ссылка);
i Как быстро получить информацию, по всем объектам, находящимся в компетенции конкретного менеджера (элемент справочника "Пользователи") по продажам?
МассивСсылок = КритерииОтбора.КомпетенцияМенеджераПродаж.Найти(Менеджер);
Для Каждого Ссылка из МассивСсылок Цикл
Сообщить(Ссылка);
КонецЦикла;
ВЫБРАТЬ
КомпетенцияМенеджераПродаж.Ссылка
ИЗ
КритерийОтбора.КомпетенцияМенеджераПродаж(&Менеджер) КАК КомпетенцияМенеджераПродаж
Формы и элементы управления
Работа с формами
i Как открыть форму документа?
ФормаДокумента = СсылкаНаДокумент.ПолучитьФорму();
ФормаДокумента.Открыть();
i Как открыть форму внешней обработки?
Обработка = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
Обработка.Открыть();
Обработка = ВнешниеОбработки.ПолучитьФорму("C:\Внешние\СпецОтчет.epf", ИмяФормы, , Ключ);
Обработка.Открыть();
i Как отрыть форму отчета так, чтобы она не перекрывала собой ту форму, из которой она открыта?
Форма = Отчеты.ОтчетДиаграмма.ПолучитьФорму("ФормаОсновная", ЭтаФорма);
Форма.ПоложениеОкна = ВариантПоложенияОкна.НеПерекрыватьВладельца;
Форма.Открыть();
i Как открыть форму отчета на весь экран?
СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
ИзмененятьСпособОтображенияОкна = ИзменениеСпособаОтображенияОкна.Запретить;
Как из формы документа открыть форму списка данного документа, спозиционировавшись на нем же?
ФормаСписка = Документы[Метаданные().Имя].ПолучитьФормуСписка();
ФормаСписка.ПараметрТекущаяСтрока = Ссылка;
ФормаСписка.Открыть();
ФормаСписка = Документы[Метаданные().Имя].ПолучитьФормуСписка( , , Новый УникальныйИдентификатор());
i В документе есть реквизит "Контрагент". Как открыть форму подчиненного ему справочника "ДоговорыКонтрагентов"?
Если Не Контрагент.Пустая() Тогда
ФормаПодчиненныхДоговоров = Справочники.ДоговорыКонтрагентов.ПолучитьФормуСписка();
ФормаПодчиненныхДоговоров.ПараметрОтборПоВладельцу = Контрагент;
ФормаПодчиненныхДоговоров.Открыть();
КонецЕсли;
i Как в форме отобразить картинку, сохраненную в реквизите справочника?
// Значение, сохраненное в реквизите справочника, имеющем тип
// ХранилищеЗначения, можно только получить.
СохраненнаяКартинка = Фотография.Получить();
Если СохраненнаяКартинка <> Неопределено Тогда
// Если в хранилище было что-нибудь заранее записано…
ЭлементыФормы.Фото.Картинка = СохраненнаяКартинка;
КонецЕсли;
i Как в журнале документов "УчетКадров" отобрать только документы "ПриемНаРаботу"?
ЖурналДокументовСписок.Отбор.ВидДокумента.Установить(Метаданные.Документы.ПриемНаРаботу);
i Как узнать интервал дат в открытом текущем журнале?
Если ЖурналДокументовСписок.Отбор.Дата.Использование Тогда
Сообщить(ЖурналДокументовСписок.Отбор.Дата);
Иначе
Сообщить("Без ограничения по датам");
КонецЕсли;
Как при открытии справочника сделать отбор по контрагентам, входящим в список?
Процедура ПриОткрытии()
СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
СправочникСписок.Отбор.Ссылка.Значение = СписокКонтрагентов;
СправочникСписок.Отбор.Ссылка.Использование = Истина;
КонецПроцедуры
Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой "Покупатели"?
Процедура КонтрагентНачалоВыбора(Элемент, СтандартнаяОбработка)
Если Элемент.Значение.Пустая() Тогда
СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора( , Элемент);
ФормаВыбора.ВыборПокупателя = Истина;
ФормаВыбора.Открыть();
КонецЕсли;
КонецПроцедуры
Если ВыборПокупателя Тогда
ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
ЭлементыФормы.СправочникСписок.ТекущийРодитель = Константы.ГруппаПокупатели.Получить();
КонецЕсли;
Если ВыборПокупателя Тогда
ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Контрагенты.Покупатели;
КонецЕсли;
Табличное поле
i Как запретить пользователю изменять порядок следования колонок в табличном поле?
ЭлементыФормы.ТабличноеПоле.ИзменятьПозициюКолонок = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Картинка.ИзменятьПозицию = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Код.ИзменятьПозицию = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Наименование.ИзменятьПозицию = Ложь;
i Как запретить пользователю изменять любые настройки колонок табличного поля?
ЭлементыФормы.ТабличноеПоле.ИзменятьНастройкуКолонок = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Картинка.ИзменятьНастройку = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Код.ИзменятьНастройку = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Наименование.ИзменятьНастройку = Ложь;
i Как вывести информацию о том, какой отбор установлен в журнале документов?
ЭлементыФормы.НадписьОтбор.Заголовок = СписокДокументов.Отбор;
УстановленныйОтбор = СписокДокументов.Отбор;
Сообщить("Элементы отбора:");
Для Каждого ЭлементОтбора из УстановленныйОтбор Цикл
Сообщить(Строка(ЭлементОтбора) + " использование = " + ЭлементОтбора.Использование);
КонецЦикла;
i Как в форме справочника установить курсор на элемент с известным наименованием?
ЭлементыФормы.СправочникСписок.ТекущаяСтрока = Справочники.Контрагенты.НайтиПоНаименованию("ПОСТАВЩИКИ", Истина);
i Как в форме списка сделать отбор по значению реквизита?
СправочникСписок.Отбор.СтавкаНДС.Установить(Перечисления.СтавкиНДС.НДС18);
СправочникСписок.Отбор.СтавкаНДС.Значение = Перечисления.СтавкиНДС.НДС18;
СправочникСписок.Отбор.СтавкаНДС.ВидСравнения = ВидСравнения.Равно;
СправочникСписок.Отбор.СтавкаНДС.Использование = Истина;
i Как запретить выдачу сообщения: "Введенные данные не отображены в списке, так как не соответствуют отбору" при добавлении новых элементов в справочник?
ЭлементыФормы.ПолеСписка.ПроверкаОтображенияНовойСтроки = ВариантПроверкиОтображенияНовойСтроки.НеПроверять;
i Как заполнить ячейку табличного поля данными?
Процедура ТабличноеПолеЗаказовЗаказПриИзменении(Элемент)
// Получить текущую строку табличного поля.
СтрокаТаблицы = ЭлементыФормы.ТабличноеПолеЗаказов.ТекущаяСтрока;
// Ввести значения в ячейки строки.
СтрокаТаблицы.Контрагент = СтрокаТаблицы.Заказ.Контрагент;
СтрокаТаблицы.ДатаОтгрузки = СтрокаТаблицы.Заказ.ДатаОтгрузки;
КонецПроцедуры
Как изменить цвет фона ячейки табличного поля в зависимости от значения, выводимого в нее?
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
ЗначениеЯчейкиОстаток = ОформлениеСтроки.Ячейки.Остаток.Значение;
Если ЗначениеЯчейкиОстаток <> Неопределено Тогда
Если ЗначениеЯчейкиОстаток < 10 Тогда
ОформлениеСтроки.Ячейки.Остаток.ЦветФона = WebЦвета.Красный;
ИначеЕсли ЗначениеЯчейкиОстаток > 100 Тогда
ОформлениеСтроки.Ячейки.Остаток.ЦветФона = WebЦвета.Желтый;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как в табличное поле "ВыбранныеКонтрагенты" добавить новую колонку "ОсновнойДоговор", заполнить ее значения и дать возможность открытия этих значений?
Если ТаблицаКонтрагентов.Колонки.Найти("ОсновнойДоговор") = Неопределено Тогда
МассивТипов = Новый Массив();
МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
ОписаниеНужныхТипов = Новый ОписаниеТипов(МассивТипов);
ТаблицаКонтрагентов.Колонки.Добавить("ОсновнойДоговор", ОписаниеНужныхТипов);
КонецЕсли;
Для Каждого СтрокаТаблицы из ТаблицаКонтрагентов Цикл
СтрокаТаблицы["ОсновнойДоговор"] = СтрокаТаблицы["Контрагент"]["ОсновнойДоговорКонтрагента"];
КонецЦикла;
ЭлементыФормы.ВыбранныеКонтрагенты.СоздатьКолонки();
ЭлементыФормы.ВыбранныеКонтрагенты.Колонки.ОсновнойДоговор.ЭлементУправления.КнопкаОткрытия = Истина;
Как задать список выбора для колонки "ВидДокумента" табличного поля?
Процедура ПриОткрытии()
СписокВидовДокументов = Новый СписокЗначений;
Для Каждого ДокументКонфигурации из Метаданные.Документы Цикл
СписокВидовДокументов.Добавить(ДокументКонфигурации.Имя);
КонецЦикла;
ЭлементыФормы.ПодборДанных.Колонки.ВидДокумента.ЭлементУправления.СписокВыбора = СписокВидовДокументов;
КонецПроцедуры
ЭлементыФормы.ПодборДанных.Колонки.ВидДокумента.ЭлементУправления.КнопкаСпискаВыбора = Истина;
Как обеспечить возможность отбора и сортировки данных по реквизитам, не отображаемым в табличном поле формы списка справочника?
ЭлементыФормы.СправочникСписок.НастройкаОтбора.ОсновнойПоставщик.Доступность = Истина;
ЭлементыФормы.СправочникСписок.НастройкаПорядка.ОсновнойПоставщик.Доступность = Истина;
Как реализовать перетаскивание между элементами управления?
Процедура НоменклатураНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
// Получить значение, переданное системой.
Значение = ПараметрыПеретаскивания.Значение;
// В любом случае значением будет массив.
МассивЗначений = Новый Массив;
// Если перетаскивается группа, то в массив записываем входящие в нее элементы.
Если Значение.ЭтоГруппа Тогда
Выборка = Справочники.Номенклатура.Выбрать(Значение);
Пока Выборка.Следующий() Цикл
Если Не Выборка.ЭтоГруппа Тогда
МассивЗначений.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Иначе
МассивЗначений.Добавить(Значение);
КонецЕсли;
// Заполненный массив записываем в параметры.
ПараметрыПеретаскивания.Значение = МассивЗначений;
КонецПроцедуры
Процедура ТоварыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
ПолученныйМассив = ПараметрыПеретаскивания.Значение;
Если ТипЗнч(ПолученныйМассив) = Тип("Массив") Тогда
Для Каждого Значение Из ПолученныйМассив Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = Значение;
НоваяСтрока.Количество = 1;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Как вывести остатки на складах в списке номенклатуры?
Процедура СписокНоменклатураПриПолученииДанных(Элемент, ОформленияСтрок)
Запрос = Новый Запрос("ВЫБРАТЬ
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,
| ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК Товар
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки( , Номенклатура В (&МассивТоваров)) КАК ТоварыНаСкладахОстатки");
МассивНоменклатуры = Новый Массив; // для передачи в параметр запроса
Соответствие = Новый Соответствие; // для заполнения остатков в строках табличного поля
Для Каждого Строка из ОформленияСтрок Цикл
МассивНоменклатуры.Добавить(Строка.ДанныеСтроки.Ссылка);
Соответствие.Вставить(Строка.ДанныеСтроки.Ссылка, Строка);
КонецЦикла;
Запрос.УстановитьПараметр("МассивТоваров", МассивНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
// Вывести остаток в строку, найденную в соответствии по номенклатуре
// из запроса.
Пока Выборка.Следующий() Цикл
Соответствие.Получить(Выборка.Товар.Ссылка).Ячейки.Остаток.Значение = Выборка.Остаток;
КонецЦикла;
КонецПроцедуры
Другие элементы управления
i В форме есть панель со страницами. Как разместить картинку на закладке?
ЭлементыФормы.ОсновнаяПанель.Страницы.СчетаУчета.КартинкаЗаголовка = БиблиотекаКартинок.ДебетКредит;
i Как обеспечить, чтобы при открытии формы уже записанного элемента справочника "Контрагенты" активной была закладка "СчетаИДоговоры" панели "Панель"?
Процедура ПриОткрытии()
Если ЭтоНовый() = Ложь Тогда
ЭлементыФормы.Панель.ТекущаяСтраница = ЭлементыФормы.Панель.Страницы.СчетаИДоговоры;
КонецЕсли;
КонецПроцедуры
Как организовать выбор из нескольких списков документов для открытия?
Док = Метаданные.Документы;
СписокДокументов = Новый СписокЗначений();
СписокДокументов.Добавить(Док.ПлатежноеПоручениеИсходящее, , Ложь);
СписокДокументов.Добавить(Док.ПлатежноеПоручениеВходящее, , Ложь);
СписокДокументов.Добавить(Док.АккредитивПереданный, , Ложь);
СписокДокументов.Добавить(Док.АккредитивПолученный, , Ложь);
СписокДокументов.Добавить(Док.ПлатежноеТребованиеВыставленное, , Ложь);
СписокДокументов.Добавить(Док.ПлатежноеТребованиеПолученное, , Ложь);
СписокДокументов.Добавить(Док.ИнкассовоеПоручениеПереданное, , Ложь);
СписокДокументов.Добавить(Док.ИнкассовоеПоручениеПолученное, , Ложь);
СписокДокументов.Добавить(Док.ПлатежныйОрдерСписаниеДенежныхСредств, , Ложь);
СписокДокументов.Добавить(Док.ПлатежныйОрдерПоступлениеДенежныхСредств, , Ложь);
Если СписокДокументов.ОтметитьЭлементы("Укажите, какие списки документов открыть") Тогда
Для Каждого НазваниеДокумента из СписокДокументов Цикл
Если НазваниеДокумента.Пометка Тогда
ФормаСписка = Документы[НазваниеДокумента.Значение.Имя].ПолучитьФормуСписка();
ФормаСписка.Открыть();
КонецЕсли;
КонецЦикла;
КонецЕсли;
Как можно организовать подстановку обращения к персоне?
Процедура ПерсонаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Значение = Новый СписокЗначений();
Значение.Добавить("Уважаемый " + Текст);
Значение.Добавить("Уважаемая " + Текст);
Значение.Добавить("Уважаемое " + Текст);
Значение.Добавить("Уважаемые " + Текст);
Значение.Добавить(Текст);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Как в командной панели создать подменю с кнопками?
КнопкиКоманднойПанели = ЭлементыФормы.КоманднаяПанельФормы.Кнопки;
// Проверить, нет ли уже на командной панели кнопки "Сформировать".
// Если есть - удалить.
Индекс = КнопкиКоманднойПанели.Индекс(КнопкиКоманднойПанели.Найти("Сформировать"));
Если Индекс = -1 Тогда
Индекс = 0;
Иначе
КнопкиКоманднойПанели.Удалить(Индекс);
КонецЕсли;
// Создать подменю "Сформировать".
ПодменюСформировать = КнопкиКоманднойПанели.Вставить(Индекс, "Сформировать", ТипКнопкиКоманднойПанели.Подменю, "Сформировать");
// Добавить картинку.
ПодменюСформировать.Картинка = БиблиотекаКартинок.Сформировать;
ПодменюСформировать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
// Опросить перечисление о возможных вариантах периодичности.
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Перечисление.Периодичность");
Выборка = Запрос.Выполнить().Выбрать();
//Добавить кнопки к подменю.
Пока Выборка.Следующий() Цикл
Период = Выборка.Ссылка;
ПодменюСформировать.Кнопки.Добавить("кн" + Период, ТипКнопкиКоманднойПанели.Действие, "Сформировать за " + Период, Новый Действие("КнопкаСформироватьНажатие"));
КонецЦикла;
Процедура КнопкаСформироватьНажатие(Элемент)
НазваниеПериодичности = СтрЗаменить(Элемент.Имя, "кн", "");
КонецПроцедуры
Как созданной кнопке назначить "горячие клавиши"?
СозданнаяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.L, Истина, Истина,);
Как реализовать заполнение возможных значений поля выбора "ОбрабатываемаяТабличнаяЧасть" при заполнении поля ввода "ОбрабатываемыйДокумент"?
Процедура ОбрабатываемыйДокументПриИзменении(Элемент)
СписокВыбора = ЭлементыФормы.ОбрабатываемаяТабличнаяЧасть.СписокВыбора;
СписокВыбора.Очистить();
Если Элемент.Значение <> Неопределено И Не(Элемент.Значение.Пустая()) Тогда
ТабличныеЧасти = Элемент.Значение.Метаданные().ТабличныеЧасти;
Для Каждого ТабличнаяЧасть из ТабличныеЧасти Цикл
СписокВыбора.Добавить(ТабличнаяЧасть);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ОбрабатываемыйДокументОчистка(Элемент, СтандартнаяОбработка)
ОбрабатываемаяТабличнаяЧасть = "";
КонецПроцедуры
i сли пользователь указал несколько дат в поле календаря - как их перебрать?
КоллекцияДат = ЭлементыФормы.ПолеКалендаря.ВыделенныеДаты;
Для каждого ДатаКалендаря из КоллекцияДат Цикл
Сообщить(ДатаКалендаря);
КонецЦикла;
ЭлементыФормы.ПолеКалендаря.РежимВыделения = РежимВыделенияДаты.Множественный;
i Как организовать работу с индикатором?
Выборка = РезультатЗапроса.Выбрать();
Индикатор = ЭлементыФормы.ИндикаторПеребора;
Индикатор.МаксимальноеЗначение = Выборка.Количество();
Индикатор.Значение = 0;
Пока Выборка.Следующий() Цикл
Индикатор.Значение = Индикатор.Значение + 1;
КонецЦикла;
Выборка = РезультатЗапроса.Выбрать();
Индикатор = ЭлементыФормы.ИндикаторПеребора;
Индикатор.МаксимальноеЗначение = Выборка.Количество();
Индикатор.Значение = 0;
Индикатор.ОтображатьПроценты = Истина;
Индикатор.СтильОтображения = РежимСглаживанияИндикатора.Прерывистый;
Индикатор.Ориентация = Ориентация.Вертикально;
Индикатор.Шаг = 0.1;
Пока Выборка.Следующий() Цикл
Индикатор.Значение = Индикатор.Значение + 1;
КонецЦикла;
Как у элемента управления сменить источник данных?
Процедура КнопкаВыполнитьНажатие(Элемент)
ЭлементыФормы.ТП.Данные = "СписокКонтрагентов";
ЭлементыФормы.ТП.СоздатьКолонки();
КонецПроцедуры
Процедура Номенклатура(Кнопка)
ЭлементыФормы.ТП.Данные = "СписокНоменклатуры";
ЭлементыФормы.ТП.СоздатьКолонки();
КонецПроцедуры
i Как задать представление даты, отображаемое в поле ввода по-умолчанию?
ЭлементыФормы.ПолеВвода1.Формат = "ДП='01.01.0001'";
ЭлементыФормы.ПолеВвода1.Формат = "ДП='00:00:00'";
ЭлементыФормы.ПолеВвода1.Формат = "ДП='01.01.0001 00:00:00'";
i Как вывести текст в поле картинки в том случае, если картинка не выбрана?
ЭлементыФормы.ОсновноеИзображение.ТекстНевыбраннойКартинки = "фотография номенклатуры отсутствует";
i Как открыть пользователю стандартный диалог выбора цвета?
Диалог = Новый ДиалогВыбораЦвета;
Если Диалог.Выбрать() Тогда
ВыбранныйЦвет = Диалог.Цвет;
КонецЕсли;
Диалог = Новый ДиалогВыбораШрифта;
Если Диалог.Выбрать() Тогда
ВыбранныйШрифт = Диалог.Шрифт;
КонецЕсли;
Как заполнить список в форме данными запроса?
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Номенклатура.Ссылка КАК Значение,
| Номенклатура.Представление КАК Представление,
| ИСТИНА КАК Пометка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ОсновнойПоставщик = &ОсновнойПоставщик");
Запрос.УстановитьПараметр("ОсновнойПоставщик", ПолеПоставщик);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ПолеСписка.Добавить(), Выборка);
КонецЦикла;
i Как отобразить в форме файл графической схемы?
Схема = Новый ГрафическаяСхема();
Схема.Прочитать("D:/MyScheme.grs");
ЭлементыФормы.СтруктурнаяСхема.УстановитьСхему(Схема);
Интерфейсы, стили
i Как задать различные стили 1С:Предприятия для различных категорий пользователей?
ОсновнойИнтерфейс = ПользователиИнформационнойБазы.ТекущийПользователь().ОсновнойИнтерфейс.Имя;
Если ОсновнойИнтерфейс = "ИнтерфейсКассира" Тогда
ГлавныйСтиль = БиблиотекаСтилей.СтильКассира;
ИначеЕсли ОсновнойИнтерфейс = "Планирование" Тогда
ГлавныйСтиль = БиблиотекаСтилей.СтильПланирования;
Иначе
ГлавныйСтиль = БиблиотекаСтилей.Основной;
КонецЕсли;
Есть список имен интерфейсов с пометками. Как сделать помеченные интерфейсы видимыми?
СтрокаИменИнтерфейсов = "";
Для Каждого ИмяИнтерфейса из СписокИнтерфесов Цикл
Если ИмяИнтерфейса.Пометка Тогда
СтрокаИменИнтерфейсов = СтрокаИменИнтерфейсов + ИмяИнтерфейса + ",";
КонецЕсли;
КонецЦикла;
ГлавныйИнтерфейс.ПереключитьИнтерфейс(СтрокаИменИнтерфейсов);
Как из формы обработки отключить глобальный обработчик ожиданий?
Процедура ПриНачалеРаботыСистемы()
ПодключитьОбработчикОжидания("ПроверкаОпроса", 60);
КонецПроцедуры
Процедура ОтказОтОпроса() Экспорт
ОтключитьОбработчикОжидания("ПроверкаОпроса");
КонецПроцедуры
ОтказОтОпроса();
Запросы, отчеты
Запросы
Как получить данные из табличной части документов?
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
Как получить данные из табличной части документов и представить их в иерархическом виде?
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ИТОГИ ПО
Номенклатура ТОЛЬКО ИЕРАРХИЯ
Как подсчитать количество одинаковых элементов в выбираемых данных?
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслугТовары.Номенклатура
Как применять условия для отбора по значениям полей, вычисленных как результат агрегатной функции?
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслугТовары.Номенклатура
ИМЕЮЩИЕ
СУММА(РеализацияТоваровУслугТовары.Количество) > 10
Как ограничить выборку из виртуальной таблицы?
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
Как просуммировать данные по одинаковым значениям одного из полей выборки?
ВЫБРАТЬ
ПродажиОбороты.Подразделение КАК Подразделение,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты((&ДатаНач, &ДатаКон) КАК ПродажиОбороты
ИТОГИ СУММА(СтоимостьОборот) ПО
Подразделение
Как получить только те записи, в которых значение определенного поля превышает указанное значение?
ВЫБРАТЬ
ПродажиОбороты.Подразделение КАК Подразделение,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Подразделение = &Подразделение) КАК ПродажиОбороты
ГДЕ
ПродажиОбороты.КоличествоОборот > &Порог
Как обратиться к подчиненным полям в запросе?
ВЫБРАТЬ
ПродажиОбороты.ДоговорКонтрагента.Владелец,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
ВЫБРАТЬ
ПродажиОбороты.ДоговорКонтрагента.Владелец,
СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты((&ДатаНач, &ДатаКон) КАК ПродажиОбороты
СГРУППИРОВАТЬ ПО
ПродажиОбороты.ДоговорКонтрагента.Владелец
Как объединить результаты нескольких запросов?
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ОБЪЕДИНИТЬ
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслугВозвратнаяТара.Номенклатура
ИЗ
Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслугВозвратнаяТара
ОБЪЕДИНИТЬ
ВЫБРАТЬ РАЗЛИЧНЫЕ
РеализацияТоваровУслугУслуги.Номенклатура
ИЗ
Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
Как выбрать данные из двух таблиц, удовлетворяющие определенному условию?
ВЫБРАТЬ
ЗаказыПокупателейОстатки.Номенклатура,
ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки
ПО
ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
Как дополнить данные одной таблицы данными, выбранными из другой таблицы по определенному условию?
ВЫБРАТЬ
ЗаказыПокупателейОстатки.Номенклатура,
ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки
ПО
ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
Как объединить данные из двух таблиц по определенному условию?
ВЫБРАТЬ
ВЫБОР
КОГДА (ЗаказыПокупателейОстатки.Номенклатура) ЕСТЬ NULL ТОГДА ЗаказыПоставщикамОстатки.Номенклатура
ИНАЧЕ ЗаказыПокупателейОстатки.Номенклатура
КОНЕЦ КАК Номенклатура,
ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки
ПОЛНОЕ СОЕДИНЕНИЕ
РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки
ПО
ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
СУММА(ВложенныйЗапрос.ЗаказаноПокупателями) КАК ЗаказаноПокупателями,
СУММА(ВложенныйЗапрос.ЗаказаноПоставщикам) КАК ЗаказаноПоставщикам
ИЗ
(ВЫБРАТЬ
ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями,
0 КАК ЗаказаноПоставщикам
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч, ) КАК ЗаказыПокупателейОстатки
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ЗаказыПоставщикамОстатки.Номенклатура,
0,
ЗаказыПоставщикамОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч, ) КАК ЗаказыПоставщикамОстатки
) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Номенклатура
Как вывести некоторое значение вместо NULL в запросе?
ВЫБРАТЬ
ЕСТЬNULL(Справочник.Номенклатура.Артикул, "---") КАК Артикул,
Справочник.Номенклатура.Представление КАК Номенклатура
Как вместе с данными некоторой таблицы получить общие итоги из этой же таблицы?
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.СуммаОборот КАК СуммаПродаж,
ПродажиОбороты.СуммаОборот / СовокупныеОбороты.СуммаОборот * 100 КАК ПроцентнаяДоля
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК СовокупныеОбороты
ПО
ИСТИНА
УПОРЯДОЧИТЬ ПО
ПроцентнаяДоля УБЫВ
Как получить иерархические итоги по группе справочника?
ВЫБРАТЬ
ТоварыГруппы.Ссылка КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
(ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель В ИЕРАРХИИ(&Группа) И (Номенклатура.ЭтоГруппа = ЛОЖЬ)
) КАК ТоварыГруппы
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментПолучения, Номенклатура В ИЕРАРХИИ (&Группа)) КАК ТоварыНаСкладахОстатки
ПО
ТоварыГруппы.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ИТОГИ СУММА(КоличествоОстаток) ПО
Номенклатура ТОЛЬКО ИЕРАРХИЯ
Как по состоянию на заданную дату по регистру "ОстаткиНаСкладе" найти последний документ "ПоступлениеТоваровУслуг", по которому приходила номенклатура?
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
МАКСИМУМ(ТоварыНаСкладах.Регистратор) КАК Регистратор
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
МАКСИМУМ(ТоварыНаСкладах.Период) КАК Период
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
ТоварыНаСкладах.Период <= &ДатаОтчета И (ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Номенклатура
) КАК ВложенныйЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ПО
ВложенныйЗапрос.Номенклатура = ТоварыНаСкладах.Номенклатура И ВложенныйЗапрос.Период = ТоварыНаСкладах.Период
ГДЕ
(ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Номенклатура
Как подсчитать количество записей с одинаковым значением некоторого поля?
ВЫБРАТЬ
Контрагенты.ОсновнойМенеджерПокупателя,
КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК КоличествоЗакрепленных
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
(Контрагенты.ЭтоГруппа = ЛОЖЬ) И (Контрагенты.ОсновнойМенеджерПокупателя <> &НеЗаполненМенеджер)
СГРУППИРОВАТЬ ПО
Контрагенты.ОсновнойМенеджерПокупателя
УПОРЯДОЧИТЬ ПО
КоличествоЗакрепленных УБЫВ
Справочники.Пользователи.ПустаяСсылка()
Как в итоговых записях вывести количество различных записей?
ВЫБРАТЬ
Контрагенты.ОсновнойМенеджерПокупателя.Представление КАК ОсновнойМенеджерПокупателя,
Контрагенты.Представление,
1 КАК КоличествоЗакрепленных
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
(Контрагенты.ЭтоГруппа = ЛОЖЬ)
УПОРЯДОЧИТЬ ПО
КоличествоЗакрепленных УБЫВ
ИТОГИ КОЛИЧЕСТВО(КоличествоЗакрепленных) ПО
ОсновнойМенеджерПокупателя
Как узнать количество записей в результате запроса?
Результат = Запрос.Выполнить();
КолЗаписей = Результат.Выбрать().Количество();
Как проверить достаточность остатков товаров на складах, указанных в документе?
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.Размещение КАК Склад,
ВложенныйЗапрос.КоличествоСписываемое,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
(ВЫБРАТЬ
ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
ВнутреннийЗаказТовары.Размещение КАК Размещение,
СУММА(ВнутреннийЗаказТовары.Количество *ВнутреннийЗаказТовары.Коэффициент) КАК КоличествоСписываемое
ИЗ
Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
ГДЕ
ВнутреннийЗаказТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
ВнутреннийЗаказТовары.Номенклатура,
ВнутреннийЗаказТовары.Размещение
) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремениДокумента,
Склад В (ВЫБРАТЬ РАЗЛИЧНЫЕ
ВЫРАЗИТЬ(ВнутреннийЗаказТоварыДляОтбора.Размещение КАК Справочник.Склады)
ИЗ
Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТоварыДляОтбора
ГДЕ
ВнутреннийЗаказТоварыДляОтбора.Ссылка = &Ссылка
И
НЕ ВЫРАЗИТЬ(ВнутреннийЗаказТоварыДляОтбора.Размещение КАК Справочник.Склады) ЕСТЬ NULL )
И
Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ
ВнутреннийЗаказТоварыДляОтбора.Номенклатура
ИЗ
Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТоварыДляОтбора
ГДЕ
ВнутреннийЗаказТоварыДляОтбора.Ссылка = &Ссылка)) КАК ТоварыНаСкладахОстатки
ПО
ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ВложенныйЗапрос.Размещение = ТоварыНаСкладахОстатки.Склад
Как в запросе осуществить отбор по значению перечисления?
Запрос.Текст = "ВЫБРАТЬ
| ВоинскийУчетСрезПоследних.Физлицо
|ИЗ
| РегистрСведений.ВоинскийУчет.СрезПоследних(&ДатаОтчета) КАК ВоинскийУчетСрезПоследних
|ГДЕ
| ВоинскийУчетСрезПоследних.ОтношениеКВоинскомуУчету = &Состоит"
Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета);
Запрос.УстановитьПараметр("Состоит", Перечисления.ОтношениеКВоинскомуУчету.Состоит);
Как получить курсы валют на две интересующие даты?
ВЫБРАТЬ
ВалютыСрезПоследних.Валюта,
ВалютыСрезПоследних.Курс,
&ПерваяДата Как Дата
ИЗ
РегистрСведений.Валюты.СрезПоследних(&ПерваяДата, ) КАК ВалютыСрезПоследних
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВалютыСрезПоследних.Валюта,
ВалютыСрезПоследних.Курс,
&ВтораяДата
ИЗ
РегистрСведений.Валюты.СрезПоследних(&ВтораяДата, ) КАК ВалютыСрезПоследних
Как одним запросом получить таблицу расхождений курсов взаиморасчетов всех выписанных документов "ЗаказПокупателя" с официальным курсом?
ВЫБРАТЬ
ВложенныйЗапрос.Ссылка КАК Документ,
ВложенныйЗапрос.ДоговорКонтрагентаВалютаВзаиморасчетов КАК ВалютаДоговора,
ВложенныйЗапрос.КурсВзаиморасчетов,
ВЫБОР
КОГДА КурсыВалют.Курс ЕСТЬ NULL ТОГДА 0
ИНАЧЕ КурсыВалют.Курс
КОНЕЦ КАК КурсОфициальный,
ВЫБОР
КОГДА КурсыВалют.Курс ЕСТЬ NULL ТОГДА ВложенныйЗапрос.КурсВзаиморасчетов
ИНАЧЕ ВложенныйЗапрос.КурсВзаиморасчетов - КурсыВалют.Курс
КОНЕЦ КАК Превышение
ИЗ
(ВЫБРАТЬ
ЗаказПокупателя.Ссылка КАК Ссылка,
МАКСИМУМ(КурсыВалют.Период) КАК Период,
ЗаказПокупателя.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ДоговорКонтрагентаВалютаВзаиморасчетов
ИЗ
Документ.ЗаказПокупателя КАК ЗаказПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.КурсыВалют КАК КурсыВалют
ПО
ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов = КурсыВалют.Валюта И ЗаказПокупателя.Дата >= КурсыВалют.Период
СГРУППИРОВАТЬ ПО
ЗаказПокупателя.КурсВзаиморасчетов,
ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов,
ЗаказПокупателя.Ссылка
) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.КурсыВалют КАК КурсыВалют
ПО
ВложенныйЗапрос.ДоговорКонтрагентаВалютаВзаиморасчетов = КурсыВалют.Валюта И ВложенныйЗапрос.Период = КурсыВалют.Период
Как написать запрос таким образом, чтобы на определенном уровне иерархии запроса считались одни итоговые функции, а на другом уровне другие?
ВЫБРАТЬ
ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление,
ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры.Представление,
ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК КоличествоОстаток,
NULL как Заказ,
0 КАК Резерв
ИЗ
РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЗаказыПокупателейОстатки.Номенклатура,
ЗаказыПокупателейОстатки.Номенклатура.Представление,
ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры,
ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры.Представление,
0,
ЗаказыПокупателейОстатки.ЗаказПокупателя,
ЗаказыПокупателейОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
ИТОГИ СУММА(КоличествоОстаток), СУММА(Резерв) ПО
Номенклатура,
ХарактеристикаНоменклатуры
Как получить перечень документов, приведших данные подчиненного периодического регистра сведений к определенному состоянию?
ВЫБРАТЬ
КандидатыНаРаботу.ФизЛицо КАК ФизЛицо,
КандидатыНаРаботу.Регистратор КАК Документ,
КандидатыНаРаботу.Статус КАК Статус
ИЗ
РегистрСведений.КандидатыНаРаботу.СрезПоследних(&ДатаОтчета, ) КАК КандидатыНаРаботуСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.КандидатыНаРаботу КАК КандидатыНаРаботу
ПО
КандидатыНаРаботуСрезПоследних.ФизЛицо = КандидатыНаРаботу.ФизЛицо
ГДЕ
КандидатыНаРаботуСрезПоследних.Статус = &Отложен И КандидатыНаРаботу.Период <= &ДатаОтчета
УПОРЯДОЧИТЬ ПО
КандидатыНаРаботу.ФизЛицо.Наименование,
Документ
ИТОГИ МАКСИМУМ(Статус) ПО
ФизЛицо
АВТОУПОРЯДОЧИВАНИЕ
Как установить параметры запроса, если текст запроса заранее не известен?
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)");
// Получить описание параметров запроса.
ПараметрыЗапроса = Запрос.НайтиПараметры();
Для Каждого ПараметрЗапроса Из ПараметрыЗапроса Цикл
ЗаданноеЗначение = Неопределено;
// Открыть диалог ввода значения данного параметра.
Если ВвестиЗначение(ЗаданноеЗначение, "Задайте значение параметра " + ПараметрЗапроса.Имя, ПараметрЗапроса.ТипЗначения) Тогда
Запрос.УстановитьПараметр(ПараметрЗапроса.Имя, ЗаданноеЗначение);
Иначе
Возврат;
КонецЕсли;
КонецЦикла;
РезультатЗапроса = Запрос.Выполнить();
Анализ данных
i Как получить данные о товарах продаваемых вместе?
Анализ = Новый АнализДанных;
// Выбранный тип анализа как раз и указывает на то, что ищем
// "совместно продаваемые" товары.
Анализ.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Регистратор Как ДокументПродажи,
| ПродажиКомпанииОбороты.Номенклатура
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты
|УПОРЯДОЧИТЬ ПО
| ДокументПродажи";
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
// Получить продажи за указанный период.
// Выбрана периодичность по Регистратору, т.к. необходимо получить
// данные о совместных продажах в рамках одной покупки.
Анализ.ИсточникДанных = Запрос.Выполнить();
// Выполнить анализ в соответствии с указанным источником.
РезультатАнализа = Анализ.Выполнить();
// Для вывода результата анализа воспользуемся построителем
// отчета анализа данных.
Построитель = Новый ПостроительОтчетаАнализаДанных();
Построитель.Макет = Неопределено;
Построитель.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(РезультатАнализа, ТабДок);
ТабДок.Показать();
i Как порекомендовать сопутствующие товары?
Анализ = Новый АнализДанных;
// Найти ассоциации.
Анализ.ТипАнализа = Тип("АнализДанныхПоискАссоциаций");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Регистратор КАК ДокументПродажи,
| ПродажиКомпанииОбороты.Номенклатура
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты
|УПОРЯДОЧИТЬ ПО
| ДокументПродажи";
// Ассоциации ищем подокументно, это определяется поведением
// объекта "АнализДанных" "по умолчанию" при выборе
// периодичности виртуальной таблицы Регистратор
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Анализ.ИсточникДанных = Запрос.Выполнить();
РезультатАнализа = Анализ.Выполнить();
// Исходя из полученного анализа создать прогноз.
МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза();
// ТЗ- таблица значений, содержащая данные о том,
// какие номенклатурные позиции вошли в "текущую" покупку.
МодельПрогноза.ИсточникДанных = ТЗ;
// ТП - элемент управления "Табличное поле" связанный через
// свойство "Данные" с реквизитом формы "ТП" (тип ТаблицаЗначений)
ТП = МодельПрогноза.Выполнить();
ЭлементыФормы.ТП.СоздатьКолонки();
i Как посмотреть, что будет покупаться в дальнейшем?
ТабДок = Новый ТабличныйДокумент;
Анализ = Новый АнализДанных;
// Нужно спрогнозировать цепочку событий, поэтому выбираем
// тип анализа "Поиск последовательностей".
Анализ.ТипАнализа = Тип("АнализДанныхПоискПоследовательностей");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец КАК Контрагент,
| ПродажиКомпанииОбороты.Номенклатура,
| ПродажиКомпанииОбороты.Период
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты";
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Анализ.ИсточникДанных = Запрос.Выполнить();
Колонка = Анализ.НастройкаКолонок.Найти("Период");
// Указать, что колонка "Период" имеет тип "Время",
// что "позволит понять" хронологию событий
Колонка.ТипКолонки = ТипКолонкиАнализаДанныхПоискПоследовательностей.Время;
РезультатАнализа = Анализ.Выполнить();
МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза();
// ТЗ- таблица значений, содержащая исходные данные для прогноза
// например, какой контрагент, какой товар закупил (исходя из чего
// попытаемся узнать, что они еще закупят).
МодельПрогноза.ИсточникДанных = ТЗ;
// ТП - элемент управления "Табличное поле" связанный через
// свойство "Данные" с реквизитом формы "ТП"
//(тип ТаблицаЗначений)
ТП = МодельПрогноза.Выполнить();
ЭлементыФормы.ТП.СоздатьКолонки();
// Построитель - реквизит формы, имеющий тип
// ПостроительОтчетаАнализаДанных. Ряд табличных полей /
/ в диалоге могут быть связаны со свойствами-коллекциями
// данного объекта
Построитель.ТипАнализа = Тип("АнализДанныхПоискПоследовательностей");
Построитель.Вывести(РезультатАнализа, ТабДок);
ТабДок.Показать();
Представление результатов отчетов
Табличный документ, текстовый документ
Как вывести результат запроса в табличный документ?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.СкладКомпании КАК СкладКомпанииСсылка,
| ОстаткиТоваровКомпанииОстатки.Номенклатура КАК НоменклатураСсылка,
| СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) КАК Остаток,
| ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление КАК Номенклатура,
| ОстаткиТоваровКомпанииОстатки.СкладКомпании.Представление КАК Склад
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Момент) КАК ОстаткиТоваровКомпанииОстатки
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровКомпанииОстатки.СкладКомпанииСсылка,
| ОстаткиТоваровКомпанииОстатки.НоменклатураСсылка
|ИТОГИ СУММА(Остаток) ПО
| Общие,
| Склад";
Запрос.УстановитьПараметр("Момент", Неопределено);
Результат = Запрос.Выполнить();
// Получить поле табличного документа, в которое будем выводить результат.
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
// Очистить данные в табличном документе
// (возможно данные уже выводились ранее).
ТабДок.Очистить();
Макет = ПолучитьМакет("Макет");
// Получить именованные области из макета.
ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщийИтог");
ОбластьСклад = Макет.ПолучитьОбласть("Склад");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
// Получить выборку по первой итоговой группировке (первый уровень).
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// Запись общего итога всегда одна, поэтому можно обойтись без организации цикла.
ВыборкаОбщийИтог.Следующий();
// Произвести запись данных из полей выборки в именованные
// области с совпадающими именами.
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
// Включить область с заполненными параметрами в табличный документ.
ТабДок.Вывести(ОбластьОбщийИтог);
// "От" записи первого уровня получить подчиненную выборку
// записей второго уровня (по итоговой группировке "Склад").
ВыборкаПоСкладу = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСкладу.Следующий() Цикл
ОбластьСклад.Параметры.Заполнить(ВыборкаПоСкладу);
ТабДок.Вывести(ОбластьСклад);
// Получить подчиненную выборку, содержащую детальные записи.
ВыборкаПоНоменклатуре = ВыборкаПоСкладу.Выбрать();
Пока ВыборкаПоНоменклатуре.Следующий() Цикл
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаПоНоменклатуре);
ТабДок.Вывести(ОбластьНоменклатура);
КонецЦикла;
КонецЦикла;
Как вывести данные в табличный документ с возможностью сворачивания и разворачивания данных по группировкам?
// Перед выводом данных в табличный документ используется метод:
ТабДок.НачатьАвтогруппировкуСтрок();
// Выести область с указанием уровня.
ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
// В конце работы с табличным документом необходимо выполнить
// следующий метод:
ТабДок.ЗакончитьАвтогруппировкуСтрок();
Как при выводе данных в табличный документ свернуть все выводимые группировки?
УровеньГруппировки = 1; //содержит индекс, с нуля
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки);
Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок?
ТабДок.Вывести(ОбластьНоменклатура, ВыборкаПоНоменклатуре.Уровень(), , Ложь);
i Как выгрузить результат запроса с показом иерархии?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
| ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиКомпанииОбороты
|ИТОГИ СУММА(КоличествоОборот) ПО
| Номенклатура ИЕРАРХИЯ";
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Результат = Запрос.Выполнить();
// Осуществить выгрузку с сохранением иерархии.
ЭлементыФормы.ТП.Значение = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ЭлементыФормы.ТП.СоздатьКолонки();
i Где и как можно увидеть макет, автоматически генерируемый построителем отчета?
ПостроительОтчета.Макет = Неопределено;
ПостроительОтчета.Макет.Показать()
i Как из построителя отчета передать данные в сводную таблицу?
ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ИсточникДанных = ПостроительОтчетаОтчет;
ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ОтображатьПоля = Истина;
Отчет формируется построителем отчета. Как убрать одну из колонок, поместив ее данные в расшифровку другой?
Процедура АлфавитныйПереченьКандидатовСРасшифровкой()
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.Текст ="ВЫБРАТЬ
| РегистрацияСобеседованияКандидата.ФизЛицо КАК Кандидат,
| РегистрацияСобеседованияКандидата.РезультатСобеседования КАК Результат,
| РегистрацияСобеседованияКандидата.Ссылка
|ИЗ
| Документ.РегистрацияСобеседованияКандидата КАК РегистрацияСобеседованияКандидата
|УПОРЯДОЧИТЬ ПО
| РегистрацияСобеседованияКандидата.ФизЛицо.Наименование";
ПостроительОтчета.Выполнить();
Макет = ПостроительОтчета.Макет;
// Очистить области, связанные с ссылкой.
ТекущаяОбласть = Неопределено;
Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Ссылка", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
ТекущаяОбласть.Очистить(Истина, Истина, Истина);
КонецЕсли;
КонецЦикла;
// Заполнить параметр расшифровки для областей, где параметр = "Результат".
ТекущаяОбласть = Неопределено;
Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Результат", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
Если ТекущаяОбласть.Параметр = "Результат" Тогда
ТекущаяОбласть.ПараметрРасшифровки = "Ссылка";
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПостроительОтчета.Макет = Макет;
ПостроительОтчета.Вывести();
КонецПроцедуры
Как сохранить настройки построителя отчета до следующего открытия формы отчета?
СохранитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя, ПостроительОтчета.ПолучитьНастройки());
// До установки настроек они ранее должны были быть заполнены
// по тексту запроса.
ПостроительОтчета.ЗаполнитьНастройки();
// Установить настройки построителя отчета.
Настройка = ВосстановитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя);
Если Настройка <> Неопределено Тогда
ПостроительОтчета.УстановитьНастройки(Настройка);
КонецЕсли;
Как организовать показ примечаний в формируемом табличном документе?
Процедура Отчет(ДатаНач, ДатаКон) Экспорт
Запрос = Новый Запрос;
// Сбор данных.
Запрос.Текст = "ВЫБРАТЬ
| Событие.Ответственный КАК Ответственный,
| Событие.Дата,
| Событие.ВидСобытия,
| Событие.Контрагент,
| Событие.СодержаниеСобытия,
| Событие.ОписаниеСобытия
|ИЗ
| Документ.Событие КАК Событие
|ГДЕ
| Событие.Дата МЕЖДУ &ДатаНач И &ДатаКон И (Событие.Проведен) И Событие.СостояниеСобытия = &Завершено
|УПОРЯДОЧИТЬ ПО
| Ответственный";
Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
Запрос.УстановитьПараметр("Завершено", Перечисления.СостоянияСобытий.Завершено);
Результат = Запрос.Выполнить();
// Сформировать табличный документ.
Макет = ПолучитьМакет("Отчет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок = Новый ТабличныйДокумент;
ОбластьЗаголовок.Параметры.ДатаНач = ДатаНач;
ОбластьЗаголовок.Параметры.ДатаКон = ДатаКон;
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ВыборкаДетали = Результат.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ОбластьДетальныхЗаписей.Область("Описание").Примечание.Текст = ВыборкаДетали.СодержаниеСобытия;
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
ТабДок.Показать();
КонецПроцедуры
i Как обеспечить, чтобы при вводе на печать не печатались первая колонка и первая строка табличного документа "ДокументРезультат"?
ДокументРезультат.ОбластьПечати = ДокументРезультат.Область(2, 2, ДокументРезультат.ВысотаТаблицы, ДокументРезультат.ШиринаТаблицы );
i Как обеспечить фиксацию верхней части табличного документа, генерируемого построителем отчета, по срезу шапки таблицы?
ДокументРезультат.ФиксацияСверху = ПостроительОтчета.Макет.Области.ШапкаТаблицы.Низ;
i Табличный документ формируется построителем отчета. Как при печати табличного документа обеспечить вывод шапки таблицы на каждой странице?
ОбластьШапки = ПостроительОтчета.Макет.Области.ШапкаТаблицы;
ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ОбластьШапки.Верх, , ОбластьШапки.Низ);
i Как при выводе на печать "длинного" документа указать в колонтитулах страниц номер документа, дату и номер страницы?
ТабДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = Метаданные().Представление() + " № " + Номер;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "[&НомерСтраницы]";
i Табличный документ формируется по макету, автоматически генерируемому построителем отчета. Как задать ориентацию страницы при печати?
ПостроительОтчета.Вывести(ДокументРезультат);
ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Табличный документ формируется построителем отчета. Как для всех выводимых числовых показателей установить вывод без дробной части?
// Получить макет построителя отчета.
Макет = ПостроительОтчета.Макет;
// Сформатировать все области, где встречается слово "Стоимость".
ТекущаяОбласть = Неопределено;
Пока Истина Цикл
ТекущаяОбласть = Макет.НайтиТекст("Стоимость", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
Если ТекущаяОбласть.Параметр <> "" Тогда
ТекущаяОбласть.Формат = "ЧДЦ=0";
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Сформатировать все области, где встречается слово "Количество".
ТекущаяОбласть = Неопределено;
Пока Истина Цикл
ТекущаяОбласть = Макет.НайтиТекст("Количество", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
Если ТекущаяОбласть.Параметр <> "" Тогда
ТекущаяОбласть.Формат = "ЧДЦ=0";
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Назначить построителю измененный макет.
ПостроительОтчета.Макет = Макет;
// Вывести результат работы построителя отчета в табличный документ.
i Как для построителя отчета совместить назначение своего макета и применение одного из стандартных макетов оформления?
ПостроительОтчета.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Апельсин);
ПостроительОтчета.Макет = ПолучитьМакет("МакетЭтогоОтчета");
ПостроительОтчета.ОформитьМакет();
Как при получении данных из запроса обойти только итоговые записи?
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДок.Очистить();
Макет = ПолучитьМакет("Отчет");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
| ПродажиКомпанииОбороты.Номенклатура.Представление,
| ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот,
| ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода,&КонПериода) КАК ПродажиКомпанииОбороты
|ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО
| ОБЩИЕ,
| Номенклатура Иерархия";
Запрос.УстановитьПараметр("&НачПериода", НачПериода);
Запрос.УстановитьПараметр("&КонПериода", КонецДня(КонПериода));
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
// Обход по определенным в запросе итоговым группировкам.
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// Запись общих итогов одна, поэтому нет необходимости в цикле.
ВыборкаОбщийИтог.Следующий();
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Вывести(ОбластьОбщийИтог);
// Получить подчиненную выборку по итоговой группировке "номенклатура".
ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьНоменклатура);
// Несмотря на то, что можем получить еще одну подчиненную
// выборку (по детальным записям) мы это не делаем, т.е. фактически
// при обходе пропускаем детальные записи.
КонецЦикла;
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
Как при получении данных из запроса обойти только иерархические итоговые записи?
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ВыборкаОбщийИтог.Следующий();
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Вывести(ОбластьОбщийИтог);
ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьНоменклатура);
КонецЦикла;
i Как вывести картинку в табличный документ?
ТабДок = Новый ТабличныйДокумент;
Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой");
Картинка = Новый Картинка(ПутьККартинке);
// Элемент управления "Логотип" входит в коллекцию картинок области.
ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка;
ТабДок.Вывести(ОбластьКартинки);
ТабДок.Показать();
Как вывести картинку в табличный документ без изменения макета?
Область = Макет.ПолучитьОбласть("Шапка");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 5;
Рисунок.Высота = 10;
Рисунок.Ширина = 10;
Рисунок.Лево = 5;
Рисунок.Картинка = Новый Картинка(ПутьККартинке);
Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
ТабДок.Вывести(Область);
Как работать со сводной таблицей?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец КАК ДоговорВзаиморасчетовПокупателяВладелец,
| ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
| ПродажиКомпанииОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании,
| СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ПродажиКомпанииОбороты.СуммаПродажиОборот) КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода,&КонПериода) КАК ПродажиКомпанииОбороты
|СГРУППИРОВАТЬ ПО
| ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец,
| ПродажиКомпанииОбороты.Номенклатура,
| ПродажиКомпанииОбороты.ПодразделениеКомпании
|ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО
| ДоговорВзаиморасчетовПокупателяВладелец,
| Номенклатура,
| ПодразделениеКомпании";
// На состав полей, которые могут быть размещены в измерениях,
// данных сводной таблицы влияет раздел "Итоги".
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Результат = Запрос.Выполнить();
Сводная = ЭлементыФормы.ПолеДокумента.ВстроенныеТаблицы.СводнаяТаблица1;
Сводная.ИсточникДанных = Результат;
Как программно разместить данные в сводной таблице и оформить ее?
Построитель = Новый ПостроительОтчета();
Построитель.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление
|ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ,
| Склад ИЕРАРХИЯ ";
Построитель.ЗаполнитьНастройки();
Таблица = ЭлементыФормы.ПолеТабличногоДокумента1.ВстроенныеТаблицы.СводнаяТаблица1;
Таблица.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед);
Таблица.ИсточникДанных = Построитель;
Таблица.Строки.Добавить("Номенклатура");
Таблица.Колонки.Добавить("Склад");
Таблица.Данные.Добавить("КоличествоПриход");
Таблица.ОтображатьЛинии = ТипОтображенияЛинийСводнойТаблицы.Всегда;
Как создать печатную форму посредством текстового шаблона?
// Создать текстовый документ, в который будет выполняться вывод.
ТекстДок = Новый ТекстовыйДокумент;
// Получить макет.
Макет = ПолучитьМакет("ЗаявкаНаПропуск");
// Заголовок.
Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.Дата = Дата;
Область.Параметры.ВремяНач = НачалоСобытия;
Область.Параметры.ВремяОконч = ОкончаниеСобытия;
ТекстДок.Вывести(Область);
// Состав.
Область = Макет.ПолучитьОбласть("Состав");
Для Каждого ТекСтрокаСторонниеЛица Из СторонниеЛица Цикл
Область.Параметры.ФИО = Строка(ТекСтрокаСторонниеЛица.Лицо);
ТекстДок.Вывести(Область);
КонецЦикла;
// Подвал.
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.Ответственный = Ответственный.Наименование;
ТекстДок.Вывести(Область);
// Открыть сформированный документ.
ТекстДок.Показать("Заявка на пропуска для События №" + Номер);
Диаграммы
i Как заполнить диаграмму данными?
Диаграмма = ЭлементыФормы.Диаграмма;
// Очистить диаграмму, возможно ранее в нее уже выводились данные.
Диаграмма.КоличествоСерий = 0;
Диаграмма.КоличествоТочек = 0;
// Количество серий будет ограничиваться (не все значения будут показываться).
Диаграмма.МаксимумСерий = МаксимумСерий.Ограничено;
Диаграмма.МаксимумСерийКоличество = 7;
Диаграмма.ВидПодписей = ВидПодписейКДиаграмме.Процент;
Диаграмма.ОбластьЗаголовка.Текст = "Обороты номенклатуры";
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура,
| СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(, , , ) КАК ПродажиКомпанииОбороты
|СГРУППИРОВАТЬ ПО
| ПродажиКомпанииОбороты.Номенклатура";
Результат = Запрос.Выполнить();
// Запретить обновление диаграммы на время вывода данных.
Диаграмма.Обновление = Ложь;
// Установить единственную точку.
Диаграмма.КоличествоТочек = 1;
Диаграмма.Точки[0].Текст = "Количество";
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Количество серий, если бы не ограничивали зависело бы от результата запроса.
КоличествоСерий = Диаграмма.Серии.Количество();
Диаграмма.КоличествоСерий = КоличествоСерий + 1;
Диаграмма.Серии[КоличествоСерий].Текст = Выборка.Номенклатура;
// Установить значение "на пересечении" точки и серии.
// Первый параметр - 0 , так как в диаграмме только одна точка.
Диаграмма.УстановитьЗначение(0, КоличествоСерий, Выборка.КоличествоОборот);
КонецЦикла;
// Обновить диаграмму.
Диаграмма.Обновление = Истина;
Как заполнить данными измерительную диаграмму?
// Настроить свойства диаграммы.
Диаграмма = ЭлементыФормы.ДиаграммаПродажи;
Диаграмма.ТипДиаграммы = ТипДиаграммы.Измерительная;
Диаграмма.АвтоМаксимальноеЗначение = Ложь;
Диаграмма.МаксимальноеЗначение = 20000;
Диаграмма.АвтоМинимальноеЗначение = Ложь;
Диаграмма.МинимальноеЗначение = 0;
// Создать три полосы.
Полосы = Диаграмма.ПолосыИзмерительнойДиаграммы;
НоваяПолоса = Полосы.Добавить();
НоваяПолоса.Начало = 0;
НоваяПолоса.Конец = 1000;
НоваяПолоса.ЦветФона = WebЦвета.Красный;
НоваяПолоса = Полосы.Добавить();
НоваяПолоса.Начало = 1000;
НоваяПолоса.Конец = 5000;
НоваяПолоса.ЦветФона = WebЦвета.Желтый;
НоваяПолоса = Полосы.Добавить();
НоваяПолоса.Начало = 5000;
НоваяПолоса.Конец = 20000;
НоваяПолоса.ЦветФона = WebЦвета.Зеленый;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ПродажиОбороты.Период,
| ПродажиОбороты.СтоимостьОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День, ) КАК ПродажиОбороты");
Запрос.УстановитьПараметр("ДатаНачала", '2004.08.10 00:00:00');
Запрос.УстановитьПараметр("ДатаОкончания", '2004.08.30 23:59:59');
ЭлементыФормы.ДиаграммаПродажи.ИсточникДанных = Запрос.Выполнить().Выгрузить();
i Как вывести результат запроса в сводную диаграмму?
Запрос = Новый Запрос( "ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление
|ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ,
| Склад ИЕРАРХИЯ");
Диаграмма = ЭлементыФормы.СводнаяДиаграмма1;
Диаграмма.ОбластьЗаголовка.Текст = "Приход товаров";
Диаграмма.ИсточникДанных = Запрос.Выполнить();
Диаграмма.Серии.Добавить("Номенклатура");
Диаграмма.Точки.Добавить("Склад");
Диаграмма.Ресурсы.Добавить("КоличествоПриход");
i Как заполнить диаграмму Ганта данными?
ДГ = ЭлементыФормы.ДГ;
// Установить заголовок диаграммы.
ДГ.ОбластьЗаголовка.Текст = "График дежурств";
// Интервал будем определять самостоятельно.
ДГ.АвтоОпределениеПолногоИнтервала = Ложь;
// Установить интервал.
ДГ.УстановитьПолныйИнтервал(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
// В диаграмме будет две точки - сотрудники Петров и Сидоров...
ТочкаП = ДГ.УстановитьТочку("Петров");
ТочкаС = ДГ.УстановитьТочку("Сидоров");
// и две серии - дежурство на вахте и дежурство в центральном офисе.
СерияНаВахте = ДГ.УстановитьСерию("На вахте");
СерияВЦентре = ДГ.УстановитьСерию("В центральном офисе");
// Задать цвета серий, отличные от цвета по умолчанию.
СерияНаВахте.Цвет = WebЦвета.Синий;
СерияВЦентре.Цвет = WebЦвета.СветлоЖелтый;
ПервыйДень = НачалоМесяца(ТекущаяДата());
// Получить значение диаграммы - дежурство Петрова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте);
// В значении определить новый интервал.
Интервал = Значение.Добавить();
Интервал.Текст = "Работает на вахте";
// Определить границы интервала.
Интервал.Начало = ПервыйДень;
Интервал.Конец = ПервыйДень + 10 * 24 * 60 * 60;
// Получить значение диаграммы - дежурство Петрова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре);
Интервал = Значение.Добавить();
Интервал.Текст = "Работает в центральном офисе";
Интервал.Начало = ПервыйДень + 14 * 24 * 60 * 60;
Интервал.Конец = ПервыйДень + 24 * 24 * 60 * 60;
// Получить значение диаграммы - дежурство Сидорова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте);
Интервал = Значение.Добавить();
Интервал.Текст = "Работает на вахте";
Интервал.Начало = ПервыйДень + 5 * 24 * 60 * 60;
Интервал.Конец = ПервыйДень + 15 * 24 * 60 * 60;
// Получить значение диаграммы - дежурство Сидорова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре);
Интервал = Значение.Добавить();
Интервал.Текст = "Работает в центральном офисе";
Интервал.Начало = ПервыйДень + 21 * 24 * 60 * 60;
Интервал.Конец = ПервыйДень + 25 * 24 * 60 * 60;
Как связать интервалы диаграммы Ганта?
// Получить значение диаграммы - дежурство Петрова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте);
// В значении определить новый интервал.
Интервал = Значение.Добавить();
// Запомнить интервал начала связи.
СвязьИнтервалНачало = Интервал;
// Получить значение диаграммы - дежурство Петрова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре);
Интервал = Значение.Добавить();
// Запомнить интервал окончания связи.
СвязьИнтервалКонец = Интервал;
// Связать два интервала.
Связь = СвязьИнтервалНачало.Добавить(СвязьИнтервалКонец);
Связь.Цвет = WebЦвета.Синий;
// Получить значение диаграммы - дежурство Сидорова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте);
Интервал = Значение.Добавить();
СвязьИнтервалНачало = Интервал;
// Получить значение диаграммы - дежурство Сидорова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре);
Интервал = Значение.Добавить();
СвязьИнтервалКонец = Интервал;
// Связать два интервала.
Связь = СвязьИнтервалНачало.Добавить(СвязьИнтервалКонец);
Связь.Цвет = WebЦвета.Синий;
Как обработать интерактивное изменение интервалов диаграммы Ганта?
// Получить значение диаграммы - дежурство Петрова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияНаВахте);
// Разрешить интерактивное редактирование интервалов.
Значение.Редактирование = Истина;
// Получить значение диаграммы - дежурство Петрова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаП, СерияВЦентре);
Значение.Редактирование = Истина;
// Получить значение диаграммы - дежурство Сидорова на вахте.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияНаВахте);
Значение.Редактирование = Истина;
// Получить значение диаграммы - дежурство Сидорова в центральном офисе.
Значение = ДГ.ПолучитьЗначение(ТочкаС, СерияВЦентре);
Значение.Редактирование = Истина;
Процедура ДГПриОкончанииРедактированияИнтервала(Элемент, Интервал, Отмена)
// Сгладить погрешности интерактивного перетаскивания -
// округлить интервал по границе дня.
Интервал.Начало = Интервал.Начало + 3600 * 12;
Интервал.Начало = НачалоДня(Интервал.Начало);
Интервал.Конец = Интервал.Конец + 3600 * 12;
Интервал.Конец = НачалоДня(Интервал.Конец);
// Скорректировать цвета связей.
Для Каждого Связь Из Интервал Цикл
Если Связь.Начало.Конец <= Связь.Конец.Начало Тогда
Связь.Цвет = WebЦвета.Синий;
Иначе // есть пересечение интервалов - выделить красным
Связь.Цвет = WebЦвета.Красный;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как разместить непериодические метки в диаграмме Ганта?
// Установить непериодические метки - контроль дежурства.
// Создать отдельный элемент шкалы времени (для более наглядного отображения)
ЭлементМеток = ДГ.ОбластьПостроения.ШкалаВремени.Элементы.Добавить();
ЭлементМеток.Единица = ТипЕдиницыШкалыВремени.День;
// Скрыть периодические метки добавленного элемента.
ЭлементМеток.ОтображатьПериодическиеМетки = Ложь;
// Установить метку - первая проверка - 10 часов утра 9 числа.
ПерваяПроверка = ПервыйДень + 8 * 24 * 60 * 60 + 10 * 60 * 60;
Метка = ЭлементМеток.Метки.Добавить(ПерваяПроверка);
Метка.Текст = "Проверка";
Метка.ЦветТекста = WebЦвета.Красный;
Метка.ЦветЛинии = Метка.ЦветТекста;
// Установить метку - вторая проверка - 8 часов вечера 23 числа.
ВтораяПроверка = ПервыйДень + 22 * 24 * 60 * 60 + 20 * 60 * 60;
Метка = ЭлементМеток.Метки.Добавить(ВтораяПроверка);
Метка.Текст = "Проверка";
Метка.ЦветТекста = WebЦвета.Красный;
Метка.ЦветЛинии = Метка.ЦветТекста;
Как выделить некоторые интервалы фона диаграммы Ганта?
// Выделить выходные дни другим цветом фона.
Неделя = 3600 * 24 * 7;
Выходные = 3600 * 48;
МаксимальнаяДата = ПервыйДень + Неделя * 4;
ТекущаяДата = ПервыйДень;
Пока ТекущаяДата <= МаксимальнаяДата Цикл
Конец = НачалоНедели(ТекущаяДата);
Начало = Конец - Выходные;
ДГ.ИнтервалыФона.Добавить(Начало, Конец);
ТекущаяДата = ТекущаяДата + Неделя;
КонецЦикла;
Географическая схема
i Как отобразить в форме файл географической схемы?
Схема = ЭлементыФормы.ГеоСхема;
Схема.Прочитать("D:/MyGeo.geo");
i Как отобразить в форме макет географической схемы?
Схема = ЭлементыФормы.ГеоСхема;
Схема.Вывести(ПолучитьОбщийМакет("ГеографическаяСхемаРоссии"));
i Как изменить масштаб географической схемы?
Масштаб = 100000;
Если ВвестиЗначение(Масштаб) Тогда
ЭлементыФормы.ГеоСхема.ПоддержкаМасштаба = РежимОтображенияГеографическойСхемы.ЗадаетсяМасштабом;
ЭлементыФормы.ГеоСхема.Масштаб = Масштаб;
КонецЕсли;
Как отобразить на географической схеме выбранный город?
Схема = ЭлементыФормы.ГеоСхема;
СписокГородов = Новый СписокЗначений;
// Запретить перерисовку схемы на время обновления.
Схема.Обновление = Ложь;
// Отобразить слой Регионы.
Схема.Слои.Регионы.Видимость = Истина;
// Задать тип отображения названий городов.
СлойГорода = Схема.Слои.Города;
СлойГорода.Серии.Название.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст;
// Сформировать список городов и скрыть все города.
Для Счетчик = 0 По СлойГорода.Объекты.Количество() - 1 Цикл
Город = СлойГорода.Объекты.Получить(Счетчик);
Город.Видимость = Ложь;
НазваниеГорода = СлойГорода.ПолучитьЗначение(Город, СлойГорода.Серии.Название);
НазваниеРегиона = СлойГорода.ПолучитьЗначение(Город, СлойГорода.Серии.Регион);
СписокГородов.Добавить(Счетчик, НазваниеГорода.Значение + " (" + НазваниеРегиона.Значение + ")");
КонецЦикла;
СлойГорода.Видимость = Истина; // Отобразить слой Города.
СписокГородов.СортироватьПоПредставлению();
ВыбранныйГород = СписокГородов.ВыбратьЭлемент();
Если ВыбранныйГород <> Неопределено Тогда
ГородСхемы = СлойГорода.Объекты.Получить(ВыбранныйГород.Значение);
ГородСхемы.Видимость = Истина; // отобразить выбранный город
КонецЕсли;
Схема.Обновление = Истина; // Обновить схему.
Как использовать таблицу значений в качестве источника данных географической схемы?
Схема = ЭлементыФормы.ГеоСхема;
Схема.Обновление = Ложь; // Запретить обновление схемы.
// Отобразить слои Регионы и Города.
Схема.Слои.Регионы.Видимость = Истина;
СлойГорода = Схема.Слои.Города;
СлойГорода.Видимость = Истина;
// Добавить новую серию для отображения данных источника.
СерияИнформация = Схема.Слои.Города.Серии.Добавить("Информация");
СерияИнформация.Значение = "Информация";
// Сформировать таблицу значений источника данных.
ИсточникДанныхГеоСхемы.Колонки.Добавить("ЗначениеГорода");
ИсточникДанныхГеоСхемы.Колонки.Добавить("СерияИнформация", Новый ОписаниеТипов("Строка"));
// Добавить "справочную" колонку в истоник данных
// (нужна только для "наглядности" работы с источником).
ИсточникДанныхГеоСхемы.Колонки.Добавить("НазваниеГорода");
// Заполнить в первой строке источника данных значение серии,
// для которой будут выводиться данные.
ИсточникДанныхГеоСхемы.Добавить().СерияИнформация = "Информация";
// Задать тип источника данных
Схема.Слои.Города.ТипОрганизацииИсточникаДанных = ТипОрганизацииИсточникаДанныхГеографическойСхемы.НаПересечении;
// Задать тип отображения значений серии источника данных.
СлойГорода.Серии.Информация.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст;
// Заполнить источник данных значениями всех объектов.
Для Каждого Город Из СлойГорода.Объекты Цикл
Город.Видимость = Истина;
СтрокаИсточникаДанных = ИсточникДанныхГеоСхемы.Добавить();
СтрокаИсточникаДанных.ЗначениеГорода = Город.Значение;
СтрокаИсточникаДанных.НазваниеГорода = СлойГорода.ПолучитьЗначение(Город, СлойГорода.Серии.Название).Значение;
КонецЦикла;
ЭлементыФормы.ИсточникДанныхГеоСхемы.СоздатьКолонки();
Схема.Обновление = Истина; // Обновить поле географической схемы.
// Назначить источник данных.
СлойГорода.ИсточникДанных = ИсточникДанныхГеоСхемы;
Администрирование
Запуск 1С:Предприятия из командной строки
i Как запустить 1С:Предприятие из командной строки?
"C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /F D:\Конфигурации\Типовые\УпрТорг /N ИмяПользователя /P Пароль
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F D:\Конфигурации\Типовые\УпрТорг /N ИмяПользователя /P Пароль
"C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /S Сервер\База /N ИмяПользователя /P Пароль
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F D:\Конфигурации\Типовые\УпрТорг /N ИмяПользователя /P Пароль
Как из командной строки заставить 1С:Предприятие сделать выгрузку базы данных?
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F D:\Конфигурации\Типовые\УпрТорг /N ИмяПользователя /P Пароль /DumpIB c:\имя.dt
Как из командной строки обновить изменения текущей конфигурации в конфигурации базы данных?
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F D:\Конфигурации\Типовые\УпрТорг /N ИмяПользователя /P Пароль /UpdateDBCfg
Как выполнить тестирование и исправление информационной базы без проверки ссылочной целостности в автоматическом режиме?
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F"C:\Documents and Settings\user\My Documents\1C\DemoTrd2" /N"Федоров (администратор)" /P"" /IBcheckAndRepair -LogIntegrity
Как выполнить проверку конфигурации в автоматическом режиме с выводом результатов проверки в файл?
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F"C:\Documents and Settings\user\My Documents\1C\DemoTrd2" /N"Федоров (администратор)" /P"" /OutD:\my\log.txt /CheckConfig -ClientServer -Client -ExternalConnectionServer -ExternalConnection -Server -DistributiveModules -IncorrectReferences -ConfigLogicalIntegrity -UnreferenceProcedures -HandlersExistence -EmptyHandlers
Как сократить журнал регистрации программно?
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F"C:\Documents and Settings\user\My Documents\1C\DemoTrd2" /N"Федоров (администратор)" /P"" /OutD:\my\log.txt /ReduceEventLogSize 2004-12-26 -saveAsC:\OldLog.elf
Как выгрузить модули прикладного решения в виде текстовых файлов из командной строки?
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F"C:\Documents and Settings\user\My Documents\1C\DemoTrd2" /N"Федоров (администратор)" /P"" /DumpConfigFiles "D:\1\11" -Module
Как загрузить в прикладное решение файлы справки, сохраненные в формате htm? Для
"C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F"C:\Documents and Settings\user\My Documents\1C\DemoTrd2" /N"Федоров (администратор)" /P"" /LoadConfigFiles "D:\1\11" -Help
Разное
i Как поменять значение рабочей даты?
Если ИспользованиеРабочейДаты = РежимРабочейДаты.Назначать Тогда
РабочаяДата = УстанавливаемаяДата;
Иначе
Сообщить("Рабочая дата не будет сменена.
|Необходимо сначала в меню Сервис-Параметры-Общая
|снять флажок - Использовать текущую дату компьютера ")
КонецЕсли;
i Как установить/снять монопольный режим?
Попытка
УстановитьМонопольныйРежим(Истина);
Исключение
Предупреждение("К базе подключены пользователи. Монопольный режим установить невозможно!", 7);
КонецПопытки;
Если МонопольныйРежим() Тогда
Сообщить("Монопольный режим установлен");
КонецЕсли;
УстановитьМонопольныйРежим(Ложь);
i Как внести запись в журнал регистрации?
ЗаписьЖурналаРегистрации("ОтчетныеДанные.Просмотр", УровеньЖурналаРегистрации.Информация, Метаданные(), ДатаКон,);
i Как получить данные о зарегистрированных пользователях информационной базы?
Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива.Имя;
ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя;
ЕстьПароль = ЭлементМассива.ПарольУстановлен;
Роли = ЭлементМассива.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
КонецЦикла;
КонецЦикла;
i Как определить общую системную информацию?
Инфо = Новый СистемнаяИнформация;
Текст = "Версия 1С:Предприятия 8.0: " + Инфо.ВерсияПриложения;
Текст = Текст + Символы.ПС + "Конфигурация: " + Метаданные.Синоним;
Текст = Текст + Символы.ПС + "Поставщик: " + Метаданные.Поставщик;
Текст = Текст + Символы.ПС + "Операционная система: " + Инфо.ВерсияОС;
Текст = Текст + Символы.ПС + "Оперативная память (МБ): " + Инфо.ОперативнаяПамять;
Текст = Текст + Символы.ПС + "Процессор: " + Инфо.Процессор;
Предупреждение(Текст, , "ДАННЫЕ ТЕКУЩЕГО КОМПЬЮТЕРА И КОНФИГУРАЦИИ");
Как программно добавить пользователя в информационную базу?
НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
НовыйПользователь.Имя = "Имя";
НовыйПользователь.ПолноеИмя = "Фамилия Имя Отчество";
НовыйПользователь.АутентификацияСтандартная = Истина;
НовыйПользователь.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Администратор;
НовыйПользователь.Пароль = "пароль";
НовыйПользователь.Роли.Добавить(Метаданные.Роли.Администратор);
НовыйПользователь.ПоказыватьВСпискеВыбора = Ложь;
НовыйПользователь.Язык = Метаданные.Языки.Русский;
НовыйПользователь.Записать();
ЗаписатьНовогоПользователя(НовыйПользователь);
Процедура ЗаписатьНовогоПользователя(НовыйПользователь) Экспорт
// Проверить наличие роли Администратор у нового пользователя.
РольАдминистратор = Метаданные.Роли.Администратор;
Если НовыйПользователь.Роли.Содержит(РольАдминистратор) Тогда
Сообщить("Добавление пользователя с административными правами запрещено.");
Иначе // у нового пользователя нет роли Администратор
// Проверить, что текущий пользователь обладает правами Менеджера
// или Администратора
Если РольДоступна(РольАдминистратор) ИЛИ РольДоступна(Метаданные.Роли.Менеджер) Тогда
// Выполнить запись нового пользователя.
НовыйПользователь.Записать();
Иначе
Сообщить("Недостаточно прав доступа для добавления пользователя.");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как создать собственный лог-файл для записи результатов работы внешней обработки?
ФайлРегистрации = Новый ЗаписьТекста("C:\LogFile.txt", КодировкаТекста.ANSI, , Истина);
ФайлРегистрации.Записать("Первое сообщение" + Символы.ПФ);
ФайлРегистрации.Записать("Второе сообщение"+ Символы.ПФ);
ФайлРегистрации.Закрыть();
Как в форме отобразить список пользователей, которые работают с данной информационной базой?
МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
Колонки = Пользователи.Колонки;
Колонки.Добавить("Пользователь", , , 10);
Колонки.Добавить("Приложение", , , 10);
Колонки.Добавить("НачалоРаботы", , , 10);
Колонки.Добавить("Компьютер", , , 10);
Колонки.Добавить("Соединение", , , 10);
Для Каждого Соединение из МассивСоединений Цикл
НоваяСтрока = Пользователи.Добавить();
НоваяСтрока.Компьютер = Соединение.ИмяКомпьютера;
НоваяСтрока.Приложение = ПредставлениеПриложения(Соединение.ИмяПриложения);
НоваяСтрока.НачалоРаботы = Соединение.НачалоСеанса;
НоваяСтрока.Соединение = Соединение.НомерСоединения;
НоваяСтрока.Пользователь = Соединение.Пользователь.Имя;
КонецЦикла;
ЭлементыФормы.Пользователи.СоздатьКолонки();
Как выгрузить журнал регистрации в XML-формате?
ВыгрузитьЖурналРегистрации("C:\log.xml");
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь из Пользователи Цикл
НовыйЭлемент = СписокПользователей.Добавить();
НовыйЭлемент.Пометка = Истина;
НовыйЭлемент.Значение = Пользователь;
НовыйЭлемент.Представление = Пользователь.Имя;
КонецЦикла;
Массив = Новый Массив;
Для Каждого Пользователь Из СписокПользователей Цикл
Если Пользователь.Пометка Тогда
Массив.Добавить(Пользователь);
КонецЕсли;
КонецЦикла;
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("Пользователь", Массив);
ВыгрузитьЖурналРегистрации("C:\log.xml", СтруктураФильтра, "Дата, Пользователь, ПредставлениеСобытия");
Как принудительно завершить работу всех пользователей информационной базы в клиент-серверном варианте работы?
Коннектор = Новый COMОбъект("V8.COMConnector");
Сервер = Коннектор.ConnectServer("TestServer");
// Аутентифицироваться с административными правами в нужной базе.
Сервер.AddAuthentication("Администратор","");
// Создать объект нужной информационной базы.
ИнформационнаяБаза = Сервер.CreateInfoBaseInfo();
ИнформационнаяБаза.Name = "Test_Base";
// Получить соединения базы.
СоединенияБазы = Сервер.GetIBConnections(ИнформационнаяБаза);
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Сервер.Disconnect(Соединение);
КонецЦикла;
Интеграция
Текстовый файл
i Как выгрузить данные из справочника в текстовый файл?
Текст = Новый ТекстовыйДокумент;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Стр = СтрЗаменить(Выборка.Наименование, Символ(34), "%квч%");
Код = Строка(Выборка.Код) + Символ(34);
Текст.ДобавитьСтроку(Код + Стр);
КонецЦикла;
Текст.Записать("c:\temp\text.txt");
i Как загрузить данные из текстового файла?
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("c:\temp\text.txt");
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
Позиция = Найти(Стр, Символ(34));
Код = Сред(Стр, 1, Позиция-1); прНаименование = Сред(Стр, Позиция + 1);
Наименование = СтрЗаменить(прНаименование, "%квч%", Символ(34));
Сообщить(Код + "-" + Наименование);
КонецЦикла;
Работа с текстом. Модель последовательного доступа
Путь = "c:\temp\text.txt";
Текст = Новый ЗаписьТекста(Путь, КодировкаТекста.UTF8);
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Текст.ЗаписатьСтроку(Выборка.Наименование);
КонецЦикла;
Текст.Закрыть();
Путь = "c:\temp\text.txt";
Текст = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8);
Стр = Текст.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл
Стр = Текст.ПрочитатьСтроку();
Сообщить(Стр);
КонецЦикла;
XML
i Как из одной базы перенести документ в другую базу?
// Выгрузить в файл xml.
ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл("c:\doc.xml");
ЗаписьXML.ЗаписатьНачалоЭлемента("Root");
// Получить объект по ссылке.
ВыгружаемыйОбъект=Документ.ПолучитьОбъект();
// С помощью средств сериализации записать объект в файл.
ЗаписатьXML(ЗаписьXML,ВыгружаемыйОбъект);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
ЧтениеXML=Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл("c:\doc.xml");
// Текущим становится элемент Root.
ЧтениеXML.Прочитать();
// Текущим становится элемент с документом.
ЧтениеXML.Прочитать();
// Проверить сможет ли с данным значением "справиться"
// система сериализации в данной базе.
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
// Получить ДокументОбъект.РеализацияТоваровУслуг
ЗагружаемыйОбъект=ПрочитатьXML(ЧтениеXML);
ЗагружаемыйОбъект.Записать();
КонецЕсли;
ЧтениеXML.Закрыть();
Как можно сформировать XML-документ произвольной структуры?
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ПутьКФайлу);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корневой");
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура");
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре");
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Элемент");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул));
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Как сформировать XML-документ в строку?
Запись = Новый ЗаписьXML();
Запись.УстановитьСтроку();
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корневой");
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура");
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре");
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Элемент");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул));
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Стр = Запись.Закрыть();
Сообщить(Стр);
Как можно обмениваться данными, используя XML-сериализацию через файлы других форматов?
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
Данные = СсылкаНаДокумент.ПолучитьОбъект();
ЗаписатьXML(ЗаписьXML, Данные);
ТекстСообщения = ЗаписьXML.Закрыть();
Текст = Новый ТекстовыйДокумент;
Текст.УстановитьТекст(ТекстСообщения);
Текст.Записать(ПутьКФайлу);
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ПутьКФайлу);
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Текст.ПолучитьТекст());
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
Данные = ПрочитатьXML(ЧтениеXML);
Данные.Записать();
КонецЕсли;
Как можно загрузить XML документ произвольной структуры?
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);
Пока Чтение.Прочитать() Цикл
// Прочитать "структурные части" элементов.
// Проверить, какая часть элемента - текущая.
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла);
// Атрибуты элементов можно читать только если текущая часть -
// начало элемента
Пока Чтение.ПрочитатьАтрибут() Цикл
// Прочитать данные узла атрибута.
ТипУзла = Чтение.ТипУзла;
Имя = Чтение.Имя;
Значение = Чтение.Значение;
// Обработать полученные значения.
КонецЦикла;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
// В примере просто выводим текст в окно сообщений.
Сообщить("Текст:" + Чтение.Значение);
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
// В примере просто выводим признак конца элемента
// в окно сообщений Сообщить("--Конец:" + Чтение.Имя);
КонецЕсли;
КонецЦикла;
DBF-файлы
i Как можно построить выгрузку-загрузку посредством файлов DBF?
БД = Новый XBase;
БД.Поля.Добавить("CODE", "S", 5);
БД.Поля.Добавить("NAME", "S", 40);
БД.СоздатьФайл(Путь + "start.dbf", Путь + "index.cdx");
БД.Индексы.Добавить("IDXCODE", "CODE");
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "index.cdx");
БД.АвтоСохранение = Истина;
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
БД.Добавить();
БД.CODE = Выборка.Код;
БД.NAME = Выборка.Наименование;
КонецЦикла;
БД.ЗакрытьФайл();
БД = Новый XBase;
БД.ОткрытьФайл(Путь + "start.dbf", Путь + "index.cdx");
БД.ТекущийИндекс = БД.Индексы.IDXCODE;
Пока БД.Следующая() Цикл
Сообщить(БД.CODE);
Сообщить(БД.NAME);
КонецЦикла;
БД.ЗакрытьФайл();
Работа с HTML-документами
i Заполнение HTML-анкет
Процедура URLПриИзменении(Элемент)
ЭлементыФормы.ПолеHTML.Перейти(URL);
КонецПроцедуры
Процедура ПолеHTMLДокументСформирован(Элемент)
// Событие возникает и при открытии формы, когда в реквизите
// URL содержится пустая строка.
Если URL <> "" Тогда
Док = ЭлементыФормы.ПолеHTML.Документ;
// При попытке обратиться к несуществующему свойству
// произойдет ошибка
Док.forms["frm"].fam.Value = "Иванов";
Док.forms["frm"].nam.Value = "Иван";
Док.forms["frm"].otch.Value = "Иванович";
КонецЕсли;
КонецПроцедуры
Работа с файлами
i Как организовать диалог выбора текстового файла?
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "Текст(*,txt)|*.txt";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите каталог";
Если ДиалогОткрытия.Выбрать() Тогда
ПутьККаталогу = ДиалогОткрытия.Каталог;
КонецЕсли;
i Как прочитать информацию о файле?
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Выбрать();
Файл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла);
Текст = "Файл: " + Файл.Имя;
Текст = Текст + Символы.ПС + "Расширение: " + Файл.Расширение;
Текст = Текст + Символы.ПС + "Полное имя: " + Файл.ПолноеИмя;
Текст = Текст + Символы.ПС + "Путь: " + Файл.Путь;
Текст = Текст + Символы.ПС + "Размер: " + Файл.Размер() + " байт";
Текст = Текст + ?(Файл.ПолучитьНевидимость(), Символы.ПС + "Невидимый. ", "");
Текст = Текст + ?(Файл.ПолучитьТолькоЧтение(), Символы.ПС + "Только чтение.", "");
Текст = Текст + Символы.ПС + "Последнее изменение: " + Файл.ПолучитьВремяИзменения();
Сообщить(Текст);
i Как получить список файлов в указанном каталоге?
МассивНайденных = НайтиФайлы("C:\Обмен\Входящие", "*.xml");
Для Каждого Файл из МассивНайденных Цикл
Сообщить(Файл.Имя);
// Обработать найденные файлы.
КонецЦикла;
Как переместить файл, выложенный на ftp к себе на локальный компьютер?
Если НайтиФайлы("C:\Temp\Sklad.xml") <> Неопределено Тогда
УдалитьФайлы("C:\Temp\ Sklad.xml ");
КонецЕсли;
Если НайтиФайлы("ftp://111.222.333.4/Sklad.xml") <> Неопределено Тогда
ПереместитьФайл("ftp://111.222.333.4/Sklad.xml", "C:\Temp\ Sklad.xml");
Сообщить("Файл перемещен.");
Иначе
Сообщить("Действие не выполнено. Файл в источнике не найден.");
КонецЕсли;
Как разделить большой файл на несколько файлов определенного размера?
РазделитьФайл("D:/1/MyFile.xml", 1024*1024, "D:/1/11/");
ОбъединитьФайлы("D:/1/11/MyFile.xml.*", "D:/1/11/MyProg.exe");
Как поместить файлы в архив?
ФайлАрхива = Новый ЗаписьZipФайла("C:\Arch.zip", , , МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный);
ФайлАрхива.Добавить("C:\Inetpub\wwwroot\Applic1\*.*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ФайлАрхива.Записать();
ФайлАрхива = Новый ЧтениеZIPФайла("C:\Arch.zip");
ФайлАрхива.ИзвлечьВсе("C:\Open", РежимВосстановленияПутейФайловZIP.Восстанавливать);
ФайлАрхива.Закрыть();
Как сравнить два текстовых файла?
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Фильтр = "Текстовый документ(*.txt)|*.txt";
// Выбрать первый файл.
ДиалогОткрытияФайла.Заголовок = "Выберите первый файл:";
ДиалогОткрытияФайла.Выбрать();
ИмяФайла1 = ДиалогОткрытияФайла.ПолноеИмяФайла;
// Выбрать второй файл.
ДиалогОткрытияФайла.Заголовок = "Выберите второй файл:";
ДиалогОткрытияФайла.Выбрать();
ИмяФайла2 = ДиалогОткрытияФайла.ПолноеИмяФайла;
// Сравнить выбранные файлы.
СравнениеФайлов = Новый СравнениеФайлов();
СравнениеФайлов.ПервыйФайл = ИмяФайла1;
СравнениеФайлов.ВторойФайл = ИмяФайла2;
СравнениеФайлов.ИгнорироватьПустоеПространство = Истина;
СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент;
СравнениеФайлов.ПоказатьРазличия();
Как организовать контроль формирования файла внешним приложением?
Процедура ПроверкаНаличияФайла() ИмяКаталога = "c:\temp";
Маска = "*.xml";
НайденныеФайлы = НайтиФайлы(ИмяКаталога, Маска);
Для Каждого Файл Из НайденныеФайлы Цикл
Сообщить(Файл.Имя);
КонецЦикла;
КонецПроцедуры
ПодключитьОбработчикОжидания("ПроверкаНаличияФайла", 10);
ActiveX
i Как использовать элементы управления ActiveX?
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогФыбораФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогФыбораФайла.Фильтр = "Все файлы (все)|*.*";
ДиалогФыбораФайла.Заголовок = "Выберите медиа файл";
Если ДиалогФыбораФайла.Выбрать() Тогда
ПутьКМедиаФайлу = ДиалогФыбораФайла.ПолноеИмяФайла;
// В зависимости от варианта объекта запись полного пути к файлу
// производится либо в свойство FileName, либо в свойство URL.
Попытка
ЭлементыФормы.WMP.FileName = ПутьКМедиаФайлу;
Исключение
ЭлементыФормы.WMP.URL = ПутьКМедиаФайлу;
КонецПопытки;
КонецЕсли;
Макеты ActiveDocument
Как сформировать новый договор на основании файла Microsoft Word?
Договор = ПолучитьМакет("Договор");
// Получить объект из макета.
MSWord = Договор.Получить();
НаименованиеКонтрагента = "ООО Торгуем всем";
Попытка
Документ = MSWord.Application.Documents(1);
Документ.Activate();
// Получить объект, который будем использовать для поиска и замены.
Замена = Документ.Content.Find;
// Заменить заранее определенные ключевые конструкции на требуемый текст.
Замена.Execute("<НазваниеКомпании>", Ложь, Истина, Ложь, , , Истина, , Ложь, НаименованиеКонтрагента);
// Далее аналогично для остальных ключевых конструкций.
// Делаем видимым приложение и активизируем его.
MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
// Если произойдет ошибка выводятся данные об ошибке и объект закрывается.
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
Работа с Интернет
Работа с электронной почтой
Как организовать работу с электронной почтой через установленного почтового клиента?
Почта = Новый Почта;
Почта.Подключиться("login", "password");
Сообщ = Новый ПочтовоеСообщение;
Сообщ.Текст = "Доброе время суток!!!!";
Сообщ.Тема = "Срочно в номер!!!";
Данные = Новый ДвоичныеДанные("c:\attach.txt");
Сообщ.Вложения.Добавить(Данные,"attach.txt");
Сообщ.Получатели.Добавить("
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
");
Почта.Послать(Сообщ, Ложь);
Почта.Отключиться();
Почта = Новый Почта;
Почта.Подключиться("login", "password");
Выборка = Почта.Выбрать(Истина, Ложь);
Для Каждого Сообщение Из Выборка Цикл
Сообщить("Тема: " + Строка(Сообщение.Тема));
Сообщить("Текст: " + Строка(Сообщение.Текст));
Для Каждого Вложение Из Сообщение.Вложения Цикл
Сообщить(Строка(Вложение.Наименование));
КонецЦикла;
КонецЦикла;
Как организовать работу с почтой без установленного почтового клиента на компьютере пользователя?
// Сформировать почтовый профиль.
// При отправке нет необходимости указывать настройки, связанные с POP сервером.
ИПП = Новый ИнтернетПочтовыйПрофиль;
ИПП.АдресСервераSMTP = Константы.АдресСервераSMTP.Получить();
ИПП.ВремяОжидания = Константы.ВремяОжидания.Получить();
ИПП.Пароль = Константы.Пароль.Получить();
ИПП.ПарольSMTP = Константы.ПарольSMTP.Получить();
ИПП.Пользователь = Константы.Пользователь.Получить();
ИПП.ПользовательSMTP = Константы.ПользовательSMTP.Получить();
ИПП.ПортSMTP = Константы.ПортSMTP.Получить();
// Создать сообщение.
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
");
Сообщение.Отправитель.Адрес = "
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
";
Сообщение.Тема = "Срочно в номер!";
Сообщение.Тексты.Добавить("Доброе время суток!");
Вложение = Новый ДвоичныеДанные(ПутьКФайлуВложения);
Сообщение.Вложения.Добавить(Вложение,"attach.txt");
// Подключиться и отправить.
Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
// Формирование почтового профиля.
// При получении нет необходимости указывать настройки, связанные с SMTP сервером.
СостояниеПриема = "Подключение к серверу";
ИПП = Новый ИнтернетПочтовыйПрофиль;
ИПП.АдресСервераPOP3 = Константы.АдресСервераPOP3.Получить();
ИПП.ВремяОжидания = Константы.ВремяОжидания.Получить();
ИПП.Пароль = Константы.Пароль.Получить();
ИПП.Пользователь = Константы.Пользователь.Получить();
ИПП.ПортPOP3 = Константы.ПортPOP3.Получить();
Соединение = Новый ИнтернетПочта;
Соединение.Подключиться(ИПП);
СостояниеПриема = "Получение выборки писем";
Выборка = Соединение.Выбрать(ЗабиратьССервера);
СостояниеПриема = "Создание документов - писем";
КоличествоВВыборке = Выборка.Количество();
Индекс = 1;
Для Каждого Письмо Из Выборка Цикл
ТекПозиция = Окр(Индекс*100/КоличествоВВыборке);
Если ТекПозиция <> Позиция Тогда
Позиция = ТекПозиция;
КонецЕсли;
Док = Документы.Письмо.СоздатьДокумент();
Док.Тема = Письмо.Тема;
СтрПолучатели = "";
Для Каждого Адрес Из Письмо.Получатели Цикл
СтрПолучатели = СтрПолучатели + Адрес.Адрес + ",";
КонецЦикла;
Док.Получатели = СтрПолучатели;
Если ТипЗнч(Письмо.Отправитель) = Тип("Строка") Тогда
Отправитель = Письмо.Отправитель;
Иначе
Отправитель = Письмо.Отправитель.Адрес;
КонецЕсли;
Док.Отправитель = Отправитель;
Содержание = "";
Для Каждого ТекстСообщения Из Письмо.Тексты Цикл
Содержание = Содержание + ТекстСообщения.Текст + Символы.ПС;
КонецЦикла;
Док.Содержание = Содержание;
Индекс = Индекс + 1;
Док.Записать();
КонецЦикла;
Соединение.Отключиться();
Работа с файлами
Загрузка файлов по FTP
Процедура ЗагрузитьОтмеченные(Кнопка)
Сервер = Новый FTPСоединение(FTPServer);
Для Каждого Файл Из ПолеСписка Цикл
Если Файл.Пометка Тогда
Сервер.Получить(Файл.Значение.ПолноеИмя, "с:\temp" + Файл.Значение.ПолноеИмя);
Файл.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура Просмотреть(Кнопка)
Сервер = Новый FTPСоединение(FTPServer);
МассивФайлов = Сервер.НайтиФайлы("/","*.*");
Для Каждого Файл Из МассивФайлов Цикл
Если Файл.ЭтоФайл() Тогда
ПолеСписка.Добавить(Файл, Файл.Имя)
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Выполнение HTTP запроса
СерверИсточник = HTTPserver;
Адрес = "/price.asp";
ИмяВходящегоФайла = "c:\temp\input.html";
НТТР = Новый HTTPСоединение(СерверИсточник);
НТТР.Получить(Адрес, ИмяВходящегоФайла);
ВходящийФайл = Новый Файл(ИмяВходящегоФайла);
Работа с COM-объектами
i Как из одной базы 1С:Предприятие 8.0 перенести остатки товаров в другую базу, используя COM-соединение.
Запрос = Новый Запрос;
Запрос.Текст= "ВЫБРАТЬ
| ОстаткиТоваровОрганизацийОстатки.Организация КАК Организация,
| ОстаткиТоваровОрганизацийОстатки.Номенклатура,
| ОстаткиТоваровОрганизацийОстатки.ГТДОрганизации,
| ОстаткиТоваровОрганизацийОстатки.СтранаПроисхождения,
| ОстаткиТоваровОрганизацийОстатки.Комиссионер,
| ОстаткиТоваровОрганизацийОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваровОрганизаций.Остатки(&ДатаПереноса, ) КАК ОстаткиТоваровОрганизацийОстатки
|ИТОГИ ПО
| Организация";
Запрос.УстановитьПараметр("ДатаПереноса", ДатаПереноса);
V8 = Новый COMОбъект("V8.ComConnector");
Попытка
Открытие = V8.Connect("File=""" + Путь + """;Usr=""Usr1"";");
Исключение
Предупреждение("База данных не открыта!!!");
Возврат;
КонецПопытки;
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
МенеджерДокумента = Открытие.Документы.ОприходованиеТоваров;
МенеджерНоменклатуры = Открытие.Справочники.Номенклатура;
МенеджерОрганизаций = Открытие.Справочники.Организации;
// Менеджеры остальных справочников:
Пока Выборка.Следующий() Цикл
Документ = МенеджерДокумента.СоздатьДокумент();
Код = Выборка.Организация.Код;
Организация = МенеджерОрганизаций.НайтиПоКоду(Код);
Если Организация.Пустая() Тогда
Организация = МенеджерОрганизаций.СоздатьЭлемент();
Организация.Код = Код;
// Остальные реквизиты:
Организация.Записать();
КонецЕсли;
// Обработка остальных реквизитов, справочников:
ВыборкаПодчиненная = Выборка.Выбрать();
Пока ВыборкаПодчиненная.Следующий() Цикл
// Поиск/перенос данных справочников
// заполнение табличной части документа
КонецЦикла;
Документ.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
Пример обращения к программе 1С:Предприятие 8.0 из модуля MS Excel через COM-соединение
Sub load()
Dim cntr As Object
Dim trade As Object
Dim Элемент As Object
Dim СправочникКонтрагентов As Object
Dim ГруппаКонтрагентов As Object
Set cntr = CreateObject("V8.COMConnector")
Set trade = cntr.Connect("File=""C:\DemoTrd4"";Usr=""Федоров (администратор)"";")
Set СправочникКонтрагентов = trade.Справочники.Контрагенты
Set ГруппаКонтрагентов = СправочникКонтрагентов.СоздатьГруппу()
ГруппаКонтрагентов.Наименование = "***** Экспорт из Excel ******"
ГруппаКонтрагентов.Записать
N = 11 'Количество строк в списке поставщиков
For Count = 3 To N
Set Элемент = СправочникКонтрагентов.СоздатьЭлемент()
Элемент.Код = Application.Cells(Count, 1).Value
Элемент.Наименование = Application.Cells(Count, 2).Value
Элемент.ИНН = Application.Cells(Count, 3).Value
Элемент.НаименованиеПолное = Application.Cells(Count, 4).Value
Элемент.Родитель = ГруппаКонтрагентов.Ссылка
Элемент.Записать
Next Count
End Sub
i Как организовать считывание данных из файлов *.xls?
Док = ПолучитьCOMОбъект(Путь + "ценыконкурентов.xls");
КоличествоСтраниц = 2;
Для ТекНомер = 1 По КоличествоСтраниц Цикл
Контрагент = Док.Sheets(ТекНомер).Cells(1,1).Value;
Товар = Док.Sheets(ТекНомер).Cells(2,2).Value;
Цена = Док.Sheets(ТекНомер).Cells(2,3).Value;
счСтроки = 3;
Сообщить(Строка(Товар) + "-" + Строка(Цена));
Пока СокрЛП(Товар) <> "" Цикл // можно использовать другой признак окончания данных на листе
Товар = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value;
Цена = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value;
Сообщить(Строка(Товар) + "-" + Строка(Цена));
счСтроки = счСтроки + 1;
КонецЦикла;
КонецЦикла;
Док.Application.Quit();
Как запустить макрос, записанный в книге Microsoft Excel?
Попытка
// Создать объект.
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось инициализировать Excel");
Возврат;
КонецПопытки;
Попытка
// В реальном примере путь может быть совершенно другим.
Excel.Workbooks.Open("c:\doc.xls");
// Запустить макрос с именем "Оформление".
Excel.Run("Оформление");
Excel.Visible = Истина;
Исключение
// Если произойдет ошибка выводятся данные об ошибке и объект закрывается.
Сообщить(ОписаниеОшибки());
Excel.Quit();
КонецПопытки;
Как создать документ программы Microsoft Excel по оформлению, приведенному в другом документе?
Попытка
// Создать объект.
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось инициализировать Excel");
Возврат;
КонецПопытки;
Попытка
// Если при отработке следующего фрагмента кода произойдет ошибка объект "Excel.Application" будет закрыт.
// Открыть книгу, содержащую шаблон оформления.
Excel.Workbooks.Open("c:\doc.xls");
НомерКниги = Excel.Workbooks.Count;
Книга = Excel.Workbooks.Item(НомерКниги);
Лист = Excel.ActiveSheet;
// Создать новую книгу (в нее будем записывать данные).
Excel.Application.Workbooks.Add(1);
НомерКниги = Excel.Workbooks.Count;
КнигаНовая = Excel.Workbooks.Item(НомерКниги);
ЛистНовый = Excel.ActiveSheet;
// Установить ширину колонки в новой книге.
ЛистНовый.Columns("B").ColumnWidth = 40;
// Копировать область из книги-шаблона в новую книгу.
Лист.Range("Шапка").Copy(ЛистНовый.Range("A1:E3"));
ЛистНовый.Cells(1, 1).Value = "Наименование контрагента";
// Считаем, что в нашем случае необходимо сформировать только две строки табличной части
Для НомерСтроки = 1 По 2 Цикл
Лист.Range("Строка").Copy(ЛистНовый.Range(ЛистНовый.Cells(3 + НомерСтроки,1), ЛистНовый.Cells(3 + НомерСтроки, 5)));
// Записать значение в ячейку листа новой таблицы
// в реальном примере данные будут браться из информационной базы
ЛистНовый.Cells(3 + НомерСтроки, 1).Value = НомерСтроки;
ЛистНовый.Cells(3 + НомерСтроки, 2).Value = "Наименование номенклатурной позиции " + Строка(НомерСтроки);
ЛистНовый.Cells(3 + НомерСтроки, 3).Value = НомерСтроки;
ЛистНовый.Cells(3 + НомерСтроки, 4).Value = НомерСтроки;
ЛистНовый.Cells(3 + НомерСтроки, 5).Value = НомерСтроки;
КонецЦикла;
Excel.Visible = Истина;
Исключение
Сообщить(ОписаниеОшибки());
Excel.Quit();
КонецПопытки;
i Как выгрузить прайс-лист в документ программы Microsoft Word?
Попытка
MSWord = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Не удалось инициализировать Microsoft Word");
Возврат;
КонецПопытки;
Запрос = Новый Запрос;
// Получить данные для формируемого прайс-листа.
Запрос.Текст = "ВЫБРАТЬ
| ЦеныКомпанииСрезПоследних.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
| ЦеныКомпанииСрезПоследних.Цена,
| ЦеныКомпанииСрезПоследних.Номенклатура.Наименование КАК Номенклатура,
| 1 КАК Количество
|ИЗ
| РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ЦеныКомпанииСрезПоследних
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|ИТОГИ Количество(Количество) ПО
| ОБЩИЕ";
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
Результат = Запрос.Выполнить();
Попытка
// Создать новый документ
MSWord.Documents.Add();
Документ = MSWord.ActiveDocument();
// Добавить новый параграф в созданный документ.
Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Параграф = Документ.Paragraphs.Item(НомерПараграфа);
// В созданный параграф вставить новый "диапазон"
// и разместить в нем текст "Прайс-Лист".
Параграф.Range.InsertAfter("Прайс-Лист");
// Установить стиль параграфа "Заголовок 1" (он должен быть определен).
Параграф.Range.Style="Заголовок 1";
Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Параграф = Документ.Paragraphs.Item(НомерПараграфа);
Параграф.Range.InsertAfter("Сформирован на дату: " + Строка(ТекущаяДата()));
Параграф.Range.Style = "Обычный";
ВыборкаКоличества = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаКоличества.Следующий();
КоличествоСтрок = ВыборкаКоличества.Количество;
Документ.Paragraphs.Add();
НомерПараграфа = Документ.Paragraphs.Count();
Параграф=Документ.Paragraphs.Item(НомерПараграфа);
// Вставить таблицу с количеством строк равным количеству записей
// в выборке результата запроса и с тремя колонками
Документ.Tables.Add(Параграф.Range, КоличествоСтрок, 3);
// Получить таблицу как объект в отдельную переменную
// учитывая тот факт, что таблица у нас единственная
Таблица = Документ.Tables.Item(1);
// Записать данные в ячейку таблицы строка №1, колонка №1
Таблица.Cell(1,1).Range().InsertAfter("Номенклатура");
// Установить цвет фона в ячейке
Таблица.Cell(1,1).Shading.BackgroundPatternColor = 16776960;
Таблица.Cell(1,2).Range().InsertAfter("Цена");
Таблица.Cell(1,2).Shading.BackgroundPatternColor = 16776960;
Таблица.Cell(1,3).Range().InsertAfter("Ед.Изм.");
Таблица.Cell(1,3).Shading.BackgroundPatternColor = 16776960;
НомерСтроки = 1;
Выборка = ВыборкаКоличества.Выбрать();
Пока Выборка.Следующий() Цикл НомерСтроки = НомерСтроки + 1;
Таблица.Cell(НомерСтроки,1).Range().InsertAfter(Выборка.Номенклатура);
Таблица.Cell(НомерСтроки,2).Range().InsertAfter(Строка(Выборка.Цена));
Таблица.Cell(НомерСтроки,3).Range().InsertAfter(Выборка.ЕдиницаИзмерения);
КонецЦикла;
MSWord.Visible = Истина;
MSWord.Activate();
Исключение
// Если произойдет ошибка выводятся данные об ошибке и объект закрывается. Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
i Как выполнить запрос к произвольной базе данных SQL?
стрПодключения = "Driver={SQL Server};"
стрПодключения = стрПодключения + ИмяСервера + ";";
стрПодключения = стрПодключения +"Uid=" + ИмяПользователя + ";";
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";";
стрПодключения = стрПодключения + "DataBase =" + ИмяБазы + ";";
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.OpenServer = стрПодключения;
RS = Новый COMОбъект("ADODB.Recordset");
// Запрос к базе на языке SQL запросов.
RS.Open("Select * from TradeUnit", Connection);
Пока RS.EOF() = 0 Цикл
// Можно обращаться и обрабатывать значения полей выборки.
ИД = RS.Fields("ID").Value;
Код = RS.Fields("Code").Value;
// Обработка других полей
RS.MoveNext();
КонецЦикла;
RS.Close();
Connection.Close();
Automation Client/Server (OLE)
i Как из одной базы 1С:Предприятие 8.0 интерактивно заполнить документ в другой базе, используя Automation Client/Server (OLE)?
V8 = Новый COMОбъект("V8.Application");
Попытка
Открытие = V8.Connect("File=""" + Путь + """;Usr=""Usr1"";");
Исключение
Предупреждение("База данных не открыта!!!");
Возврат;
КонецПопытки;
МенеджерДокумента = V8.Документы.РеализацияТоваров;
Документ = МенеджерДокумента.СоздатьДокумент();
ФормаДокумента = Документ.ПолучитьФорму();
ФормаДокумента.ОткрытьМодально();
Как из таблицы Excel загрузить список номенклатуры в 1С:Предприятие с возможностью редактирования?
Sub load()
Dim trade As Object
Dim СправочникНоменклатуры As Object
Dim ГруппаНоменклатуры As Object
Dim Элемент As Object
Dim Форма As Object
Set trade = CreateObject("V8.Application")
trade.Connect("File=""C:\DemoTrd4"";Usr=""Федоров (администратор)"";")
Set СправочникНоменклатуры = trade.Справочники.Номенклатура
Set ГруппаНоменклатуры = СправочникНоменклатуры.СоздатьГруппу()
ГруппаНоменклатуры.Наименование = "***** Экспорт из Excel ******"
ГруппаНоменклатуры.Записать
N = 4 'Количество загружаемых элементов справочника
For Count = 2 To 5 Set
Элемент = СправочникНоменклатуры.СоздатьЭлемент()
Элемент.Код = Application.Cells(Count, 1).Value
Элемент.Артикул = Application.Cells(Count, 2).Value
Элемент.Наименование = Application.Cells(Count, 3).Value
Элемент.НаименованиеПолное = Application.Cells(Count, 4).Value
Элемент.Родитель = ГруппаНоменклатуры.Ссылка
Set Форма = Элемент.ПолучитьФорму()
Форма.ОткрытьМодально
Next Count
End Sub
Обмен данными
i Как организовать работу удаленных складов?
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
Если ЭлементДанных.Склад <> Склад Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять;
КонецЕсли;
КонецПроцедуры
Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
Если ПланыОбмена.ИзменениеЗарегистрировано(Ссылка, ЭлементДанных) Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет?
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
Если НеВыгружатьОбъекты Тогда
// Проверить "ненужные типы", условие может содержать проверку
// на несколько типов.
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как просмотреть объекты, для которых зарегистрированы изменения?
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
Узел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел);
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения);
Пока Выборка.Следующий() Цикл
Данные = Выборка.Получить();
Сообщить(Данные);
КонецЦикла;
ЗапСообщения.ПрерватьЗапись();
Стр = ЗаписьXML.Закрыть();
Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8.0?
Процедура Выгрузка(Элемент)
Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(Путь + "выгрузка.xml");
Узел = ПланыОбмена.Поставка.НайтиПоКоду("Маг1");
ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел);
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения);
Пока Выборка.Следующий() Цикл
Данные = Выборка.Получить();
Если ТипЗнч(Данные) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
ВыгрузкаРеализации(ЗаписьXML, Данные);
Иначе // все остальные объекты
ЗаписатьXML(ЗаписьXML, Данные);
КонецЕсли;
КонецЦикла;
ЗапСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
КонецПроцедуры
Процедура ВыгрузкаРеализации(ЗаписьXML, Документ)
ЗаписьXML.ЗаписатьНачалоЭлемента("DocumentObject.ПередачаТовара");
ЗаписатьXML(ЗаписьXML, Документ.Ссылка.УникальныйИдентификатор(), "Ref", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Документ.ПометкаУдаления, "DeletionMark", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Документ.ВалютаДокумента, "ВалютаДокумента", НазначениеТипаXML.Явное);
// Остальные свойства документа.
// Табличная часть.
ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");
Для Каждого ТекСтрока Из Документ.Товары Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Row");
ЗаписатьXML(ЗаписьXML, ТекСтрока.Номенклатура, "Номенклатура", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, ТекСтрока.Количество, "Количество", НазначениеТипаXML.Явное);
// Остальные реквизиты табличной части.
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура Загрузка(Элемент)
Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(Путь + "выгрузка.xml");
ЧтСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтСообщения.НачатьЧтение(ЧтениеXML);
ПланыОбмена.УдалитьРегистрациюИзменений(ЧтСообщения.Отправитель, ЧтСообщения.НомерСообщения);
Пока ВозможностьЧтенияДанных(ЧтениеXML) Цикл
Данные = ПрочитатьДанные(ЧтениеXML);
Если РазрешениеКоллизий(Данные) Тогда
Данные.ОбменДанными.Отправитель = ЧтСообщения.Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать();
КонецЕсли;
КонецЦикла;
ЧтСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
КонецПроцедуры
Функция ВозможностьЧтенияДанных(ЧтениеXML)
ТипXML = ПолучитьXMLТип(ЧтениеXML);
Если ТипXML = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML.URIПространстваИмен = "" Тогда
Возврат Истина;
КонецЕсли;
Возврат ВозможностьЧтенияXML(ЧтениеXML);
КонецФункции
Функция ПрочитатьДанные(ЧтениеXML)
ТипXML = ПолучитьXMLТип(ЧтениеXML);
Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML.URIПространстваИмен = "" Тогда
Возврат ЧтениеРеализации(ЧтениеXML);
КонецЕсли;
Возврат ПрочитатьXML(ЧтениеXML);
КонецФункции
Функция ЧтениеРеализации(ЧтениеXML)
ЧтениеXML.Прочитать();
// Работа со ссылкой документа.
ПолученнаяСсылка = ПрочитатьXML(ЧтениеXML);
Док = Документы.ПоступлениеТоваров.ПолучитьСсылку(Новый УникальныйИдентификатор(ПолученнаяСсылка));
Документ = Док.ПолучитьОбъект();
Если Документ = Неопределено Тогда
Документ = Документы.ПоступлениеТоваров.СоздатьДокумент();
Документ.УстановитьСсылкуНового(Док);
Документ.Дата = ТекущаяДата;
Документ.УстановитьНовыйНомер();
КонецЕсли;
Документ.ПометкаУдаления = ПрочитатьXML(ЧтениеXML);
Документ.ВалютаДокумента = ПрочитатьXML(ЧтениеXML);
// Табличная часть "Товары.
// Построчное чтение.
ЧтениеXML.Прочитать();
Документ.Товары.Очистить();
Пока ЧтениеXML.Имя = "Row" Цикл
// Позиционируемся на узле с номенклатурой.
ЧтениеXML.Прочитать();
НоваяСтрока = Документ.Товары.Добавить();
НоваяСтрока.Номенклатура = ПрочитатьXML(ЧтениеXML);
НоваяСтрока.Количество = ПрочитатьXML(ЧтениеXML);
// Читаем конец узла Row.
ЧтениеXML.Прочитать();
КонецЦикла;
// Читаем конец табличной части.
ЧтениеXML.Прочитать();
// Читаем конец документа.
ЧтениеXML.Прочитать();
Возврат(Документ);
КонецФункции
Функция РазрешениеКоллизий(Данные)
Если ТипЗнч(Данные) = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда
Если Не Данные.ЭтоНовый() Тогда
СсылкаНаУзел = ПланыОбмена.Поставка.НайтиПоКоду("Опт");
Если ПланыОбмена.ИзменениеЗарегистрировано(СсылкаНаУзел, Данные) Тогда
Возврат(Ложь);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат(Истина);
КонецФункции
Как принудительно зарегистрировать изменения объектов?
СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, Неопределено);
СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, Метаданные.Справочники.Номенклатура);
СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ДокСсылка = Документы.РеализацияТоваров.НайтиПоНомеру(НомерДок, ДатаПериода);
Если Не ДокСсылка.Пустая() Тогда
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, ДокСсылка);
КонецЕсли;
WEB-расширение
i Как в форме списка номенклатуры отменить все установленные отборы?
private void commandPanel_ItemCommand(object source, System.Web.UI.WebControls.CommandEventArgs e)
{
if (e.CommandName = = "ShowAll")
{
foreach (V8Filter filter in listDS.Filter)
{
filter.Checked = false;
}
grid.Refresh();
}
}
Как запретить перенос содержимого ячеек в форме списка расходных накладных?
private void Grid_ItemDataBound(object sender, _1C.V8.WebControls.V8GridItemEventArgs e)
{
foreach (TableCell cell in e.Item.Cells)
cell.Wrap = false;
}
Как открыть список расходных накладных с отбором, установленным по определенному складу?
Функция ПолучитьЗначениеПоУмолчанию(Пользователь, Свойство) Экспорт
Отбор = Новый Структура;
Отбор.Вставить("Пользователь", Пользователь);
Отбор.Вставить("Настройка", ПланыВидовХарактеристик.НастройкиПользователей.НайтиПоНаименованию(Свойство));
Результат = РегистрыСведений.НастройкиПользователей.Получить(Отбор);
Возврат Результат.Значение;
КонецФункции
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
Title.Text = ListDataSource.TableInfo.Presentation;
// Добавляемый код.
ListDataSource.Connection.Open();
try
{
ObjectRef currUser = (ObjectRef)V8.Get(ListDataSource.Connection, ListDataSource.Connection.Connection, "глТекущийПользователь");
ObjectRef mainWH = (ObjectRef)V8.Call(ListDataSource.Connection, ListDataSource.Connection.Connection, "ПолучитьЗначениеПоУмолчанию", currUser, "ОсновнойСклад");
if (!mainWH.IsEmpty())
{
V8Filter filter = ListDataSource.Filter["Склад"];
filter.Checked = true;
filter.Condition = V8FilterCondition.Equal;
filter.ValueType1 = ListDataSource.Metadata.TypesInfo[V8.TypeNameFromValue(mainWH)];
filter.Value1 = mainWH;
filter.Presentation1 = mainWH.Presentation(ListDataSource.Connection);
}
}
finally
{
ListDataSource.Connection.Close();
}
}
}
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using _1C.V8.WebControls;
using _1C.V8.Data;
Как добавить кнопку для ввода документа на основании?
V8Grid_onInputOnBasis( '', 'grid', document.getElementById('grid_SelectedItem').value, 'Документ.ПриходнаяНакладная')
Габец Андрей Петрович, Гончаров Дмитрий Игоревич
1С:Предприятие 8.0. Простые примеры разработки