gifts2017

Всякие полезности

Опубликовал Андрей Пастухов (Minotavrik) в раздел Программирование - Практика программирования

Всякие полезные функции, которые каждый из нас использовал, собраны в общую кучу.

1С:8.1 Примеры разработки

Примитивные типы, системные функции

Как явно указать нужную дату?

'20050308' Дата(2005, 1, 1) Дата(1, 1, 1) Дата(2005, 1, 1, 10, 29, 50) ДАТАВРЕМЯ(2005, 01, 01)

Как проверить дату на пустое значение?

Если ДатаПроверяемая = Дата(1, 1, 1) Тогда Сообщить("Пустая дата!"); КонецЕсли;

Как сравнить две даты (дни)?

Если НачалоДня(Дата1) = НачалоДня(Дата2) Тогда Сообщить("Дни совпадают!"); КонецЕсли;

Как прибавить к дате день, месяц?

СледующийДень = ТекущаяДата() + 60 * 60 * 24;
ДобавитьМесяц(Дата(2005, 1, 31), 1) ДобавитьМесяц(Дата(2005, 2, 28), -1) КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1))
ФункцияПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней) Запрос = НовыйЗапрос(" |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата"; Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата); Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней); ВозвратЗапрос.Выполнить().Выгрузить()[0].Дата; КонецФункции

Как можно проверить тип значения переменной на равенство нужному?

ИмяНужногоТипа = "ДокументСсылка.РеализацияТоваров"; Если ТипЗнч(ОбрабатываемыйДокумент) = Тип(ИмяНужногоТипа) Тогда // Строки кода, выполняемые при истинности условия. КонецЕсли;

Как очистить реквизит формы, имеющий ссылочный тип?

 Товар = Справочники.Номенклатура.ПустаяСсылка();

Как очистить значение, имеющее тип "Хранилище значения"?

РеквизитХранилище = Неопределено;

Как проверить тип значения, помещенного в реквизит имеющий тип "Хранилище значения"?

Значение = Фотография.Получить(); Если Значение <> Неопределено Тогда Если ТипЗнч(Значение) = Тип("Строка") Тогда // Обработать строку. ИначеЕсли ТипЗнч(Значение) = Тип("Картинка") Тогда // Обработать картинку. Сообщить("Картинка"); КонецЕсли; КонецЕсли;

Как сжать данные, помещаемые в хранилище значения?

СопроводительнаяИнформация = Новый ХранилищеЗначения(ПомещаемоеЗначение, Новый СжатиеДанных(9));

Как предоставить пользователю возможность выбора значения составного типа?

МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("СправочникСсылка.ФизЛица")); // Добавить другие типы.
ОписаниеВозможныхТипов = Новый ОписаниеТипов(МассивТипов);
ПолученноеЗначение = Неопределено; ВвестиЗначение(ПолученноеЗначение, "Выберите значение:", ОписаниеВозможныхТипов);

Как применить округление при работе с вычисляемыми числовыми полями в запросе?

ВЫБРАТЬ ПродажиОбороты.Номенклатура, ВЫРАЗИТЬ(ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК ЧИСЛО(15, 2)) КАК СредняяЦенаПродажи ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты

Как вывести многострочное предупреждение?

 Предупреждение("На складе: " + Остаток + Символы.ПС + "В резерве : " + Зарезервировано + Символы.ПС + "Свободный остаток: " + (Остаток - Зарезервировано), 20, "Состояние остатков");

Как при выполнении обработки сообщить пользователю текущее время?

ТекущееВремя = Формат(ТекущаяДата(), "ДЛФ=В"); Сообщить(ТекущееВремя);

Как вывести число прописью по-русски, но без дробной части?

ФорматнаяСтрока = "Л=ru_RU"; ПараметрыПредметаИсчисления = " , , , , , , , , 0"; Сообщить(ЧислоПрописью(ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления));

Как вывести число прописью по-русски, с указанием сотых в дробной части?

ПараметрыПредметаИсчисления = "целая, целых, целых, ж, сотая, сотой, сотых, ж, 2" ФорматнаяСтрока = "Л=ru_RU; ДП=Истина"; Сообщить(ЧислоПрописью(ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления));

Как вывести прописью число килограммов с указанием дробной части в граммах?

ПараметрыПредметаИсчисления = "килограмм, килограмма, килограммов, м, грамм, грамма, граммов, м, 3"; ФорматнаяСтрока = "Л=ru_RU; ДП=Истина"; Сообщить(ЧислоПрописью(ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления));

Как долларовую сумму вывести прописью по-английски?

ФорматнаяСтрока = "Л=en_US"; ПараметрыПредметаИсчисления = "dollar, dollars, cent, cents, 2"; Сообщить(ЧислоПрописью(Сумма, ФорматнаяСтрока, ПараметрыПредметаИсчисления));

Как загрузить внешнюю компоненту?

Попытка ЗагрузитьВнешнююКомпоненту("scanopos.dll") Исключение Сообщить("Ошибка загрузки внешней компоненты!"); КонецПопытки;
Попытка // Получить объект компоненты. Объект = Новый("AddIn.Scanner"); Исключение Сообщить("Не удалось создать объект внешней компоненты"); КонецПопытки;

Как выполнить команду операционной системы?

КомандаСистемы("del *.* /q", "c:\temp");
КомандаСистемы("cmd");
ЗапуститьПриложение("ШаблонДоговора.doc");

Как реализовать код процедуры в зависимости от режима выполнения (на клиенте, на сервере, во внешнем соединении) ?

#Если ВнешнееСоединениеТогда // Фрагмент кода, который должен выполняться в сессии внешнего соединения. #КонецЕсли
#Если Клиент Тогда // Фрагмент кода, который должен выполняться на клиентском месте. #КонецЕсли
#Если Сервер Тогда // Фрагмент кода, который должен выполняться на сервере. #КонецЕсли

Как при групповой обработке объектов реализовать стратегию "либо все, либо ничего"?

НачатьТранзакцию(); // В переменной "ВыборкаДанных" содержатся данные для записи в справочник. Пока ВыборкаДанных.Следующий() Цикл ЭлементОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); ЭлементОбъект.Код = Выборка.Код; ЭлементОбъект.Наименование = Выборка.Наименование; // Остальные реквизиты ЭлементОбъект.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); ОтменитьТранзакцию();

Как посчитать сумму по формуле сложного процента?

Функция СложныйПроцент(Кредит, Ставка, Срок = 1) Возврат Кредит*Pow(1 + Ставка/100, Срок); КонецФункции

Универсальные коллекции

Массив

В каких ситуациях обычно используются массивы?

Как создать массив?

СозданныйМассив = Новый Массив ();
СозданныйМассив = Новый Массив (10);

Как создать многомерный массив?

ДвумерныйМассив = Новый Массив (2, 8);
ДвумерныйМассив = Новый Массив; МассивВторогоПорядка = Новый Массив(8); ДвумерныйМассив.Добавить(МассивВторогоПорядка); ДвумерныйМассив.Добавить(МассивВторогоПорядка);
Значение = ДвумерныйМассив[2][5]; Значение = ДвумерныйМассив.Получить(2).Получить(5);

Как добавить элементы в массив?

НашМассив.Добавить(НовоеЗначение);
Массив = Новый Массив; Массив.Вставить(5, "ООО ""Лабан""");

Как определить размер массива?

Размер = НашМассив.Количество();

Как обратиться к элементу массива?

ПервоеЗначение = НашМассив[0]; НашМассив[9] = ДесятоеЗначение;
ПервоеЗначение = НашМассив.Получить(0); НашМассив.Установить(9, ДесятоеЗначение);

Как перебрать элементы массива?

Для Каждого ЭлементМассива Из МассивЭлементов Цикл Если ТипЗнч(ЭлементМассива) = Тип("Число") Тогда Сообщить(ЭлементМассива); КонецЕсли; КонецЦикла; Для Сч = 0 по МассивЭлементов.ВГраница() Цикл Если ТипЗнч(МассивЭлементов[Сч]) = Тип("Число") Тогда МассивЭлементов[Сч] = 0; КонецЕсли; КонецЦикла;

Как удалить элемент массива?

МассивЭлементов.Удалить(0); Индекс = МассивЭлементов.ВГраница(); Пока Индекс >= 0 Цикл Если ТипЗнч(МассивЭлементов[Индекс]) = Тип("Число") Тогда МассивЭлементов.Удалить(Индекс); КонецЕсли; Индекс = Индекс - 1; КонецЦикла;

Как удалить все элементы массива?

Массив.Очистить();

Как удалить повторяющиеся элементы массива?

Процедура УдалитьПовторяющиесяЭлементы(Массив) ТекущийИндекс = 0; ВсегоЭлементов = Массив.Количество(); Пока ТекущийИндекс < ВсегоЭлементов Цикл Индекс2 = ТекущийИндекс + 1; Пока Индекс2 < ВсегоЭлементов Цикл Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда Массив.Удалить(Индекс2); ВсегоЭлементов = ВсегоЭлементов - 1; Иначе Индекс2 = Индекс2 + 1; КонецЕсли; КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1; КонецЦикла; КонецПроцедуры

Как скопировать массив?

Функция СкопироватьМассив(ИсходныйМассив) МассивКопия = Новый Массив; Для Каждого Элемент Из ИсходныйМассив Цикл МассивКопия.Добавить(Элемент); КонецЦикла; Возврат МассивКопия; КонецФункции

Как проверить, что два массива идентичны?

Функция ПроверитьИдентичностьМассивов(ПервыйМассив, ВторойМассив) НаибольшийИндекс = ПервыйМассив.ВГраница(); Если НаибольшийИндекс > ВторойМассив.ВГраница () Тогда Возврат Ложь; КонецЕсли; Для Счетчик = 0 По НаибольшийИндекс Цикл Если ПервыйМассив[Счетчик] <> ВторойМассив[Счетчик] Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции

В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать?

СписокЗначений = Новый СписокЗначений; СписокЗначений.ЗагрузитьЗначения(МассивНаименований); СписокЗначений.СортироватьПоЗначению(); МассивНаименований = СписокЗначений.ВыгрузитьЗначения(); СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Убыв);

Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. Как удалить все пустые значения массива?

Процедура УдалитьПустыеЭлементы(МассивНоменклатуры) Счетчик = 0; КоличествоЭлементов = МассивНоменклатуры.Количество(); Пока Счетчик < КоличествоЭлементов Цикл Если МассивНоменклатуры [Счетчик].Пустая() Тогда МассивНоменклатуры.Удалить(Счетчик); КоличествоЭлементов = КоличествоЭлементов - 1; Иначе Счетчик = Счетчик + 1; КонецЕсли; КонецЦикла; КонецПроцедуры

Как получить массив номенклатурных позиций, использованных в табличных частях "Номенклатура" и "Тара" накладной?

МассивНоменклатуры = СсылкаНаДокумент.Номенклатура.ВыгрузитьКолонку("Номенклатура"); МассивНоменклатурыТара = СсылкаНаДокумент.ВозвратнаяТара.ВыгрузитьКолонку("Номенклатура"); Для Каждого ЭлементМассиваТара Из МассивНоменклатурыТара Цикл МассивНоменклатуры.Добавить(ЭлементМассиваТара); КонецЦикла;

Есть две таблицы значений. Как получить массив совпадающих имен колонок?

МассивСовпадающихКолонок = Новый Массив(); Для Каждого Колонка Из ТаблицаПриемник.Колонки Цикл ИмяКолонкиПриемника = Колонка.Имя; Если ТаблицаИсточник.Колонки.Найти(ИмяКолонкиПриемника) <> Неопределено Тогда МассивСовпадающихКолонок.Добавить(ИмяКолонкиПриемника); КонецЕсли; КонецЦикла;

Как в запросе сделать отбор по нескольким вариантам заполнения реквизита типа "ПеречислениеСсылка"?

Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ОтпускаОрганизацииРаботникиОрганизации.ФизЛицо, | ОтпускаОрганизацииРаботникиОрганизации.ДатаНачала, | ОтпускаОрганизацииРаботникиОрганизации.ДатаОкончания |ИЗ | Документ.ОтпускаОрганизации.РаботникиОрганизации КАК ОтпускаОрганизацииРаботникиОрганизации |ГДЕ | ОтпускаОрганизацииРаботникиОрганизации.ПричинаОтсутствия В (&МассивПричин)"; МассивПричин = Новый Массив; МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускБезСохранени яЗарплаты); МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускУчебный); Запрос.УстановитьПараметр("МассивПричин", МассивПричин);

Как из регистра сведений "РасчетчикиЗарплатыОрганизации" получить в виде массива всех расчетчиков зарплаты определенного подразделения организации?

Функция ПолучитьМассивРасчетчиков(Подразделение) НаборЗаписей = РегистрыСведений.РасчетчикиЗарплатыОрганизации.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПодразделениеОрганизации.Установить(Подразделение); НаборЗаписей.Прочитать(); МассивРасчетчиков = НаборЗаписей.ВыгрузитьКолонку("Пользователь"); Возврат МассивРасчетчиков; КонецФункции
Функция ПолучитьМассивРасчетчиков(Подразделение) Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | РасчетчикиЗарплатыОрганизации.Пользователь КАК Расчетчик |ИЗ | РегистрСведений.РасчетчикиЗарплатыОрганизации КАК РасчетчикиЗарплатыОрганизации |ГДЕ | РасчетчикиЗарплатыОрганизации.ПодразделениеОрганизации = &Подразделение"; Запрос.УстановитьПараметр("Подразделение", Подразделение); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); МассивРасчетчиков = Новый Массив; Пока Выборка.Следующий() Цикл МассивРасчетчиков.Добавить(Выборка.Расчетчик); КонецЦикла; Возврат МассивРасчетчиков; КонецФункции

Структура

В каких ситуациях обычно используются объекты типа "Структура"?

Как создать структуру?

СозданнаяСтруктура = Новый Структура; Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст", "Иванов", "Иван", "Иванович", 7);

Как добавить элементы в структуру?

Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст", "Иванов", "Иван", "Иванович", 7); Оппонент.Вставить("Обращение", "Господин"); Оппонент.Вставить("Возраст", 25);

Как обратиться к элементу структуры?

ТекущийВозраст = Оппонет.Возраст; КлючСтруктуры = "Возраст"; ТекущийВозраст = Оппонет[КлючСтруктуры]; ТекущийВозраст = Неопределено; Оппонет.Свойство("Возраст", ТекущийВозраст); Оппонет.Возраст = 32; Оппонет["Возраст"] = 32; Оппонент.Вставить("Возраст", 32);

Как перебрать элементы структуры?

Для Каждого Элемент из СтруктураПараметров Цикл Сообщить(Элемент.Ключ + ": " + Элемент.Значение); КонецЦикла;

Как удалить элемент структуры?

СтруктураПараметров.Удалить("Номенклатура"); СтруктураПараметров. Очистить();

Как в структуре установить значение для элемента с определенным ключом?

Структура = Новый Структура; // Добавить новый элемент. Структура.Вставить("Цвет", WebЦвета.Белый); // Установить значение для элемента с ключом "Цвет". Структура.Вставить("Цвет", WebЦвета.Синий);

Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам?

СтруктураОтборов = Новый Структура; СтруктураПараметровОтбора = Новый Структура; Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл Если ЭлементОтбора.Использование Тогда СтруктураПараметровОтбора.Очистить(); СтруктураПараметровОтбора.Вставить("Имя", ЭлементОтбора.Имя); СтруктураПараметровОтбора.Вставить("ВидСравнения", ЭлементОтбора.ВидСравнения); СтруктураПараметровОтбора.Вставить("Значение", ЭлементОтбора.Значение); СтруктураПараметровОтбора.Вставить("ЗначениеПо", ЭлементОтбора.ЗначениеПо); СтруктураПараметровОтбора.Вставить("ЗначениеС", ЭлементОтбора.ЗначениеС); СтруктураПараметровОтбора.Вставить("Представление", ЭлементОтбора.Представление); СтруктураПараметровОтбора.Вставить("ПутьКДанным", ЭлементОтбора.ПутьКДанным); СтруктураПараметровОтбора.Вставить("ТипЗначения", ЭлементОтбора.ТипЗначения); СтруктураОтборов.Вставить(ЭлементОтбора.Имя, СтруктураПараметровОтбора); КонецЕсли; КонецЦикла;

Как определить, есть ли в структуре элемент с ключом "Контрагент", и если есть, но содержит пустое значение справочника или Неопределено - удалить этот элемент?

Если Структура.Свойство("Контрагент", ЗначениеЭлемента) Тогда Если ЗначениеЭлемента = Неопределено ИЛИ ЗначениеЭлемента.Пустая() Тогда Структура.Удалить("Контрагент"); КонецЕсли; КонецЕсли; Структура.Контрагент Структура["Контрагент"]

Как из табличной части "Товары" документа получить все строки, где значение реквизита "Цена" равно нулю, а значение реквизита "СтавкаНДС" равно значению "НДС18" перечисления "СтавкиНДС"?

СтруктураДляПоиска = Новый Структура("Цена, СтавкаНДС", 0, Перечисления.СтавкиНДС.НДС18); МассивСтрок = Товары.НайтиСтроки(СтруктураДляПоиска);

Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату?

// Подготовить отбор по измерению "Организация". СтруктураОтбора = Новый Структура("Организация", ЮрЛицо); // Получить данные, актуальные на указанную дату. СтруктураДанных = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.ПолучитьПоследнее(ДатаПолучения, СтруктураОтбора); // Прочитать данные из структуры данных. СпособОценкиМпзЮрЛица = СтруктураДанных.СпособОценкиМПЗ; ДиректКостингЮрЛица = СтруктураДанных.ДиректКостинг;

Как сформировать структуру названий реквизитов табличной части произвольного документа?

Функция СформироватьСтруктуруТабличнойЧастиДокумента(Документ, ИмяТабличнойЧасти) СтруктураТабличнойЧастиДокумента = Новый Структура; Для Каждого Реквизит из Документ.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты Цикл СтруктураТабличнойЧастиДокумента.Вставить(Реквизит.Имя, Реквизит.Имя); КонецЦикла; Возврат СтруктураТабличнойЧастиДокумента; КонецФункции

Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части?

Функция СформироватьЗапросПоТабличнойЧасти(Документ, ИмяТабличнойЧасти, СтруктураПолей) Экспорт ПоляРеквизитов = ""; Для Каждого Реквизит Из СтруктураПолей Цикл ПоляРеквизитов = ПоляРеквизитов + ", Док." + Реквизит.Значение + ?(ЗначениеНеЗаполнено(Реквизит.Ключ), "", " КАК " + СокрЛП(Реквизит.Ключ)); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Док.НомерСтроки " + ПоляРеквизитов + " |ИЗ | Документ." + Документ.Метаданные().Имя + "." + СокрЛП(ИмяТабличнойЧасти) + " КАК Док |ГДЕ | Док.Ссылка = &ДокументСсылка"; // Установить параметры запроса. Запрос.УстановитьПараметр("ДокументСсылка", Документ.Ссылка); Возврат Запрос.Выполнить(); КонецФункции

Соответствие

В каких ситуациях обычно используются объекты типа "Соответствие"?

Как создать соответствие?

СозданноеСоответствие = Новый Соответствие();

Как добавить элементы в соответствие?

ВозрастСотрудников.Вставить(Сотрудник, ВозрастСотрудника); ВозрастСотрудников [Сотрудник] = ВозрастСотрудника;

Как обратиться к элементу соответствия?

ВозрастСотрудника = ВозрастСотрудников.Получить(Сотрудник); ВозрастСотрудника = ВозрастСотрудников [Сотрудник];

Как перебрать элементы соответствия?

Для Каждого Элемент из Замены Цикл Сообщить(Элемент.Ключ + " - " + Элемент.Значение); КонецЦикла;

Как удалить элемент соответствия?

Замены.Удалить(УдаляемыйТовар); Замены. Очистить();

Как получить данные из соответствия?

Значение = КурсыВалютДокумента.Получить(УправленческаяВалюта); Если Значение = Неопределено Тогда Сообщить("Данная валюта в соответствии отсутствует"); Иначе Курс = Значение["Курс"]; Кратность = Значение["Кратность"]; КонецЕсли;

