НавигационнаяСсыылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокументОбсуждения);
КонтекстОбсуждения = Новый КонтекстОбсужденияСистемыВзаимодействия(НавигационнаяСсыылка);
МенеджерВзаимодействия = Новый МенеджерСистемыВзаимодействия;
Отбор = Новы...
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
// Передаем в макет компоновки схему, настройки и данные расшифровки
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));
// Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки, Истина);
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
// Передаем в макет компоновки схему, настройки и данные расшифровки
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));
// Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки, Истина);
// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Быстрое и надежное обновление файловых и серверных баз, защита от шифровальщиков, автоматическое обновление доработанных конфигураций и расширений, а также многое другое.
Поможет, например, если хотите вывести "быстрые отборы" в основную форму списка прикладного объекта.
В процедуре ищем в КоллекцииЭлементовПользовательскихНастроек элемент, который имеет тип = ОтборКомпоновкиДанных, и работаем с его коллекцией отборов (Э...
Token, ChatID - параметры (Token- бота, ChatID - либо группы, либо аккаунта);
ПутьКФайлу = путь к выбранному файлу для отправки
Token = "6235344929:AAENWBK3pMX4hLMMtx6LNtFg9roqC0v7Scw";
ServerTg = "api.telegram.org";
ChatID = "815505225";
ФайлОтправки = Новый Файл(ПутьКФайлу);
СтрокаСоединения = "bot" + Token + "/sendDocument";
// Разделитель;
Boundary = "----"+Строка(Новый УникальныйИдентификатор());
// Определяем массив для процедуры ОбъединитьФайлы;
МассивФайловДляОбъединения = Новый Массив;
// Формируем начальный фрагмент файла POST-запроса;
ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);
// Формируем конечный фрагмент файла POST-запроса;
ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);
ТекстДляОтправки = "";
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС + СтрЗаменить(Формат(ChatID, "ЧДЦ=0; ЧС=; ЧРГ=.; ЧГ=0"), ".", "") + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=""/" + ФайлОтправки.Имя + """" + Символы.ПС;
// Записываем ФайлОтправкиНачало;
ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
ФайлОтправкиНачало.Закрыть();
ТекстДляОтправки = "" + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary+"--";
// Записываем ФайлаОтправкиКонец;
ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
ФайлаОтправкиКонец.Закрыть();
// Заполняем массив;
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
МассивФайловДляОбъединения.Добавить(СокрЛП(ПутьКФайлу));
// Формируем ИмяФайлаОтправки;
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
HTTPЗапрос = Новый HTTPЗапрос;
Заголовки = Новый Соответствие;
// Формируем Заголовки HTTP Запроса;
HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
// Установим АдресРесурса;
HTTPЗапрос.АдресРесурса = СтрокаСоединения;
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение(ServerTg, 443,,,,, SSL);
Попытка
// POST запрос;
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
КодСостояния = Ответ.КодСостояния;
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
Если КодСостояния = 200 тогда
// Читаем JSON;
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
Если РезультатСтруктура.ok = Истина Тогда
СтруктураMessage = РезультатСтруктура.result;
КонецЕсли;
Иначе
Сообщить("КодСостояния " + КодСостояния);
Сообщить(СтрокаОтвета);
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Token = "6235344929:AAENWBK3pMX4hLMMtx6LNtFg9roqC0v7Scw";
ServerTg = "api.telegram.org";
ChatID = "815505225";
ФайлОтправки = Новый Файл(ПутьКФайлу);
СтрокаСоединения = "bot" + Token + "/sendDocument";
// Разделитель;
Boundary = "----"+Строка(Новый УникальныйИдентификатор());
// Определяем массив для процедуры ОбъединитьФайлы;
МассивФайловДляОбъединения = Новый Массив;
// Формируем начальный фрагмент файла POST-запроса;
ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);
// Формируем конечный фрагмент файла POST-запроса;
ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);
ТекстДляОтправки = "";
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС + СтрЗаменить(Формат(ChatID, "ЧДЦ=0; ЧС=; ЧРГ=.; ЧГ=0"), ".", "") + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=""/" + ФайлОтправки.Имя + """" + Символы.ПС;
// Записываем ФайлОтправкиНачало;
ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
ФайлОтправкиНачало.Закрыть();
ТекстДляОтправки = "" + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary+"--";
// Записываем ФайлаОтправкиКонец;
ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
ФайлаОтправкиКонец.Закрыть();
// Заполняем массив;
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
МассивФайловДляОбъединения.Добавить(СокрЛП(ПутьКФайлу));
// Формируем ИмяФайлаОтправки;
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
HTTPЗапрос = Новый HTTPЗапрос;
Заголовки = Новый Соответствие;
// Формируем Заголовки HTTP Запроса;
HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
// Установим АдресРесурса;
HTTPЗапрос.АдресРесурса = СтрокаСоединения;
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение(ServerTg, 443,,,,, SSL);
Попытка
// POST запрос;
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
КодСостояния = Ответ.КодСостояния;
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
Если КодСостояния = 200 тогда
// Читаем JSON;
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
Если РезультатСтруктура.ok = Истина Тогда
СтруктураMessage = РезультатСтруктура.result;
КонецЕсли;
Иначе
Сообщить("КодСостояния " + КодСостояния);
Сообщить(СтрокаОтвета);
КонецЕсли;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Нахождение интервалов в запросе
Запрос.Текст =
"ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаНачала,
| ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТИсходныеДанные
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 2),
| ДАТАВРЕМЯ(2023, 1, 2)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 5),
| ДАТАВРЕМЯ(2023, 1, 9)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 11),
| ДАТАВРЕМЯ(2023, 1, 11)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 12),
| ДАТАВРЕМЯ(2023, 1, 12)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Справа.ДатаНачала КАК ДатаНачала,
| Справа.ДатаОкончания КАК ДатаОкончания,
| СУММА(РАЗНОСТЬДАТ(Слева.ДатаНачала, Слева.ДатаОкончания, ДЕНЬ) + 1) КАК Интеграл
|ПОМЕСТИТЬ ВТИнтегралы
|ИЗ
| ВТИсходныеДанные КАК Слева
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИсходныеДанные КАК Справа
| ПО Слева.ДатаНачала <= Справа.ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
| Справа.ДатаНачала,
| Справа.ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МИНИМУМ(ВТИнтегралы.ДатаНачала) КАК ДатаНачала,
| МАКСИМУМ(ВТИнтегралы.ДатаОкончания) КАК ДатаОкончания
|ИЗ
| ВТИнтегралы КАК ВТИнтегралы
|
|СГРУППИРОВАТЬ ПО
| ДОБАВИТЬКДАТЕ(ВТИнтегралы.ДатаОкончания, ДЕНЬ, -ВТИнтегралы.Интеграл)"
Запрос.Текст =
"ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаНачала,
| ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТИсходныеДанные
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 2),
| ДАТАВРЕМЯ(2023, 1, 2)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 5),
| ДАТАВРЕМЯ(2023, 1, 9)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 11),
| ДАТАВРЕМЯ(2023, 1, 11)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДАТАВРЕМЯ(2023, 1, 12),
| ДАТАВРЕМЯ(2023, 1, 12)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Справа.ДатаНачала КАК ДатаНачала,
| Справа.ДатаОкончания КАК ДатаОкончания,
| СУММА(РАЗНОСТЬДАТ(Слева.ДатаНачала, Слева.ДатаОкончания, ДЕНЬ) + 1) КАК Интеграл
|ПОМЕСТИТЬ ВТИнтегралы
|ИЗ
| ВТИсходныеДанные КАК Слева
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИсходныеДанные КАК Справа
| ПО Слева.ДатаНачала <= Справа.ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
| Справа.ДатаНачала,
| Справа.ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МИНИМУМ(ВТИнтегралы.ДатаНачала) КАК ДатаНачала,
| МАКСИМУМ(ВТИнтегралы.ДатаОкончания) КАК ДатаОкончания
|ИЗ
| ВТИнтегралы КАК ВТИнтегралы
|
|СГРУППИРОВАТЬ ПО
| ДОБАВИТЬКДАТЕ(ВТИнтегралы.ДатаОкончания, ДЕНЬ, -ВТИнтегралы.Интеграл)"
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, Настройки, ДокументРезультат,, ДанныеРасшифровки);
ОбъединитьЯчейкиВТабличномДокументе(ДокументРезультат, "#");
КонецПроцедуры
// Заполняет переданный объект на основани СКД
//
// Параметры
//
// СКД – собствеено настройки СКД
//
// ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
// ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
// СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
// краткий лекбез, поправлю позже
//
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ИсполняемыеНастройки = Неопределено, ОбъектДляЗагрузки, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
Иначе
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
КонецЕсли;
Если ИсполняемыеНастройки = Неопределено Тогда
ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;
КонецЕсли;
Если СтруктураПараметров <> Неопределено Тогда
КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;
Для каждого Параметр Из СтруктураПараметров Цикл
НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);
Если НайденноеЗначениеПараметра <> Неопределено Тогда
НайденноеЗначениеПараметра.Использование = Истина;
НайденноеЗначениеПараметра.Значение = Параметр.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора);
ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД, Истина);
Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);
Иначе
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);
КонецЕсли;
ПроцессорВывода.ОтображатьПроцентВывода = Истина;
ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);
КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()
Процедура ОбъединитьЯчейкиВТабличномДокументе(ТабличныйДокумент, МаркерОбъединения) Экспорт
// Находит ячейки, содержащие в тексте МаркерОбъединения
// Объединяет ячейки, располагающиеся рядом, содержащие одинаковый текст и маркер объединения
ОбъединяемыеЯчейки = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, МаркерОбъединения);
ОбъединяемыеЯчейки.Колонки.Добавить("Диапазон");
ОбъединяемыеЯчейки.Сортировать("Верх,Лево");
Для Каждого Строка из ОбъединяемыеЯчейки Цикл
Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх-1, Строка.Лево);
НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() Тогда
Строка.Диапазон = НайденныеСтроки[0].Диапазон;
Строка.Диапазон.Низ = Макс(Строка.Диапазон.Низ, Строка.Верх);
Продолжить;
КонецЕсли;
Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх, Строка.Лево-1);
НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() Тогда
Строка.Диапазон = НайденныеСтроки[0].Диапазон;
Строка.Диапазон.Право = Макс(Строка.Диапазон.Право, Строка.Лево);
Продолжить;
КонецЕсли;
Строка.Диапазон = Новый Структура("Текст,Верх,Лево,Низ,Право", Строка.Текст, Строка.Верх, Строка.Лево, Строка.Верх, Строка.Лево);
КонецЦикла;
ОбъединяемыеЯчейки.Свернуть("Диапазон");
Для Каждого Строка Из ОбъединяемыеЯчейки Цикл
Диапазон = Строка.Диапазон;
Область = ТабличныйДокумент.Область(Диапазон.Верх, Диапазон.Лево, Диапазон.Низ, Диапазон.Право);
Область.Объединить();
// Удалим маркер объединения из текст ячейки
Область.Текст = СтрЗаменить(Область.Текст, МаркерОбъединения, "");
КонецЦикла;
КонецПроцедуры
Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска) Экспорт
НайденныеОбласти = Новый ТаблицаЗначений;
НайденныеОбласти.Колонки.Добавить("Область");
НайденныеОбласти.Колонки.Добавить("Текст");
НайденныеОбласти.Колонки.Добавить("Верх");
НайденныеОбласти.Колонки.Добавить("Лево");
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
Пока НЕ НайденнаяОбласть = Неопределено Цикл
НоваяСтрока = НайденныеОбласти.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
НоваяСтрока.Область = НайденнаяОбласть;
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
КонецЦикла;
Возврат НайденныеОбласти;
КонецФункции
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, Настройки, ДокументРезультат,, ДанныеРасшифровки);
ОбъединитьЯчейкиВТабличномДокументе(ДокументРезультат, "#");
КонецПроцедуры
// Заполняет переданный объект на основани СКД
//
// Параметры
//
// СКД – собствеено настройки СКД
//
// ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
// ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
// СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
// краткий лекбез, поправлю позже
//
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ИсполняемыеНастройки = Неопределено, ОбъектДляЗагрузки, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
Иначе
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
КонецЕсли;
Если ИсполняемыеНастройки = Неопределено Тогда
ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;
КонецЕсли;
Если СтруктураПараметров <> Неопределено Тогда
КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;
Для каждого Параметр Из СтруктураПараметров Цикл
НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);
Если НайденноеЗначениеПараметра <> Неопределено Тогда
НайденноеЗначениеПараметра.Использование = Истина;
НайденноеЗначениеПараметра.Значение = Параметр.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора);
ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД, Истина);
Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);
Иначе
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);
КонецЕсли;
ПроцессорВывода.ОтображатьПроцентВывода = Истина;
ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);
КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()
Процедура ОбъединитьЯчейкиВТабличномДокументе(ТабличныйДокумент, МаркерОбъединения) Экспорт
// Находит ячейки, содержащие в тексте МаркерОбъединения
// Объединяет ячейки, располагающиеся рядом, содержащие одинаковый текст и маркер объединения
ОбъединяемыеЯчейки = НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, МаркерОбъединения);
ОбъединяемыеЯчейки.Колонки.Добавить("Диапазон");
ОбъединяемыеЯчейки.Сортировать("Верх,Лево");
Для Каждого Строка из ОбъединяемыеЯчейки Цикл
Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх-1, Строка.Лево);
НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() Тогда
Строка.Диапазон = НайденныеСтроки[0].Диапазон;
Строка.Диапазон.Низ = Макс(Строка.Диапазон.Низ, Строка.Верх);
Продолжить;
КонецЕсли;
Отбор = Новый Структура("Текст,Верх,Лево", Строка.Текст, Строка.Верх, Строка.Лево-1);
НайденныеСтроки = ОбъединяемыеЯчейки.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() Тогда
Строка.Диапазон = НайденныеСтроки[0].Диапазон;
Строка.Диапазон.Право = Макс(Строка.Диапазон.Право, Строка.Лево);
Продолжить;
КонецЕсли;
Строка.Диапазон = Новый Структура("Текст,Верх,Лево,Низ,Право", Строка.Текст, Строка.Верх, Строка.Лево, Строка.Верх, Строка.Лево);
КонецЦикла;
ОбъединяемыеЯчейки.Свернуть("Диапазон");
Для Каждого Строка Из ОбъединяемыеЯчейки Цикл
Диапазон = Строка.Диапазон;
Область = ТабличныйДокумент.Область(Диапазон.Верх, Диапазон.Лево, Диапазон.Низ, Диапазон.Право);
Область.Объединить();
// Удалим маркер объединения из текст ячейки
Область.Текст = СтрЗаменить(Область.Текст, МаркерОбъединения, "");
КонецЦикла;
КонецПроцедуры
Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска) Экспорт
НайденныеОбласти = Новый ТаблицаЗначений;
НайденныеОбласти.Колонки.Добавить("Область");
НайденныеОбласти.Колонки.Добавить("Текст");
НайденныеОбласти.Колонки.Добавить("Верх");
НайденныеОбласти.Колонки.Добавить("Лево");
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
Пока НЕ НайденнаяОбласть = Неопределено Цикл
НоваяСтрока = НайденныеОбласти.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
НоваяСтрока.Область = НайденнаяОбласть;
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
КонецЦикла;
Возврат НайденныеОбласти;
КонецФункции
Процедура для переноса настроек формы внешней обработки между двумя пользователями
Для других форм - следует заменить КлючОбъекта. например "Обработка.АвтоматическоеИзвлечениеТекстов.Форма.Форма"
НаСервере
Процедура ПеренестиНастройкиНаСервере()
Клю...
Процедура ВыгрузитьВыборкуЗапросаВТекстовыйФайл(ВыборкаЗапроса, стрИменаКолонок, стрАдресФайла, Разделитель = Неопределено) Экспорт
//Выгрузка результата запроса в текстовый файл с разделителями
//ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
//стрИменаКолонок - строка, имена колонок через запятую из которых нужно сохранить данные в файл + порядок колонок
//стрАдресФайла - строка
//Разделитель - по-умолчанию: Символы.Таб; можно использовать Символы. ВК (CR),ВТаб (VTab),НПП (NBSp),ПС (LF),ПФ (FF),Таб (Tab)
// При загрузке строку можно будет разложить в массив для дальнейшей работы, РазложитьСтрокуВМассивПодстрок( ТекСтр, Символы.Таб).
Если Разделитель = Неопределено Тогда
Разделитель = Символы.Таб;
КонецЕсли;
Текст = Новый ЗаписьТекста(стрАдресФайла, КодировкаТекста.ANSI);
стрИменаКолонок = РазложитьСтрокуВМассивПодстрок(стрИменаКолонок, ",");
чКоличествоКолонок = стрИменаКолонок.Количество();
чНомерКолонки = 1;
Пока ВыборкаЗапроса.Следующий() Цикл
ОбработкаПрерыванияПользователя();
Для каждого стрИмяПоля Из стрИменаКолонок Цикл
Значение = ВыборкаЗапроса[стрИмяПоля];
Если ТипЗнч(Значение) = Тип("Дата") Тогда
Значение = Формат(Значение,"ДЛФ=D");
КонецЕсли;
стрРазделитель = ?(чКоличествоКолонок = чНомерКолонки, "", Разделитель);
Текст.ЗаписатьСтроку(Строка(Значение) + стрРазделитель);
чНомерКолонки = чНомерКолонки + 1;
КонецЦикла;
КонецЦикла;
Текст.Закрыть();
КонецПроцедуры
Процедура ВыгрузитьВыборкуЗапросаВТекстовыйФайл(ВыборкаЗапроса, стрИменаКолонок, стрАдресФайла, Разделитель = Неопределено) Экспорт
//Выгрузка результата запроса в текстовый файл с разделителями
//ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
//стрИменаКолонок - строка, имена колонок через запятую из которых нужно сохранить данные в файл + порядок колонок
//стрАдресФайла - строка
//Разделитель - по-умолчанию: Символы.Таб; можно использовать Символы. ВК (CR),ВТаб (VTab),НПП (NBSp),ПС (LF),ПФ (FF),Таб (Tab)
// При загрузке строку можно будет разложить в массив для дальнейшей работы, РазложитьСтрокуВМассивПодстрок( ТекСтр, Символы.Таб).
Если Разделитель = Неопределено Тогда
Разделитель = Символы.Таб;
КонецЕсли;
Текст = Новый ЗаписьТекста(стрАдресФайла, КодировкаТекста.ANSI);
стрИменаКолонок = РазложитьСтрокуВМассивПодстрок(стрИменаКолонок, ",");
чКоличествоКолонок = стрИменаКолонок.Количество();
чНомерКолонки = 1;
Пока ВыборкаЗапроса.Следующий() Цикл
ОбработкаПрерыванияПользователя();
Для каждого стрИмяПоля Из стрИменаКолонок Цикл
Значение = ВыборкаЗапроса[стрИмяПоля];
Если ТипЗнч(Значение) = Тип("Дата") Тогда
Значение = Формат(Значение,"ДЛФ=D");
КонецЕсли;
стрРазделитель = ?(чКоличествоКолонок = чНомерКолонки, "", Разделитель);
Текст.ЗаписатьСтроку(Строка(Значение) + стрРазделитель);
чНомерКолонки = чНомерКолонки + 1;
КонецЦикла;
КонецЦикла;
Текст.Закрыть();
КонецПроцедуры
// Сериализация через XDTO;
// 1. Создаем объект ЗаписьXML;
ЗаписьXML = Новый ЗаписьXML;
// 2. Указываем путь к сохраненному файлу;
ЗаписьXML.ОткрытьФайл(Объект.ПутьКФайлу + "\ВыгруженныеОбъекты.xml", "UTF-8");
// 3. Записываем объявление типа: <?xml version="1.0" encoding="UTF-8"?>;
ЗаписьXML.ЗаписатьОбъявлениеXML();
// 4. Записываем название корневого элемента;
ЗаписьXML.ЗаписатьНачалоЭлемента("РеализацияТоваров");
//для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
//они будут работать на все вложеные элементы
//пространство имен по-умолчанию
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
//пространства имен остальные префиксы
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
// 5. Сериализуем именно объекты (ссылки сериализуются по другому), что "ДОСТУПНО", то и сериализуется;
Для каждого ТекСтрока Из ТаблицаДокументов Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТекСтрока.Ссылка.ПолучитьОбъект());
КонецЦикла;
// 6. Конец корневого элемента;
ЗаписьXML.ЗаписатьКонецЭлемента();
// 7. Обязательно закрываем запись;
ЗаписьXML.Закрыть();
// Сериализация через XDTO;
// 1. Создаем объект ЗаписьXML;
ЗаписьXML = Новый ЗаписьXML;
// 2. Указываем путь к сохраненному файлу;
ЗаписьXML.ОткрытьФайл(Объект.ПутьКФайлу + "\ВыгруженныеОбъекты.xml", "UTF-8");
// 3. Записываем объявление типа: <?xml version="1.0" encoding="UTF-8"?>;
ЗаписьXML.ЗаписатьОбъявлениеXML();
// 4. Записываем название корневого элемента;
ЗаписьXML.ЗаписатьНачалоЭлемента("РеализацияТоваров");
//для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
//они будут работать на все вложеные элементы
//пространство имен по-умолчанию
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
//пространства имен остальные префиксы
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
// 5. Сериализуем именно объекты (ссылки сериализуются по другому), что "ДОСТУПНО", то и сериализуется;
Для каждого ТекСтрока Из ТаблицаДокументов Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТекСтрока.Ссылка.ПолучитьОбъект());
КонецЦикла;
// 6. Конец корневого элемента;
ЗаписьXML.ЗаписатьКонецЭлемента();
// 7. Обязательно закрываем запись;
ЗаписьXML.Закрыть();
Вставляет в модуль шаблоны областей по стандартам разработки 1С
Скрипт дублирует текущую строку или выделенный текст
Скрипт окружает выделенный фрагмент НСТР, либо создаёт шаблон НСТР, если ничего не выделено.
Если не используются стандартные механизмы сохранения СКД отчетами с использованием модулей общего назначения.
А так же процедура для заполнения реквизитов формы по переданной настройке компоновки данных (например, восстановленных из хранилища).
_ничего ...
Всем доброго дня.
Мы проект 42Clouds, предоставляем 1С в облаке в аренду. На рынке облачных технологий работаем с 2011 года. Уже на начальном этапе у нас было все необходимое для комфортной работы клиентов: техподдержка 24/7, собственные продукты и решения...
Предлагаются небольшие шаблоны кода, которые позволят вам сразу получить информацию об организациях и контрагентах в типовых базах
**Функция СведенияОЮрФизЛице(Компания, Период = '00010101', Знач БанковскийСчет = Неопределено, ПлатежВБюджет = Ложь, Гос...
// Выполняет копирование документа.
//
// Параметры:
// Приемник - Объект - Документ, в который копируются данные.
// Источник - Ссылка - Документ, из которого копируются данные.
// ИсключаемыеСвойства - Строка - Имена свойств, разделенные запятыми, которые необходимо исключить из заполнения.
// ИсключаемыеТабличныеЧасти - Строка - Имена табличных частей, разделенные запятыми, которые необходимо исключить из заполнения.
// ДанныеЗаполнения - Структура - Значение параметра процедуры ОбработкаЗаполнения, используется как основание для заполнения документа.
//
Процедура СкопироватьДокумент(Приемник, Источник, ИсключаемыеСвойства = "", ИсключаемыеТабличныеЧасти = "", ДанныеЗаполнения = Неопределено) Экспорт
ДанныеДокумента = Источник.Скопировать();
МетаданныеДокумента = Приемник.Метаданные();
ЗаполнитьЗначенияСвойств(Приемник, ДанныеДокумента, , ИсключаемыеСвойства);
// ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
ЭлектронныеТрудовыеКнижкиРасширенный.ПриЗаполненииДокументаИсправления(Приемник, Источник);
// Конец ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
Если ИсключаемыеТабличныеЧасти = "" Тогда
ИменаИсключаемыхТабличныхЧастей = Новый Массив;
Иначе
ИменаИсключаемыхТабличныхЧастей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаемыеТабличныеЧасти, , , Истина);
КонецЕсли;
Для каждого ТабличнаяЧастьДокумента Из МетаданныеДокумента.ТабличныеЧасти Цикл
Если ИменаИсключаемыхТабличныхЧастей.Найти(ТабличнаяЧастьДокумента.Имя) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Для Каждого СтрокаДокумента Из Источник[ТабличнаяЧастьДокумента.Имя] Цикл
НоваяСтрока = Приемник[ТабличнаяЧастьДокумента.Имя].Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДокумента);
КонецЦикла;
КонецЦикла;
Если ДанныеЗаполнения = Неопределено Тогда
ДанныеЗаполнения = Новый Структура;
ИсправлениеВТекущемПериоде = Ложь;
Иначе
ИсправлениеВТекущемПериоде = ДанныеЗаполнения.Свойство("ДопустимоИсправлениеВТекущемПериоде")
И ДанныеЗаполнения.ДопустимоИсправлениеВТекущемПериоде
И ВозможноИсправлениеТекущимПериодом(Источник);
КонецЕсли;
Если Не ИсправлениеВТекущемПериоде Тогда
// Период регистрации документа исправления необходимо увеличить.
Если ДанныеЗаполнения.Свойство("ИмяПериодРегистрации") Тогда
ИмяПериодРегистрации = ДанныеЗаполнения.ИмяПериодРегистрации;
ПериодРегистрацииИсправленногоДокумента = ДанныеЗаполнения.ПериодРегистрацииИсправленногоДокумента;
Иначе
МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("ПериодРегистрации");
Если МетаданныеРеквизита = Неопределено Тогда
МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("МесяцНачисления");
КонецЕсли;
Если МетаданныеРеквизита <> Неопределено Тогда
ИмяПериодРегистрации = МетаданныеРеквизита.Имя;
ПериодРегистрацииИсправленногоДокумента = ДанныеДокумента[ИмяПериодРегистрации];
Иначе
ИмяПериодРегистрации = Неопределено;
ПериодРегистрацииИсправленногоДокумента = Дата(1, 1, 1);
КонецЕсли;
КонецЕсли;
Если ИмяПериодРегистрации <> Неопределено Тогда
Значения = Новый Структура("Месяц");
ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(Значения);
Приемник[ИмяПериодРегистрации] = Макс(ДобавитьМесяц(ПериодРегистрацииИсправленногоДокумента, 1), Значения.Месяц);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Выполняет копирование документа.
//
// Параметры:
// Приемник - Объект - Документ, в который копируются данные.
// Источник - Ссылка - Документ, из которого копируются данные.
// ИсключаемыеСвойства - Строка - Имена свойств, разделенные запятыми, которые необходимо исключить из заполнения.
// ИсключаемыеТабличныеЧасти - Строка - Имена табличных частей, разделенные запятыми, которые необходимо исключить из заполнения.
// ДанныеЗаполнения - Структура - Значение параметра процедуры ОбработкаЗаполнения, используется как основание для заполнения документа.
//
Процедура СкопироватьДокумент(Приемник, Источник, ИсключаемыеСвойства = "", ИсключаемыеТабличныеЧасти = "", ДанныеЗаполнения = Неопределено) Экспорт
ДанныеДокумента = Источник.Скопировать();
МетаданныеДокумента = Приемник.Метаданные();
ЗаполнитьЗначенияСвойств(Приемник, ДанныеДокумента, , ИсключаемыеСвойства);
// ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
ЭлектронныеТрудовыеКнижкиРасширенный.ПриЗаполненииДокументаИсправления(Приемник, Источник);
// Конец ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
Если ИсключаемыеТабличныеЧасти = "" Тогда
ИменаИсключаемыхТабличныхЧастей = Новый Массив;
Иначе
ИменаИсключаемыхТабличныхЧастей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаемыеТабличныеЧасти, , , Истина);
КонецЕсли;
Для каждого ТабличнаяЧастьДокумента Из МетаданныеДокумента.ТабличныеЧасти Цикл
Если ИменаИсключаемыхТабличныхЧастей.Найти(ТабличнаяЧастьДокумента.Имя) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Для Каждого СтрокаДокумента Из Источник[ТабличнаяЧастьДокумента.Имя] Цикл
НоваяСтрока = Приемник[ТабличнаяЧастьДокумента.Имя].Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДокумента);
КонецЦикла;
КонецЦикла;
Если ДанныеЗаполнения = Неопределено Тогда
ДанныеЗаполнения = Новый Структура;
ИсправлениеВТекущемПериоде = Ложь;
Иначе
ИсправлениеВТекущемПериоде = ДанныеЗаполнения.Свойство("ДопустимоИсправлениеВТекущемПериоде")
И ДанныеЗаполнения.ДопустимоИсправлениеВТекущемПериоде
И ВозможноИсправлениеТекущимПериодом(Источник);
КонецЕсли;
Если Не ИсправлениеВТекущемПериоде Тогда
// Период регистрации документа исправления необходимо увеличить.
Если ДанныеЗаполнения.Свойство("ИмяПериодРегистрации") Тогда
ИмяПериодРегистрации = ДанныеЗаполнения.ИмяПериодРегистрации;
ПериодРегистрацииИсправленногоДокумента = ДанныеЗаполнения.ПериодРегистрацииИсправленногоДокумента;
Иначе
МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("ПериодРегистрации");
Если МетаданныеРеквизита = Неопределено Тогда
МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("МесяцНачисления");
КонецЕсли;
Если МетаданныеРеквизита <> Неопределено Тогда
ИмяПериодРегистрации = МетаданныеРеквизита.Имя;
ПериодРегистрацииИсправленногоДокумента = ДанныеДокумента[ИмяПериодРегистрации];
Иначе
ИмяПериодРегистрации = Неопределено;
ПериодРегистрацииИсправленногоДокумента = Дата(1, 1, 1);
КонецЕсли;
КонецЕсли;
Если ИмяПериодРегистрации <> Неопределено Тогда
Значения = Новый Структура("Месяц");
ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(Значения);
Приемник[ИмяПериодРегистрации] = Макс(ДобавитьМесяц(ПериодРегистрацииИсправленногоДокумента, 1), Значения.Месяц);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Параметр:
Кратное наименование ЮрЛица (Пример: ип Картошка, ООО Лягушатник, ао Репа)
Возвращаемое значение: (Пример: Индивидуальный предприниматель "Лягушонок")
Учитываются регистры ХХ верхний хх нижний и Хх (если пользователь пьяный и вводит вместо ЧУП, Чуп, чуп, что то такое: ЧУп, чуП - лучше доработать функцию, мне - лень);
&НаСервереБезКонтекста
Функция ЗаполнениеНаименованияСРасшифровкой(Знач ЮридическоеНаименование)
// Проверка;
Если ЮридическоеНаименование = "" Тогда
Возврат "";
КонецЕсли;
СтруктураРасшифровки = Новый Структура; // Ключ форма собственности - Значение расшифровка формы соб;
СтруктураРасшифровки.Вставить("ООО", "Общество с ограниченной ответственностью");
СтруктураРасшифровки.Вставить("ИП", "Индивидуальный предприниматель");
СтруктураРасшифровки.Вставить("ОАО", "Открытое акционерное общество");
СтруктураРасшифровки.Вставить("АО", "Акционерное общество");
СтруктураРасшифровки.Вставить("ЧУП", "Частное унитарное предприятие");
//СтруктураРасшифровки.Вставить("", );
МассивЧастей = СтрРазделить(ЮридическоеНаименование, " ", );
РасшифровкаЮрЛица = "";
МассивАббревиатурЮрЛица = Новый Массив;
Для каждого Часть Из МассивЧастей Цикл
Для каждого КлючИЗначение Из СтруктураРасшифровки Цикл
Если Трег(Часть) = КлючИЗначение.Ключ ИЛИ НРег(Часть) = КлючИЗначение.Ключ ИЛИ ВРег(Часть) = КлючИЗначение.Ключ Тогда
МассивАббревиатурЮрЛица.Добавить(Трег(Часть));
МассивАббревиатурЮрЛица.Добавить(НРег(Часть));
МассивАббревиатурЮрЛица.Добавить(ВРег(Часть));
РасшифровкаЮрЛица = КлючИЗначение.Значение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// чистим;
Для каждого Аббревиатура Из МассивАббревиатурЮрЛица Цикл
ЮридическоеНаименование = СтрЗаменить(ЮридическоеНаименование, Аббревиатура, "");
КонецЦикла;
ЮридическоеНаименование = СокрЛП(ЮридическоеНаименование);
ЮридическоеНаименование = Трег(ЮридическоеНаименование);
ПолноеНаименование = РасшифровкаЮрЛица + " """ + ЮридическоеНаименование + """" ;
Возврат ПолноеНаименование;
КонецФункции // ()
&НаСервереБезКонтекста
Функция ЗаполнениеНаименованияСРасшифровкой(Знач ЮридическоеНаименование)
// Проверка;
Если ЮридическоеНаименование = "" Тогда
Возврат "";
КонецЕсли;
СтруктураРасшифровки = Новый Структура; // Ключ форма собственности - Значение расшифровка формы соб;
СтруктураРасшифровки.Вставить("ООО", "Общество с ограниченной ответственностью");
СтруктураРасшифровки.Вставить("ИП", "Индивидуальный предприниматель");
СтруктураРасшифровки.Вставить("ОАО", "Открытое акционерное общество");
СтруктураРасшифровки.Вставить("АО", "Акционерное общество");
СтруктураРасшифровки.Вставить("ЧУП", "Частное унитарное предприятие");
//СтруктураРасшифровки.Вставить("", );
МассивЧастей = СтрРазделить(ЮридическоеНаименование, " ", );
РасшифровкаЮрЛица = "";
МассивАббревиатурЮрЛица = Новый Массив;
Для каждого Часть Из МассивЧастей Цикл
Для каждого КлючИЗначение Из СтруктураРасшифровки Цикл
Если Трег(Часть) = КлючИЗначение.Ключ ИЛИ НРег(Часть) = КлючИЗначение.Ключ ИЛИ ВРег(Часть) = КлючИЗначение.Ключ Тогда
МассивАббревиатурЮрЛица.Добавить(Трег(Часть));
МассивАббревиатурЮрЛица.Добавить(НРег(Часть));
МассивАббревиатурЮрЛица.Добавить(ВРег(Часть));
РасшифровкаЮрЛица = КлючИЗначение.Значение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// чистим;
Для каждого Аббревиатура Из МассивАббревиатурЮрЛица Цикл
ЮридическоеНаименование = СтрЗаменить(ЮридическоеНаименование, Аббревиатура, "");
КонецЦикла;
ЮридическоеНаименование = СокрЛП(ЮридическоеНаименование);
ЮридическоеНаименование = Трег(ЮридическоеНаименование);
ПолноеНаименование = РасшифровкаЮрЛица + " """ + ЮридическоеНаименование + """" ;
Возврат ПолноеНаименование;
КонецФункции // ()
&НаКлиенте
Функция Биометрия()
#Если МобильноеПриложениеКлиент Тогда
Если ТелефонПоддерживаетБиометрическийВход() Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ТелефонПоддерживаетБиометрическийВходЗавершение", ЭтотОбъект), "Использовать биометрию для входа", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
#КонецЕсли
КонецФункции
&НаКлиенте
Процедура ТелефонПоддерживаетБиометрическийВходЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПровестиБиометрическийВход();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПровестиБиометрическийВход()
#Если МобильноеПриложениеКлиент Тогда
Попытка
СпособПроверки = СпособДополнительнойПроверкиПользователя.ТолькоБиометрическая;
Если ДополнительнаяПроверкаПользователя.ПоддерживаетсяПроверка(СпособПроверки) Тогда
ДопПараметры = Новый Структура;
ОписаниеОповещения = Новый ОписаниеОповещения("ПровестиБиометрическийВходЗавершение", ЭтотОбъект, ДопПараметры);
ДополнительнаяПроверкаПользователя.НачатьПроверку(СпособПроверки, "Введите код", ОписаниеОповещения);
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПровестиБиометрическийВходЗавершение(ОтмененоПользователем, ДополнительныеПараметры) Экспорт
Попытка
Если НЕ ОтмененоПользователем Тогда
Если ИспользоватьБиометрию = Ложь Тогда
УстановитьИспользоватьБиометрию(Истина);
Иначе
АвторизацияВыполнена = Истина;
Структура = Новый Структура("ВходВыполнен", АвторизацияВыполнена);
ОбщегоНазначенияКлиент.ЗвукУспешногоВвода();
ЭтаФорма.Закрыть(Структура);
КонецЕсли;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ТелефонПоддерживаетБиометрическийВход()
#Если МобильноеПриложениеКлиент Тогда
Попытка
Если ДополнительнаяПроверкаПользователя.ПоддерживаетсяПроверка(СпособДополнительнойПроверкиПользователя.БиометрическаяИлиВводПароля) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
#КонецЕсли
КонецФункции
&НаКлиенте
Функция Биометрия()
#Если МобильноеПриложениеКлиент Тогда
Если ТелефонПоддерживаетБиометрическийВход() Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ТелефонПоддерживаетБиометрическийВходЗавершение", ЭтотОбъект), "Использовать биометрию для входа", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
#КонецЕсли
КонецФункции
&НаКлиенте
Процедура ТелефонПоддерживаетБиометрическийВходЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПровестиБиометрическийВход();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПровестиБиометрическийВход()
#Если МобильноеПриложениеКлиент Тогда
Попытка
СпособПроверки = СпособДополнительнойПроверкиПользователя.ТолькоБиометрическая;
Если ДополнительнаяПроверкаПользователя.ПоддерживаетсяПроверка(СпособПроверки) Тогда
ДопПараметры = Новый Структура;
ОписаниеОповещения = Новый ОписаниеОповещения("ПровестиБиометрическийВходЗавершение", ЭтотОбъект, ДопПараметры);
ДополнительнаяПроверкаПользователя.НачатьПроверку(СпособПроверки, "Введите код", ОписаниеОповещения);
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПровестиБиометрическийВходЗавершение(ОтмененоПользователем, ДополнительныеПараметры) Экспорт
Попытка
Если НЕ ОтмененоПользователем Тогда
Если ИспользоватьБиометрию = Ложь Тогда
УстановитьИспользоватьБиометрию(Истина);
Иначе
АвторизацияВыполнена = Истина;
Структура = Новый Структура("ВходВыполнен", АвторизацияВыполнена);
ОбщегоНазначенияКлиент.ЗвукУспешногоВвода();
ЭтаФорма.Закрыть(Структура);
КонецЕсли;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ТелефонПоддерживаетБиометрическийВход()
#Если МобильноеПриложениеКлиент Тогда
Попытка
Если ДополнительнаяПроверкаПользователя.ПоддерживаетсяПроверка(СпособДополнительнойПроверкиПользователя.БиометрическаяИлиВводПароля) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
#КонецЕсли
КонецФункции
FTP_Cоединение.УстановитьТекущийКаталог("."); - строковый параметр означает корневой каталог, можно указать папку "\НазваниеПапки";
FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json"); - второй параметр, название файла с расширением (.txt, .csv, .xml);
Директива компиляции - &НаСервере
// Параметры соединения;
Сервер = "00.000.000.000";
Порт = 21;
ИмяПользователя = "u00000";
ПарольПользователя = "86731db349";
// Загрузка на FTP;
FTP_Cоединение = Новый FTPСоединение(Сервер, Порт, ИмяПользователя, ПарольПользователя,,, 20);
Попытка
FTP_Cоединение.УстановитьТекущийКаталог(".");
FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json"); // представим что отсюда сайт подгружает данные;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ".JSON файл, находящийся в каталоге: " + ПутьКФайлу + " был успешно загружен на FTP_сервер!";
Сообщение.Сообщить();
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось подключиться к FTP_серверу! Описание ошибки: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
// Параметры соединения;
Сервер = "00.000.000.000";
Порт = 21;
ИмяПользователя = "u00000";
ПарольПользователя = "86731db349";
// Загрузка на FTP;
FTP_Cоединение = Новый FTPСоединение(Сервер, Порт, ИмяПользователя, ПарольПользователя,,, 20);
Попытка
FTP_Cоединение.УстановитьТекущийКаталог(".");
FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json"); // представим что отсюда сайт подгружает данные;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ".JSON файл, находящийся в каталоге: " + ПутьКФайлу + " был успешно загружен на FTP_сервер!";
Сообщение.Сообщить();
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось подключиться к FTP_серверу! Описание ошибки: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Удаляет префикс, по типу "ТДУТ-", чистит лидирующие нули;
&НаКлиенте
Функция ФорматироватьНомерДокуметаНаКлиенте(Знач НомерДокумента)
НомерДокументаСтрокой = Строка(НомерДокумента);
НомерДокументаСтрокой = СтрЗаменить(НомерДокументаСтрокой, "-", "");
ПозицияПервогоНуля = СтрНайти(НомерДокументаСтрокой, "0", НаправлениеПоиска.СНачала);
НомерДокументаСтрокой = Сред(НомерДокументаСтрокой, ПозицияПервогоНуля, СтрДлина(НомерДокументаСтрокой)); //символы = цифры;
Счетчик = 1;
Пока Лев(НомерДокументаСтрокой, 1) = "0" Цикл
НомерДокументаСтрокой = Сред(НомерДокументаСтрокой, Счетчик + 1);
КонецЦикла;
Возврат НомерДокументаСтрокой;
КонецФункции // ()
&НаКлиенте
Функция ФорматироватьНомерДокуметаНаКлиенте(Знач НомерДокумента)
НомерДокументаСтрокой = Строка(НомерДокумента);
НомерДокументаСтрокой = СтрЗаменить(НомерДокументаСтрокой, "-", "");
ПозицияПервогоНуля = СтрНайти(НомерДокументаСтрокой, "0", НаправлениеПоиска.СНачала);
НомерДокументаСтрокой = Сред(НомерДокументаСтрокой, ПозицияПервогоНуля, СтрДлина(НомерДокументаСтрокой)); //символы = цифры;
Счетчик = 1;
Пока Лев(НомерДокументаСтрокой, 1) = "0" Цикл
НомерДокументаСтрокой = Сред(НомерДокументаСтрокой, Счетчик + 1);
КонецЦикла;
Возврат НомерДокументаСтрокой;
КонецФункции // ()