←Назад
&НаКлиенте
Процедура ВыбратьПериод(Команда)
Диалог = Новый ДиалогРедактированияСтандартногоПериода();
Диалог.Период = Новый СтандартныйПериод(ДатаНачала, ДатаОкончания);
ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыполнитьПослеВыбораПериода",ЭтотОбъект);
Диалог.Показать(ОписаниеОповещенияОЗакрытии);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПослеВыбораПериода(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
ДатаНачала = Результат.ДатаНачала;
ДатаОкончания = Результат.ДатаОкончания;
КонецЕсли;
КонецПроцедуры
#join
function join(Знач list, delimeter=",") export
r = "";
for each item in list do
r = r + trimall(string(item)) + delimeter;
enddo;
if strlen(r) > 0 then
r = left(r, strlen(r) - strlen(delimeter));
endif;
return r;
endfunction
#ReadExcel
Excel = Новый COMОбъект("Excel.Application");
Workbook = Excel.Workbooks.Open(ПутьКФайлу);
Данные = Новый ТаблицаЗначений;
СтрокаКолонок = 1; // строка с названиями колонок
ПерваяСтрока = 2; // первая строка с данными
ПерваяКолонка = 1; // и так понятно
CurPage = Workbook.Sheets(1); // обрабатываем только первый лист
КоличествоСтрок = CurPage.Cells.SpecialCells(11).Row;
КоличествоКолонок = CurPage.Cells.SpecialCells(11).Column;
ДанныеФайла = CurPage.Range(CurPage.Cells(ПерваяСтрока, ПерваяКолонка), CurPage.Cells(КоличествоСтрок, КоличествоКолонок)).Value.Выгрузить();
Для Счетчик = 1 По КоличествоКолонок Цикл
Попытка
Данные.Колонки.Добавить(ОчиститьСтроку(CurPage.Cells(СтрокаКолонок, Счетчик).Text), Новый ОписаниеТипов("Строка"), CurPage.Cells(СтрокаКолонок, Счетчик).Text);
Исключение
Данные.Колонки.Добавить("Колонка"+Строка(Счетчик), Новый ОписаниеТипов("Строка"), "Колонка"+Строка(Счетчик));
Сообщить("Какая-то ошибка в колонке: " + "Колонка" + Строка(Счетчик));
КонецПопытки;
КонецЦикла;
Для Счетчик = 1 По КоличествоСтрок Цикл
НоваяСтрока = Данные.Добавить();
КонецЦикла;
Для Счетчик = 0 По КоличествоКолонок - 1 Цикл
Данные.ЗагрузитьКолонку(ДанныеФайла[Счетчик], Счетчик);
КонецЦикла;
Сообщить("Чтение файла завершено.");
Excel.Application.Quit();
--------------------------------------------------------------------------------
#ChooseFile
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Фильтр = "*.*";
Если ДиалогВыбора.Выбрать() Тогда
ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
--------------------------------------------------------------------------------
#ReadXML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Элементы = ДокументDOM.ПолучитьЭлементыПоИмени("");
Для Каждого Элемент из Элементы Цикл
Сообщить(Элемент.ТекстовоеСодержимое);
КонецЦикла;
--------------------------------------------------------------------------------
#Prices
ВЫБРАТЬ
Н.Наименование КАК Наименование,
Цены.Цена КАК ЗакупочнаяЦена,
Цены.ТипЦен КАК ТипЦен,
Свойства.Свойство.Наименование КАК Свойство,
Свойства.Значение КАК ЗначениеСвойства
ИЗ
Справочник.Номенклатура КАК Н
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК Цены
ПО Н.Ссылка = Цены.Номенклатура
И (Цены.ТипЦен В (&ТипыЦен))
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК Свойства
ПО Н.Ссылка = Свойства.Объект
И (Свойства.Свойство В (&Свойства))
ГДЕ
НЕ Н.ЭтоГруппа
И НЕ Н.ПометкаУдаления
И НЕ Н.Предопределенный
И Цены.Цена > 0
--------------------------------------------------------------------------------
#ComSafeArray
Процедура СформироватьЭксельФайл(ТЗ)
Excel = Новый COMОбъект("Excel.Application");
Document = Excel.Workbooks.Add(); // Тут главное добавить новую книгу в эксель-документ
ВсегоСтрок = ТЗ.Количество();
ВсегоКолонок = ТЗ.Колонки.Количество();
ComSafeArr = Новый COMSafeArray("VT_VARIANT", ВсегоКолонок, ВсегоСтрок);
Для СчСтрок = 0 По ВсегоСтрок - 1 Цикл
Строка = ТЗ[СчСтрок];
Для СчКолонок = 0 По ВсегоКолонок - 1 Цикл
ComSafeArr.SetValue(СчКолонок, СчСтрок, Лев(Строка[СчКолонок], 900)); // к сожалению строки надо обрезать
КонецЦикла;
КонецЦикла;
Excel.Range(Excel.Cells(1, 1), Excel.Cells(ВсегоСтрок, ВсегоКолонок)).Value = ComSafeArr;
Excel.Visible = 1; // Покажем получившееся
КонецПроцедуры
--------------------------------------------------------------------------------
#WSLink
/////////////////////////
// Инициализация по объекту конфигурации
ns = "namespace"; // нэймспейс
username = "XXX"; // логин, может не быть
password = "XXX"; // пароль, может не быть
WS = WSСсылки.ИмяWSСсылки.СоздатьWSПрокси(ns, "ИмяWSОперации", "ИмяWSОперации_SOAP12");
WS.Пользователь = username;
WS.Пароль = password;
// XDTO может не быть (пользуйтесь строками :-))
//pack = WS.ФабрикаXDTO.Пакеты.Получить(ns);
Ответ = WS.ОперацияВебСервиса(ВходнойПараметр1, ВходнойПараметр2, ..., ВходнойПараметрN);
/////////////////////////
// Инициализация по wsdl-ссылке
ns = "namespace"; // нэймспэйс
url = "http://YOUR_WSDL_LINK?wsdl";
username = "XXXXXX"; // логин, может не быть
password = "XXXXXX"; // пароль, может не быть
Определение = Новый WSОпределения(url, username, password);
WS = Новый WSПрокси(Определение, ns, "WebServiceName", "WebServiceNameSoap");
Ответ = WS.ОперацияВебСервиса(ВходнойПараметр1, ВходнойПараметр2, ..., ВходнойПараметрN);
--------------------------------------------------------------------------------
#HTTP_GET_query
// актуально для свежих версий 8.2 и выше
Сервер = "XXXXXX";
Порт = 80;
Соединение = Новый HTTPСоединение(Сервер, Порт);
Запрос = Новый HTTPЗапрос("/1c.php?name=hello");
HTTPОтвет = Соединение.Получить(Запрос);
ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Сообщить(ТекстОтвета);
--------------------------------------------------------------------------------
#OpenExternal
ИмяФайла = ПолучитьИмяВременногоФайла(".epf");
_ = Справочники.ВнешниеПечатныеФормы.НайтиПоКоду("00000010").Хранилище.Получить();
_.Записать(ИмяФайла);
ФормаОбработки = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
ФормаОбработки.Открыть();
--------------------------------------------------------------------------------
#ADOExcel
&НаСервере
Функция ОбработатьФайлНаСервере(ПутьКФайлу)
first_row = 1;
last_row = 0;
conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ПутьКФайлу) + ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;""";
ADODBConnection = New COMObject("ADODB.Connection");
ADODBConnection.ConnectionString = conn_string;
Try
ADODBConnection.Open();
Except
Try
conn_string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(ПутьКФайлу) + ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1;""";
ADODBConnection.ConnectionString = conn_string;
ADODBConnection.Open();
Except
msg = "COM object is not available. Tried Microsoft.ACE.OLEDB.12.0, Microsoft.Jet.OLEDB.4.0";
print(msg);
return 1;
Endtry
Endtry;
schema = ADODBConnection.OpenSchema(20); // 20 - enum for adSchemaTables
While Schema.EOF() = 0 Do
sheet_name = schema.Fields("table_name").Value;
query = "SELECT * FROM [" + sheet_name + "]";
ADODBRecordset = New COMObject("ADODB.Recordset");
ADODBRecordset.Open(query, ADODBConnection);
If (ADODBRecordset.EOF ИЛИ ADODBRecordset.BOF) Then
line_count = 0;
Сообщить(НСтр("ru = '" + sheet_name + ": не содержит данных.'"), СтатусСообщения.Внимание);
// Завершение работы.
// Закрытие Объектов.
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;
Endif;
// Импирически определенные параметры для правильного определения количества строк листа.
//ADODBRecordset.AbsolutePage = 1;
//ADODBRecordset.AbsolutePosition = 1;
// Параметр, возвращаемый в вызывающую процедуру.
КолвоСтрокExcel = ADODBRecordset.RecordCount + 1; // (+1) - учет Строки-Заголовока, которая "съедается".
КолвоКолонокExcel = ADODBRecordset.Fields.Count;
ТаблицаРезультат = Новый ТаблицаЗначений;
// Формирование колонок результирующей таблицы.
// "НомерСтроки" - для наглядности и удобства.
// В зависимости от разрабатываемой обработки.
// "Сопоставлено" - может быть другим.
// Здесь же могут быть добавлены другие колонки, не формируемые из содержимого файла EXCEL.
ТаблицаРезультат.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"), "№", 4);
ТаблицаРезультат.Колонки.Добавить("Сопоставлено", Новый ОписаниеТипов("Булево"), "Сопоставлено", 1);
Для ит = 1 ПО КолвоКолонокExcel Цикл
Поле = ADODBRecordset.Fields.Item(ит - 1);
ИмяКолонки = "К_" + ит;
Колонка = ТаблицаРезультат.Колонки.Добавить(ИмяКолонки, , СокрЛП(СтрЗаменить(Поле.Name, "#", ".")));
// Замена "#" на ".", т.к. при считывании ADODB "." в имени колонки заменяется на "#".
КонецЦикла;
// ТаблицаРезультат: 1-я строка - Строка-Заголовок.
// Добавление этой строки обусловлено исключительно из соображений идентичности содержимого файла EXCEL и ТаблицыЗначений,
// выводимой на форме Обработки, и дальнейшей обработки строки заголовка
// с целью сопоставления колонок EXCEL и реквизитов 1С: для Справочников, ПВХ, Регистров, Документов.
// Если в Вашей обработке в результирующей таблице в качестве 1-ой строки не нужна Строка-Заголовок, то
// следует закомментировать следующий цикл:
НоваяСтрока = ТаблицаРезультат.Добавить();
НоваяСтрока.НомерСтроки = 1;
Для ит = 1 ПО КолвоКолонокExcel Цикл
ИмяКолонки = "К_" + ит;
Колонка = ТаблицаРезультат.Колонки.Найти(ИмяКолонки);
НоваяСтрока[ИмяКолонки] = Колонка.Заголовок;
КонецЦикла;
// ТаблицаРезультат: Формирование строк по указанному диапазону: НачСтрока - КонСтрока.
НомерСтроки = 1;
Пока ADODBRecordset.EOF() = 0 Цикл
НомерСтроки = НомерСтроки + 1;
Если НомерСтроки < first_row Тогда // Номер строки вне диапазона считываемых строк.
ADODBRecordset.MoveNext(); // Следующая строка.
Продолжить;
КонецЕсли;
Если last_row > 0 И НомерСтроки > last_row Тогда // Номер строки вне диапазона считываемых строк.
Прервать;
КонецЕсли;
НоваяСтрока = ТаблицаРезультат.Добавить();
НоваяСтрока.НомерСтроки = НомерСтроки;
Для ит = 1 ПО КолвоКолонокExcel Цикл
Поле = ADODBRecordset.Fields.Item(ит - 1);
Если Поле.ActualSize = 0 Тогда // Пустое поле EXCEL.
Продолжить;
КонецЕсли;
ЗначениеЯчейки = Поле.Value; // Учитывая параметр HDR=YES в строке соединения, данные считываются в соответствии с их типом.
ИмяКолонки = "К_" + ит;
НоваяСтрока[ИмяКолонки] = СтрЗаменить(ЗначениеЯчейки, Символы.НПП, "");
// Используется при формировании таблицы на форме обработки.
ШиринаКолонки = ТаблицаРезультат.Колонки[ИмяКолонки].Ширина;
ДлинаСтроки = СтрДлина(СокрЛП(ЗначениеЯчейки));
ТаблицаРезультат.Колонки[ИмяКолонки].Ширина = ?(ШиринаКолонки < ДлинаСтроки, ДлинаСтроки, ШиринаКолонки);
КонецЦикла;
ADODBRecordset.MoveNext(); // Следующая строка.
КонецЦикла;
Schema.MoveNext();
КонецЦикла;
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;
Сообщить(ТаблицаРезультат.Количество());
Возврат ТаблицаРезультат;
КонецФункции
--------------------------------------------------------------------------------
#SaveReportBuilderSettings
// НастройкиПостроителя - реквизит обработки (Строка, неогр)
// событие формы
Процедура ПередСохранениемЗначений(Отказ)
НастройкиПостроителя = ЗначениеВСтрокуВнутр(ПостроительОтчета.ПолучитьНастройки());
КонецПроцедуры
Процедура ВосстановитьНастройкиПостроителя()
Если СокрЛП(НастройкиПостроителя) <> "" Тогда
Попытка
ПостроительОтчета.УстановитьНастройки(ЗначениеИзСтрокиВнутр(НастройкиПостроителя));
Исключение
КонецПопытки;
КонецЕсли;
КонецПроцедуры
// событие формы
Процедура ПриОткрытии()
ВосстановитьНастройкиПостроителя();
КонецПроцедуры
// событие формы
Процедура ПослеВосстановленияЗначений()
ВосстановитьНастройкиПостроителя();
КонецПроцедуры