Как получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Ссылка КАК Ссылка, | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета, | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета.Наименование, | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Предопределенный |ИЗ | ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацииБазовыеВидыРасчета |ИТОГИ ПО | Ссылка"; Результат = Запрос.Выполнить(); ВыборкаВидовРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВидыРасчета = Новый Соответствие; БазовыеВидаРасчета = Новый Соответствие; СвойстваВидаРасчета = Новый Структура("Наименование, Предопределенный"); // Цикл по видам расчета, обладающим базовыми. Пока ВыборкаВидовРасчета.Следующий() Цикл БазовыеВидаРасчета.Очистить(); ВыборкаБазовых = ВыборкаВидовРасчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Цикл по базовым видам расчета. Пока ВыборкаБазовых.Следующий() Цикл // Заполненить значения структуры "СвойстваВидаРасчета". СвойстваВидаРасчета.Наименование = ВыборкаБазовых.Наименование; СвойстваВидаРасчета.Предопределенный = ВыборкаБазовых.Предопределенный; // Заполненить соответствие "БазовыеВидАРасчета". БазовыеВидаРасчета.Вставить(ВыборкаБазовых.ВидРасчета, СвойстваВидаРасчета); КонецЦикла; // Заполнить соответствие "ВидыРасчета". ВидыРасчета.Вставить(ВыборкаВидовРасчета.Ссылка, БазовыеВидаРасчета); КонецЦикла;

Список значений, таблица значений, дерево значений

В каких ситуациях обычно используются списки значений, таблицы значений, дерево значений?

Как создать список значений?

СозданныйСписок = Новый СписокЗначений;

Как добавить элементы в список значений?

СписокСотрудников.Добавить(ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото); СписокСотрудников.Вставить(Инд, ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото);

Как найти элемент списка значений?

ЭлементСписка = СписокСотрудников.НайтиПоЗначению(ИскомыйСотрудник); Если ЭлементСписка <> Неопределено Тогда Сообщить(СписокСотрудников.Индекс(ЭлементСписка)); КонецЕсли;

Как обратиться к элементу списка значений?

ЭлементСписка = СписокСотрудников[Инд]; ЭлементСписка = СписокСотрудников.Получить(Инд); Сотрудник = ЭлементСписка.Значение; Представление = ЭлементСписка.Представление; Пометка = ЭлементСписка.Пометка; Картинка = ЭлементСписка.Картинка;

Как перебрать элементы списка значений?

Для Каждого ЭлементСписка Из СписокСотрудников Цикл Сообщить(ЭлементСписка.Значение); КонецЦикла;
СтаршийИндекс = СписокСотрудников.Количество() - 1; Для Сч = 0 по СтаршийИндекс Цикл Сообщить(СписокСотрудников[Сч].Значение); КонецЦикла;

Как удалить элемент списка значений?

СписокСотрудников.Удалить(0);
Индекс = СписокОбъектов.Количество() - 1; Пока Индекс >= 0 Цикл Если ТипЗнч(СписокОбъектов[Индекс].Значение) = Тип("Число") Тогда СписокОбъектов.Удалить(Индекс); КонецЕсли; Индекс = Индекс - 1; КонецЦикла;

Как создать таблицу значений и заполнить ее поля?

ТаблицаЗначений = Новый ТаблицаЗначений; // Создать нужные колонки. ТаблицаЗначений.Колонки.Добавить("Фамилия"); ТаблицаЗначений.Колонки.Добавить("Возраст"); // Добавить новую строку и задать значения в колонках таблицы. НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.Фамилия = "Иванов"; НоваяСтрока.Возраст = 23; // Добавить новую строку и задать значения в колонках таблицы. НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока["Фамилия"] = "Иванов"; НоваяСтрока["Возраст"] = 23;

Как найти значение в таблице значений?

НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение); НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение, "Поставщик, Покупатель"); // Сформировать структуру отбора. СтруктураПоиска = Структура("Сотрудник", ИскомоеЗначение); // Найти строки. МассивНайденныхСтрок = ТаблицаЗначений.НайтиСтроки(СтруктураПоиска);

Как перебрать строки таблицы значений?

Для Каждого ТекущаяСтрока Из ТаблицаСотрудников Цикл Сообщить(ТекущаяСтрока.Сотрудник); КонецЦикла; СтаршийИндекс = ТаблицаСотрудников.Количество() - 1; Для Сч = 0 по СтаршийИндекс Цикл Сообщить(СписокСотрудников[Сч].Сотрудник); КонецЦикла;

Как удалить строки (колонки) таблицы значений?

ТаблицаЗначений.Удалить(УдаляемаяСтрока); ТаблицаЗначений.Удалить(0); ТаблицаЗначений.Колонки.Удалить(УдаляемаяКолонка); ТаблицаЗначений.Колонки.Удалить(0); СтаршийИндексКолонок = ТаблицаЗначений.Колонки.Количество() - 1; Индекс = ТаблицаЗначений.Количество() - 1; Пока Индекс > = 0 Цикл Для Сч = 0 По СтаршийИндексКолонок Цикл Если ТипЗнч(ТаблицаЗначений[Индекс][Сч]) = Тип("Число") Тогда ТаблицаЗначений.Удалить(Индекс); Прервать; КонецЕсли; КонецЦикла; Индекс = Индекс - 1; КонецЦикла;

Как заполнить таблицу значений, если имена колонок содержатся в переменных?

НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока[ИмяКолонки] = Значение;

Как заполнить всю колонку таблицы значений нужным значением?

ТаблицаЗначений.ЗаполнитьЗначения(Ложь, "ФлагФискальногоУчета");

Как таблицу значений "ТаблицаПолучатель" заполнить данными таблицы значений "ИсходнаяТаблица"?

ТаблицаПолучатель = ТаблицаИсходная.Скопировать();
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл НоваяСтрока = ТаблицаПолучатель.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла;
ОдноименныеКолонки = Новый Массив(); Для Каждого Колонка Из ИсходнаяТаблица.Колонки Цикл СовпадающаяКолонка = ТаблицаПолучатель.Колонки.Найти(Колонка.Имя); Если СовпадающаяКолонка <> Неопределено Тогда // Получить свойства колонки. Индекс = ТаблицаПолучатель.Колонки.Индекс(СовпадающаяКолонка); Имя = Колонка.Имя; ТипЗначения = Колонка.ТипЗначения; Заголовок = Колонка.Заголовок; Ширина = Колонка.Ширина; // Заменить колонки в таблице-получаетеле. ТаблицаПолучатель.Колонки.Удалить(Индекс); ТаблицаПолучатель.Колонки.Вставить(Индекс, Имя, ТипЗначения, Заголовок, Ширина); // Добавить очередное имя совпадающих колонок в массив. ОдноименныеКолонки.Добавить(Колонка.Имя); КонецЕсли; КонецЦикла; // Цикл перебора строк исходной таблицы. Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл // Добавить новую строку в таблицу-получатель. НоваяСтрока = ТаблицаПолучатель.Добавить(); // Заполнить значения в совпадающих ячейках. Для Каждого ИмяКолонки Из ОдноименныеКолонки Цикл НоваяСтрока[ИмяКолонки] = СтрокаИсходнойТаблицы[ИмяКолонки]; КонецЦикла; КонецЦикла;

Как добавить колонки к таблице значений "ТаблицаЗначений" с ограничениями по типу?

 // Добавить колонку без ограничений по типу. ТаблицаЗначений.Колонки.Добавить("Объект");
// Ограничения по типам данных колонки: // Только элементы справочника "Контрагенты". ТаблицаЗначений.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
// Подготовка и установка ограничений для данных типа Строка. КвалификаторыСтроки = Новый КвалификаторыСтроки(20, ДопустимаяДлина.Переменная); ДопустимыеТипы = Новый ОписаниеТипов("Строка", , КвалификаторыСтроки); ТаблицаЗначений.Колонки.Добавить("ПримечаниеСтроковоеКороткое", ДопустимыеТипы);
// Расширение уже использованного ранее описания типов. КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный); КвалификаторыДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата); РасширенныеДопустимыеТипы = Новый ОписаниеТипов(ДопустимыеТипы, "Число, Дата", , КвалификаторыЧисла, , КвалификаторыДаты); ТаблицаЗначений.Колонки.Добавить("Примечание", РасширенныеДопустимыеТипы);

Как изменить тип значения колонки таблицы значений, полученной выгрузкой из запроса?

// Создать пустые ссылки. ПустоеОприходование = Документы.ОприходованиеТоваров.ПустаяСсылка(); ПустойВозврат = Документы.ВозвратТоваровОтПокупателя.ПустаяСсылка(); // Выполнить запрос. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПоступлениеТоваровУслуг | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 0 | &ПустойДокументОприходование | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 0 | &ПустойДокументВозврат |"; Запрос.УстановитьПараметр("ПустойДокументОприходование", ПустоеОприходование); Запрос.УстановитьПараметр("ПустойДокументВозврат", ПустойВозврат); // Выгрузить в таблицу значений. ТаблицаСсылок = Запрос.Выполнить().Выгрузить();

Как самостоятельно заполнить дерево значений?

Процедура ЗаполнениеДерева(Кнопка) Дерево.Колонки.Очистить(); Дерево.Колонки.Добавить("ИмяКолонки"); // Создать первую строку. Правильнее сказать создать элемент // коллекции. Он помещается в переменную "СтрокаВерхнегоУровня". СтрокаВерхнегоУровня = Дерево.Строки.Добавить(); // В колонку "ИмяКолонки" записать значение "Старшая". СтрокаВерхнегоУровня.ИмяКолонки = "Старшая"; // Создать строку подчиненную "Старшей". ПодчиненнаяСтрока =СтрокаВерхнегоУровня.Строки.Добавить(); ПодчиненнаяСтрока.ИмяКолонки = "Первая подчиненная"; ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); ПодчиненнаяВторогоУровня.ИмяКолонки = "Первая нижняя"; ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); ПодчиненнаяВторогоУровня.ИмяКолонки = "Вторая нижняя"; ПодчиненнаяСтрока = СтрокаВерхнегоУровня.Строки.Добавить(); ПодчиненнаяСтрока.ИмяКолонки = "Вторая подчиненная"; // Использование метода позволит увидеть результат работы // с деревом значений в табличном поле. ЭлементыФормы.Дерево.СоздатьКолонки(); КонецПроцедуры
Процедура ОткрытиеВетки(Кнопка) // Сделать текущим именно элемент коллекции "Строки". РезультатПоиска = Дерево.Строки.Найти("Первая нижняя", "ИмяКолонки", Истина); Если РезультатПоиска <> Неопределено Тогда ЭлементыФормы.Дерево.ТекущаяСтрока = РезультатПоиска; КонецЕсли; КонецПроцедуры

Прикладные объекты

Справочники

Как создать элемент (группу) справочника?

НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент(); НовыйЭлемент.Наименование = "военный билет"; // Установить другие реквизиты. НовыйЭлемент.Записать(); 
НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); // Получить ссылку на группу, в которой будет находиться новый элемент. Родитель = Справочники.Банки.НайтиПоКоду("000000001"); НовыйЭлемент.Наименование = "АКБ"; НовыйЭлемент.Код = "000000011"; НовыйЭлемент.Родитель = Родитель; // Установить другие реквизиты. НовыйЭлемент.Записать();
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); // Получить ссылку на группу, в которой должна находиться создаваемая группа. Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); НоваяГруппа.Наименование = "Модельная обувь"; НоваяГруппа.Родитель = Родитель; // Установить другие реквизиты. НоваяГруппа.Записать();
// Создать новый элемент в корне справочника. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "IT отдел"; НовыйЭлемент.Записать(); // Получить ссылку на родителя добавляемых элементов. Родитель = НовыйЭлемент.Ссылка; // Создать дочерний элемент. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "Группа разработки"; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Записать();

Как найти элемент справочника?

РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); Если РезультатПоиска.Пустая() Тогда // Выполнить действия, предусмотренные в случае, когда элемент не найден. КонецЕсли;
РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки");
РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");

Как удалить элемент справочника?

 // Найти ссылки на удаляемый элемент. МассивСсылок = Новый Массив; МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); Если НайденныеСсылки.Количество() > 0 Тогда Сообщить("Нельзя удалять элемент, на него имеются ссылки"); Иначе УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); УдаляемыйЭлемент.Удалить(); КонецЕсли; 
УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);

Как перебрать элементы справочника?

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; // Обращение к другим данным справочника. КонецЦикла;
Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;

Как выбрать все элементы из определенной группы?

Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; 
Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель = &Родитель |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель В ИЕРАРХИИ(&Родитель) |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;

Как перебрать элементы подчиненного справочника с помощью запроса?

Процедура ПереборПодчиненыхЭлементов(Контрагент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактныеЛица.Ссылка |ИЗ | Справочник.КонтактныеЛица КАК КонтактныеЛица |ГДЕ | КонтактныеЛица.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Контрагент); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры

Как перебрать элементы подчиненного справочника с помощью выборки справочника?

Процедура ПереборПодчиненыхЭлементов(Контрагент) // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры

Как открыть форму списка (элемента) справочника?

Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); Форма.Открыть();
Форма = Справочники.ХранилищеДополнительнойИнформации.ПолучитьФорму("ФормаСпискаФайловИИзобр ажений"); Форма.Открыть();
Элемент = Справочники.Номенклатура.НайтиПоКоду("00030"); Форма = Элемент.ПолучитьФорму(); Форма.Открыть();

Как добавить запись в табличную часть элемента справочника?

ЭлементОбъект = СсылкаКонтрагент.ПолучитьОбъект(); НоваяСтрока = ЭлементОбъект.ВидыДеятельности.Добавить(); // Заполнить реквизиты. НоваяСтрока.ВидДеятельности = ПолеВводаВидДеятельности; ЭлементОбъект.Записать();

Как удалить строки из табличной части справочника?

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); ОбъектСправочника.ВидыДеятельности.Очистить(); ОбъектСправочника.Записать();
ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект(); // Создать структуру для отбора удаляемых строк. СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности); // Получить массив удаляемых строк. ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора); // Удалить строки. Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока); КонецЦикла; ОбъектСправочника.Записать();

Как перебрать строки табличной части справочника?

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл Сообщить(ТекущаяСтрока.ВидДеятельности); КонецЦикла;

Как создать элемент в нужной группе?

КодГруппы = "330100"; ПоискПоПолномуКоду = Ложь; // значение по умолчанию Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду); Если Группа.Пустая() Тогда Группа = Справочники.Номенклатура.СоздатьГруппу(); Группа.Код = КодГруппы; Группа.Наименование = "Загруженные"; Группа.Записать(); ИначеЕсли Не Группа.ЭтоГруппа Тогда Сообщить("Найден элемент справочника с указанным кодом!"); // Предусмотреть прерывание алгоритма. КонецЕсли; Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = "Программно созданный"; // Реквизиты заполняются в соответствии с задачей. Спр.Родитель = Группа.Ссылка; Спр.Записать();
Группа = Справочники.Номенклатура.Загруженные;
КодЭлемента = "330100"; ПоискПоПолномуКоду = Ложь; //Значение по умолчанию Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду); Если Родитель.Пустая() Тогда Родитель = Справочники.Номенклатура.СоздатьЭлемент(); Родитель.Код = КодЭлемента; Родитель.Наименование = "Загруженные"; Родитель.Записать(); КонецЕсли; Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = "Программно созданный"; // Реквизиты заполняются в соотвествии с задачей. Спр.Родитель = Родитель.Ссылка; Спр.Записать();

Как узнать, есть ли у текущего элемента подчиненные?

Выборка = Справочники.Номенклатура.Выбрать( , Владелец); Если Выборка.Следующий() = Истина Тогда // Есть подчиненные элементы. КонецЕсли;
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЕдиницыИзмерения.Ссылка |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Если НЕ Запрос.Выполнить().Пустой() Тогда // Есть подчиненные элементы! КонецЕсли;

Как узнать количество подчиненных элементов у выбранного элемента справочника?

Выборка = Справочники.ЕдиницыИзмерения.Выбрать( , Владелец); КоличествоЭлементов = 0; Пока Выборка.Следующий() Цикл КоличествоЭлементов = КоличествоЭлементов + 1; КонецЦикла;
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(*) КАК КоличествоЗаписей |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Владелец); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда КоличествоЗаписей = Выборка.КоличествоЗаписей; КонецЕсли;

Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?

ВЫБРАТЬ СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных ИЗ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения ГДЕ ЕдиницыИзмерения.Владелец = &Владелец ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.СерииНоменклатуры КАК СерииНоменклатуры ГДЕ СерииНоменклатуры.Владелец = &Владелец ) КАК ВложенныйЗапрос

Как получить всех родителей выбранного элемента справочника?

МассивРодителей = Новый Массив; Родитель = СсылкаНаЭлемент.Родитель; Пока Не Родитель.Пустая() Цикл МассивРодителей.Добавить(Родитель); Родитель = Родитель.Родитель; КонецЦикла;
Для Каждого ТекущийРодитель Из МассивРодителей Цикл // Работа с текущим родителем. КонецЦикла;
ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Ссылка ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ
ТекущийЭлементНоменклатуры = ЭлементНоменклатура; Запрос = Новый Запрос("ВЫБРАТЬ | Номенклатура.Родитель, | Номенклатура.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры"; Пока Истина Цикл Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Прервать; КонецЕсли; Выборка = Результат.Выбрать(); Выборка.Следующий(); Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; Иначе Сообщить(ТекущийЭлементНоменклатуры); КонецЕсли; КонецЦикла; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; КонецЕсли; КонецЦикла;

Как получить запросом "полный" код элементов справочника, если тип кода - Строка?

ВЫБРАТЬ Контрагенты.Ссылка, ВЫБОР КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Родитель.Код + "/" + Контрагенты.Код ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код + "/" + Контрагенты.Код КОНЕЦ КАК ПолныйКод ИЗ Справочник.Контрагенты КАК Контрагенты

Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?

Запрос = Новый Запрос("ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | (Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа) |ИТОГИ ПО | Ссылка ТОЛЬКО ИЕРАРХИЯ"); Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");

Как найти все элементы справочника, в которых не заполнен строковый реквизит?

ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ (ФизическиеЛица.ИНН = "")
ВЫБРАТЬ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ (ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")

Как перенести все элементы справочника "Контрагенты" из одной группы в другую?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &СтарыйРодитель"; Запрос.УстановитьПараметр("СтарыйРодитель", СтарыйРодитель); Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Контрагент = Выборка.Ссылка.ПолучитьОбъект(); Контрагент.Родитель = НовыйРодитель; Контрагент.Записать(); КонецЦикла;

Как организовать программный выбор элемента справочника?

 // Получить форму выбора справочника как подчиненную // форме документа ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); // Открыть полученную форму ФормаВыбора.Открыть();
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) ПолученноеЗначение = ЗначениеВыбора; // Дальнейшая обработка значения. КонецПроцедуры
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); Выбрано = ФормаВыбора.ОткрытьМодально();
Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) // Запретить стандартную обработку. СтандартнаяОбработка = Ложь; // Получить форму выбора справочника как подчиненную полю ввода. ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент); // Открыть полученную форму ФормаВыбора.Открыть(); КонецПроцедуры
Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Отключить стандартную обработку (при необходимости). СтандартнаяОбработка = Ложь; ПолученноеЗначение = ВыбранноеЗначение; // Дальнейшая обработка значения. КонецПроцедуры

Как сохранить фотографию сотрудника в справочнике "Сотрудники"?

Процедура ЗагрузитьФотографию(Элемент) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; Фильтр = "Текст (*,*)|*.*"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите картинку"; Если ДиалогОткрытияФайла.Выбрать() Тогда ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла); ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка); Фотография = ЭлементХранилища; КонецЕсли; КонецПроцедуры
ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла); элХранилища = Новый ХранилищеЗначения(ВыбФайл); Фотография = элХранилища;

Документы

Как создать новый документ?

НовыйДокумент = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент(); НовыйДокумент.Дата = ТекущаяДата();
ФормаНовогоПКО = Документы.ПриходныйКассовыйОрдер.ПолучитьФормуНовогоДокумента(); ФормаНовогоПКО.Открыть();

Как найти документ?

 ИскомыйДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерДок, Дата(2005, 1, 1)); Если НЕ ИскомыйДокумент.Пустая() Тогда // Выполнить действия в случае обнаружения такого документа. … КонецЕсли;
ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка ИЗ Документ. РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Контрагент = &Контрагент И (РеализацияТоваровУслуг.Номер < 100 ИЛИ РеализацияТоваровУслуг.Дата < ДАТАВРЕМЯ(2005, 1, 1)) И РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура)

Как открыть форму документа?

Форма = ИскомыйДокумент.ПолучитьФорму(); Форма.Открыть();

Как изменить значение реквизита и записать документ?

ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект(); ДокОбъект.Ответственный = глТекущийПользователь; ДокОбъект.Записать();
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Как добавить строку в табличную часть документа, имея ссылку на документ?

ОбъектДок = Док.ПолучитьОбъект(); НоваяСтрока = ОбъектДок.Товары.Добавить(); // Заполнить значения реквизитов. НоваяСтрока.Количество = 10; НоваяСтрока.Цена = 55; // Записать документ. ОбъектДок.Записать();

Как удалить строки из табличной части документа?

ОбъектДокумента = Документ.ПолучитьОбъект(); ОбъектДокумента.Товары.Очистить();

Как перебрать строки документа?

Для Каждого ТекущаяСтрока Из Документ.Товары Цикл // Действия со строкой табличной части. КонецЦикла; СтаршийИндекс = Документ.Товары.Количество() - 1; Для Сч = 0 по СтаршийИндекс Цикл // Действия со строкой табличной части. КонецЦикла;

Как выгрузить табличную часть документа?

ТаблицаТоваровДокумента = Документ.Товары.Выгрузить();

Как посчитать итог в табличной части документа?

ВсегоПоКолонкеСумма = Документ.Товары.Итог("Сумма");

Как провести документ?

НужныйДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

Как перебрать документы?

ВыборкаДокументов = Документы.Расходная.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата())); Пока ВыборкаДокументов.Следующий() Цикл // Действия с документом - элементом выборки, // его значение содержится в переменной ВыборкаДокументов КонецЦикла
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | РеализацияТоваровУслуг.Ссылка |ИЗ | Документ. РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Контрагент = &Контрагент | И | (РеализацияТоваровУслуг.Номер < 100 | ИЛИ | РеализацияТоваровУслуг.Дата < ДАТАВРЕМЯ(2005, 1, 1)) | И | РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&Номенклатура)"; Запрос.УстановитьПараметр("Контрагент", ОтбКонтрагент); Запрос.УстановитьПараметр("Номенклатура", ОтбНоменклатура); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл // действия с документом - элементом выборки, // его значение содержится в переменной Выборка КонецЦикла;

Как пометить на удаление все приходные накладные?

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

Как, имея ссылку на документ, создать в базе его копию?

ДокументКопия = ИсходныйДокумент.Скопировать(); ДокументКопия.Дата = РабочаяДата; ДокументКопия.Записать();
ДокументКопия.Дата = ИсходныйДокумент.Дата;

Как, имея ссылку на документ, прочитать его движения по регистру?

Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ * |ИЗ | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры |ГДЕ | ОстаткиНоменклатуры.Регистратор = &Регистратор"; Запрос.УстановитьПараметр("Регистратор", ПолеВводаРегистратор);
НаборЗаписейРегистра = Движения.ОстаткиНоменклатуры; НаборЗаписейРегистра.Прочитать(); Для Каждого Запись из НаборЗаписейРегистра Цикл // Чтение и модификация очередного движения. КонецЦикла;
Для Каждого НаборЗаписейРегистра из Движения Цикл НаборЗаписейРегистра.Прочитать(); Для Каждого Запись из НаборЗаписейРегистра Цикл // Чтение и модификация очередного движения. КонецЦикла; КонецЦикла;

Как определить, по каким регистрам документ выполнил движения?

ВЫБРАТЬ ПЕРВЫЕ 1 "Внутренние заказы" КАК Регистр ИЗ РегистрНакопления.ВнутренниеЗаказы КАК ВнутренниеЗаказы ГДЕ ВнутренниеЗаказы.Регистратор = &Регистратор ОБЪЕДИНИТЬ ВЫБРАТЬ ПЕРВЫЕ 1 "Заказы поставщикам" КАК Регистр ИЗ РегистрНакопления.ЗаказыПоставщикам КАК ЗаказыПоставщикам ГДЕ ЗаказыПоставщикам.Регистратор = &Регистратор ОБЪЕДИНИТЬ ВЫБРАТЬ ПЕРВЫЕ 1 "Размещение заказов покупателей" КАК Регистр ИЗ РегистрНакопления.РазмещениеЗаказовПокупателей КАК РазмещениеЗаказовПокупателей ГДЕ РазмещениеЗаказовПокупателей.Регистратор = &Регистратор ОБЪЕДИНИТЬ ВЫБРАТЬ ПЕРВЫЕ 1 "Товары в резерве на складах" КАК Регистр ИЗ РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах ГДЕ ТоварыВРезервеНаСкладах.Регистратор = &Регистратор

Как в табличной части документа удалить строки с нулевым значением реквизита "Количество"?

ОбъектДок = СсылкаДок.ПолучитьОбъект(); СтруктураДляПоиска = Новый Структура("Количество", 0); ТабличнаяЧастьДок = ОбъектДок.Товары; МассивПустыхСтрок = ТабличнаяЧастьДок.НайтиСтроки(СтруктураДляПоиска); Для каждого Строка Из МассивПустыхСтрок Цикл ТабличнаяЧастьДок.Удалить(Строка); КонецЦикла; ОбъектДок.Записать();
СтруктураДляПоиска = Новый Структура("Количество", 0); МассивПустыхСтрок = Товары.НайтиСтроки(СтруктураДляПоиска); Для каждого Строка Из МассивПустыхСтрок Цикл Товары.Удалить(Строка); КонецЦикла;

Как очистить колонку "СтавкаНДС" в табличном поле "Товары" уже заполненного документа?

Процедура ТоварыСтавкаНДСПриИзменении(Элемент) // Рассчитать реквизиты табличной части. РассчитатьСуммуНДСТабЧасти(ЭлементыФормы.Товары.ТекущиеДанные, ЭтотОбъект); КонецПроцедуры // ТоварыСтавкаНДСПриИзменении()
Для Каждого Строка из Товары Цикл Строка.СтавкаНДС = Неопределено; // Передать управление на процедуру, вызываемую // из обработчика события "ПриИзменении" для поля ввода "СтавкаНДС" ЭлементыФормы.Товары.ТекущаяСтрока = Строка; РассчитатьСуммуНДСТабЧасти(ЭлементыФормы.Товары.ТекущиеДанные, ЭтотОбъект); КонецЦикла;

Как заполнить значения свойств нового документа на основании существующего?

НовыйСчет = Документы.СчетНаОплатуПокупателю.СоздатьДокумент(); ЗаполнитьЗначенияСвойств(НовыйСчет, ДокументЗаказа, , "Дата"); // Заполнить табличную часть Товары. Для Каждого СтрокаТоваровЗаказа Из ДокументЗаказа.Товары Цикл ЗаполнитьЗначенияСвойств(НовыйСчет.Товары.Добавить(), СтрокаТоваровЗаказа); КонецЦикла; // Заполнить табличную часть ВозвратнаяТара Для Каждого СтрокаТарыЗаказа Из ДокументЗаказа.ВозвратнаяТара Цикл ЗаполнитьЗначенияСвойств(НовыйСчет.ВозвратнаяТара.Добавить(), СтрокаТарыЗаказа); КонецЦикла; // Заполнить табличную часть Услуги Для Каждого СтрокаУслугЗаказа Из ДокументЗаказа.Услуги Цикл ЗаполнитьЗначенияСвойств(НовыйСчет.Услуги.Добавить(), СтрокаУслугЗаказа); КонецЦикла; НовыйСчет.ЗаказПокупателя = ДокументЗаказа; Форма = НовыйСчет.ПолучитьФорму(); Форма.Открыть();

Как получить перечень приходных накладных, в которых не заполнены номенклатурные позиции?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПриходнаяТовары.Ссылка как Накладные |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПриходнаяТовары |ГДЕ | ПриходнаяТовары.Номенклатура = &ПустаяНоменклатура"; Запрос.УстановитьПараметр("ПустаяНоменклатура", Справочники.Номенклатура.ПустаяСсылка()); ТаблицаНакладных = Запрос.Выполнить();

Как на дату расходной накладной определить курс валюты управленческого учета?

ВЫБРАТЬ КурсыВалютСрезПоследних.Валюта КАК ВалютаУпр, КурсыВалютСрезПоследних.Курс КАК КурсУпр ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДокумента, Валюта В (ВЫБРАТЬ УчетнаяПолитикаСрезПоследних.ВалютаУправленческая ИЗ РегистрСведений.УчетнаяПолитика.СрезПоследних(&ДатаДокумента, ) КАК УчетнаяПолитикаСрезПоследних ) ) КАК КурсыВалютСрезПоследних

Как из формы документа вызвать его неоперативное проведение?

Процедура ОсновныеДействияФормыОК(Кнопка) ЭтаФорма.ИспользоватьРежимПроведения = ИспользованиеРежимаПроведения.Неоперативный; ЗаписатьВФорме(РежимЗаписиДокумента.Проведение); Закрыть(); КонецПроцедуры

Как в обработке проведения получить остатки, актуальные на позицию документа?

Запрос.Текст = " ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток, | ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ПараметрПериод, | ДоговорКонтрагента = &Договор | И | Сделка =&Сделка) КАК ВзаиморасчетыСКонтрагентамиОстатки"; Запрос.УстановитьПараметр("ПараметрПериод", МоментВремени());

Как определить количество документов и количество разных значений реквизита в таблице записей документа?

ВЫБРАТЬ КОЛИЧЕСТВО(РегистрацияПростоевВОрганизации.Ссылка) КАК Случаев, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегистрацияПростоевВОрганизации.ФизЛицо) КАК Работников ИЗ Документ.РегистрацияПростоевВОрганизации КАК РегистрацияПростоевВОрганизации ГДЕ РегистрацияПростоевВОрганизации.Проведен

В последовательность "ПартионныйУчет" добавлено измерение "Организация". Как теперь получить данные по границам последовательности для каждого значения этого измерения?

ТаблицаГраниц = Последовательности.ПартионныйУчет.ПолучитьГраницы("Организация"); Для Каждого СтрокаТаблицыГраниц Из ТаблицаГраниц Цикл Организация = СтрокаТаблицыГраниц.Организация; ДатаГП = СтрокаТаблицыГраниц.Граница.Дата; СсылкаГП = СтрокаТаблицыГраниц.Граница.Ссылка; КонецЦикла;

Хранение сведений

Как добавить запись в непериодический независимый регистр сведений?

НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура); НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись. Номенклатура = ТекущаяНоменклатура; НоваяЗапись.Свойство = ТекущееСвойство; НоваяЗапись.Значение = ТекущееЗначение; НаборЗаписей.Записать();

Как считать содержимое непериодического независимого регистра сведений "СобственныеКонтрагенты"?

НаборЗаписей = РегистрыСведений.СобственныеКонтрагенты.СоздатьНаборЗаписей(); НаборЗаписей.Прочитать(); // Перебрать записи в цикле… Для Каждого Запись из НаборЗаписей Цикл РегистрКонтрагент = Запись.Контрагент; РегистрВидСвязи = Запись.ВидСвязи; РегистрОбъект = Запись.Объект; КонецЦикла; // … или выгрузить записи в таблицу значений. ТаблицаЗаписей = НаборЗаписей.Выгрузить();
ВЫБРАТЬ * ИЗ РегистрыСведений.СобственныеКонтрагенты

Как удалить все записи из независимого регистра сведений?

НаборЗаписей = РегистрыСведений.ТорговоеОборудование.СоздатьНаборЗаписей(); НаборЗаписей.Записать();

Как удалить записи независимого регистра сведений с отбором по конкретной организации?

НаборЗаписей = РегистрыСведений.ОбъектыСтроительстваОрганизаций.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация); НаборЗаписей.Записать();

 

Как добавить запись в периодический независимый регистр сведений?

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта); НаборЗаписей.Отбор.Период.Установить(ТекущаяДата); НовЗапись = НаборЗаписей.Добавить(); НовЗапись.Валюта = ТекущаяВалюта; НовЗапись.Период = ТекущаяДата; НовЗапись.Курс = ТекущийКурс; НовЗапись.Кратность = ТекущаяКратность; НаборЗаписей.Записать(Истина);

Как прочитать (изменить) записи в периодическом независимом регистре сведений?

НаборЗаписей = РегистрыСведений.Валюты.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(ДатаЗаписи); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Чтение и сообщение данных полей записи. Сообщить(Строка(Запись.Период) + " " + Строка(Запись.Валюта) + " " + Строка(Запись.Курс)); // Изменение данных полей записи. Запись.Курс = 0; КонецЦикла; НаборЗаписей.Записать();

Как удалить записи в периодическом независимом регистре сведений?

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Записать();

Как в периодическом независимом регистре сведений "КурсыВалют" удалить все записи по валютам с наименованиями "EUR" и "USD", период которых меньше 01 января 2005 года?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют |ГДЕ | (КурсыВалют.Период >= ДАТАВРЕМЯ(2005, 1, 1) | ИЛИ | НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""USD"") | И | НЕ(КурсыВалют.Валюта.Наименование ПОДОБНО ""EUR""))";
ТаблицаОставляемыхЗаписей = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей); НаборЗаписей.Записать();

Как прочитать данные, актуальные на определенную дату, из регистра сведений "Курсы валют" с отбором по нескольким валютам (отбор по измерениям)?

Запрос = Новый Запрос; МассивВалют = Новый Массив; МассивВалют.Добавить(Валюта1); МассивВалют.Добавить(Валюта2); Запрос.УстановитьПараметр("МассивВалют", МассивВалют); Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения); Запрос.Текст = " |ВЫБРАТЬ | ВалютыСрезПоследних.Валюта, | ВалютыСрезПоследних.Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В (&МассивВалют)) КАК ВалютыСрезПоследних"; ТаблицаКурсов = Запрос.Выполнить().Выгрузить();

Как поменять период у записей периодического независимого регистра, соответствующих ряду условий?

 Процедура ЗаменаПериода() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтветственныеЛицаОрганизации.Период, | ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница, | ОтветственныеЛицаОрганизации.ОтветственноеЛицо |ИЗ | РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации |ГДЕ | ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1) | И | ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование | ПОДОБНО "Групп-Трейдинг" | И | (ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL | ИЛИ | НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Продавец" | ИЛИ | ОтветственныеЛицаОрганизации.Должность.Наименование | ПОДОБНО "Кладовщик"))"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи(); Пока Выборка.Следующий() Цикл Запись.Период = Выборка.Период; Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница; Запись.ОтветственноеЛицо = Выборка.ОтветственноеЛицо; Запись.Прочитать(); Если Запись.Выбран() Тогда Запись.Период = Дата(2004, 1, 1); Запись.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры;

Как "сделать периодическим" реквизит уже заполненного справочника?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | &ДатаУстановки КАК Период, | Проекты.Ссылка КАК Проект, | Проекты.Ответственный |ИЗ | Справочник.Проекты КАК Проекты |ГДЕ | (НЕ(Проекты.ЭтоГруппа)) И (НЕ(Проекты.Ответственный = &Ответственный))"; Запрос.УстановитьПараметр("Ответственный", Справочники.Пользователи.ПустаяСсылка()); Запрос.УстановитьПараметр("ДатаУстановки", Дата(2000,1,1)); ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.ЗакреплениеПроектов.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаРезультат); НаборЗаписей.Записать();

Как добавить записи в регистр сведений, подчиненный регистратору?

НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ВыбранныйРегистратор.Дата; НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; НоваяЗапись.ЛимитПоставщика = 50; НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.ЛимитыВозвратнойТары.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ВыбранныйРегистратор.Дата; НоваяЗапись.Номенклатура = ВыбраннаяНоменклатура; НоваяЗапись.ДоговорКонтрагента = ВыбранныйДоговор; НоваяЗапись.ЛимитПокупателю = 25; НаборЗаписей.Записать(Ложь);

Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?

НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Чтение и сообщение данных полей записи. Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) + " " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки)); // Изменение данных полей записи. Запись.ПроцентСкидкиНаценки = 0; КонецЦикла; НаборЗаписей.Записать();

Как удалить записи из регистра сведений, подчиненного регистратору?

Запрос = Новый Запрос; Запрос.Текст = " | ВЫБРАТЬ | ЦеныНоменклатурыКонтрагентов.Регистратор |ИЗ | РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей(); Пока Выборка.Следующий() Цикл НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); НаборЗаписей.Записать(); КонецЦикла;

Бухгалтерский учет

Как в регистре бухгалтерии сформировать проводки?

// Задать выбираемые значения. ВыбранныйОтветственный = Справочники.Пользователи.НайтиПоНаименованию("Иванцова"); ВыбранныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("00027"); ВыбранныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00013"); ВыбранныйДокумент = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру(2, '20050101'); ВыбранныйСчет = Справочники.БанковскиеСчета.НайтиПоКоду("00001"); ВыбраннаяСтатья = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00002"); ВыбраннаяОрганизация = Справочники.Организации.НайтиПоКоду("00001"); ВыбраннаяВалюта = Справочники.Валюты.НайтиПоКоду(810); // Создать будущий регистратор. ДатаЗаписи = ТекущаяДата(); Документ = Документы.ОперацияБух.СоздатьДокумент(); Документ.Дата = ДатаЗаписи; Документ.Организация = ВыбраннаяОрганизация; Документ.Ответственный = ВыбранныйОтветственный; Документ.Содержание = "Оплата поставщику"; Документ.Записать(); // Создать набор записей. НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Документ.Ссылка); Движение = НаборЗаписей.Добавить(); Движение.Регистратор = Документ.Ссылка; Движение.Период = ДатаЗаписи; // Заполнить счет дебета. Движение.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01"); // Заполнить аналитику счета дебета. Движение.СубконтоДт.Контрагенты = ВыбранныйКонтрагент; Движение.СубконтоДт.Договоры = ВыбранныйДоговор; Движение.СубконтоДт.ДокументыРасчетовСКонтрагентами = ВыбранныйДокумент; // Заполнить счет кредита. Движение.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("51"); // Заполнить аналитику счета кредита. Движение.СубконтоКт.БанковскиеСчета = ВыбранныйСчет; Движение.СубконтоКт.СтатьиДвиженияДенежныхСредств = ВыбраннаяСтатья; // Балансовое измерение. Движение.Организация = ВыбраннаяОрганизация; // Балансовый ресурс. Движение.Сумма = 300000; // Реквизиты.Движение.НомерЖурнала = "БК"; Движение.Содержание = "Оплата поставщику"; // Записать набор записей. НаборЗаписей.Записать();

Как получить остаток по счету?

Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1, | ХозрасчетныйОстатки.Организация, | ХозрасчетныйОстатки.СуммаОстаток, | ХозрасчетныйОстатки.КоличествоОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки"; Запрос.УстановитьПараметр("Период", КонецДня(ДатаОтчета)); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); РезультатЗапроса = Запрос.Выполнить();

Как получить обороты по счету?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОбороты.СуммаОборотДт, | ХозрасчетныйОбороты.СуммаОборотКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, Период, Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты"; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); РезультатЗапроса = Запрос.Выполнить();

Как получить остатки по счетам?

"ВЫБРАТЬ | ХозрасчетныйОстатки.Счет, | ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Счет), | ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт КАК ВалютнаяСуммаОстатокДт, | ХозрасчетныйОстатки.Счет.Порядок КАК СчетПорядок, | ХозрасчетныйОстатки.Валюта КАК Валюта, | ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Валюта) |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет.Валютный И Счет.Вид = &Активный, ,) КАК ХозрасчетныйОстатки |УПОРЯДОЧИТЬ ПО | СчетПорядок |ИТОГИ | СУММА(ВалютнаяСуммаОстатокДт) |ПО | Валюта"; Запрос.УстановитьПараметр("Активный", ВидСчета.Активный); Запрос.УстановитьПараметр("Дата", Дата);

Как перенести остаток со счета на счет?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстатки.СуммаОстатокДт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , | Субконто1 = &Контрагент И Организация = &Организация И Субконто2 = &Договор) КАК ХозрасчетныйОстатки"; // Считаем что на счете ведется аналитика только в разрезе контрагентов // и договоров. Запрос.УстановитьПараметр("Период", Период1); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Договор", Договор); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПокупателями); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Документ = Документы.ОперацияБух.СоздатьДокумент(); Документ.Дата = РабочаяДата; Документ.Организация = Организация; Документ.Содержание = "Погашение дебиторской задолженности"; Проводка = Документ.Движения.Хозрасчетный.Добавить(); Проводка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями; Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ПрочиеРасходы; Проводка.СубконтоДт.Контрагенты = Контрагент; Проводка.СубконтоДт.Договоры = Договор; Проводка.Сумма = Выборка.СуммаОстатокДт; Документ.СуммаОперации = Выборка.СуммаОстатокДт; Форма = Документ.ПолучитьФорму(); Форма.Открыть(); КонецЕсли;

Как найти первый документ, приведший к появлению кредитового остатка на счете?

ВЫБРАТЬ ПЕРВЫЕ 1 ХозрасчетныйОстаткиИОбороты.Регистратор КАК Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаН, &ДатаК, Регистратор, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты ГДЕ ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт > 0 УПОРЯДОЧИТЬ ПО ХозрасчетныйОстаткиИОбороты.Период, Регистратор

Как выбрать все счета, в аналитике которых присутствуют либо вид субконто "Контрагент", либо вид субконто "Договор"?

ВЫБРАТЬ ХозрасчетныйВидыСубконто.Ссылка КАК Счет ИЗ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто ГДЕ ХозрасчетныйВидыСубконто.ВидСубконто.Наименование В ("Договоры", "Контрагенты")

Как выбрать все счета, в аналитике которых присутствуют как вид субконто "Контрагент", так и вид субконто "Номенклатура"?

ВЫБРАТЬ ХозрасчетныйВидыСубконто.Ссылка КАК Счет ИЗ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто1 ПО ХозрасчетныйВидыСубконто.Ссылка = ХозрасчетныйВидыСубконто1.Ссылка ГДЕ (ХозрасчетныйВидыСубконто.ВидСубконто.Наименование = "Контрагенты") И (ХозрасчетныйВидыСубконто1.ВидСубконто.Наименование = "Номенклатура")

Как добавить новый вид субконто к счету?

ВидМенеджеры = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НайтиПоНаименованию("Менеджеры", Истина); // Добавить новый вид характеристик. Если ВидМенеджеры.Пустая() Тогда ВидМенеджеры = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СоздатьЭлемент(); ВидМенеджеры.Наименование = "Менеджеры"; ВидМенеджеры.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Пользователи"); ВидМенеджеры.Записать(); КонецЕсли; // Получить нужный счет. Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"); Если (Не Счет.Пустая()) И (Счет.ВидыСубконто.Найти(ВидМенеджеры) = Неопределено) Тогда // Добавить новый вид субконто к счету. ОбъектСчета = Счет.ПолучитьОбъект(); НовыйВидСубконто = ОбъектСчета.ВидыСубконто.Добавить(); НовыйВидСубконто.ВидСубконто = ВидМенеджеры; НовыйВидСубконто.ТолькоОбороты = Истина; НовыйВидСубконто.Суммовой = Истина; ОбъектСчета.Записать(); КонецЕсли;

Как из регистра бухгалтерии "Хозрасчетный" получить обороты только по валютным счетам?

ВЫБРАТЬ ХозрасчетныйОбороты.Организация КАК Организация, ХозрасчетныйОбороты.Счет КАК Счет, ХозрасчетныйОбороты.Валюта, ХозрасчетныйОбороты.СуммаОборотДт, ХозрасчетныйОбороты.ВалютнаяСуммаОборотДт, ХозрасчетныйОбороты.СуммаОборотКт, ХозрасчетныйОбороты.ВалютнаяСуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет.Валютный, , , , ) КАК ХозрасчетныйОбороты УПОРЯДОЧИТЬ ПО Организация, ХозрасчетныйОбороты.Счет.Код

Как выбрать в регистре бухгалтерии "Хозрасчетный" обороты по "60-ым" счетам, исключив внутренние обороты между ними?

ВЫБРАТЬ ХозрасчетныйОбороты.Счет, ХозрасчетныйОбороты.СуммаОборотДт, ХозрасчетныйОбороты.СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон , , Счет В ИЕРАРХИИ (&Счет), , , НЕ(КорСчет В ИЕРАРХИИ (&Счет)), ) КАК ХозрасчетныйОбороты УПОРЯДОЧИТЬ ПО ХозрасчетныйОбороты.Счет.Код

Как реализовать метод "красного сторно" для регистра бухгалтерии?

Процедура ОбработкаПроведения(Отказ, Режим) СторнируемыеДвижения = РегистрыБухгалтерии.Хозрасчетный.ВыбратьПоРегистратору(СторнируемыйДокумент); Пока СторнируемыеДвижения.Следующий() Цикл Проводка = Движения.Хозрасчетный.Добавить(); Проводка.Период = Дата; Проводка.СчетДт = СторнируемыеДвижения.СчетДт; Проводка.СчетКт = СторнируемыеДвижения.СчетКт; Для каждого Субконто Из СторнируемыеДвижения.СубконтоДт Цикл Проводка.СубконтоДт[Субконто.Ключ] = Субконто.Значение; КонецЦикла; Для каждого Субконто Из СторнируемыеДвижения.СубконтоКт Цикл Проводка.СубконтоКт[Субконто.Ключ] = Субконто.Значение; КонецЦикла; Проводка.ВалютаДт = СторнируемыеДвижения.ВалютаДт; Проводка.ВалютаКт = СторнируемыеДвижения.ВалютаКт; Проводка.ВалютнаяСуммаДт = - СторнируемыеДвижения.ВалютнаяСуммаДт; Проводка.ВалютнаяСуммаКт = - СторнируемыеДвижения.ВалютнаяСуммаКт; Проводка.КоличествоДт = - СторнируемыеДвижения.КоличествоДт; Проводка.КоличествоКт = - СторнируемыеДвижения.КоличествоКт; Проводка.НомерЖурнала = СторнируемыеДвижения.НомерЖурнала; Проводка.Организация = СторнируемыеДвижения.Организация; Проводка.Содержание = СторнируемыеДвижения.Содержание; Проводка.Сумма = - СторнируемыеДвижения.Сумма; КонецЦикла; Движения.Хозрасчетный.Записать(); КонецПроцедуры

Сложные периодические расчеты

Как получить сумму начисления по конкретному виду расчета указанному сотруднику в указанном периоде?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | БУОсновныеНачисления.Результат |ИЗ | РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления |ГДЕ | БУОсновныеНачисления.ПериодРегистрации = &Период | И | БУОсновныеНачисления.ФизЛицо = &ФизЛицо | И | БУОсновныеНачисления.ВидРасчета = &ВидРасчета"; Запрос.УстановитьПараметр("Период", НачалоМесяца(Период1)); Запрос.УстановитьПараметр("ВидРасчета", ВидРасчета); Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);

Как получить сумму всех начислений указанному сотруднику в указанном периоде?

"ВЫБРАТЬ | БУОсновныеНачисления.Организация КАК Организация, | ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.Организация), | БУОсновныеНачисления.ВидРасчета, | ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.ВидРасчета), | БУОсновныеНачисления.Результат КАК Результат, | ""Основные"" КАК ВариантНачислений |ИЗ | РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления |ГДЕ | БУОсновныеНачисления.ПериодРегистрации = &НужныйПериод И БУОсновныеНачисления.ФизЛицо = &ФизЛицо | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | БУДополнительныеНачисления.Организация, | ПРЕДСТАВЛЕНИЕ(БУДополнительныеНачисления.Организация), | БУДополнительныеНачисления.ВидРасчета, | ПРЕДСТАВЛЕНИЕ(БУДополнительныеНачисления.ВидРасчета), | БУДополнительныеНачисления.Результат, | ""Дополнительные"" |ИЗ | РегистрРасчета.БУДополнительныеНачисления КАК БУДополнительныеНачисления |ГДЕ | БУДополнительныеНачисления.ПериодРегистрации = &НужныйПериод И БУДополнительныеНачисления.ФизЛицо = &ФизЛицо |ИТОГИ СУММА(Результат) |ПО ОБЩИЕ, Организация, ВариантНачислений";

Как получить таблицу перерасчетов по перерасчетам нескольких регистров?

ВЫБРАТЬ ПерерасчетОсновных.ФизЛицо КАК Работник, ПерерасчетОсновных.ВидРасчета, ПерерасчетОсновных.ОбъектПерерасчета КАК Документ ИЗ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизации.ПерерасчетОсновныхНачислений КАК ПерерасчетОсновных ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПерерасчетДополнительных.ФизЛицо, ПерерасчетДополнительных.ВидРасчета, ПерерасчетДополнительных.ОбъектПерерасчета ИЗ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизации.ПерерасчетДополнительныхНачисл ений КАК ПерерасчетДополнительных

Как для документа "НачислениеЗарплатыРаботникам" определить номера строк записей полностью вытесненных видов расчета?

ВЫБРАТЬ РАЗРЕШЕННЫЕ УправленческиеНачисления.НомерСтроки КАК НомерСтроки ИЗ РегистрРасчета.УправленческиеНачисления КАК УправленческиеНачисления ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.УправленческиеНачисления.ФактическийПериодДействия(Регистратор = &парамСсылка) КАК УправленческиеНачисленияФактическийПериодДействия ПО УправленческиеНачисления.НомерСтроки = УправленческиеНачисленияФактическийПериодДействия.НомерСтроки И УправленческиеНачисления.Регистратор = УправленческиеНачисленияФактическийПериодДействия.Регистратор ГДЕ УправленческиеНачисления.Регистратор = &парамСсылка И ((УправленческиеНачисленияФактическийПериодДействия.Регистратор) ЕСТЬ NULL )

Как сформировать расчетный листок сотрудника?

"ВЫБРАТЬ | ВложенныйЗапрос.ФизЛицо, | ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ФизЛицо), | ВложенныйЗапрос.ФизЛицоПредставление КАК ФизЛицоПредставление1, | ВложенныйЗапрос.ВидРасчета, | ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ВидРасчета), | ВложенныйЗапрос.ВидРасчетаПредставление КАК ВидРасчетаПредставление1, | ВложенныйЗапрос.Результат КАК Результат, | ВложенныйЗапрос.ТипРасчета КАК ТипРасчета |ИЗ | (ВЫБРАТЬ | БУОсновныеНачисления.ФизЛицо КАК ФизЛицо, | ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.ФизЛицо) КАК ФизЛицоПредставление, | БУОсновныеНачисления.ВидРасчета КАК ВидРасчета, | ПРЕДСТАВЛЕНИЕ(БУОсновныеНачисления.ВидРасчета) КАК ВидРасчетаПредставление, | БУОсновныеНачисления.Результат КАК Результат, | ""Начисления"" КАК ТипРасчета | ИЗ | РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления | ГДЕ | БУОсновныеНачисления.ФизЛицо = &ФизЛицо И БУОсновныеНачисления.ПериодРегистрации = &НужныйПериод | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | УдержанияРаботниковОрганизаций.ФизЛицо, | ПРЕДСТАВЛЕНИЕ(УдержанияРаботниковОрганизаций.ФизЛицо), | УдержанияРаботниковОрганизаций.ВидРасчета, | ПРЕДСТАВЛЕНИЕ(УдержанияРаботниковОрганизаций.ВидРасчета), | -УдержанияРаботниковОрганизаций.Результат, | ""Удержания"" | ИЗ | РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизаций | ГДЕ | УдержанияРаботниковОрганизаций.ФизЛицо = &ФизЛицо И УдержанияРаботниковОрганизаций.ПериодРегистрации = &НужныйПериод) КАК ВложенныйЗапрос |ИТОГИ СУММА(Результат) |ПО ОБЩИЕ, ТипРасчета";

Как организовать сторнирование уже произведенных расчетов прошлых периодов?

 ТаблицаСторноЗаписей = Движения.ОсновныеНачисленияРаботниковОрганизации.ПолучитьДополнение(); Для каждого СтрокаСторно Из ТаблицаСторноЗаписей Цикл // Добавить сторно-записи в набор записей регистра. // Новая запись движений. Движение = Движения.ОсновныеНачисленияРаботниковОрганизации.Добавить(); // Заполнить свойства. Движение.ПериодРегистрации = Строка.ПериодРегистрацииСторно; Движение.ПериодДействияНачало = Строка.ПериодДействияНачалоСторно; Движение.ПериодДействияКонец = Строка.ПериодДействияКонецСторно; Движение.БазовыйПериодНачало = Строка.БазовыйПериодНачало; Движение.БазовыйПериодКонец = Строка.БазовыйПериодКонец; Движение.ВидРасчета = Строка.ВидРасчета; Движение.Сторно = Истина; // Заполнить измерения. Движение.ФизЛицо = Строка.ФизЛицо; Движение.Приказ = Строка.Приказ; Движение.Организация = Строка.Организация; // Ресурсы не заполнять, потому что здесь не происходит расчет, // только подготовка новой записи // Заполнить реквизиты. Движение.ГрафикРаботы = Строка.ГрафикРаботы; Движение.Размер = Строка.Размер; Движение.ВидУчетаВремени = Строка.ВидУчетаВремени; Движение.ПодразделениеОрганизации = Строка.ПодразделениеОрганизации; Движение.ПериодРасчетаСреднегоЗаработкаНачало = Строка.ПериодРасчетаСреднегоЗаработкаНачало; Движение.ПериодРасчетаСреднегоЗаработкаОкончание = Строка.ПериодРасчетаСреднегоЗаработкаОкончание; КонецЦикла; Движения.ОсновныеНачисленияРаботниковОрганизации.Записать();

Бизнес-процессы

Как определить бизнес процесс, в котором количество последовательных этапов определяется индивидуально на момент старта экземпляра процесса?

Процедура ПередВыполнением(Отказ) Если Исполнитель.Пустая() Тогда Исполнитель = ПараметрыСеанса.ТекущийИсполнитель; КонецЕсли; ДатаВыполнения=ТекущаяДата(); КонецПроцедуры
ПолучитьФорму("Маршрут").Открыть(); СтандартнаяОбработка = Ложь;
Если ТочкиМаршрута.Количество() = 0 Тогда Сообщить("Не определен маршрут!!!"); Отказ = Истина; КонецЕсли;
Результат = ПолучитьТочкуМаршрута().Пустая();
Функция ПолучитьТочкуМаршрута() Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | НаМаршрутеТочкиМаршрута.НомерСтроки КАК НомерСтроки, | НаМаршрутеТочкиМаршрута.Склад |ИЗ | БизнесПроцесс.НаМаршруте.ТочкиМаршрута КАК НаМаршрутеТочкиМаршрута |ГДЕ | (НаМаршрутеТочкиМаршрута.Склад НЕ В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ЭтапПути.Склад | ИЗ | Задача.ЭтапПути КАК ЭтапПути | ГДЕ | ЭтапПути.БизнесПроцесс = &БизнесПроцесс )) | И | (Ссылка = &БизнесПроцесс) |УПОРЯДОЧИТЬ ПО | НомерСтроки"; Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат (Выборка.Склад); Иначе Возврат(Справочники.Склады.ПустаяСсылка()); КонецЕсли; КонецФункции
ФормируемыеЗадачи[0].Склад = ПолучитьТочкуМаршрута();
ПолучитьФорму("ПутевойЛист").Открыть(); СтандартнаяОбработка = Ложь;
Если ПоказанияСпидометраКонечные = 0 ИЛИ Ссылка.РасходТоплива = 0 Тогда Сообщить("Не введены данные по путевому листу!"); Отказ = Истина; КонецЕсли;

Как при работе с бизнес процессами отказаться от стандартного способа формирования задачи и сформировать ее программно?

Для Каждого Рецензент Из НаСогласование Цикл НоваяЗадача = Задачи.ЭтапПути.СоздатьЗадачу(); НоваяЗадача.БизнесПроцесс = Ссылка; НоваяЗадача.Пользователь = Рецензент.Рецензент; НоваяЗадача.Наименование = "Согласование со специалистом"; НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.НаПараллельноеСогласование.ТочкиМаршрута.Согласование; НоваяЗадача.Дата = ТекущаяДата(); НоваяЗадача.Записать(); ФормируемыеЗадачи.Добавить(НоваяЗадача); КонецЦикла; СтандартнаяОбработка = Ложь;

Прочие прикладные объекты

Как, не открывая форму внешней обработки, выполнить ее процедуру для определенного объекта?

Обработка = ВнешниеОбработки.Создать(ИмяФайла); Обработка.Печать(Ссылка);

Как быстро получить информацию, по всем объектам, находящимся в компетенции конкретного менеджера (элемент справочника "Пользователи") по продажам?

МассивСсылок = КритерииОтбора.КомпетенцияМенеджераПродаж.Найти(Менеджер); Для Каждого Ссылка из МассивСсылок Цикл Сообщить(Ссылка); КонецЦикла;
ВЫБРАТЬ КомпетенцияМенеджераПродаж.Ссылка ИЗ КритерийОтбора.КомпетенцияМенеджераПродаж(&Менеджер) КАК КомпетенцияМенеджераПродаж

Формы и элементы управления

Работа с формами

Как открыть форму документа?

ФормаДокумента = СсылкаНаДокумент.ПолучитьФорму(); ФормаДокумента.Открыть();

Как открыть форму внешней обработки?

Обработка = ВнешниеОбработки.ПолучитьФорму(ИмяФайла); Обработка.Открыть();
Обработка = ВнешниеОбработки.ПолучитьФорму("C:\Внешние\СпецОтчет.epf", ИмяФормы, , Ключ); Обработка.Открыть();

Как отрыть форму отчета так, чтобы она не перекрывала собой ту форму, из которой она открыта?

Форма = Отчеты.ОтчетДиаграмма.ПолучитьФорму("ФормаОсновная", ЭтаФорма); Форма.ПоложениеОкна = ВариантПоложенияОкна.НеПерекрыватьВладельца; Форма.Открыть();

Как открыть форму отчета на весь экран?

СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
ИзмененятьСпособОтображенияОкна = ИзменениеСпособаОтображенияОкна.Запретить;

Как из формы документа открыть форму списка данного документа, спозиционировавшись на нем же?

ФормаСписка = Документы[Метаданные().Имя].ПолучитьФормуСписка(); ФормаСписка.ПараметрТекущаяСтрока = Ссылка; ФормаСписка.Открыть();
ФормаСписка = Документы[Метаданные().Имя].ПолучитьФормуСписка( , , Новый УникальныйИдентификатор());

В документе есть реквизит "Контрагент". Как открыть форму подчиненного ему справочника "ДоговорыКонтрагентов"?

Если Не Контрагент.Пустая() Тогда ФормаПодчиненныхДоговоров = Справочники.ДоговорыКонтрагентов.ПолучитьФормуСписка(); ФормаПодчиненныхДоговоров.ПараметрОтборПоВладельцу = Контрагент; ФормаПодчиненныхДоговоров.Открыть(); КонецЕсли;

Как в форме отобразить картинку, сохраненную в реквизите справочника?

// Значение, сохраненное в реквизите справочника, имеющем тип // ХранилищеЗначения, можно только получить. СохраненнаяКартинка = Фотография.Получить(); Если СохраненнаяКартинка <> Неопределено Тогда // Если в хранилище было что-нибудь заранее записано… ЭлементыФормы.Фото.Картинка = СохраненнаяКартинка; КонецЕсли;

Как в журнале документов "УчетКадров" отобрать только документы "ПриемНаРаботу"?

 ЖурналДокументовСписок.Отбор.ВидДокумента.Установить(Метаданные.Документы.ПриемНаРаботу); 

Как узнать интервал дат в открытом текущем журнале?

Если ЖурналДокументовСписок.Отбор.Дата.Использование Тогда Сообщить(ЖурналДокументовСписок.Отбор.Дата); Иначе Сообщить("Без ограничения по датам"); КонецЕсли;

Как при открытии справочника сделать отбор по контрагентам, входящим в список?

Процедура ПриОткрытии() СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; СправочникСписок.Отбор.Ссылка.Значение = СписокКонтрагентов; СправочникСписок.Отбор.Ссылка.Использование = Истина; КонецПроцедуры

Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой "Покупатели"?

Процедура КонтрагентНачалоВыбора(Элемент, СтандартнаяОбработка) Если Элемент.Значение.Пустая() Тогда СтандартнаяОбработка = Ложь; ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора( , Элемент); ФормаВыбора.ВыборПокупателя = Истина; ФормаВыбора.Открыть(); КонецЕсли; КонецПроцедуры
Если ВыборПокупателя Тогда ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина; ЭлементыФормы.СправочникСписок.ТекущийРодитель = Константы.ГруппаПокупатели.Получить(); КонецЕсли;
Если ВыборПокупателя Тогда ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина; ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Контрагенты.Покупатели; КонецЕсли;

Табличное поле

Как запретить пользователю изменять порядок следования колонок в табличном поле?

ЭлементыФормы.ТабличноеПоле.ИзменятьПозициюКолонок = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Картинка.ИзменятьПозицию = Ложь; ЭлементыФормы.ТабличноеПоле.Колонки.Код.ИзменятьПозицию = Ложь; ЭлементыФормы.ТабличноеПоле.Колонки.Наименование.ИзменятьПозицию = Ложь;

Как запретить пользователю изменять любые настройки колонок табличного поля?

ЭлементыФормы.ТабличноеПоле.ИзменятьНастройкуКолонок = Ложь;
ЭлементыФормы.ТабличноеПоле.Колонки.Картинка.ИзменятьНастройку = Ложь; ЭлементыФормы.ТабличноеПоле.Колонки.Код.ИзменятьНастройку = Ложь; ЭлементыФормы.ТабличноеПоле.Колонки.Наименование.ИзменятьНастройку = Ложь;

Как вывести информацию о том, какой отбор установлен в журнале документов?

ЭлементыФормы.НадписьОтбор.Заголовок = СписокДокументов.Отбор;
УстановленныйОтбор = СписокДокументов.Отбор; Сообщить("Элементы отбора:"); Для Каждого ЭлементОтбора из УстановленныйОтбор Цикл Сообщить(Строка(ЭлементОтбора) + " использование = " + ЭлементОтбора.Использование); КонецЦикла;

Как в форме справочника установить курсор на элемент с известным наименованием?

ЭлементыФормы.СправочникСписок.ТекущаяСтрока = Справочники.Контрагенты.НайтиПоНаименованию("ПОСТАВЩИКИ", Истина);

Как в форме списка сделать отбор по значению реквизита?

 СправочникСписок.Отбор.СтавкаНДС.Установить(Перечисления.СтавкиНДС.НДС18);
СправочникСписок.Отбор.СтавкаНДС.Значение = Перечисления.СтавкиНДС.НДС18; СправочникСписок.Отбор.СтавкаНДС.ВидСравнения = ВидСравнения.Равно; СправочникСписок.Отбор.СтавкаНДС.Использование = Истина;

Как запретить выдачу сообщения: "Введенные данные не отображены в списке, так как не соответствуют отбору" при добавлении новых элементов в справочник?

ЭлементыФормы.ПолеСписка.ПроверкаОтображенияНовойСтроки = ВариантПроверкиОтображенияНовойСтроки.НеПроверять;

Как заполнить ячейку табличного поля данными?

 Процедура ТабличноеПолеЗаказовЗаказПриИзменении(Элемент) // Получить текущую строку табличного поля. СтрокаТаблицы = ЭлементыФормы.ТабличноеПолеЗаказов.ТекущаяСтрока; // Ввести значения в ячейки строки. СтрокаТаблицы.Контрагент = СтрокаТаблицы.Заказ.Контрагент; СтрокаТаблицы.ДатаОтгрузки = СтрокаТаблицы.Заказ.ДатаОтгрузки; КонецПроцедуры

Как изменить цвет фона ячейки табличного поля в зависимости от значения, выводимого в нее?

Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок) Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл ЗначениеЯчейкиОстаток = ОформлениеСтроки.Ячейки.Остаток.Значение; Если ЗначениеЯчейкиОстаток <> Неопределено Тогда Если ЗначениеЯчейкиОстаток < 10 Тогда ОформлениеСтроки.Ячейки.Остаток.ЦветФона = WebЦвета.Красный; ИначеЕсли ЗначениеЯчейкиОстаток > 100 Тогда ОформлениеСтроки.Ячейки.Остаток.ЦветФона = WebЦвета.Желтый; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры

Как в табличное поле "ВыбранныеКонтрагенты" добавить новую колонку "ОсновнойДоговор", заполнить ее значения и дать возможность открытия этих значений?

Если ТаблицаКонтрагентов.Колонки.Найти("ОсновнойДоговор") = Неопределено Тогда МассивТипов = Новый Массив(); МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыКонтрагентов")); ОписаниеНужныхТипов = Новый ОписаниеТипов(МассивТипов); ТаблицаКонтрагентов.Колонки.Добавить("ОсновнойДоговор", ОписаниеНужныхТипов); КонецЕсли; Для Каждого СтрокаТаблицы из ТаблицаКонтрагентов Цикл СтрокаТаблицы["ОсновнойДоговор"] = СтрокаТаблицы["Контрагент"]["ОсновнойДоговорКонтрагента"]; КонецЦикла; ЭлементыФормы.ВыбранныеКонтрагенты.СоздатьКолонки(); ЭлементыФормы.ВыбранныеКонтрагенты.Колонки.ОсновнойДоговор.ЭлементУправления.КнопкаОткрытия = Истина;

Как задать список выбора для колонки "ВидДокумента" табличного поля?

Процедура ПриОткрытии() СписокВидовДокументов = Новый СписокЗначений; Для Каждого ДокументКонфигурации из Метаданные.Документы Цикл СписокВидовДокументов.Добавить(ДокументКонфигурации.Имя); КонецЦикла; ЭлементыФормы.ПодборДанных.Колонки.ВидДокумента.ЭлементУправления.СписокВыбора = СписокВидовДокументов; КонецПроцедуры
ЭлементыФормы.ПодборДанных.Колонки.ВидДокумента.ЭлементУправления.КнопкаСпискаВыбора = Истина;

Как обеспечить возможность отбора и сортировки данных по реквизитам, не отображаемым в табличном поле формы списка справочника?

ЭлементыФормы.СправочникСписок.НастройкаОтбора.ОсновнойПоставщик.Доступность = Истина; ЭлементыФормы.СправочникСписок.НастройкаПорядка.ОсновнойПоставщик.Доступность = Истина;

Как реализовать перетаскивание между элементами управления?

Процедура НоменклатураНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) // Получить значение, переданное системой. Значение = ПараметрыПеретаскивания.Значение; // В любом случае значением будет массив. МассивЗначений = Новый Массив; // Если перетаскивается группа, то в массив записываем входящие в нее элементы. Если Значение.ЭтоГруппа Тогда Выборка = Справочники.Номенклатура.Выбрать(Значение); Пока Выборка.Следующий() Цикл Если Не Выборка.ЭтоГруппа Тогда МассивЗначений.Добавить(Выборка.Ссылка); КонецЕсли; КонецЦикла; Иначе МассивЗначений.Добавить(Значение); КонецЕсли; // Заполненный массив записываем в параметры. ПараметрыПеретаскивания.Значение = МассивЗначений; КонецПроцедуры
Процедура ТоварыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка) СтандартнаяОбработка = Ложь; КонецПроцедуры
Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка) ПолученныйМассив = ПараметрыПеретаскивания.Значение; Если ТипЗнч(ПолученныйМассив) = Тип("Массив") Тогда Для Каждого Значение Из ПолученныйМассив Цикл НоваяСтрока = ДокументОбъект.Товары.Добавить(); НоваяСтрока.Номенклатура = Значение; НоваяСтрока.Количество = 1; КонецЦикла; КонецЕсли; КонецПроцедуры

Как вывести остатки на складах в списке номенклатуры?

Процедура СписокНоменклатураПриПолученииДанных(Элемент, ОформленияСтрок) Запрос = Новый Запрос("ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, | ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК Товар |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( , Номенклатура В (&МассивТоваров)) КАК ТоварыНаСкладахОстатки"); МассивНоменклатуры = Новый Массив; // для передачи в параметр запроса Соответствие = Новый Соответствие; // для заполнения остатков в строках табличного поля Для Каждого Строка из ОформленияСтрок Цикл МассивНоменклатуры.Добавить(Строка.ДанныеСтроки.Ссылка); Соответствие.Вставить(Строка.ДанныеСтроки.Ссылка, Строка); КонецЦикла; Запрос.УстановитьПараметр("МассивТоваров", МассивНоменклатуры); Выборка = Запрос.Выполнить().Выбрать(); // Вывести остаток в строку, найденную в соответствии по номенклатуре // из запроса. Пока Выборка.Следующий() Цикл Соответствие.Получить(Выборка.Товар.Ссылка).Ячейки.Остаток.Значение = Выборка.Остаток; КонецЦикла; КонецПроцедуры

Другие элементы управления

В форме есть панель со страницами. Как разместить картинку на закладке?

 ЭлементыФормы.ОсновнаяПанель.Страницы.СчетаУчета.КартинкаЗаголовка = БиблиотекаКартинок.ДебетКредит;

Как обеспечить, чтобы при открытии формы уже записанного элемента справочника "Контрагенты" активной была закладка "СчетаИДоговоры" панели "Панель"?

Процедура ПриОткрытии() Если ЭтоНовый() = Ложь Тогда ЭлементыФормы.Панель.ТекущаяСтраница = ЭлементыФормы.Панель.Страницы.СчетаИДоговоры; КонецЕсли; КонецПроцедуры

Как организовать выбор из нескольких списков документов для открытия?

Док = Метаданные.Документы; СписокДокументов = Новый СписокЗначений(); СписокДокументов.Добавить(Док.ПлатежноеПоручениеИсходящее, , Ложь); СписокДокументов.Добавить(Док.ПлатежноеПоручениеВходящее, , Ложь); СписокДокументов.Добавить(Док.АккредитивПереданный, , Ложь); СписокДокументов.Добавить(Док.АккредитивПолученный, , Ложь); СписокДокументов.Добавить(Док.ПлатежноеТребованиеВыставленное, , Ложь); СписокДокументов.Добавить(Док.ПлатежноеТребованиеПолученное, , Ложь); СписокДокументов.Добавить(Док.ИнкассовоеПоручениеПереданное, , Ложь); СписокДокументов.Добавить(Док.ИнкассовоеПоручениеПолученное, , Ложь); СписокДокументов.Добавить(Док.ПлатежныйОрдерСписаниеДенежныхСредств, , Ложь); СписокДокументов.Добавить(Док.ПлатежныйОрдерПоступлениеДенежныхСредств, , Ложь); Если СписокДокументов.ОтметитьЭлементы("Укажите, какие списки документов открыть") Тогда Для Каждого НазваниеДокумента из СписокДокументов Цикл Если НазваниеДокумента.Пометка Тогда ФормаСписка = Документы[НазваниеДокумента.Значение.Имя].ПолучитьФормуСписка(); ФормаСписка.Открыть(); КонецЕсли; КонецЦикла; КонецЕсли;

Как можно организовать подстановку обращения к персоне?

Процедура ПерсонаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) Значение = Новый СписокЗначений(); Значение.Добавить("Уважаемый " + Текст); Значение.Добавить("Уважаемая " + Текст); Значение.Добавить("Уважаемое " + Текст); Значение.Добавить("Уважаемые " + Текст); Значение.Добавить(Текст); СтандартнаяОбработка = Ложь; КонецПроцедуры

Как в командной панели создать подменю с кнопками?

КнопкиКоманднойПанели = ЭлементыФормы.КоманднаяПанельФормы.Кнопки; // Проверить, нет ли уже на командной панели кнопки "Сформировать". // Если есть - удалить. Индекс = КнопкиКоманднойПанели.Индекс(КнопкиКоманднойПанели.Найти("Сформировать")); Если Индекс = -1 Тогда Индекс = 0; Иначе КнопкиКоманднойПанели.Удалить(Индекс); КонецЕсли; // Создать подменю "Сформировать". ПодменюСформировать = КнопкиКоманднойПанели.Вставить(Индекс, "Сформировать", ТипКнопкиКоманднойПанели.Подменю, "Сформировать"); // Добавить картинку. ПодменюСформировать.Картинка = БиблиотекаКартинок.Сформировать; ПодменюСформировать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка; // Опросить перечисление о возможных вариантах периодичности. Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Перечисление.Периодичность"); Выборка = Запрос.Выполнить().Выбрать(); //Добавить кнопки к подменю. Пока Выборка.Следующий() Цикл Период = Выборка.Ссылка; ПодменюСформировать.Кнопки.Добавить("кн" + Период, ТипКнопкиКоманднойПанели.Действие, "Сформировать за " + Период, Новый Действие("КнопкаСформироватьНажатие")); КонецЦикла;
Процедура КнопкаСформироватьНажатие(Элемент) НазваниеПериодичности = СтрЗаменить(Элемент.Имя, "кн", ""); КонецПроцедуры

Как созданной кнопке назначить "горячие клавиши"?

 СозданнаяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.L, Истина, Истина,);

Как реализовать заполнение возможных значений поля выбора "ОбрабатываемаяТабличнаяЧасть" при заполнении поля ввода "ОбрабатываемыйДокумент"?

Процедура ОбрабатываемыйДокументПриИзменении(Элемент) СписокВыбора = ЭлементыФормы.ОбрабатываемаяТабличнаяЧасть.СписокВыбора; СписокВыбора.Очистить(); Если Элемент.Значение <> Неопределено И Не(Элемент.Значение.Пустая()) Тогда ТабличныеЧасти = Элемент.Значение.Метаданные().ТабличныеЧасти; Для Каждого ТабличнаяЧасть из ТабличныеЧасти Цикл СписокВыбора.Добавить(ТабличнаяЧасть); КонецЦикла; КонецЕсли; КонецПроцедуры
Процедура ОбрабатываемыйДокументОчистка(Элемент, СтандартнаяОбработка) ОбрабатываемаяТабличнаяЧасть = ""; КонецПроцедуры

сли пользователь указал несколько дат в поле календаря - как их перебрать?

КоллекцияДат = ЭлементыФормы.ПолеКалендаря.ВыделенныеДаты; Для каждого ДатаКалендаря из КоллекцияДат Цикл Сообщить(ДатаКалендаря); КонецЦикла;
ЭлементыФормы.ПолеКалендаря.РежимВыделения = РежимВыделенияДаты.Множественный;

Как организовать работу с индикатором?

Выборка = РезультатЗапроса.Выбрать(); Индикатор = ЭлементыФормы.ИндикаторПеребора; Индикатор.МаксимальноеЗначение = Выборка.Количество(); Индикатор.Значение = 0; Пока Выборка.Следующий() Цикл Индикатор.Значение = Индикатор.Значение + 1; КонецЦикла;
Выборка = РезультатЗапроса.Выбрать(); Индикатор = ЭлементыФормы.ИндикаторПеребора; Индикатор.МаксимальноеЗначение = Выборка.Количество(); Индикатор.Значение = 0; Индикатор.ОтображатьПроценты = Истина; Индикатор.СтильОтображения = РежимСглаживанияИндикатора.Прерывистый; Индикатор.Ориентация = Ориентация.Вертикально; Индикатор.Шаг = 0.1; Пока Выборка.Следующий() Цикл Индикатор.Значение = Индикатор.Значение + 1; КонецЦикла;

Как у элемента управления сменить источник данных?

Процедура КнопкаВыполнитьНажатие(Элемент) ЭлементыФормы.ТП.Данные = "СписокКонтрагентов"; ЭлементыФормы.ТП.СоздатьКолонки(); КонецПроцедуры
Процедура Номенклатура(Кнопка) ЭлементыФормы.ТП.Данные = "СписокНоменклатуры"; ЭлементыФормы.ТП.СоздатьКолонки(); КонецПроцедуры

Как задать представление даты, отображаемое в поле ввода по-умолчанию?

ЭлементыФормы.ПолеВвода1.Формат = "ДП='01.01.0001'"; ЭлементыФормы.ПолеВвода1.Формат = "ДП='00:00:00'"; ЭлементыФормы.ПолеВвода1.Формат = "ДП='01.01.0001 00:00:00'";

Как вывести текст в поле картинки в том случае, если картинка не выбрана?

ЭлементыФормы.ОсновноеИзображение.ТекстНевыбраннойКартинки = "фотография номенклатуры отсутствует";

Как открыть пользователю стандартный диалог выбора цвета?

Диалог = Новый ДиалогВыбораЦвета; Если Диалог.Выбрать() Тогда ВыбранныйЦвет = Диалог.Цвет; КонецЕсли;
Диалог = Новый ДиалогВыбораШрифта; Если Диалог.Выбрать() Тогда ВыбранныйШрифт = Диалог.Шрифт; КонецЕсли;

Как заполнить список в форме данными запроса?

Запрос = Новый Запрос(" |ВЫБРАТЬ | Номенклатура.Ссылка КАК Значение, | Номенклатура.Представление КАК Представление, | ИСТИНА КАК Пометка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ОсновнойПоставщик = &ОсновнойПоставщик"); Запрос.УстановитьПараметр("ОсновнойПоставщик", ПолеПоставщик); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ЗаполнитьЗначенияСвойств(ПолеСписка.Добавить(), Выборка); КонецЦикла;

Как отобразить в форме файл графической схемы?

Схема = Новый ГрафическаяСхема(); Схема.Прочитать("D:/MyScheme.grs"); ЭлементыФормы.СтруктурнаяСхема.УстановитьСхему(Схема);

Интерфейсы, стили

Как задать различные стили 1С:Предприятия для различных категорий пользователей?

ОсновнойИнтерфейс = ПользователиИнформационнойБазы.ТекущийПользователь().ОсновнойИнтерфейс.Имя; Если ОсновнойИнтерфейс = "ИнтерфейсКассира" Тогда ГлавныйСтиль = БиблиотекаСтилей.СтильКассира; ИначеЕсли ОсновнойИнтерфейс = "Планирование" Тогда ГлавныйСтиль = БиблиотекаСтилей.СтильПланирования; Иначе ГлавныйСтиль = БиблиотекаСтилей.Основной; КонецЕсли;

Есть список имен интерфейсов с пометками. Как сделать помеченные интерфейсы видимыми?

СтрокаИменИнтерфейсов = ""; Для Каждого ИмяИнтерфейса из СписокИнтерфесов Цикл Если ИмяИнтерфейса.Пометка Тогда СтрокаИменИнтерфейсов = СтрокаИменИнтерфейсов + ИмяИнтерфейса + ","; КонецЕсли; КонецЦикла; ГлавныйИнтерфейс.ПереключитьИнтерфейс(СтрокаИменИнтерфейсов);

Как из формы обработки отключить глобальный обработчик ожиданий?

Процедура ПриНачалеРаботыСистемы() ПодключитьОбработчикОжидания("ПроверкаОпроса", 60); КонецПроцедуры
Процедура ОтказОтОпроса() Экспорт ОтключитьОбработчикОжидания("ПроверкаОпроса"); КонецПроцедуры
ОтказОтОпроса();

Запросы, отчеты

Запросы

Как получить данные из табличной части документов?

ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

Как получить данные из табличной части документов и представить их в иерархическом виде?

ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ИТОГИ ПО Номенклатура ТОЛЬКО ИЕРАРХИЯ

Как подсчитать количество одинаковых элементов в выбираемых данных?

ВЫБРАТЬ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары СГРУППИРОВАТЬ ПО РеализацияТоваровУслугТовары.Номенклатура

Как применять условия для отбора по значениям полей, вычисленных как результат агрегатной функции?

ВЫБРАТЬ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары СГРУППИРОВАТЬ ПО РеализацияТоваровУслугТовары.Номенклатура ИМЕЮЩИЕ СУММА(РеализацияТоваровУслугТовары.Количество) > 10

Как ограничить выборку из виртуальной таблицы?

ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты

Как просуммировать данные по одинаковым значениям одного из полей выборки?

ВЫБРАТЬ ПродажиОбороты.Подразделение КАК Подразделение, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты((&ДатаНач, &ДатаКон) КАК ПродажиОбороты ИТОГИ СУММА(СтоимостьОборот) ПО Подразделение

Как получить только те записи, в которых значение определенного поля превышает указанное значение?

ВЫБРАТЬ ПродажиОбороты.Подразделение КАК Подразделение, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Подразделение = &Подразделение) КАК ПродажиОбороты ГДЕ ПродажиОбороты.КоличествоОборот > &Порог

Как обратиться к подчиненным полям в запросе?

ВЫБРАТЬ ПродажиОбороты.ДоговорКонтрагента.Владелец, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
ВЫБРАТЬ ПродажиОбороты.ДоговорКонтрагента.Владелец, СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот, СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты((&ДатаНач, &ДатаКон) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.ДоговорКонтрагента.Владелец

Как объединить результаты нескольких запросов?

ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугВозвратнаяТара.Номенклатура ИЗ Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслугВозвратнаяТара ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугУслуги.Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги

Как выбрать данные из двух таблиц, удовлетворяющие определенному условию?

ВЫБРАТЬ ЗаказыПокупателейОстатки.Номенклатура, ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями, ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки ПО ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура

Как дополнить данные одной таблицы данными, выбранными из другой таблицы по определенному условию?

ВЫБРАТЬ ЗаказыПокупателейОстатки.Номенклатура, ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями, ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки ПО ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура

Как объединить данные из двух таблиц по определенному условию?

ВЫБРАТЬ ВЫБОР КОГДА (ЗаказыПокупателейОстатки.Номенклатура) ЕСТЬ NULL ТОГДА ЗаказыПоставщикамОстатки.Номенклатура ИНАЧЕ ЗаказыПокупателейОстатки.Номенклатура КОНЕЦ КАК Номенклатура, ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями, ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ЗаказаноПоставщикам ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч) КАК ЗаказыПокупателейОстатки ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч) КАК ЗаказыПоставщикамОстатки ПО ЗаказыПокупателейОстатки.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, СУММА(ВложенныйЗапрос.ЗаказаноПокупателями) КАК ЗаказаноПокупателями, СУММА(ВложенныйЗапрос.ЗаказаноПоставщикам) КАК ЗаказаноПоставщикам ИЗ (ВЫБРАТЬ ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура, ЗаказыПокупателейОстатки.КоличествоОстаток КАК ЗаказаноПокупателями, 0 КАК ЗаказаноПоставщикам ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОтч, ) КАК ЗаказыПокупателейОстатки ОБЪЕДИНИТЬ ВЫБРАТЬ ЗаказыПоставщикамОстатки.Номенклатура, 0, ЗаказыПоставщикамОстатки.КоличествоОстаток ИЗ РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаОтч, ) КАК ЗаказыПоставщикамОстатки ) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Номенклатура

Как вывести некоторое значение вместо NULL в запросе?

ВЫБРАТЬ ЕСТЬNULL(Справочник.Номенклатура.Артикул, "---") КАК Артикул, Справочник.Номенклатура.Представление КАК Номенклатура

Как вместе с данными некоторой таблицы получить общие итоги из этой же таблицы?

ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.СуммаОборот КАК СуммаПродаж, ПродажиОбороты.СуммаОборот / СовокупныеОбороты.СуммаОборот * 100 КАК ПроцентнаяДоля ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК СовокупныеОбороты ПО ИСТИНА УПОРЯДОЧИТЬ ПО ПроцентнаяДоля УБЫВ

Как получить иерархические итоги по группе справочника?

ВЫБРАТЬ ТоварыГруппы.Ссылка КАК Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ (ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель В ИЕРАРХИИ(&Группа) И (Номенклатура.ЭтоГруппа = ЛОЖЬ) ) КАК ТоварыГруппы ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментПолучения, Номенклатура В ИЕРАРХИИ (&Группа)) КАК ТоварыНаСкладахОстатки ПО ТоварыГруппы.Ссылка = ТоварыНаСкладахОстатки.Номенклатура ИТОГИ СУММА(КоличествоОстаток) ПО Номенклатура ТОЛЬКО ИЕРАРХИЯ

Как по состоянию на заданную дату по регистру "ОстаткиНаСкладе" найти последний документ "ПоступлениеТоваровУслуг", по которому приходила номенклатура?

ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, МАКСИМУМ(ТоварыНаСкладах.Регистратор) КАК Регистратор ИЗ (ВЫБРАТЬ ТоварыНаСкладах.Номенклатура КАК Номенклатура, МАКСИМУМ(ТоварыНаСкладах.Период) КАК Период ИЗ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах ГДЕ ТоварыНаСкладах.Период <= &ДатаОтчета И (ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) СГРУППИРОВАТЬ ПО ТоварыНаСкладах.Номенклатура ) КАК ВложенныйЗапрос ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах ПО ВложенныйЗапрос.Номенклатура = ТоварыНаСкладах.Номенклатура И ВложенныйЗапрос.Период = ТоварыНаСкладах.Период ГДЕ (ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг) СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Номенклатура

Как подсчитать количество записей с одинаковым значением некоторого поля?

ВЫБРАТЬ Контрагенты.ОсновнойМенеджерПокупателя, КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК КоличествоЗакрепленных ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ (Контрагенты.ЭтоГруппа = ЛОЖЬ) И (Контрагенты.ОсновнойМенеджерПокупателя <> &НеЗаполненМенеджер) СГРУППИРОВАТЬ ПО Контрагенты.ОсновнойМенеджерПокупателя УПОРЯДОЧИТЬ ПО КоличествоЗакрепленных УБЫВ
Справочники.Пользователи.ПустаяСсылка()

Как в итоговых записях вывести количество различных записей?

ВЫБРАТЬ Контрагенты.ОсновнойМенеджерПокупателя.Представление КАК ОсновнойМенеджерПокупателя, Контрагенты.Представление, 1 КАК КоличествоЗакрепленных ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ (Контрагенты.ЭтоГруппа = ЛОЖЬ) УПОРЯДОЧИТЬ ПО КоличествоЗакрепленных УБЫВ ИТОГИ КОЛИЧЕСТВО(КоличествоЗакрепленных) ПО ОсновнойМенеджерПокупателя

Как узнать количество записей в результате запроса?

Результат = Запрос.Выполнить(); КолЗаписей = Результат.Выбрать().Количество();

Как проверить достаточность остатков товаров на складах, указанных в документе?

ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.Размещение КАК Склад, ВложенныйЗапрос.КоличествоСписываемое, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ (ВЫБРАТЬ ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура, ВнутреннийЗаказТовары.Размещение КАК Размещение, СУММА(ВнутреннийЗаказТовары.Количество *ВнутреннийЗаказТовары.Коэффициент) КАК КоличествоСписываемое ИЗ Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары ГДЕ ВнутреннийЗаказТовары.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО ВнутреннийЗаказТовары.Номенклатура, ВнутреннийЗаказТовары.Размещение ) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремениДокумента, Склад В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫРАЗИТЬ(ВнутреннийЗаказТоварыДляОтбора.Размещение КАК Справочник.Склады) ИЗ Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТоварыДляОтбора ГДЕ ВнутреннийЗаказТоварыДляОтбора.Ссылка = &Ссылка И НЕ ВЫРАЗИТЬ(ВнутреннийЗаказТоварыДляОтбора.Размещение КАК Справочник.Склады) ЕСТЬ NULL ) И Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВнутреннийЗаказТоварыДляОтбора.Номенклатура ИЗ Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТоварыДляОтбора ГДЕ ВнутреннийЗаказТоварыДляОтбора.Ссылка = &Ссылка)) КАК ТоварыНаСкладахОстатки ПО ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ВложенныйЗапрос.Размещение = ТоварыНаСкладахОстатки.Склад

Как в запросе осуществить отбор по значению перечисления?

Запрос.Текст = "ВЫБРАТЬ | ВоинскийУчетСрезПоследних.Физлицо |ИЗ | РегистрСведений.ВоинскийУчет.СрезПоследних(&ДатаОтчета) КАК ВоинскийУчетСрезПоследних |ГДЕ | ВоинскийУчетСрезПоследних.ОтношениеКВоинскомуУчету = &Состоит"
Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета); Запрос.УстановитьПараметр("Состоит", Перечисления.ОтношениеКВоинскомуУчету.Состоит);

Как получить курсы валют на две интересующие даты?

ВЫБРАТЬ ВалютыСрезПоследних.Валюта, ВалютыСрезПоследних.Курс, &ПерваяДата Как Дата ИЗ РегистрСведений.Валюты.СрезПоследних(&ПерваяДата, ) КАК ВалютыСрезПоследних ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВалютыСрезПоследних.Валюта, ВалютыСрезПоследних.Курс, &ВтораяДата ИЗ РегистрСведений.Валюты.СрезПоследних(&ВтораяДата, ) КАК ВалютыСрезПоследних

Как одним запросом получить таблицу расхождений курсов взаиморасчетов всех выписанных документов "ЗаказПокупателя" с официальным курсом?

ВЫБРАТЬ ВложенныйЗапрос.Ссылка КАК Документ, ВложенныйЗапрос.ДоговорКонтрагентаВалютаВзаиморасчетов КАК ВалютаДоговора, ВложенныйЗапрос.КурсВзаиморасчетов, ВЫБОР КОГДА КурсыВалют.Курс ЕСТЬ NULL ТОГДА 0 ИНАЧЕ КурсыВалют.Курс КОНЕЦ КАК КурсОфициальный, ВЫБОР КОГДА КурсыВалют.Курс ЕСТЬ NULL ТОГДА ВложенныйЗапрос.КурсВзаиморасчетов ИНАЧЕ ВложенныйЗапрос.КурсВзаиморасчетов - КурсыВалют.Курс КОНЕЦ КАК Превышение ИЗ (ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК Ссылка, МАКСИМУМ(КурсыВалют.Период) КАК Период, ЗаказПокупателя.КурсВзаиморасчетов КАК КурсВзаиморасчетов, ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ДоговорКонтрагентаВалютаВзаиморасчетов ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов = КурсыВалют.Валюта И ЗаказПокупателя.Дата >= КурсыВалют.Период СГРУППИРОВАТЬ ПО ЗаказПокупателя.КурсВзаиморасчетов, ЗаказПокупателя.ДоговорКонтрагента.ВалютаВзаиморасчетов, ЗаказПокупателя.Ссылка ) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ВложенныйЗапрос.ДоговорКонтрагентаВалютаВзаиморасчетов = КурсыВалют.Валюта И ВложенныйЗапрос.Период = КурсыВалют.Период

Как написать запрос таким образом, чтобы на определенном уровне иерархии запроса считались одни итоговые функции, а на другом уровне другие?

ВЫБРАТЬ ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура, ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление, ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры.Представление, ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК КоличествоОстаток, NULL как Заказ, 0 КАК Резерв ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗаказыПокупателейОстатки.Номенклатура, ЗаказыПокупателейОстатки.Номенклатура.Представление, ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры, ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры.Представление, 0, ЗаказыПокупателейОстатки.ЗаказПокупателя, ЗаказыПокупателейОстатки.КоличествоОстаток ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки ИТОГИ СУММА(КоличествоОстаток), СУММА(Резерв) ПО Номенклатура, ХарактеристикаНоменклатуры

Как получить перечень документов, приведших данные подчиненного периодического регистра сведений к определенному состоянию?

ВЫБРАТЬ КандидатыНаРаботу.ФизЛицо КАК ФизЛицо, КандидатыНаРаботу.Регистратор КАК Документ, КандидатыНаРаботу.Статус КАК Статус ИЗ РегистрСведений.КандидатыНаРаботу.СрезПоследних(&ДатаОтчета, ) КАК КандидатыНаРаботуСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КандидатыНаРаботу КАК КандидатыНаРаботу ПО КандидатыНаРаботуСрезПоследних.ФизЛицо = КандидатыНаРаботу.ФизЛицо ГДЕ КандидатыНаРаботуСрезПоследних.Статус = &Отложен И КандидатыНаРаботу.Период <= &ДатаОтчета УПОРЯДОЧИТЬ ПО КандидатыНаРаботу.ФизЛицо.Наименование, Документ ИТОГИ МАКСИМУМ(Статус) ПО ФизЛицо АВТОУПОРЯДОЧИВАНИЕ

Как установить параметры запроса, если текст запроса заранее не известен?

Запрос = Новый Запрос(" |ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)"); // Получить описание параметров запроса. ПараметрыЗапроса = Запрос.НайтиПараметры(); Для Каждого ПараметрЗапроса Из ПараметрыЗапроса Цикл ЗаданноеЗначение = Неопределено; // Открыть диалог ввода значения данного параметра. Если ВвестиЗначение(ЗаданноеЗначение, "Задайте значение параметра " + ПараметрЗапроса.Имя, ПараметрЗапроса.ТипЗначения) Тогда Запрос.УстановитьПараметр(ПараметрЗапроса.Имя, ЗаданноеЗначение); Иначе Возврат; КонецЕсли; КонецЦикла; РезультатЗапроса = Запрос.Выполнить();

Анализ данных

Как получить данные о товарах продаваемых вместе?

Анализ = Новый АнализДанных; // Выбранный тип анализа как раз и указывает на то, что ищем // "совместно продаваемые" товары. Анализ.ТипАнализа = Тип("АнализДанныхПоискАссоциаций"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиКомпанииОбороты.Регистратор Как ДокументПродажи, | ПродажиКомпанииОбороты.Номенклатура |ИЗ | РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты |УПОРЯДОЧИТЬ ПО | ДокументПродажи"; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); // Получить продажи за указанный период. // Выбрана периодичность по Регистратору, т.к. необходимо получить // данные о совместных продажах в рамках одной покупки. Анализ.ИсточникДанных = Запрос.Выполнить(); // Выполнить анализ в соответствии с указанным источником. РезультатАнализа = Анализ.Выполнить(); // Для вывода результата анализа воспользуемся построителем // отчета анализа данных. Построитель = Новый ПостроительОтчетаАнализаДанных(); Построитель.Макет = Неопределено; Построитель.ТипАнализа = Тип("АнализДанныхПоискАссоциаций"); ТабДок = Новый ТабличныйДокумент; Построитель.Вывести(РезультатАнализа, ТабДок); ТабДок.Показать();

Как порекомендовать сопутствующие товары?

Анализ = Новый АнализДанных; // Найти ассоциации. Анализ.ТипАнализа = Тип("АнализДанныхПоискАссоциаций"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиКомпанииОбороты.Регистратор КАК ДокументПродажи, | ПродажиКомпанииОбороты.Номенклатура |ИЗ | РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты |УПОРЯДОЧИТЬ ПО | ДокументПродажи"; // Ассоциации ищем подокументно, это определяется поведением // объекта "АнализДанных" "по умолчанию" при выборе // периодичности виртуальной таблицы Регистратор Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); Анализ.ИсточникДанных = Запрос.Выполнить(); РезультатАнализа = Анализ.Выполнить(); // Исходя из полученного анализа создать прогноз. МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза(); // ТЗ- таблица значений, содержащая данные о том, // какие номенклатурные позиции вошли в "текущую" покупку. МодельПрогноза.ИсточникДанных = ТЗ; // ТП - элемент управления "Табличное поле" связанный через // свойство "Данные" с реквизитом формы "ТП" (тип ТаблицаЗначений) ТП = МодельПрогноза.Выполнить(); ЭлементыФормы.ТП.СоздатьКолонки();

Как посмотреть, что будет покупаться в дальнейшем?

ТабДок = Новый ТабличныйДокумент; Анализ = Новый АнализДанных; // Нужно спрогнозировать цепочку событий, поэтому выбираем // тип анализа "Поиск последовательностей". Анализ.ТипАнализа = Тип("АнализДанныхПоискПоследовательностей"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец КАК Контрагент, | ПродажиКомпанииОбороты.Номенклатура, | ПродажиКомпанииОбороты.Период |ИЗ | РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, Регистратор) КАК ПродажиКомпанииОбороты"; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); Анализ.ИсточникДанных = Запрос.Выполнить(); Колонка = Анализ.НастройкаКолонок.Найти("Период"); // Указать, что колонка "Период" имеет тип "Время", // что "позволит понять" хронологию событий Колонка.ТипКолонки = ТипКолонкиАнализаДанныхПоискПоследовательностей.Время; РезультатАнализа = Анализ.Выполнить(); МодельПрогноза = РезультатАнализа.СоздатьМодельПрогноза(); // ТЗ- таблица значений, содержащая исходные данные для прогноза // например, какой контрагент, какой товар закупил (исходя из чего // попытаемся узнать, что они еще закупят). МодельПрогноза.ИсточникДанных = ТЗ; // ТП - элемент управления "Табличное поле" связанный через // свойство "Данные" с реквизитом формы "ТП" //(тип ТаблицаЗначений) ТП = МодельПрогноза.Выполнить(); ЭлементыФормы.ТП.СоздатьКолонки(); // Построитель - реквизит формы, имеющий тип // ПостроительОтчетаАнализаДанных. Ряд табличных полей / / в диалоге могут быть связаны со свойствами-коллекциями // данного объекта Построитель.ТипАнализа = Тип("АнализДанныхПоискПоследовательностей"); Построитель.Вывести(РезультатАнализа, ТабДок); ТабДок.Показать();

Представление результатов отчетов

Табличный документ, текстовый документ

Как вывести результат запроса в табличный документ?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровКомпанииОстатки.СкладКомпании КАК СкладКомпанииСсылка, | ОстаткиТоваровКомпанииОстатки.Номенклатура КАК НоменклатураСсылка, | СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) КАК Остаток, | ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление КАК Номенклатура, | ОстаткиТоваровКомпанииОстатки.СкладКомпании.Представление КАК Склад |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Момент) КАК ОстаткиТоваровКомпанииОстатки |СГРУППИРОВАТЬ ПО | ОстаткиТоваровКомпанииОстатки.СкладКомпанииСсылка, | ОстаткиТоваровКомпанииОстатки.НоменклатураСсылка |ИТОГИ СУММА(Остаток) ПО | Общие, | Склад"; Запрос.УстановитьПараметр("Момент", Неопределено); Результат = Запрос.Выполнить(); // Получить поле табличного документа, в которое будем выводить результат. ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; // Очистить данные в табличном документе // (возможно данные уже выводились ранее). ТабДок.Очистить(); Макет = ПолучитьМакет("Макет"); // Получить именованные области из макета. ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщийИтог"); ОбластьСклад = Макет.ПолучитьОбласть("Склад"); ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура"); // Получить выборку по первой итоговой группировке (первый уровень). ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Запись общего итога всегда одна, поэтому можно обойтись без организации цикла. ВыборкаОбщийИтог.Следующий(); // Произвести запись данных из полей выборки в именованные // области с совпадающими именами. ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог); // Включить область с заполненными параметрами в табличный документ. ТабДок.Вывести(ОбластьОбщийИтог); // "От" записи первого уровня получить подчиненную выборку // записей второго уровня (по итоговой группировке "Склад"). ВыборкаПоСкладу = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоСкладу.Следующий() Цикл ОбластьСклад.Параметры.Заполнить(ВыборкаПоСкладу); ТабДок.Вывести(ОбластьСклад); // Получить подчиненную выборку, содержащую детальные записи. ВыборкаПоНоменклатуре = ВыборкаПоСкладу.Выбрать(); Пока ВыборкаПоНоменклатуре.Следующий() Цикл ОбластьНоменклатура.Параметры.Заполнить(ВыборкаПоНоменклатуре); ТабДок.Вывести(ОбластьНоменклатура); КонецЦикла; КонецЦикла;

Как вывести данные в табличный документ с возможностью сворачивания и разворачивания данных по группировкам?

 // Перед выводом данных в табличный документ используется метод: ТабДок.НачатьАвтогруппировкуСтрок(); // Выести область с указанием уровня. ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень()); // В конце работы с табличным документом необходимо выполнить // следующий метод: ТабДок.ЗакончитьАвтогруппировкуСтрок();

Как при выводе данных в табличный документ свернуть все выводимые группировки?

УровеньГруппировки = 1; //содержит индекс, с нуля ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки);

Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок?

 ТабДок.Вывести(ОбластьНоменклатура, ВыборкаПоНоменклатуре.Уровень(), , Ложь);

Как выгрузить результат запроса с показом иерархии?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, | ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот |ИЗ | РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиКомпанииОбороты |ИТОГИ СУММА(КоличествоОборот) ПО | Номенклатура ИЕРАРХИЯ"; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); Результат = Запрос.Выполнить(); // Осуществить выгрузку с сохранением иерархии. ЭлементыФормы.ТП.Значение = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); ЭлементыФормы.ТП.СоздатьКолонки();

Где и как можно увидеть макет, автоматически генерируемый построителем отчета?

ПостроительОтчета.Макет = Неопределено; ПостроительОтчета.Макет.Показать()

Как из построителя отчета передать данные в сводную таблицу?

ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ИсточникДанных = ПостроительОтчетаОтчет; ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ОтображатьПоля = Истина;

Отчет формируется построителем отчета. Как убрать одну из колонок, поместив ее данные в расшифровку другой?

Процедура АлфавитныйПереченьКандидатовСРасшифровкой() ПостроительОтчета = Новый ПостроительОтчета; ПостроительОтчета.Текст ="ВЫБРАТЬ | РегистрацияСобеседованияКандидата.ФизЛицо КАК Кандидат, | РегистрацияСобеседованияКандидата.РезультатСобеседования КАК Результат, | РегистрацияСобеседованияКандидата.Ссылка |ИЗ | Документ.РегистрацияСобеседованияКандидата КАК РегистрацияСобеседованияКандидата |УПОРЯДОЧИТЬ ПО | РегистрацияСобеседованияКандидата.ФизЛицо.Наименование"; ПостроительОтчета.Выполнить(); Макет = ПостроительОтчета.Макет; // Очистить области, связанные с ссылкой. ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Ссылка", ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе ТекущаяОбласть.Очистить(Истина, Истина, Истина); КонецЕсли; КонецЦикла; // Заполнить параметр расшифровки для областей, где параметр = "Результат". ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Результат", ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе Если ТекущаяОбласть.Параметр = "Результат" Тогда ТекущаяОбласть.ПараметрРасшифровки = "Ссылка"; КонецЕсли; КонецЕсли; КонецЦикла; ПостроительОтчета.Макет = Макет; ПостроительОтчета.Вывести(); КонецПроцедуры

Как сохранить настройки построителя отчета до следующего открытия формы отчета?

СохранитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя, ПостроительОтчета.ПолучитьНастройки());
// До установки настроек они ранее должны были быть заполнены // по тексту запроса. ПостроительОтчета.ЗаполнитьНастройки(); // Установить настройки построителя отчета. Настройка = ВосстановитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя); Если Настройка <> Неопределено Тогда ПостроительОтчета.УстановитьНастройки(Настройка); КонецЕсли;

Как организовать показ примечаний в формируемом табличном документе?

Процедура Отчет(ДатаНач, ДатаКон) Экспорт Запрос = Новый Запрос; // Сбор данных. Запрос.Текст = "ВЫБРАТЬ | Событие.Ответственный КАК Ответственный, | Событие.Дата, | Событие.ВидСобытия, | Событие.Контрагент, | Событие.СодержаниеСобытия, | Событие.ОписаниеСобытия |ИЗ | Документ.Событие КАК Событие |ГДЕ | Событие.Дата МЕЖДУ &ДатаНач И &ДатаКон И (Событие.Проведен) И Событие.СостояниеСобытия = &Завершено |УПОРЯДОЧИТЬ ПО | Ответственный"; Запрос.УстановитьПараметр("ДатаКон", ДатаКон); Запрос.УстановитьПараметр("ДатаНач", ДатаНач); Запрос.УстановитьПараметр("Завершено", Перечисления.СостоянияСобытий.Завершено); Результат = Запрос.Выполнить(); // Сформировать табличный документ. Макет = ПолучитьМакет("Отчет"); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок = Новый ТабличныйДокумент; ОбластьЗаголовок.Параметры.ДатаНач = ДатаНач; ОбластьЗаголовок.Параметры.ДатаКон = ДатаКон; ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ВыборкаДетали = Результат.Выбрать(); Пока ВыборкаДетали.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); ОбластьДетальныхЗаписей.Область("Описание").Примечание.Текст = ВыборкаДетали.СодержаниеСобытия; ТабДок.Вывести(ОбластьДетальныхЗаписей); КонецЦикла; ТабДок.Показать(); КонецПроцедуры

Как обеспечить, чтобы при вводе на печать не печатались первая колонка и первая строка табличного документа "ДокументРезультат"?

ДокументРезультат.ОбластьПечати = ДокументРезультат.Область(2, 2, ДокументРезультат.ВысотаТаблицы, ДокументРезультат.ШиринаТаблицы );

Как обеспечить фиксацию верхней части табличного документа, генерируемого построителем отчета, по срезу шапки таблицы?

ДокументРезультат.ФиксацияСверху = ПостроительОтчета.Макет.Области.ШапкаТаблицы.Низ;

Табличный документ формируется построителем отчета. Как при печати табличного документа обеспечить вывод шапки таблицы на каждой странице?

ОбластьШапки = ПостроительОтчета.Макет.Области.ШапкаТаблицы; ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ОбластьШапки.Верх, , ОбластьШапки.Низ);

Как при выводе на печать "длинного" документа указать в колонтитулах страниц номер документа, дату и номер страницы?

ТабДокумент.ВерхнийКолонтитул.Выводить = Истина; ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2; ТабДокумент.ВерхнийКолонтитул.ТекстСлева = Метаданные().Представление() + " № " + Номер; ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "[&НомерСтраницы]";

Табличный документ формируется по макету, автоматически генерируемому построителем отчета. Как задать ориентацию страницы при печати?

ПостроительОтчета.Вывести(ДокументРезультат); ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

Табличный документ формируется построителем отчета. Как для всех выводимых числовых показателей установить вывод без дробной части?

// Получить макет построителя отчета. Макет = ПостроительОтчета.Макет; // Сформатировать все области, где встречается слово "Стоимость". ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Стоимость", ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе Если ТекущаяОбласть.Параметр <> "" Тогда ТекущаяОбласть.Формат = "ЧДЦ=0"; КонецЕсли; КонецЕсли; КонецЦикла; // Сформатировать все области, где встречается слово "Количество". ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Количество", ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе Если ТекущаяОбласть.Параметр <> "" Тогда ТекущаяОбласть.Формат = "ЧДЦ=0"; КонецЕсли; КонецЕсли; КонецЦикла; // Назначить построителю измененный макет. ПостроительОтчета.Макет = Макет; // Вывести результат работы построителя отчета в табличный документ.

Как для построителя отчета совместить назначение своего макета и применение одного из стандартных макетов оформления?

ПостроительОтчета.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Апельсин); ПостроительОтчета.Макет = ПолучитьМакет("МакетЭтогоОтчета"); ПостроительОтчета.ОформитьМакет();

Как при получении данных из запроса обойти только итоговые записи?

ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; ТабДок.Очистить(); Макет = ПолучитьМакет("Отчет"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, | ПродажиКомпанииОбороты.Номенклатура.Представление, | ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот, | ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот |ИЗ | РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода,&КонПериода) КАК ПродажиКомпанииОбороты |ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО | ОБЩИЕ, | Номенклатура Иерархия"; Запрос.УстановитьПараметр("&НачПериода", НачПериода); Запрос.УстановитьПараметр("&КонПериода", КонецДня(КонПериода)); Результат = Запрос.Выполнить(); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги"); ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); // Обход по определенным в запросе итоговым группировкам. ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Запись общих итогов одна, поэтому нет необходимости в цикле. ВыборкаОбщийИтог.Следующий(); ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог); ТабДок.Вывести(ОбластьОбщийИтог); // Получить подчиненную выборку по итоговой группировке "номенклатура". ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура); ТабДок.Вывести(ОбластьНоменклатура); // Несмотря на то, что можем получить еще одну подчиненную // выборку (по детальным записям) мы это не делаем, т.е. фактически // при обходе пропускаем детальные записи. КонецЦикла; ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал);

Как при получении данных из запроса обойти только иерархические итоговые записи?

ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ВыборкаОбщийИтог.Следующий(); ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог); ТабДок.Вывести(ОбластьОбщийИтог); ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаНоменклатура.Следующий() Цикл ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура); ТабДок.Вывести(ОбластьНоменклатура); КонецЦикла;

Как вывести картинку в табличный документ?

ТабДок = Новый ТабличныйДокумент; Макет = ОбработкаОбъект.ПолучитьМакет("Макет"); ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой"); Картинка = Новый Картинка(ПутьККартинке); // Элемент управления "Логотип" входит в коллекцию картинок области. ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка; ТабДок.Вывести(ОбластьКартинки); ТабДок.Показать();

Как вывести картинку в табличный документ без изменения макета?

Область = Макет.ПолучитьОбласть("Шапка"); Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); Рисунок.Верх = 5; Рисунок.Высота = 10; Рисунок.Ширина = 10; Рисунок.Лево = 5; Рисунок.Картинка = Новый Картинка(ПутьККартинке); Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер; ТабДок.Вывести(Область);

Как работать со сводной таблицей?

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец КАК ДоговорВзаиморасчетовПокупателяВладелец, | ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура, | ПродажиКомпанииОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании, | СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот, | СУММА(ПродажиКомпанииОбороты.СуммаПродажиОборот) КАК СуммаПродажиОборот |ИЗ | РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода,&КонПериода) КАК ПродажиКомпанииОбороты |СГРУППИРОВАТЬ ПО | ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец, | ПродажиКомпанииОбороты.Номенклатура, | ПродажиКомпанииОбороты.ПодразделениеКомпании |ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО | ДоговорВзаиморасчетовПокупателяВладелец, | Номенклатура, | ПодразделениеКомпании"; // На состав полей, которые могут быть размещены в измерениях, // данных сводной таблицы влияет раздел "Итоги". Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонПериода); Результат = Запрос.Выполнить(); Сводная = ЭлементыФормы.ПолеДокумента.ВстроенныеТаблицы.СводнаяТаблица1; Сводная.ИсточникДанных = Результат;

Как программно разместить данные в сводной таблице и оформить ее?

Построитель = Новый ПостроительОтчета(); Построитель.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, | ТоварыНаСкладахОстаткиИОбороты.Склад.Представление, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Склад, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Склад.Представление, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление |ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО | ОБЩИЕ, | Номенклатура ИЕРАРХИЯ, | Склад ИЕРАРХИЯ "; Построитель.ЗаполнитьНастройки(); Таблица = ЭлементыФормы.ПолеТабличногоДокумента1.ВстроенныеТаблицы.СводнаяТаблица1; Таблица.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед); Таблица.ИсточникДанных = Построитель; Таблица.Строки.Добавить("Номенклатура"); Таблица.Колонки.Добавить("Склад"); Таблица.Данные.Добавить("КоличествоПриход"); Таблица.ОтображатьЛинии = ТипОтображенияЛинийСводнойТаблицы.Всегда;

Как создать печатную форму посредством текстового шаблона?

// Создать текстовый документ, в который будет выполняться вывод. ТекстДок = Новый ТекстовыйДокумент; // Получить макет. Макет = ПолучитьМакет("ЗаявкаНаПропуск"); // Заголовок. Область = Макет.ПолучитьОбласть("Заголовок"); Область.Параметры.Дата = Дата; Область.Параметры.ВремяНач = НачалоСобытия; Область.Параметры.ВремяОконч = ОкончаниеСобытия; ТекстДок.Вывести(Область); // Состав. Область = Макет.ПолучитьОбласть("Состав"); Для Каждого ТекСтрокаСторонниеЛица Из СторонниеЛица Цикл Область.Параметры.ФИО = Строка(ТекСтрокаСторонниеЛица.Лицо); ТекстДок.Вывести(Область); КонецЦикла; // Подвал. Область = Макет.ПолучитьОбласть("Подвал"); Область.Параметры.Ответственный = Ответственный.Наименование; ТекстДок.Вывести(Область); // Открыть сформированный документ. ТекстДок.Показать("Заявка на пропуска для События №" + Номер);

Диаграммы

Как заполнить диаграмму данными?

Диаграмма = ЭлементыФормы.Диаграмма; // Очистить диаграмму, возможно ранее в нее уже выводились данные. Диаграмма.КоличествоСерий = 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'); ЭлементыФормы.ДиаграммаПродажи.ИсточникДанных = Запрос.Выполнить().Выгрузить();

Как вывести результат запроса в сводную диаграмму?

Запрос = Новый Запрос( "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, | ТоварыНаСкладахОстаткиИОбороты.Склад.Представление, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Склад, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Склад.Представление, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление |ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО | ОБЩИЕ, | Номенклатура ИЕРАРХИЯ, | Склад ИЕРАРХИЯ"); Диаграмма = ЭлементыФормы.СводнаяДиаграмма1; Диаграмма.ОбластьЗаголовка.Текст = "Приход товаров"; Диаграмма.ИсточникДанных = Запрос.Выполнить(); Диаграмма.Серии.Добавить("Номенклатура"); Диаграмма.Точки.Добавить("Склад"); Диаграмма.Ресурсы.Добавить("КоличествоПриход");

Как заполнить диаграмму Ганта данными?

ДГ = ЭлементыФормы.ДГ; // Установить заголовок диаграммы. ДГ.ОбластьЗаголовка.Текст = "График дежурств"; // Интервал будем определять самостоятельно. ДГ.АвтоОпределениеПолногоИнтервала = Ложь; // Установить интервал. ДГ.УстановитьПолныйИнтервал(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата())); // В диаграмме будет две точки - сотрудники Петров и Сидоров... ТочкаП = ДГ.УстановитьТочку("Петров"); ТочкаС = ДГ.УстановитьТочку("Сидоров"); // и две серии - дежурство на вахте и дежурство в центральном офисе. СерияНаВахте = ДГ.УстановитьСерию("На вахте"); СерияВЦентре = ДГ.УстановитьСерию("В центральном офисе"); // Задать цвета серий, отличные от цвета по умолчанию. СерияНаВахте.Цвет = 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; ТекущаяДата = ПервыйДень; Пока ТекущаяДата <= МаксимальнаяДата Цикл Конец = НачалоНедели(ТекущаяДата); Начало = Конец - Выходные; ДГ.ИнтервалыФона.Добавить(Начало, Конец); ТекущаяДата = ТекущаяДата + Неделя; КонецЦикла;

Географическая схема

Как отобразить в форме файл географической схемы?

Схема = ЭлементыФормы.ГеоСхема; Схема.Прочитать("D:/MyGeo.geo");

Как отобразить в форме макет географической схемы?

Схема = ЭлементыФормы.ГеоСхема; Схема.Вывести(ПолучитьОбщийМакет("ГеографическаяСхемаРоссии"));

Как изменить масштаб географической схемы?

Масштаб = 100000; Если ВвестиЗначение(Масштаб) Тогда ЭлементыФормы.ГеоСхема.ПоддержкаМасштаба = РежимОтображенияГеографическойСхемы.ЗадаетсяМасштабом; ЭлементыФормы.ГеоСхема.Масштаб = Масштаб; КонецЕсли;

Как отобразить на географической схеме выбранный город?

Схема = ЭлементыФормы.ГеоСхема; СписокГородов = Новый СписокЗначений; // Запретить перерисовку схемы на время обновления. Схема.Обновление = Ложь; // Отобразить слой Регионы. Схема.Слои.Регионы.Видимость = Истина; // Задать тип отображения названий городов. СлойГорода = Схема.Слои.Города; СлойГорода.Серии.Название.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст; // Сформировать список городов и скрыть все города. Для Счетчик = 0 По СлойГорода.Объекты.Количество() - 1 Цикл Город = СлойГорода.Объекты.Получить(Счетчик); Город.Видимость = Ложь; НазваниеГорода = СлойГорода.ПолучитьЗначение(Город, СлойГорода.Серии.Название); НазваниеРегиона = СлойГорода.ПолучитьЗначение(Город, СлойГорода.Серии.Регион); СписокГородов.Добавить(Счетчик, НазваниеГорода.Значение + " (" + НазваниеРегиона.Значение + ")"); КонецЦикла; СлойГорода.Видимость = Истина; // Отобразить слой Города. СписокГородов.СортироватьПоПредставлению(); ВыбранныйГород = СписокГородов.ВыбратьЭлемент(); Если ВыбранныйГород <> Неопределено Тогда ГородСхемы = СлойГорода.Объекты.Получить(ВыбранныйГород.Значение); ГородСхемы.Видимость = Истина; // отобразить выбранный город КонецЕсли; Схема.Обновление = Истина; // Обновить схему.

Как использовать таблицу значений в качестве источника данных географической схемы?

Схема = ЭлементыФормы.ГеоСхема; Схема.Обновление = Ложь; // Запретить обновление схемы. // Отобразить слои Регионы и Города. Схема.Слои.Регионы.Видимость = Истина; СлойГорода = Схема.Слои.Города; СлойГорода.Видимость = Истина; // Добавить новую серию для отображения данных источника. СерияИнформация = Схема.Слои.Города.Серии.Добавить("Информация"); СерияИнформация.Значение = "Информация"; // Сформировать таблицу значений источника данных. ИсточникДанныхГеоСхемы.Колонки.Добавить("ЗначениеГорода"); ИсточникДанныхГеоСхемы.Колонки.Добавить("СерияИнформация", Новый ОписаниеТипов("Строка")); // Добавить "справочную" колонку в истоник данных // (нужна только для "наглядности" работы с источником). ИсточникДанныхГеоСхемы.Колонки.Добавить("НазваниеГорода"); // Заполнить в первой строке источника данных значение серии, // для которой будут выводиться данные. ИсточникДанныхГеоСхемы.Добавить().СерияИнформация = "Информация"; // Задать тип источника данных Схема.Слои.Города.ТипОрганизацииИсточникаДанных = ТипОрганизацииИсточникаДанныхГеографическойСхемы.НаПересечении; // Задать тип отображения значений серии источника данных. СлойГорода.Серии.Информация.ТипОтображения = ТипОтображенияСерииСлояГеографическойСхемы.Текст; // Заполнить источник данных значениями всех объектов. Для Каждого Город Из СлойГорода.Объекты Цикл Город.Видимость = Истина; СтрокаИсточникаДанных = ИсточникДанныхГеоСхемы.Добавить(); СтрокаИсточникаДанных.ЗначениеГорода = Город.Значение; СтрокаИсточникаДанных.НазваниеГорода = СлойГорода.ПолучитьЗначение(Город, СлойГорода.Серии.Название).Значение; КонецЦикла; ЭлементыФормы.ИсточникДанныхГеоСхемы.СоздатьКолонки(); Схема.Обновление = Истина; // Обновить поле географической схемы. // Назначить источник данных. СлойГорода.ИсточникДанных = ИсточникДанныхГеоСхемы;

Администрирование

Запуск 1С:Предприятия из командной строки

Как запустить 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

Разное

Как поменять значение рабочей даты?

Если ИспользованиеРабочейДаты = РежимРабочейДаты.Назначать Тогда РабочаяДата = УстанавливаемаяДата; Иначе Сообщить("Рабочая дата не будет сменена. |Необходимо сначала в меню Сервис-Параметры-Общая |снять флажок - Использовать текущую дату компьютера ") КонецЕсли;

Как установить/снять монопольный режим?

Попытка УстановитьМонопольныйРежим(Истина); Исключение Предупреждение("К базе подключены пользователи. Монопольный режим установить невозможно!", 7); КонецПопытки;
Если МонопольныйРежим() Тогда Сообщить("Монопольный режим установлен"); КонецЕсли;
УстановитьМонопольныйРежим(Ложь);

Как внести запись в журнал регистрации?

ЗаписьЖурналаРегистрации("ОтчетныеДанные.Просмотр", УровеньЖурналаРегистрации.Информация, Метаданные(), ДатаКон,);

Как получить данные о зарегистрированных пользователях информационной базы?

Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей(); Для Каждого ЭлементМассива Из Выборка Цикл ИмяПользователя = ЭлементМассива.Имя; ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя; ЕстьПароль = ЭлементМассива.ПарольУстановлен; Роли = ЭлементМассива.Роли; Для Каждого Роль Из Роли Цикл ИмяРоли = Роль.Имя; КонецЦикла; КонецЦикла;

Как определить общую системную информацию?

Инфо = Новый СистемнаяИнформация; Текст = "Версия 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(Соединение); КонецЦикла;

Интеграция

Текстовый файл

Как выгрузить данные из справочника в текстовый файл?

Текст = Новый ТекстовыйДокумент; Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Стр = СтрЗаменить(Выборка.Наименование, Символ(34), "%квч%"); Код = Строка(Выборка.Код) + Символ(34); Текст.ДобавитьСтроку(Код + Стр); КонецЦикла; Текст.Записать("c:\temp\text.txt");

Как загрузить данные из текстового файла?

Текст = Новый ТекстовыйДокумент; Текст.Прочитать("c:\temp\text.txt"); Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(НомерСтроки); Позиция = Найти(Стр, Символ(34)); Код = Сред(Стр, 1, Позиция-1); прНаименование = Сред(Стр, Позиция + 1); Наименование = СтрЗаменить(прНаименование, "%квч%", Символ(34)); Сообщить(Код + "-" + Наименование); КонецЦикла;

Работа с текстом. Модель последовательного доступа

Путь = "c:\temp\text.txt"; Текст = Новый ЗаписьТекста(Путь, КодировкаТекста.UTF8); Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Текст.ЗаписатьСтроку(Выборка.Наименование); КонецЦикла; Текст.Закрыть();
Путь = "c:\temp\text.txt"; Текст = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл Стр = Текст.ПрочитатьСтроку(); Сообщить(Стр); КонецЦикла;

XML

Как из одной базы перенести документ в другую базу?

 // Выгрузить в файл 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-файлы

Как можно построить выгрузку-загрузку посредством файлов 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-документами

Заполнение HTML-анкет

Фамилия
Имя
Отчество
Процедура URLПриИзменении(Элемент) ЭлементыФормы.ПолеHTML.Перейти(URL); КонецПроцедуры
Процедура ПолеHTMLДокументСформирован(Элемент) // Событие возникает и при открытии формы, когда в реквизите // URL содержится пустая строка. Если URL <> "" Тогда Док = ЭлементыФормы.ПолеHTML.Документ; // При попытке обратиться к несуществующему свойству // произойдет ошибка Док.forms["frm"].fam.Value = "Иванов"; Док.forms["frm"].nam.Value = "Иван"; Док.forms["frm"].otch.Value = "Иванович"; КонецЕсли; КонецПроцедуры

Работа с файлами

Как организовать диалог выбора текстового файла?

Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; Фильтр = "Текст(*,txt)|*.txt"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл"; Если ДиалогОткрытияФайла.Выбрать() Тогда ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла; КонецЕсли;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога; ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытия.Каталог = ""; ДиалогОткрытия.МножественныйВыбор = Ложь; ДиалогОткрытия.Заголовок = "Выберите каталог"; Если ДиалогОткрытия.Выбрать() Тогда ПутьККаталогу = ДиалогОткрытия.Каталог; КонецЕсли;

Как прочитать информацию о файле?

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.Выбрать(); Файл = Новый Файл(ДиалогОткрытияФайла.ПолноеИмяФайла); Текст = "Файл: " + Файл.Имя; Текст = Текст + Символы.ПС + "Расширение: " + Файл.Расширение; Текст = Текст + Символы.ПС + "Полное имя: " + Файл.ПолноеИмя; Текст = Текст + Символы.ПС + "Путь: " + Файл.Путь; Текст = Текст + Символы.ПС + "Размер: " + Файл.Размер() + " байт"; Текст = Текст + ?(Файл.ПолучитьНевидимость(), Символы.ПС + "Невидимый. ", ""); Текст = Текст + ?(Файл.ПолучитьТолькоЧтение(), Символы.ПС + "Только чтение.", ""); Текст = Текст + Символы.ПС + "Последнее изменение: " + Файл.ПолучитьВремяИзменения(); Сообщить(Текст);

Как получить список файлов в указанном каталоге?

МассивНайденных = НайтиФайлы("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

Как использовать элементы управления 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"); Сообщ.Получатели.Добавить("hline@1c.ru"); Почта.Послать(Сообщ, Ложь); Почта.Отключиться();
Почта = Новый Почта; Почта.Подключиться("login", "password"); Выборка = Почта.Выбрать(Истина, Ложь); Для Каждого Сообщение Из Выборка Цикл Сообщить("Тема: " + Строка(Сообщение.Тема)); Сообщить("Текст: " + Строка(Сообщение.Текст)); Для Каждого Вложение Из Сообщение.Вложения Цикл Сообщить(Строка(Вложение.Наименование)); КонецЦикла; КонецЦикла;

Как организовать работу с почтой без установленного почтового клиента на компьютере пользователя?

// Сформировать почтовый профиль. // При отправке нет необходимости указывать настройки, связанные с POP сервером. ИПП = Новый ИнтернетПочтовыйПрофиль; ИПП.АдресСервераSMTP = Константы.АдресСервераSMTP.Получить(); ИПП.ВремяОжидания = Константы.ВремяОжидания.Получить(); ИПП.Пароль = Константы.Пароль.Получить(); ИПП.ПарольSMTP = Константы.ПарольSMTP.Получить(); ИПП.Пользователь = Константы.Пользователь.Получить(); ИПП.ПользовательSMTP = Константы.ПользовательSMTP.Получить(); ИПП.ПортSMTP = Константы.ПортSMTP.Получить(); // Создать сообщение. Сообщение = Новый ИнтернетПочтовоеСообщение; Сообщение.Получатели.Добавить("hline@1c.ru"); Сообщение.Отправитель.Адрес = "booktest@yandexyandex.ru"; Сообщение.Тема = "Срочно в номер!"; Сообщение.Тексты.Добавить("Доброе время суток!"); Вложение = Новый ДвоичныеДанные(ПутьКФайлуВложения); Сообщение.Вложения.Добавить(Вложение,"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-объектами

Как из одной базы 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

Как организовать считывание данных из файлов *.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(); КонецПопытки;

Как выгрузить прайс-лист в документ программы 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(); КонецПопытки;

Как выполнить запрос к произвольной базе данных 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)

Как из одной базы 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

Обмен данными

Как организовать работу удаленных складов?

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда Если ЭлементДанных.Склад <> Склад Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; КонецЕсли; КонецЕсли; КонецПроцедуры
Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять; КонецЕсли; КонецПроцедуры
Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда Если ПланыОбмена.ИзменениеЗарегистрировано(Ссылка, ЭлементДанных) Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; КонецЕсли; КонецЕсли; КонецПроцедуры

Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет?

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента) Если НеВыгружатьОбъекты Тогда // Проверить "ненужные типы", условие может содержать проверку // на несколько типов. Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить; КонецЕсли; КонецЕсли; КонецПроцедуры

Как просмотреть объекты, для которых зарегистрированы изменения?

Запись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-расширение

Как в форме списка номенклатуры отменить все установленные отборы?

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. NoMAx (NoMax) 16.03.09 14:12
(0) уважаемый а можно сжать в файл? а то у меня походу не все выводит.
На "Как отобразить на географической схеме выбранный город?" обрезает и дальше "молоко".

2. Алексей (begemot) 16.03.09 14:16
Так это же "А.П. Габец, Д.И. Гончаров
1С:Предприятие 8.0 Простые примеры разработки"
http://ifolder.ru/7909799
u_n_k_n_o_w_n; klinval; kostyaomsk; Shomak; bashirov.rs; dutlovva; axell; Hany; Bukaska; ms33; Ivanich1987; +11 Ответить 1
3. Андрей Пастухов (Minotavrik) 17.03.09 06:25
там многое из др. источников.
4. Олег Черкасов (oleg974) 18.03.09 07:30
Вот блин у меня тоже не все выводит. Поддерживаю просьбу NoMax о создании файла. А то, что в начале - это простые примеры разработки
5. Lyra (alyona.iva@gmail.com) 19.03.09 16:13
Да, да -- я тоже за файл. Мелкий текст получатся -- глазки начинают болеть быстро(((
6. Сергей Сытько (8SiriuS8) 25.03.09 11:24
Автору надо все это "добро" сложить в откомпилированный chm или html и тогда будет однозначно большой ПЛЮС
7. Константин Константин (kosb_64) 16.04.09 16:32
Согласен с предыдущими комментариями!
8. system_fatal_error (dobrynin.i.s) 08.11.09 09:53
тут http://infostart.ru/public/60366/ этот хелп в формате файла шаблонов.
9. apalon_pss (pavel_pss) 12.01.10 13:53
Спасибо, на всякий случай полезно
10. Катя Сигида (Dillan) 12.02.10 08:40
11. Андрей Назаров (isn2) 26.05.10 08:51
Посмотрел листинг и мне показался смутно знакомым, и нашел аналогичное 1:1 в книге "Ганчаров Грабеч. 1С Предприятие 8.1 Простые примеры разработки". Такого явного плагиата я не встречал очень давно.
13. aga_aga (Збянтэжаны Саўка) 09.06.10 15:06
(11) из 8.1 ничего не нашел, спецом искал темы про временные таблицы - глухо, по ходу это из 8.0.

(12) других источников что-то тоже увы в упор не вижу в этой огромной свалке от Габеца для 8.0.
14. Андрей Куканов (KukA.5) 26.07.10 12:16
(11) согласен это ПОЛЕЗНЫЙ МАТЕРИАЛ, но ...из хорошей книги.
Плюс ставлю - рекомендую всем этот объективно полезный материал.
Автору рекомендую в самом начале написать благодарности Габцу и Гончарову.
serg1974; bashirov.rs; shashev_j_v; +3 Ответить
15. Павел Казанцев (powar) 11.08.10 13:28
Название скромное больно. Это скорее "Пособие юного програмиста".
16. Maxim Kolkin (the1) 15.11.10 14:28
Спасибо! Буду осваивать)
17. Сергей Кургин (Serg_KSV) 26.04.11 21:45
Как создать новый документ?

НовыйДокумент = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();

ФормаНовогоПКО = Документы.ПриходныйКассовыйОрдер.ПолучитьФормуНовогоДокумента();
ФормаНовогоПКО.Открыть();

Пропарился часа два пока понял в чем фишка. Косяк предложенного механизма в том, что реально создаются 2 новых документа.
СоздатьДокумент() создает документ, в который записывается НовыйДокумент.Дата = ТекущаяДата();
ПолучитьФормуНовогоДокумента() тоже создает документ, очень неудачно подобран пример с датой, дата нового документа всегда ТекущаяДата().
Если будет заполнение другого реквизита, например,
НовыйДокумент.СтатьДвижения = Командировочные;
То в открываемом документе ФормаНовогоПКО.Открыть(); СтатьДвижения заполнена не будет.

Правильно делать так:

НовыйДокумент = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
ФормаНовогоПКО = НовыйДокумент.ПолучитьФорму();
ФормаНовогоПКО.Открыть();

И если это плагиат, то качество источника оставляет желать лучшего.
18. makeya 13.10.11 16:14
Очень полезные "полезности"! хоть и столь знакомые по книжке.
19. Игорь Дмитрич (Igortid) 15.10.11 18:06
хорошая подборка, спасибо
21. Ю М (mtv:)) 05.01.12 17:44
(5) Смотри версию для печати - там всё хорошо читается.
22. Михаил Труников (voyger_men) 05.01.12 19:48
Спасибо большое, уже полгода не могу нормально с 1с разобраться, то времени нет то меня... теперь немного проще с этим!!!
23. Илья Кравченко (hohmankia) 25.01.12 00:22
Отличная подборка, спасибо большое!
24. Lizi60 (Lizi60) 25.01.12 15:11
Материал, несомненно, очень полезный.
25. zverek2 15.02.12 13:50
Спасибо, материал полезный, иногда приходится пользоваться подобными разработками, только пока приходилось их самому придумывать и воплощать, а теперь можно уже разработанное взять и не терять время на реализацию своего. Автору огромное спасибо!
26. Леонид Азнауров (KresteG) 04.03.12 22:18
27. sat.m.n@mail.ru Сукачов (bolush) 12.03.12 14:51
Классно, очень хорошо помогает для начинающих программистов, программирую уже 7 мес, все это время только сюда заходил:))
28. Иван Таксятников (yartkin) 29.10.12 16:36
29. Сергей Иванов (u_n_k_n_o_w_n) 08.11.12 18:25
Плагиат!!!
Автору "-", но не могу пока к сожалению.
30. Vlad (KillHunter) 08.11.12 20:15
прикольная штукенция, спасибо :)
31. Дмитрий Шерстобитов (DitriX) 24.12.12 21:11
(0)Как привести строку типа "20.10.2012 12:03:40" к дате 1С

Судя из справки - надо вычленить отдельный составляющие и получить строку типа:
"20121020120940" и потом сделать Дата("20121020120940").

но можно и просто Дата("20.10.2012 12:03:40").
Я так понимаю тут зависит от региональных настроек и т.д. Но главное - что оно работает (на 8.2.16)
Я не знал, может кому поможет.
32. Елена Пименова (Bukaska) 24.12.12 21:39
(29) u_n_k_n_o_w_n,
В коей степени с вами согласна, но...Но не у всех есть возможность заказать большую книгу почти за 3000 по розничной цене))))
33. Сергей Иванов (u_n_k_n_o_w_n) 25.12.12 03:14
(32) Bukaska, давайте уточним цену: 350 руб.
Плю ко всему Вы получаете диск с данными где все это есть в электронном виде.
34. Елена Пименова (Bukaska) 25.12.12 14:29
(33) u_n_k_n_o_w_n,
http://v8.1c.ru/metod/books/book.jsp?id=401
Я про эту книгу поняла из темы)))
35. Сергей Иванов (u_n_k_n_o_w_n) 25.12.12 18:40
Это уже набор "всю включено". Обязательно приобрету.
36. Роман (srv7) 05.02.13 16:59
(0), (35) народ, "всё включено" на сайте help1c.com, а это плагиат какой-то.. минус не ставлю только потому, что автор потратил своё время на копи паст.. даже не позаботясь об оформлении статьи..
все, кто хочет изучить 1С - найдите книжки "Профессиональная разработка в 1С:Предприятии" первой и второй редакции и по ним учитесь.
37. Татьяна Гулак (Gulak) 13.06.13 10:21
38. Vlad (KillHunter) 13.06.13 10:37
неплохая статья, правда их уже немеренно на сайте однотипных!
39. Екатерина Игоревна (Alekta) 11.10.13 16:34
Спасибо. В данной теме нашла то, что искала.
40. Сергей Сергеев (Рамзес) 30.10.13 14:43
В функции проверки массивов на идентичность:
Если НаибольшийИндекс > ВторойМассив.ВГраница () Тогда 
	Возврат Ложь; 
КонецЕсли; 

Мне думается, что правильнее
Если НаибольшийИндекс <> ВторойМассив.ВГраница () Тогда 
	Возврат Ложь; 
КонецЕсли; 
41. Ирина Махно (mie24) 12.01.14 21:58
В вашей статье нашла ответ на свой вопрос. Спасибо.
42. Сергей Аблаев (serg1974) 19.05.14 16:27
нехватает очень следующего (авторство не мое)

Можно ли в запросе , в качестве источника данных, использовать таблицу значений ?
Да. Это можно сделать с помощью временных таблиц:


// Сначала помещаем ТЗ во временную таблицу
Запрос = Новый Запрос ;
Запрос .МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос .Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ";
Запрос .УстановитьПараметр("ТЗ", ТЗ);
Запрос .Выполнить();

// Теперь ТЗ можно использовать в запросе :

Запрос .Текст = "
|ВЫБРАТЬ
| ТЗ.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Остатки
| ПО
| ТЗ.Номенклатура=Остатки.Номенклатура";

Выборка = Запрос .Выполнить().Выбрать();

----------------------------еще момент !!!!---------------------------------------
Если ошибка: "Тип не может быть выбран в запросе" в 1С 8

При использовании в запросе таблицы значений, возникает ошибка: «Тип не может быть выбран в запросе». Почему?

Дело в том, что колонки таблицы значений, передаваемой в запрос в качестве источника данных, должны быть явно ТИПИЗИРОВАНЫ. Т.е. если мы используем таблицу значений, так же в свою очередь выгруженную из результата запроса или из табличной части документа например - то такой проблемы не возникает, т.к. в таком случае колонки будут типизированными. А если мы сами создаем таблицу значений, то нужно явно указать тип для каждой колонки:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
43. Сергей Аблаев (serg1974) 03.07.14 10:06
Пользуюсь темой - как справочником - но еще одной полезной конструкции тут нет:
"Как открыть форму ссылки под курсором в форме списка" (регистр значений например)

Форма = этаформа.ТекущийЭлемент.ТекущиеДанные[этаформа.ТекущийЭлемент.ТекущаяКолонка.Имя].ПолучитьФорму();
Форма.Открыть();

Добавьте пожалуйста!

PS сегодня 1,5 часа искал - как это сделать :)
44. pavel ev (pavelyar) 25.11.14 01:16
45. Андрей Г (grand.pers) 25.11.14 12:55
искал преобразование даты в строку - так и не нашел :(
46. Сергей (ildarovich) 25.11.14 13:25
(45) grand.pers, вот по этой ссылке http://www.forum.mista.ru/topic.php?id=388253 в комментарии 23 есть решение
u_n_k_n_o_w_n; +1 Ответить
47. Николай Хиль (mukilka) 28.11.14 17:30
Спасибо, есть много полезных вещей
48. Алексей Т. (CratosX) 21.09.15 12:23
В связи с отказом от модальности, функция Предупреждение нежелательна
u_n_k_n_o_w_n; +1 Ответить
49. Марина Чирина (chmv) 02.11.15 13:19
48 А ЧТО надо использовать?
50. Джон Смит (Джон Смит) 04.12.15 14:45
51. Павел (MPV) 13.02.16 00:25
Как таблицу значений "ТаблицаПолучатель" заполнить данными таблицы значений "ИсходнаяТаблица"?

Этот код не совсем верный
ТаблицаПолучатель = ТаблицаИсходная.Скопировать();
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл НоваяСтрока = ТаблицаПолучатель.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла;

Здесь нужно использовать просто
ТаблицаИсходная.Скопировать();

ИЛИ метод СкопироватьКолонки();
ТаблицаПолучатель = ТаблицаИсходная.СкопироватьКолонки();
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл НоваяСтрока = ТаблицаПолучатель.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла;
52. Вадим Назаров (NazarovV) 19.02.16 10:50
в функции СформироватьЗапроспоТабличнойЧасти - ошибка :
так у вас: (ЗначениеНеЗаполнено(Реквизит.Ключ)
правильно:(Не ЗначениеЗаполнено(Реквизит.Ключ)...


p.s. спасибо за статью.
53. Марина Чирина (chmv) 04.08.16 11:17
54. Айбек К (ak0710) 01.12.16 11:43
(52), Вадим в старой версии платформы была функция ЗначениеНеЗаполнено, наверное вы не сталкивались
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа