Вывод в поле Наименование справочника Штатное список значений из справочника Подразделения? Есть два справочника Штатное и Подразделения. В справочнике Штатное есть автоматически генерируемое поле Наименование. Как программно сделать так чтобы в поле Наименование справочника Штатное выводились списком значений из поля Наименование справочника Подразделения? Я только начал изучать программирование в 1С. Вариант с добавлением в код модуля списка выбора я уже реализовал. Но сами понимаете что это не то. Посмотрите код. Может у кого то решение есть лучше.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Наименование.РежимВыбораИзСписка = Истина;
Элементы.Наименование.СписокВыбора.Добавить("Администрация");
Элементы.Наименование.СписокВыбора.Добавить("Бухгалтерия");
Элементы.Наименование.СписокВыбора.Добавить("Отдел ИТ");
КонецПроцедуры
&НаКлиенте
Процедура ТЧШтатноеЕдиницыПриИзменении(Элемент)
РассчитатьСуммуТЧШтатное();
КонецПроцедуры
&НаКлиенте
Процедура ТЧШтатноеОкладПриИзменении(Элемент)
РассчитатьСуммуТЧШтатное();
КонецПроцедуры
&НаКлиенте
Процедура ТЧШтатноеСуммаПриИзменении(Элемент)
Стр = Элементы.ТЧШтатное.ТекущиеДанные;
Если Стр.Единицы=0 И Стр.Оклад=0 Тогда
ИначеЕсли Стр.Единицы=0 Тогда
Стр.Единицы=Стр.Сумма / Стр.Оклад;
ИначеЕсли Стр.Оклад=0 Тогда
Стр.Оклад=Стр.Сумма / Стр.Единицы;
Иначе
Стр.Оклад=Стр.Сумма / Стр.Единицы;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСуммуТЧШтатное()
Стр = Элементы.ТЧШтатное.ТекущиеДанные;
Стр.Сумма = Стр.Единицы * Стр.Оклад;
КонецПроцедуры
&НаКлиенте
Процедура ЕдиницыИтогПриИзменении(Элемент)
Стр = Элементы.Штатное.ТекущиеДанные;
Стр.ЕдиницыИтог = Стр.Единицы + 1;
КонецПроцедуры
&НаКлиенте
Процедура СуммаИтогПриИзменении(Элемент)
Стр = Элементы.Штатное.ТекущиеДанные;
Стр.СуммаИтог = Стр.Сумма + 1;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Объект.ЕдиницыИтог = Объект.ТЧШтатное.Итог("Единицы");
Объект.СуммаИтог = Объект.ТЧШтатное.Итог("Сумма");
КонецПроцедуры
Категория:
Справочники Отправка почты через Mail.ru с использованием технологии шифрования SSL Часто клиенты просят сделать автоматическую отправку счетов или отчетов на электронную почту, ниже приведены примеры кода для разных версий 1С:
Код 1C v 8.3
Функция ПолучитьПрофильПочты()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль. АдресСервераSMTP = "smtp.mail.ru" ;
Профиль. АдресСервераPOP3 = "pop.mail.ru" ;
Профиль. ПортPOP3 = 995 ;
Профиль. ПортSMTP = 465 ;
Профиль. Пользователь = "s_v@inbox.ru" ;
Профиль. Пароль = "8mFTnDjC4KftTzh" ;
Профиль. ПользовательSMTP = "s_v@inbox.ru" ;
Профиль. ПарольSMTP = "8mFTnDjC4KftTzh" ;
Профиль. АутентификацияSMTP = СпособSMTPАутентификации. Login;
Профиль. ИспользоватьSSLPOP3 = Истина ;
Профиль. ИспользоватьSSLSMTP = Истина ;
Возврат Профиль;
КонецФункции
Процедура ОсновныеДействияФормыСчетОтправитьНаПочту(Кнопка)
Если ЗначениеЗаполнено( Ответственный. ПочтаДляОтправкиСчета) Тогда
Почта = Новый ИнтернетПочта;
Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо. Тексты. Добавить( "В приложении счет" ) ;
Текст. ТипТекста = ТипТекстаПочтовогоСообщения. ПростойТекст;
Письмо. Тема = Строка( Ссылка) ;
Письмо. Отправитель = "s_vmeste@inbox.ru" ;
Письмо. ИмяОтправителя = "1С" ;
Письмо. Получатели. Добавить( Ответственный. ПочтаДляОтправкиСчета) ;
врфайл= ПолучитьИмяВременногоФайла( "pdf" ) ;
текТабдок= СчетФаксимилеТовары( ) ;
текТабдок. Записать( врфайл, ТипФайлаТабличногоДокумента. PDF) ;
Письмо. Вложения. Добавить( врфайл) ;
Попытка
Почта. Подключиться( ПолучитьПрофильПочты( ) ) ; Почта. Послать( Письмо) ; Предупреждение( "Письмо отправлено" , 3 ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
Почта. Отключиться( ) ;
Письмо. Вложения. Очистить( ) ;
Иначе
Предупреждение( "В настройках ответственного не указана почта для отправки счета" ) ;
КонецЕсли ;
КонецПроцедуры
С версиями 8.2 сложнее, так как все почтовые сервисы перешли на SSL, а медоты:
Код 1C v 8.3 Профиль. ИспользоватьSSLPOP3 = Истина ;
Профиль. ИспользоватьSSLSMTP = Истина ;
появились только в 8.3.1 , остается использовать stunnel или CDO :
Код 1C v 8.2 УП
Функция ПослатьПоПочте(Знач Адрессаты, ТемаСообщения = "" ,ТекстСообщения = "" ,СписокВложений = "" ) Экспорт
Оправитель = "s_v@inbox.ru" ;
Пароль = "8mFTnDjC4KftTzh" ;
loConfig = Новый COMОбъект( "CDO.Configuration" ) ;
loCdoMessage = Новый COMОбъект( "CDO.Message" ) ;
loCdoMessage. Configuration = loConfig;
loCdoMessage. From = Строка( "1С <" + Оправитель+ ">" ) ;
loCdoMessage. To = Адрессаты;
loCdoMessage. Subject = ? ( ТемаСообщения= "" , "1С" , ТемаСообщения) ;
loCdoMessage. TextBody = "1C" ;
HTMLBody = "<html>
|<head>
|<meta content="" text/html; charset=Windows-1251"" http-equiv="" content-type"" >
|<title> Тестовое сообщение </title>
|</head>
|<body>
|<h4>" + ТекстСообщения + "</h4>
|<p></p>
|</body>
|</html>" ;
loCdoMessage. HTMLBody = HTMLBody;
Если ТипЗнч( СписокВложений) = Тип( "Строка" ) И Не СписокВложений = "" Тогда
Попытка
loCdoMessage. AddAttachment( СписокВложений) ;
Исключение
КонецПопытки ;
ИначеЕсли ТипЗнч( СписокВложений) = Тип( "СписокЗначений" ) Тогда
Для каждого ПутьКВложению Из СписокВложений Цикл
Попытка
loCdoMessage. AddAttachment( ПутьКВложению. Значение) ;
Исключение
КонецПопытки ;
КонецЦикла ;
КонецЕсли ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ) . Value = 2 ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ) . Value = "smtp.mail.ru" ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) . Value = "465" ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ) . Value = 1 ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ) . Value = Оправитель;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ) . Value = Пароль;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ) . Value = 1 ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" ) . Value = 60 ;
loConfig. Fields. Update( ) ;
Попытка
loCdoMessage. Send( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Возврат Ложь ;
КонецПопытки ;
КонецФункции
Процедура ОсновныеДействияФормыСчетТовары(Кнопка)
Если ЗначениеЗаполнено( Менеджер. ПочтаДляОтправкиСчета) Тогда
врфайл= ПолучитьИмяВременногоФайла( "xls" ) ;
текТабдок= СчетФаксимилеТовары( ) ;
текТабдок. Записать( врфайл, ТипФайлаТабличногоДокумента. XLS) ;
ПослатьПоПочте( Менеджер. ПочтаДляОтправкиСчета, Строка( Ссылка) , "Счет в приложении" , врфайл) ;
Предупреждение( "Письмо отправлено" , 3 ) ;
Иначе
Предупреждение( "В настройках ответственного не указана почта для отправки счета" ) ;
КонецЕсли ;
КонецПроцедуры
Через stunnel в 1С код, менять не нужно, только установить программу и изменить настройки подключения к почтовому ящику
Скачиваем stunnel c официального сайта (stunnel.org) и запускаем инсталятор, жмем yes при установке спросит страну и ваши данные, это нужно для создания сертификата на вашем компьютере.
После запуска в трее появится его иконка, правой клавишей и редактировать edit configuration
В блокноте откроется файл настроек, там будет пример для gmail дополняем или заменяем его следующим:
Код Batch File (DOS, CMD, BAT) [gmail-pop3]
client = yes
accept = 127 .0 .0 .1 :10110
connect = pop.gmail.com:995
[gmail-imap]
client = yes
accept = 127 .0 .0 .1 :10143
connect = imap.gmail.com:993
[gmail-smtp]
client = yes
accept = 127 .0 .0 .1 :10025
connect = smtp.gmail.com:465
[yandex-pop3]
client = yes
accept = 127 .0 .0 .1 :20110
connect = pop.yandex.ru:995
[yandex-imap]
client = yes
accept = 127 .0 .0 .1 :20143
connect = imap.yandex.ru:993
[yandex-smtp]
client = yes
accept = 127 .0 .0 .1 :20025
connect = smtp.yandex.ru:465
[mail-pop3]
client = yes
accept = 127 .0 .0 .1 :30110
connect = pop.mail.ru:995
[mail-imap]
client = yes
accept = 127 .0 .0 .1 :30143
connect = imap.mail.ru:993
[mail-smtp]
client = yes
accept = 127 .0 .0 .1 :30025
connect = smtp.mail.ru:465
Сохраняем файл и делаем Reload configuration
В настройка 1С меняем порты для работы
gmail
pop3 10110
imap 10143
smtp 10025
yandex
pop3 20110
imap 20143
smtp 20025
mail
pop3 30110
imap 30143
smtp 30025
Если в коде прописано, то:
Код 1C v 8.х Функция ПолучитьПрофильПочты()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль. АдресСервераSMTP = "localhost" ;
Профиль. АдресСервераPOP3 = "localhost" ;
Профиль. ПортPOP3 = 30110 ;
Профиль. ПортSMTP = 30025 ;
Профиль. Пользователь = "s_v@inbox.ru" ;
Профиль. Пароль = "8mFTnDjC4KftTzh" ;
Профиль. ПользовательSMTP = "s_v@inbox.ru" ;
Профиль. ПарольSMTP = "8mFTnDjC4KftTzh" ;
Профиль. АутентификацияSMTP = СпособSMTPАутентификации. Login;
Возврат Профиль;
КонецФункции
Все, можно отправлять и проверять работу через консоль Show log window в меню
P.S. Почтовый ящик в примерах не рабочий, как пример
Категория:
Работа с Интернет, Почтой (Mail), FTP Добавление дополнительных отчетов и обработок в управляемом приложении Для добавления отчета или обработки нужно в модуле добавить Функцию СведенияОВнешнейОбработке()
Код 1C v 8.2 УП Функция СведенияОВнешнейОбработке() Экспорт
// Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
ПараметрыРегистрации = Новый Структура;
// Объявим еще одну переменную, которая нам потребуется ниже
МассивНазначений = Новый Массив;
// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
// Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
// Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Наименование", "Выгрузка проводок в БП 2.0");
// Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
// Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Обработка 'Выгрузка проводок в БП 2.0'");
// Создадим таблицу команд (подробнее смотрим ниже)
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Выгрузка проводок в БП 2.0",
"Выгрузкапроводокв БП20",
"ОткрытиеФормы", //Использование. Варианты: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
Ложь,//Показывать оповещение. Варианты Истина, Ложь
"");//Модификатор
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
После сохранения приступим к добавлению в программу:
Ставим галку Дополнительные отчеты и обработки
Открываем дополнительные отчеты и обработки и жмем создать, появляется окно выбора файла, после выбора:
Укажите Размещение (в каком разделе отображать данный отчет/обработку) и в списке в колонке Быстрый доступ выберите пользователей, которым будет доступен данный отчет/обработка.
Если при добавлении вы получаете ошибку:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2621)}: Поле объекта не обнаружено (ХранилищеВариантов)
Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено Тогда
То нужно заменить в модуле объекта, в ф ункции СведенияОВнешнейОбработке() :
Код 1C v 8.2 УП РегистрационныеДанные. Вставить( "Вид" , "ДополнительнаяОтчет" ) ;
на:
РегистрационныеДанные. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
Категория:
Внешние печатные формы, отчеты и обработк�… Google maps : вывод точек на карту и режим панорамы В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают!
Для клиента нужно было сделать вывод объектов на карту
С возможностью просмотра панорамы:
Основной HTML код карты хранится в макете:
Код VBS <!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" >
<style type="text/css" >
html { height: 100 % }
body { height: 100 %; margin: 0 px; padding: 0 px }
#map { height: 100 % }
</style>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3.9&sensor=false" ></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" ></script>
<script type="text/javascript" src="http://www.sitedev.by/lab/markerclusterer/markerclusterer.js" ></script>
<script type="text/javascript" >
var latlng;
var markers = [];
var myMap;
var index = 1 ;
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var infoWindow = new google.maps.InfoWindow;
var clusterer, mcOptions;
var trafficLayer = new google.maps.TrafficLayer();
var trafficOn = false ;
var noclick = false ;
var PointArray = [];
var polygons = [];
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
latlng = new google.maps.LatLng(55.75 , 37.62 );
var myOptions = {
zoom: 12 ,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
disableDoubleClickZoom: true ,
panControl: true ,
zoomControl: true ,
mapTypeControl: true ,
scaleControl: true ,
streetViewControl: true ,
overviewMapControl: true
};
myMap = new google.maps.Map(document.getElementById("map" ),
myOptions);
google.maps.event.addListener(myMap,
noclick = true ;
document.getElementById(
document.getElementById(
});
google.maps.event.addListener(myMap,
infoWindow.close();
if (!noclick) {
addMarker(event.latLng);
}else {
noclick = false ;
}
});
mcOptions = {gridSize: 3 , maxZoom: 15 };
clusterer = new MarkerClusterer(myMap, markers, mcOptions);
//отображение кнопки управления трафиком - все спер с примера, только подцепил свою функцию
var trafficControlDiv = document.createElement(
trafficControlDiv.style.padding =
// Set CSS for the control border
var controlUI = document.createElement(
controlUI.style.backgroundColor =
controlUI.style.borderStyle =
controlUI.style.borderWidth =
controlUI.style.cursor =
controlUI.style.textAlign =
controlUI.title =
trafficControlDiv.appendChild(controlUI);
// Set CSS for the control interior
var controlText = document.createElement(
controlText.style.fontFamily =
controlText.style.fontSize =
controlText.style.paddingLeft =
controlText.style.paddingRight =
controlText.innerHTML =
controlUI.appendChild(controlText);
google.maps.event.addDomListener(controlUI,
if (!trafficOn){
trafficOn = true ;
trafficLayer.setMap(myMap);
}else {
trafficOn = false ;
trafficLayer.setMap(null );
}
});
trafficControlDiv.index = 1 ;
myMap.controls[google.maps.ControlPosition.TOP_RIGHT].push(trafficControlDiv);
};
//добавляем маркер и отправляем в массив
function addMarker(location) {
marker = new google.maps.Marker({
position: location,
map: myMap,
title:
});
infoWindow.setContent(marker.title);
infoWindow.open(myMap, marker);
google.maps.event.addListener(marker,
var mark = this;
var latLng = mark.getPosition();
infoWindow.setContent(mark.title);
infoWindow.open(myMap, mark);});
markers.push(marker);
index++;
document.getElementById(
document.getElementById(
}
function calcRoute(options) {
//вытягиваем из массива переданных параметров значения
//и преобразуем их в формат LatLng
var option1 = options[0 ];//начальная точка
var option2 = options[1 ];//промежуточные точки
var option3 = options[2 ];//конечная точка
var start = new google.maps.LatLng(option1[0 ], option1[1 ]); //первый
var end = new google.maps.LatLng(option3[0 ], option3[1 ]); //последний
//получаем транзитные точки
var waypts = [];
if (option2.length > 0 ) {
for (var i = 0 , l = option2.length; i < l; i++) {
temp = option2[i];
Qcoord = new google.maps.LatLng(temp[0 ], temp[1 ])
waypts.push({
location:Qcoord,
stopover:true
});
}
}
//return;
var request = {
origin: start,
destination: end ,
waypoints: waypts,
optimizeWaypoints: true ,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request , function (response , status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setMap(myMap);
directionsDisplay.setDirections(response );
var total = 0 ;
var myroute = response .routes[0 ];
for (i = 0 ; i < myroute.legs.length; i++) {
total += myroute.legs[i].distance.value;
}
total = total / 1000 ;
document.getElementById(
//генерация события для перехвата в 1 С
var evt = document.createEventObject();
document.body.fireEvent(
}else {
alert(status);
}
});
}
function Reset(){
directionsDisplay.setMap(null );
for (var i = 0 ; i < markers.length; i++) {
markers[i].setMap(null );
}
markers = [];
index = 1 ;
//обнуляем кластер маркеров
clusterer.clearMarkers();
for (var i = 0 ; i < polygons.length; i++) {
polygons[i].setMap(null );
}
polygons = [];
PointArray = [];
}
function FindAdres(Adres){
Reset();
var geocoder = new google.maps.Geocoder();
geocoder.geocode( {
if (status == google.maps.GeocoderStatus.OK) {
latlng = results[0 ].geometry.location;
myMap.panTo(latlng);
marker = new google.maps.Marker({
map: myMap,
position: latlng,
animation: google.maps.Animation.BOUNCE,
title:Adres
});
markers.push(marker);
infoWindow.setContent(marker.title);
infoWindow.open(myMap, marker);
} else {
alert("Ничего не найдено: " + status);
}
});
}
function ReverseSearchAdres(CoordX, CoordY, Adres){
Reset();
latlng = new google.maps.LatLng(CoordX, CoordY);
myMap.panTo(latlng);
var marker = new google.maps.Marker({
map: myMap,
position: latlng,
animation: google.maps.Animation.BOUNCE,
title:Adres
});
markers.push(marker);
infoWindow.setContent(marker.title);
infoWindow.open(myMap, marker);
}
function addToPointArray(CoordX, CoordY, ID, IconT, Text){
var latLng = new google.maps.LatLng(CoordX, CoordY);
var point = new google.maps.Marker({
PointArray.push(point);
}
function drawCluster(){
clusterer.addMarkers(PointArray);
//myMap.geoObjects.add(clusterer);
}
function createPolygon(ArrayPoint, Name, color) {
//создаем массив координат вершин многоугольника
var paths = [];
for (var i = 0 , l = ArrayPoint.length; i < l; i++) {
var temp = ArrayPoint[i];
Qcoord = new google.maps.LatLng(temp[0 ], temp[1 ])
paths.push(Qcoord);
};
// Создаем многоугольник
myPolygon = new google.maps.Polygon({
paths: paths,
strokeColor: color,
strokeOpacity: 0.6 ,
strokeWeight: 5 ,
fillColor: "#0000FF"
});
myPolygon.setMap(myMap);
polygons.push(myPolygon);
}
function WebClientClick() {
//очистка перед кликом координат, иначе после клика в упр. формах идет считывание координат
document.getElementById(
document.getElementById(
var WebClientOperation = document.getElementById("WebClientOperation" ).value;
//alert(WebClientOperation);
switch (WebClientOperation) {
case "0" : // ничего не делаем
var a = 1 ;
default : // запускаем функцию
eval (WebClientOperation);
}
document.getElementById(
}
</script>
</head>
<body onload="initialize()" >
<div id="map" style="width:100%; height:100%" ></div>
<input type="hidden" id="CoordX" name="CoordX" value="0" ></input>
<input type="hidden" id="CoordY" name="CoordY" value="0" ></input>
<input type="hidden" id="RouteInfo" name="RouteInfo" value="" ></input>
<input type="hidden" id="WebClientOperation" name="WebClientOperation" value="0" ></input>
<input type="hidden" id="WebClient" name="WebClient" onclick="WebClientClick();" ></input>
</body>
</html>
Код вывода карты:
Код 1C v 8.х Процедура ИнициализироватьКарту()
ПутьКФайлу = КаталогВременныхФайлов( ) + "Карта.html" ;
Ф = новый Файл( ПутьКФайлу) ;
Если Ф. Существует( ) Тогда
УдалитьФайлы( ПутьКФайлу) ;
КонецЕсли ;
Т = новый ТекстовыйДокумент;
ТД = ЭтотОбъект. ПолучитьМакет( "МакетГугл" ) ;
Т. УстановитьТекст( ТД. ПолучитьТекст( ) ) ;
Т. Записать( ПутьКФайлу) ;
ЭлементыФормы. Эксплорер. Перейти( ПутьКФайлу) ;
КонецПроцедуры
Процедура ОчиститьКарту()
ЭлементыФормы. Эксплорер. Документ. parentWindow. eval( "Reset()" ) ;
КонецПроцедуры
Процедура ПриОткрытии()
ИнициализироватьКарту( ) ;
КонецПроцедуры
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
ОчиститьКарту( ) ;
СписокВидов = Новый СписокЗначений;
Для Каждого стр из ВыборВывода Цикл
если стр. пометка тогда СписокВидов. Добавить( стр. наименование) ; КонецЕсли ;
КонецЦикла ;
табАдресов. Очистить( ) ;
табАдресов = получитьтабАдресов( СписокВидов) ;
табУникальныхАдресов = табАдресов. скопировать( ) ;
табУникальныхАдресов. свернуть( "Уник" ) ;
тзДанных = табАдресов. скопировать( ) ;
табАдресов. очистить( ) ;
Для Каждого стр из табУникальныхАдресов Цикл
Отбор = Новый Структура( ) ;
Отбор. Вставить( "Уник" , стр. Уник) ;
Строки = тзДанных. НайтиСтроки( Отбор) ;
НовСтр = табАдресов. добавить( ) ;
НовСтр. уник = стр. уник;
Если Строки. Количество( ) > 0 Тогда
для Каждого тздстр из Строки Цикл
НовСтр. Адрес = тздстр. Адрес;
НовСтр. КД = тздстр. КД;
НовСтр. КШ = тздстр. КШ;
НовСтр. ВидОбъекта = тздстр. ВидОбъекта;
НовСтр. Наименование= Строка( НовСтр. Наименование) + Строка( тздстр. Наименование) + "; " ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
ЭлементыФормы. табАдресов. СоздатьКолонки( ) ;
ВыборМасштаба = "50%" ;
ВыборРегиона = "Москва" ;
ЭлементыФормы. Надпись24 . Заголовок = "Точек: " + Строка( табАдресов. количество( ) ) ;
Кол = табАдресов. Количество( ) ;
Индекс = 0 ;
Для Каждого ТекСтрока Из табАдресов Цикл Индекс = Индекс + 1 ; Если НЕ ЗначениеЗаполнено( ТекСтрока. КД) тогда Продолжить; КонецЕсли ;
Широта = формат( ТекСтрока. КШ, "ЧРД=." ) ;
Долгота = формат( ТекСтрока. КД, "ЧРД=." ) ;
СодержимоеТочки = СокрЛП( ТекСтрока. ВидОбъекта) + ": " + СокрЛП( ТекСтрока. адрес) ;
Попытка
ЭлементыФормы. Эксплорер. Документ. parentWindow. eval( "addToPointArray(" + Широта + "," + Долгота + ", '" + Строка( Индекс) + "', '" + СокрЛП( ТекСтрока. ВидОбъекта. ПутьКИконке) + "', "" " + СодержимоеТочки + """ );" ) ;
Исключение
Сообщить( "addToPointArray(" + Широта + "," + Долгота + ", '" + Строка( Индекс) + "', '" + СокрЛП( ТекСтрока. ВидОбъекта. ПутьКИконке) + "', "" " + СодержимоеТочки + """ );" , СтатусСообщения. Внимание) ;
КонецПопытки ;
Состояние( "Вывожу на карту " + Индекс + " из " + кол) ;
КонецЦикла ;
ЭлементыФормы. Эксплорер. Документ. parentWindow. eval( "drawCluster();" ) ;
КонецПроцедуры
Вырванная из конфигурации обработка GMaps.rar
Можно ее использовать как макет для создания обработки под свои требования.
Пример автоматизации в котором это использовалось.
Категория:
Географическая схема Как получить за период все отпуска и больничные по сотруднику? Задача: получить в ЗУП 2.5 за определенный период все отпуска и больничные по сотруднику
вот пример запроса и кода:
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос. Текст = "
|ВЫБРАТЬ
| ОсновныеНачисленияРаботниковОрганизаций.ПериодДействия,
| ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
| ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец,
| ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета,
| ОсновныеНачисленияРаботниковОрганизаций.Сотрудник,
| ОсновныеНачисленияРаботниковОрганизаций.Результат,
| ОсновныеНачисленияРаботниковОрганизаций.НормаДней,
| ОсновныеНачисленияРаботниковОрганизаций.НормаЧасов,
| ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДней,
| ОсновныеНачисленияРаботниковОрганизаций.ОтработаноЧасов,
| ОсновныеНачисленияРаботниковОрганизаций.ОтработаноДнейПоПятидневке
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
|ГДЕ
| ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидРасчета)
| И ОсновныеНачисленияРаботниковОрганизаций.Сотрудник =Сотрудник
| И ОсновныеНачисленияРаботниковОрганизаций.ПериодДействия МЕЖДУДатаН ИДатаК
|" ;
кзСписокВидРасчета = Новый СписокЗначений;
кзСписокВидРасчета. Добавить( ПланыВидовРасчета. ОсновныеНачисленияОрганизаций. ОплатаПоСреднемуОтпКалендарныеДни) ;
кзСписокВидРасчета. Добавить( ПланыВидовРасчета. ОсновныеНачисленияОрганизаций. ОплатаПоСреднемуБЛ) ;
Запрос. УстановитьПараметр( "ВидРасчета" , кзСписокВидРасчета) ;
Запрос. УстановитьПараметр( "ДатаК" , КонПериода) ;
Запрос. УстановитьПараметр( "ДатаН" , НачалоМесяца( КонПериода) ) ;
Запрос. УстановитьПараметр( "Сотрудник" , Сотрудник) ;
РезультатЧасовОтпускИБолн = Запрос. Выполнить( ) . Выбрать( ) ;
Категория:
1С Зарплата и Управление Персоналом 2.5 Динамический отчет на СКД с разными вариантами На днях делал несколько однотипных отчетов на СКД.
Общий принцип: формируются все варианты отчета, указанные в настройках схемы и каждый вариант выводится на отдельной вкладке.
Потом возникла мысль попробовать объединить все схемы в один отчет, чтобы не плодить лишних объектов в конфигурации. При этом количество вариантов в этих схемах заранее неизвестно. Ok, challenge accepted.
В тестовой конфигурации создаю для отчета две схемы компоновки, "Склад" и "Заявки".
Запросы наборов данных приводить не буду, для каждой схемы в настройках добавляю несколько вариантов отчетов.
Теперь переходим к созданию формы. Практически все реквизиты формы будут создаваться при выборе необходимого макета отчета.
Код 1C v 8.2 УП &НаСервере
Процедура СоздатьПереченьОтчетов()
Для Каждого Макет Из РеквизитФормыВЗначение( "Отчет" ) . Метаданные( ) . Макеты Цикл
Элементы. МакетОтчета. СписокВыбора. Добавить( Макет. Имя, Макет. Синоним) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ОбработатьВыборМакета()
Макет = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( МакетОтчета) ;
мУдалить = ? ( ПустаяСтрока( РеквизитыКУдалению) , Новый Массив, ПолучитьИзВременногоХранилища( РеквизитыКУдалению) ) ;
мДобавить = Новый Массив;
кУдалению = Новый Массив;
Для Каждого Вариант Из Макет. ВариантыНастроек Цикл
ИмяРеквизита = "ТабДок_" + Вариант. Имя;
тРеквизит = Новый РеквизитФормы( ИмяРеквизита, Новый ОписаниеТипов( "ТабличныйДокумент" ) ) ;
мДобавить. Добавить( тРеквизит) ;
кУдалению. Добавить( ИмяРеквизита) ;
КонецЦикла ;
ИзменитьРеквизиты( мДобавить, мУдалить) ;
Пока Элементы. СтраницыОтчета. ПодчиненныеЭлементы. Количество( ) Цикл
Элементы. Удалить( Элементы. СтраницыОтчета. ПодчиненныеЭлементы[0 ]) ;
КонецЦикла ;
Для Каждого Вариант Из Макет. ВариантыНастроек Цикл
Страница = Элементы. Добавить( "Страница_" + Вариант. Имя, Тип( "ГруппаФормы" ) , Элементы. СтраницыОтчета) ;
Страница. Вид = ВидГруппыФормы. Страница;
Страница. Заголовок = Вариант. Представление;
ИмяРеквизита = "ТабДок_" + Вариант. Имя;
ТабДок = Элементы. Добавить( ИмяРеквизита, Тип( "ПолеФормы" ) , Страница) ;
ТабДок. Вид = ВидПоляФормы. ПолеТабличногоДокумента;
ТабДок. ПутьКДанным = ИмяРеквизита;
ТабДок. ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы. Нет;
ЭтаФорма[ИмяРеквизита]. Очистить( ) ;
КонецЦикла ;
РеквизитыКУдалению = ПоместитьВоВременноеХранилище( кУдалению, УникальныйИдентификатор) ;
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчеты()
Схема = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( МакетОтчета) ;
Для Каждого Вариант Из Схема. ВариантыНастроек Цикл
Отчет. КомпоновщикНастроек. ЗагрузитьНастройки( Вариант. Настройки) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( Схема, Отчет. КомпоновщикНастроек. ПолучитьНастройки( ) ) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ЭтаФорма["ТабДок_" + Вариант. Имя]) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СоздатьПереченьОтчетов( ) ;
КонецПроцедуры
&НаКлиенте
Процедура МакетОтчетаПриИзменении(Элемент)
ОбработатьВыборМакета( ) ;
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
СформироватьОтчеты( ) ;
КонецПроцедуры
Смотрим, что получилось.
Выгрузка базы 1Cv8skd.rar
Источник
Категория:
Схема Компоновки Данных ВКС - Высококв алифицированные специалисты - какие настройки нужно сделать ЗУП? В этой статье мы вкратце расскажем - какие настройки нужно сделать ЗУП для временно пребывающих высококв алифицированных иностранных специалистов.
Гражданство Откройте сотрудника и перейдите в настройки данных о Гражданстве
Если сотрудник ВКС то нужно отметить соответствующее значение:
Если он не ВКС, то отмечаем как на изображении выше.
У многих бывает проблема:
У ВКС иностранца временно пребывающего берутся взносы в ПФР.
Решение простое:
В форме ввода гражданства была введена строчка с договором. Для ВКС (высококв алифицированного) иностранца не нужно заполнять договор.
После удаления этой строки взносы будут считаться правильно.
Для НДФЛ Также не забудьте указать статус налогоплательщика по НДФЛ:
Категория:
1С Зарплата и Управление Персоналом 2.5 Загрузка данных в 1С из PDF В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла...
И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С.
Чтение PDF файлов из 1С
Первым дело я стал искать, как напрямую можно прочитать данные из 1С в PDF файлах - было найдено много информации и вариантов решений, но к сожалению большинство из них не правильно работали с кодировкой В результате банальный текст вида Красный стул превращался в страшную кракозябру.
Далее после долгих поисков был найден конвертер PDF в TXT - pdf2txt
Поддержка командной строки:
PDF2TXT <input PDF file> [output TXT file] [-logfile] [-open] [-space] [-html] [-format] [-silent] [-blankline] [-summary] [-zoom <num>] [-?] [-h]
<input PDF file> : Open an existing PDF file to convert.
[output TXT file] : Write to TEXT file, the default is same filename of input PDF file.
[-first <page number>]: Specify the first page number.
[-last <page number>]: Specify the last page number.
[-logfile] : Write log to "C:\pdf2txt.log" file.
[-open] : Auto open the text file after it be created.
[-space] : Auto insert spaces into text file.
[-html] : Output to a HTML file, not a text file.
[-format] : Keep the page layout in the generated TXT file.
[-silent] : Disable error and warning messages.
[-blankline] : Auto delete blank line in the generated TXT file.
[-summary] : Get PDF document summary.
[-zoom <num>] : Set zoom ratio, the range is from 50 to 200.
[-unicode] : Create UTF-8 encoding text file.
Примеры:
Код Batch File (DOS, CMD, BAT) C:\>PDF2TXT C:\input.pdf
C:\>PDF2TXT C:\input.pdf -unicode
C:\>PDF2TXT C:\input.pdf -first 10 -last 12
C:\>PDF2TXT C:\input.pdf C:\output.txt
C:\>PDF2TXT C:\input.pdf -open -silent -logfile -zoom 150
C:\>PDF2TXT C:\input.pdf C:\output.txt -open -silent
C:\>PDF2TXT C:\*.pdf
C:\>PDF2TXT C:\*.pdf C:\*.txt
C:\>PDF2TXT C:\test\*.pdf C:\test\*.txt
В архиве (Скачать Вы можете из статьи по ссылке ) заготовка 1С обработки для частного случая, если она Вам подойдет - Хорошо
Если же нет, то Мы можем для Вас быстро доработать загрузку PDF в 1С !
Код на 1С для конфигурации УТ 10.3:
Код 1C v 8.х Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
ТекЗнч = СокрЛП( Лев( Стр, Поз- 1 ) ) ;
Если ЗначениеЗаполнено( ТекЗнч) Тогда
МассивСтрок. Добавить( ТекЗнч) ;
КонецЕсли ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
тч. Очистить( ) ;
НайденныеФайлы = НайтиФайлы( ПутьКPDF, "*.pdf" , ложь ) ;
Для каждого стр Из НайденныеФайлы Цикл
Нстр = ТЧ. Добавить( ) ;
Нстр. ФайлPDF = стр. Имя;
КонецЦикла ;
ЭтаФорма. Обновить( ) ;
Для каждого стр Из ТЧ Цикл
Попытка
pdf = СокрЛП( ПутьКPDF+ "\" + стр. ФайлPDF) ;
txt = СтрЗаменить( pdf, "pdf" , "txt" ) ;
Команд = ПутьКPDF2TXT+ "\pdf2txt.exe " + pdf+ " " + txt;
ЗапуститьПриложение( Команд, ПутьКPDF, Истина ) ;
стр. ФайлTXT = txt;
Исключение
стр. ФайлTXT = "!!!_ОШИБКА" ;
КонецПопытки ;
ЭлементыФормы. ТЧ. ТекущаяСтрока = стр;
ЭлементыФормы. ТЧ. ОбновитьСтроки( стр) ;
КонецЦикла ;
мТекущийПользователь = глЗначениеПеременной( "глТекущийПользователь" ) ;
мСкладПоУмолчанию = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнойСклад" ) ;
мОсновноеПодразделение = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновноеПодразделение" ) ;
мОсновнаяВалютаВзаиморасчетов = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнаяВалютаВзаиморасчетов" ) ;
мОсновноеВедениеВзаиморасчетовПоДоговорам = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновноеВедениеВзаиморасчетовПоДоговорам" ) ;
мВидНоменклатурыПоУмолчанию = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнойВидНоменклатуры" ) ;
мОтражатьВРеглУчете = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВУправленческомУчете" ) ;
мОтражатьВБухУчета = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВБухгалтерскомУчете" ) ;
мОтражатьВНалУчете = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВНалоговомУчете" ) ;
Для каждого стр Из ТЧ Цикл
Состояние( "Загружаю: " + стр. ФайлTXT) ;
текдок= Новый ТекстовыйДокумент;
текдок. Прочитать( стр. ФайлTXT, "UTF-8" ) ;
ЗагрузкаТЧ= Ложь ;
ДокВозвратТоваровОтПокупателя = Документы. ВозвратТоваровОтПокупателя. СоздатьДокумент( ) ;
ДокВозвратТоваровОтПокупателя. Ответственный = мТекущийПользователь;
ДокВозвратТоваровОтПокупателя. Дата = ОбщегоНазначения. ПолучитьРабочуюДату( ) ;
ДокВозвратТоваровОтПокупателя. УстановитьНовыйНомер( ) ;
ДокВозвратТоваровОтПокупателя. ВидПоступления = Перечисления. ВидыПоступленияТоваров. НаСклад;
ДокВозвратТоваровОтПокупателя. СкладОрдер = Склад;
ДокВозвратТоваровОтПокупателя. Подразделение = мОсновноеПодразделение;
ДокВозвратТоваровОтПокупателя. ВалютаДокумента = Справочники. Валюты. НайтиПоКоду( "643" ) ;
ДокВозвратТоваровОтПокупателя. УчитыватьНДС = ИСТИНА ;
ДокВозвратТоваровОтПокупателя. СуммаВключаетНДС = ИСТИНА ;
Для Ном= 1 по текдок. КоличествоСтрок( ) цикл
ТСтр = текдок. ПолучитьСтроку( Ном) ;
ТекСтр = СокрЛП( ТСтр) ;
Если Найти( ТекСтр, "Всего по накладной" ) > 0 Тогда
ЗагрузкаТЧ= Ложь ;
Для Каждого СтрокаТабличнойЧасти Из ДокВозвратТоваровОтПокупателя. Товары Цикл
ОбработкаТабличныхЧастей. РассчитатьКоличествоМестТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
ОбработкаТабличныхЧастей. РассчитатьСуммуТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
ОбработкаТабличныхЧастей. РассчитатьСуммуНДСТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
КонецЦикла ;
Попытка
ДокВозвратТоваровОтПокупателя. Записать( РежимЗаписиДокумента. Проведение) ;
Исключение
ДокВозвратТоваровОтПокупателя. Записать( РежимЗаписиДокумента. Запись) ;
КонецПопытки ;
стр. Документ = ДокВозвратТоваровОтПокупателя. Ссылка;
стр. Инфо = "Все ОК" ;
ЭлементыФормы. ТЧ. ТекущаяСтрока = стр;
ЭлементыФормы. ТЧ. ОбновитьСтроки( стр) ;
Прервать ;
КонецЕсли ;
Если ЗагрузкаТЧ Тогда
ТекСтр = СтрЗаменить( ТекСтр, "подложке " , "подложке" ) ;
ТекСтр = СтрЗаменить( ТекСтр, " " , "|" ) ;
СтрМ= РазложитьСтрокуВМассивПодстрок( ТекСтр, "|" ) ;
Если СтрМ. Количество( ) > 2 Тогда
Попытка
НоваяСтрока = ДокВозвратТоваровОтПокупателя. Товары. Добавить( ) ;
НоваяСтрока. Номенклатура = Справочники. Номенклатура. НайтиПоКоду( СтрМ[2 ]) ;
НоваяСтрока. ЕдиницаИзмерения = НоваяСтрока. Номенклатура. БазоваяЕдиницаИзмерения;
НоваяСтрока. Коэффициент = 1 ;
НоваяСтрока. Количество = Число( СтрМ[6 ]) ;
НоваяСтрока. Цена = Число( СтрМ[7 ]) ;
НоваяСтрока. Сумма = Число( СтрМ[8 ]) ;
НоваяСтрока. СуммаНДС = Число( СтрМ[11 ]) ;
НоваяСтрока. Качество = Справочники. Качество. Новый ;
Попытка
НоваяСтрока. СтавкаНДС = Перечисления. СтавкиНДС["НДС" + Лев( СокрЛП( СтрМ[9 ]) , 2 ) ];
Исключение
НоваяСтрока. СтавкаНДС = НоваяСтрока. Номенклатура. СтавкаНДС;
КонецПопытки ;
Исключение
Сообщить( "Не загружено: " + ТекСтр) ;
КонецПопытки ;
Иначе
Продолжить;
КонецЕсли ;
Иначе
КонецЕсли ;
Если Найти( ТекСтр, "Товарная накладная" ) > 0 Тогда
ТекСтр = СтрЗаменить( ТекСтр, " " , "|" ) ;
СтрМ= РазложитьСтрокуВМассивПодстрок( ТекСтр, "|" ) ;
Если СтрМ. Количество( ) > 1 Тогда
ДокВозвратТоваровОтПокупателя. НомерВходящегоДокументаЭлектронногоОбмена = СтрМ[1 ];
ТекДата = СтрМ[2 ];
ДокВозвратТоваровОтПокупателя. ДатаВходящегоДокументаЭлектронногоОбмена = Дата( Прав( ТекДата, 4 ) + Сред( ТекДата, 4 , 2 ) + Лев( ТекДата, 2 ) ) ;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Грузополучатель:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекОрганизация = Справочники. Организации. НайтиПоРеквизиту( "ИНН" , текИНН) ;
Если ТекОрганизация= Справочники. Организации. ПустаяСсылка( ) Тогда
ДокВозвратТоваровОтПокупателя. Организация = Организация;
Иначе
ДокВозвратТоваровОтПокупателя. Организация = ТекОрганизация;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Поставщик:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекПоставщик = Справочники. Контрагенты. НайтиПоРеквизиту( "ИНН" , текИНН) ;
ДокВозвратТоваровОтПокупателя. Контрагент = ТекПоставщик;
ДокВозвратТоваровОтПокупателя. ДоговорКонтрагента = ТекПоставщик. ОсновнойДоговорКонтрагента;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Плательщик:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекПлательщик = Справочники. Контрагенты. НайтиПоРеквизиту( "ИНН" , текИНН) ;
КонецЕсли ;
КонецЕсли ;
Если текстр= "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" Тогда
ЗагрузкаТЧ= Истина ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура ПутьКPDF2TXTОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с PDF2TXT" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьКPDF2TXT = ДиалогОткрытия. Каталог;
ПутьКPDF = ДиалогОткрытия. Каталог;
КонецЕсли ;
КонецПроцедуры
Процедура ПутьКPDFОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с PDF2TXT" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьКPDF = ДиалогОткрытия. Каталог;
КонецЕсли ;
КонецПроцедуры
Категория:
Загрузка данных в 1С Обход метаданных (полезные функции) При написании небольших автоматизированных тестов часто надо обойти всю конфигурацию и проверить, например, для всех форм какое-нибудь свойство. Это всё легко делается через свойство глобального контекста "Метаданные", но чтоб дорбаться до обхода реквизитов надо написать кучу вложенных циклов. При этом код становится слабочитаемым и слабомодифицируемым.
Ниже приведен небольшой модуль, который решает задачу легко и удобно. Создана специальная функция РазвернутьСтрокуОбходаМетаданных, которая может по строке типа "Метаданные.Справочники.*.Реквизиты.*" построить массив строк с перечислением всех реквизитов всех справочников. При помощи этой и нескольких других функций в экспортных функциях модуля реализованы вполне прикладные задачи - получение всех реквизитов, всех макетов, всех форм конфигурации и построение таблицы всех составных типов.
Код 1C v 8.х
Функция РазвернутьСтрокуОбходаМетаданных(СтрокаОбхода, ЗаменяемоеЗначение = "*" , ПредставлениеПоУмолчанию = "" )
Рез = Новый Массив;
ЧастиСтрокиОбхода = РазобратьСтрокуОбхода( СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Если ЧастиСтрокиОбхода = Неопределено тогда
Рез. Добавить( СтрокаОбхода) ;
Иначе
ОбъектКоллекции = Вычислить( ЧастиСтрокиОбхода. СтрокаКоллекции) ;
РазвернутаяКоллекция = РазвернутьКоллекциюВПредставления( ОбъектКоллекции, ЧастиСтрокиОбхода. СтрокаПредставление) ;
Для каждого ЭлементРазвернутойКоллекции Из РазвернутаяКоллекция Цикл
ТекущаяСтрокаОбхода = ЧастиСтрокиОбхода. СтрокаНачало + ЭлементРазвернутойКоллекции + ЧастиСтрокиОбхода. СтрокаКонец;
МассивЭлемента = РазвернутьСтрокуОбходаМетаданных( ТекущаяСтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Для каждого ПримитивныйЭлементОбхода Из МассивЭлемента Цикл
Рез. Добавить( ПримитивныйЭлементОбхода) ;
КонецЦикла ;
КонецЦикла ;
КонецЕсли ;
Возврат Рез;
КонецФункции
Функция РазобратьСтрокуОбхода(СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию)
Если ПустаяСтрока( ЗаменяемоеЗначение) Тогда
ВызватьИсключение "Некорректное выражение заменяемого значения" ;
КонецЕсли ;
ПозицияЗамены = Найти( СтрокаОбхода, ЗаменяемоеЗначение) ;
Если ПозицияЗамены = 0 Тогда
Возврат Неопределено ;
КонецЕсли ;
СтрокаНачало = Лев( СтрокаОбхода, ПозицияЗамены - 1 ) ;
СтрокаКоллекции = СтрокаНачало;
Если Прав( СтрокаКоллекции, 1 ) = "." Тогда
СтрокаКоллекции = Лев( СтрокаКоллекции, СтрДлина( СтрокаКоллекции) - 1 ) ;
КонецЕсли ;
ПозицияОкончанияЗамены = ПозицияЗамены + СтрДлина( ЗаменяемоеЗначение) ;
ОстатокВыражения = Сред( СтрокаОбхода, ПозицияОкончанияЗамены) ;
ОткрывающаяСкобка = "[" ;
ЗакрывающаяСкобка = "]" ;
Если Найти( ОстатокВыражения, ОткрывающаяСкобка) = 1 Тогда
ОстатокВыражения = Сред( ОстатокВыражения, СтрДлина( ОткрывающаяСкобка) + 1 ) ;
ПозицияЗакрывающейСкобки = Найти( ОстатокВыражения, ЗакрывающаяСкобка) ;
Если ПозицияЗакрывающейСкобки = 0 Тогда
ВызватьИсключение "Синтаксическая ошибка разбора выражения" ;
КонецЕсли ;
СтрокаПредставление = Лев( ОстатокВыражения, ПозицияЗакрывающейСкобки - 1 ) ;
ОстатокВыражения = Сред( ОстатокВыражения, ПозицияЗакрывающейСкобки + СтрДлина( ЗакрывающаяСкобка) ) ;
Иначе
СтрокаПредставление = ПредставлениеПоУмолчанию;
КонецЕсли ;
СтрокаКонец = ОстатокВыражения;
Рез = Новый Структура( "ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец" ,
ПозицияЗамены, СтрокаНачало, СтрокаКоллекции, СтрокаПредставление, СтрокаКонец) ;
Возврат Рез;
КонецФункции
Функция РазвернутьКоллекциюВПредставления(Коллекция, Знач ПредставлениеЭлемента = "" )
Если не ПустаяСтрока( ПредставлениеЭлемента) Тогда
Если Найти( ПредставлениеЭлемента, ";" ) > 0 Тогда
ВызватьИсключение "Некорректное выражение представления" ;
КонецЕсли ;
ПредставлениеЭлемента = "." + ПредставлениеЭлемента;
КонецЕсли ;
Рез = Новый Массив;
Для каждого ЭлементКоллекции Из Коллекция Цикл
ТекПредставление = Строка( Вычислить( "ЭлементКоллекции" + ПредставлениеЭлемента) ) ;
Рез. Добавить( ТекПредставление) ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция РазвернутьМассивСтрокОбходаМетаданных(МассивСтрокОбхода, ЗаменяемоеЗначение = "*" , ПредставлениеПоУмолчанию = "Имя" )
Рез = Новый Массив;
Для каждого СтрокаОбхода Из МассивСтрокОбхода Цикл
ДополнениеРезультата = РазвернутьСтрокуОбходаМетаданных( СтрокаОбхода, ЗаменяемоеЗначение, ПредставлениеПоУмолчанию) ;
Для каждого ТекСтрока Из ДополнениеРезультата Цикл
Рез. Добавить( ТекСтрока) ;
КонецЦикла ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьМассивСтрокМногострочнойСтроки(ПреобразуемаяСтрока, ИгнорироватьПустые = Истина, СокращатьПробелы = Истина)
Рез = Новый Массив;
ЧислоСтрок = СтрЧислоСтрок( ПреобразуемаяСтрока) ;
Для Сч = 1 По ЧислоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку( ПреобразуемаяСтрока, Сч) ;
Если ИгнорироватьПустые и ПустаяСтрока( ТекСтрока) Тогда
Продолжить;
КонецЕсли ;
Если СокращатьПробелы Тогда
ТекСтрока = СокрЛП( ТекСтрока) ;
КонецЕсли ;
Рез. Добавить( ТекСтрока) ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьВсеХранимыеРеквизитыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.Константы.*
|Метаданные.ПланыОбмена.*.Реквизиты.*
|Метаданные.ПланыОбмена.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Справочники.*.Реквизиты.*
|Метаданные.Справочники.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Документы.*.Реквизиты.*
|Метаданные.Документы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Последовательности.*.Измерения.*
|Метаданные.ПланыВидовХарактеристик.*.Реквизиты.*
|Метаданные.ПланыВидовХарактеристик.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.Реквизиты.*
|Метаданные.ПланыСчетов.*.ПризнакиУчета.*
|Метаданные.ПланыСчетов.*.ПризнакиУчетаСубконто.*
|Метаданные.ПланыСчетов.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.Реквизиты.*
|Метаданные.ПланыВидовРасчета.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.РегистрыСведений.*.Измерения.*
|Метаданные.РегистрыСведений.*.Ресурсы.*
|Метаданные.РегистрыСведений.*.Реквизиты.*
|Метаданные.РегистрыНакопления.*.Измерения.*
|Метаданные.РегистрыНакопления.*.Ресурсы.*
|Метаданные.РегистрыНакопления.*.Реквизиты.*
|Метаданные.РегистрыБухгалтерии.*.Измерения.*
|Метаданные.РегистрыБухгалтерии.*.Ресурсы.*
|Метаданные.РегистрыБухгалтерии.*.Реквизиты.*
|Метаданные.РегистрыРасчета.*.Измерения.*
|Метаданные.РегистрыРасчета.*.Ресурсы.*
|Метаданные.РегистрыРасчета.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.Реквизиты.*
|Метаданные.БизнесПроцессы.*.ТабличныеЧасти.*.Реквизиты.*
|Метаданные.Задачи.*.Реквизиты.*
|Метаданные.Задачи.*.РеквизитыАдресации.*
|Метаданные.Задачи.*.ТабличныеЧасти.*.Реквизиты.*
|" ;
ВсеХранимыеРеквизитыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеХранимыеРеквизитыКонфигурации;
КонецФункции
Функция ПолучитьВсеХранимыеРеквизитыКонфигурацииСоставногоТипа() Экспорт
ВсеХранимыеРеквизитыКонфигурации = ПолучитьВсеХранимыеРеквизитыКонфигурации( ) ;
Рез = Новый ТаблицаЗначений;
Рез. Колонки. Добавить( "Имя" , Новый ОписаниеТипов( "Строка" ) ) ;
Рез. Колонки. Добавить( "Тип" , Новый ОписаниеТипов( "ОписаниеТипов" ) ) ;
Рез. Колонки. Добавить( "КоличествоПростыхТипов" , Новый ОписаниеТипов( "Число" ) ) ;
Для каждого ТекРеквизит Из ВсеХранимыеРеквизитыКонфигурации Цикл
Реквизит = Вычислить( ТекРеквизит) ;
Тип = Реквизит. Тип;
КоличествоПростыхТипов = Тип. Типы( ) . Количество( ) ;
Если КоличествоПростыхТипов< > 1 Тогда
ТекСтрока = Рез. Добавить( ) ;
ТекСтрока. Имя = ТекРеквизит;
ТекСтрока. Тип = Тип;
ТекСтрока. КоличествоПростыхТипов = КоличествоПростыхТипов;
КонецЕсли ;
КонецЦикла ;
Возврат Рез;
КонецФункции
Функция ПолучитьВсеФормыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Формы.*
|Метаданные.КритерииОтбора.*.Формы.*
|Метаданные.ОбщиеФормы.*
|Метаданные.Справочники.*.Формы.*
|Метаданные.Документы.*.Формы.*
|Метаданные.ЖурналыДокументов.*.Формы.*
|Метаданные.Перечисления.*.Формы.*
|Метаданные.Отчеты.*.Формы.*
|Метаданные.Обработки.*.Формы.*
|Метаданные.ПланыВидовХарактеристик.*.Формы.*
|Метаданные.ПланыСчетов.*.Формы.*
|Метаданные.ПланыВидовРасчета.*.Формы.*
|Метаданные.РегистрыСведений.*.Формы.*
|Метаданные.РегистрыНакопления.*.Формы.*
|Метаданные.РегистрыБухгалтерии.*.Формы.*
|Метаданные.РегистрыРасчета.*.Формы.*
|Метаданные.БизнесПроцессы.*.Формы.*
|Метаданные.Задачи.*.Формы.*
|" ;
ВсеФормыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеФормыКонфигурации;
КонецФункции
Функция ПолучитьВсеМакетыКонфигурации() Экспорт
СтрокаВсехРеквизитов =
"
|Метаданные.ПланыОбмена.*.Макеты.*
|Метаданные.ОбщиеМакеты.*
|Метаданные.Справочники.*.Макеты.*
|Метаданные.Документы.*.Макеты.*
|Метаданные.ЖурналыДокументов.*.Макеты.*
|Метаданные.Перечисления.*.Макеты.*
|Метаданные.Отчеты.*.Макеты.*
|Метаданные.Обработки.*.Макеты.*
|Метаданные.ПланыВидовХарактеристик.*.Макеты.*
|Метаданные.ПланыСчетов.*.Макеты.*
|Метаданные.ПланыВидовРасчета.*.Макеты.*
|Метаданные.РегистрыСведений.*.Макеты.*
|Метаданные.РегистрыНакопления.*.Макеты.*
|Метаданные.РегистрыБухгалтерии.*.Макеты.*
|Метаданные.РегистрыРасчета.*.Макеты.*
|Метаданные.БизнесПроцессы.*.Макеты.*
|Метаданные.Задачи.*.Макеты.*
|" ;
ВсеМакетыКонфигурации = РазвернутьМассивСтрокОбходаМетаданных( ПолучитьМассивСтрокМногострочнойСтроки( СтрокаВсехРеквизитов) ) ;
Возврат ВсеМакетыКонфигурации;
КонецФункции
Категория:
Метаданные Где в БП вводятся коды ОКВЭД, ОКОПФ и ОКФС для заполнения регламентированных отчетов? Меню - Предприятие, Организации, вкладка Коды.
Категория:
1С Бухгалтерия 2.0 Подключение к ИБ через Com, Получение списка документов и их Загрузка Код 1C v 8.х
Перем Подключились;
Перем COMОбъект;
Функция ПолучитьНом(Выборка)
Ном = Справочники. Номенклатура. НайтиПоНаименованию( СокрЛП( Выборка. Номенклатура) ) ;
Если Ном. Пустая( ) Тогда
ВвестиЗначение( Ном, "Выберите номенклатуру " + СокрЛП( Выборка. Номенклатура) , Тип( "СправочникСсылка.Номенклатура" ) ) ;
КонецЕсли ;
Возврат Ном;
КонецФункции
Функция ПодключитьсяКCRM()
Подключились = Истина ;
Попытка
Подкл = Новый COMОбъект( "V82.COMConnector" ) ;
COMОбъект = Подкл. Connect( "Srvr="" Server1"" ;Ref="" TradeUT"" ;Usr="" ObmenBot"" ;Pwd="" 12345"" " ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Подключились = Ложь ;
КонецПопытки ;
Возврат Подключились;
КонецФункции
Процедура Реализации_Анализ(Элемент)
Если не Подключились Тогда
Если не ПодключитьсяКCRM( ) Тогда
Возврат ;
КонецЕсли ;
КонецЕсли ;
Запрос = COMОбъект. NewObject( "Запрос" ) ;
Запрос. Текст = ПолучитьМакет( "ЗапросПродажи" ) . ПолучитьТекст( ) ;
Запрос. УстановитьПараметр( "Дата1" , НачалоДня( ДатаНач) ) ;
Запрос. УстановитьПараметр( "Дата2" , КонецДня( ДатаКон) ) ;
глРезультатЗапросаПродажи = Запрос. Выполнить( ) ;
Выборка = глРезультатЗапросаПродажи. Выбрать( COMОбъект. ОбходРезультатаЗапроса. ПоГруппировкам) ;
ДокРеал = Документы. РеализацияТоваровУслуг;
СпрКонтр = Справочники. Контрагенты;
ТаблицаДокументов. Очистить( ) ;
Пока Выборка. Следующий( ) Цикл
ОбработкаПрерыванияПользователя( ) ;
Стр = ТаблицаДокументов. Добавить( ) ;
ЗаполнитьЗначенияСвойств( Стр, Выборка) ;
Стр. Документ = ДокРеал. НайтиПоНомеру( Стр. Номер, Стр. Дата) ;
Стр. ТекстКонтрагент = Выборка. КонтрагентНаименование + ", ИНН " + Выборка. ИННКонтрагента;
Если не ПустаяСтрока( Выборка. ИННКонтрагента) Тогда
ВыборкаКонтр = СпрКонтр. Выбрать( , , Новый Структура( "ИНН" , Выборка. ИННКонтрагента) ) ;
Пока ВыборкаКонтр. Следующий( ) Цикл
Если не ЗначениеЗаполнено( Стр. Контрагент) или ВыборкаКонтр. КПП = Выборка. КППКонтрагента Тогда
Стр. Контрагент = ВыборкаКонтр. Ссылка;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
ЭлементыФормы. кнЗагрузитьШаг1 . Доступность = Истина ;
ЭлементыФормы. ИндикаторРеал. МаксимальноеЗначение = ТаблицаДокументов. Количество( ) ;
КонецПроцедуры
Процедура Реализации_Загрузить(Элемент)
ЭлементыФормы. ИндикаторРеал. МаксимальноеЗначение = ТаблицаДокументов. Количество( ) ;
ЗначениеИндикатораРеал = 0 ;
ДокРеал = Документы. РеализацияТоваровУслуг;
ВыборкаДок = глРезультатЗапросаПродажи. Выбрать( COMОбъект. ОбходРезультатаЗапроса. ПоГруппировкам) ;
мСписокВидовДоговоров = Новый СписокЗначений;
мСписокВидовДоговоров. Добавить( Перечисления. ВидыДоговоровКонтрагентов. СПокупателем) ;
СпособЗаполненияЦен = Перечисления. СпособыЗаполненияЦен. ПоЦенамНоменклатуры;
Пока ВыборкаДок. Следующий( ) Цикл
ЗначениеИндикатораРеал = ЗначениеИндикатораРеал + 1 ;
СтрокаТаб = ТаблицаДокументов. Найти( ВыборкаДок. Номер, "Номер" ) ;
Если СтрокаТаб < > Неопределено Тогда
Если ЗначениеЗаполнено( СтрокаТаб. Документ) Тогда
Док = СтрокаТаб. Документ. ПолучитьОбъект( ) ;
Док. Товары. Очистить( ) ;
Док. Услуги. Очистить( ) ;
Иначе
Док = ДокРеал. СоздатьДокумент( ) ;
КонецЕсли ;
Док. Дата = ВыборкаДок. Дата;
Док. Номер = ВыборкаДок. Номер;
Док. Контрагент = СтрокаТаб. Контрагент;
ЗаполнениеДокументов. ЗаполнитьШапкуДокумента( Док, глЗначениеПеременной( "глТекущийПользователь" ) , Док. мВалютаРегламентированногоУчета, "Продажа" ) ;
ЗаполнениеДокументов. ПриИзмененииЗначенияКонтрагента( Док, мСписокВидовДоговоров) ;
ЗаполнениеДокументов. ПриИзмененииЗначенияДоговора( Док, Док. ВалютаДокумента, Док. мВалютаРегламентированногоУчета, СпособЗаполненияЦен, Ценообразование. ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования( Док) , "Продажа" , "Товары" , Неопределено ) ;
Док. ЗаполнитьСчетаУчетаРасчетов( ) ;
Док. УчитыватьНДС = Ложь ;
ВыборкаНом = ВыборкаДок. Выбрать( COMОбъект. ОбходРезультатаЗапроса. ПоГруппировкам) ;
Пока ВыборкаНом. Следующий( ) Цикл
ОбработкаПрерыванияПользователя( ) ;
Ном = ПолучитьНом( ВыборкаНом) ;
Если ВыборкаНом. Идентификатор = 1 Тогда
СтрокаТЧ = Док. Товары. Добавить( ) ;
СтрокаТЧ. Номенклатура = Ном;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧасти( СтрокаТЧ, "Товары" , Истина ) ;
Иначе
СтрокаТЧ = Док. Услуги. Добавить( ) ;
СтрокаТЧ. Номенклатура = Ном;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧастиУслуги( СтрокаТЧ, ИСТИНА ) ;
ОбработкаТабличныхЧастей. ЗаполнитьСодержаниеТабЧасти( СтрокаТЧ, Док) ;
КонецЕсли ;
ОбработкаТабличныхЧастей. ЗаполнитьСтавкуНДСТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьЕдиницуЦенуПродажиТабЧасти( СтрокаТЧ, Док, Док. мВалютаРегламентированногоУчета) ;
СтрокаТЧ. Количество = ВыборкаНом. Количество;
СтрокаТЧ. Сумма = ВыборкаНом. Сумма;
СтрокаТЧ. Цена = СтрокаТЧ. Сумма / ? ( ВыборкаНом. Количество = 0 , 1 , ВыборкаНом. Количество) ;
КонецЦикла ;
Если не ВыборкаДок. ДоставкаОтдельно и ВыборкаДок. СтоимостьДоставкиПлан < > 0 Тогда
СтрокаТЧ = Док. Товары. Добавить( ) ;
СтрокаТЧ. Номенклатура = Док. Товары[0 ]. Номенклатура;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧасти( СтрокаТЧ, "Товары" , Истина ) ;
ОбработкаТабличныхЧастей. ЗаполнитьСтавкуНДСТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьЕдиницуЦенуПродажиТабЧасти( СтрокаТЧ, Док, Док. мВалютаРегламентированногоУчета) ;
СтрокаТЧ. Сумма = - ВыборкаДок. СтоимостьДоставкиПлан;
СтрокаТЧ = Док. Услуги. Добавить( ) ;
СтрокаТЧ. Номенклатура = Справочники. Номенклатура. ТранспортныеУслуги;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧастиУслуги( СтрокаТЧ, ИСТИНА ) ;
ОбработкаТабличныхЧастей. ЗаполнитьСодержаниеТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьСтавкуНДСТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьЕдиницуЦенуПродажиТабЧасти( СтрокаТЧ, Док, Док. мВалютаРегламентированногоУчета) ;
СтрокаТЧ. Количество = 1 ;
СтрокаТЧ. Цена = ВыборкаДок. СтоимостьДоставкиПлан;
СтрокаТЧ. Сумма = ВыборкаДок. СтоимостьДоставкиПлан;
КонецЕсли ;
Ош = Ложь ;
Попытка
Док. Записать( ? ( Проводить, РежимЗаписиДокумента. Проведение, РежимЗаписиДокумента. Запись) ) ;
Ош = Истина ;
Исключение
КонецПопытки ;
Если Ош и Проводить Тогда
Док. Записать( РежимЗаписиДокумента. Запись) ;
КонецЕсли ;
СтрокаТаб. Документ = Док. Ссылка;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Подключились = Ложь ;
Категория:
COM-объекты, WMI, WSH Программное использование универсальной обработки Выгрузка Загрузка Данных XML Для работы, необходимо взять
обработку "ВыгрузкаЗагрузкаДанныхXML" , которая находится в шаблоне "Конвертация данных".
Пример обработки(автор Misha Macklaud):
Скачивать файлы может только зарегистрированный пользователь!
а это ее код:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
ОбработкаОбмен = Обработки. ВыгрузкаЗагрузкаДанныхXML. Создать( ) ;
ОбработкаОбмен. Инициализация( ) ;
ОбработкаОбмен. ОбработанныхКонстант = 0 ;
ОбработкаОбмен. ОбработанныхНаборовЗаписей = 0 ;
СписокОбъектовВыгрузки = Новый СписокЗначений;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. РеализацияТоваровУслуг) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. ПоступлениеТоваровУслуг) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. ТребованиеНакладная) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. Выгружать= 1 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
Построитель = ОбработкаОбмен. ПодготовитьПостроительДляВыгрузки( СтрокаВыгрузки) ;
СписокСсылокВыгрузки = Новый СписокЗначений;
Для Каждого СтрокаТабДокументы Из ТабДокументы Цикл
Если ( СтрокаТабДокументы. Документ. Метаданные( ) = СписокОбъектовВыгрузки[й]. Значение) И ( СтрокаТабДокументы. ФлагВыгружать) Тогда
СписокСсылокВыгрузки. Добавить( СтрокаТабДокументы. Документ. Ссылка) ;
КонецЕсли ;
КонецЦикла ;
Отбор = Построитель. Отбор;
Отбор. Добавить( "Ссылка" , "Ссылка" ) ;
Отбор[0 ]. Использование = Истина ;
Отбор[0 ]. ВидСравнения = ВидСравнения. ВСписке;
Отбор[0 ]. Значение = СписокСсылокВыгрузки;
СтрокаВыгрузки. НастройкиПостроителя = Построитель. ПолучитьНастройки( ) ;
СтрокаВыгрузки. ИспользоватьОтбор = Истина ;
КонецЦикла ;
СписокОбъектовВыгрузки. Очистить( ) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. ВыгружатьПриНеобходимости = 0 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
КонецЦикла ;
СписокОбъектовВыгрузки. Очистить( ) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Справочники. Номенклатура) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. Выгружать= 1 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
КонецЦикла ;
ИмяФайлаЗагрузки = "D:\А-Б.xml" ;
ОбработкаОбмен. ВыполнитьЗагрузку( ИмяФайлаЗагрузки) ;
ИмяФайлаВыгрузки = "D:\Б-А.xml" ;
ОбработкаОбмен. ВыполнитьВыгрузку( ИмяФайлаВыгрузки) ;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Истина ;
НастройкаПериода. ВариантНастройки = ВариантНастройкиПериода. Период;
НастройкаПериода. УстановитьПериод( НачПериода, ? ( КонПериода= '0001 - 01 - 01 ', КонПериода, КонецДня( КонПериода) ) ) ;
Если НастройкаПериода. Редактировать( ) Тогда
НачПериода = НастройкаПериода. ПолучитьДатуНачала( ) ;
КонПериода = НастройкаПериода. ПолучитьДатуОкончания( ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ПриОткрытии()
НачПериода = ТекущаяДата( ) ;
КонПериода = ТекущаяДата( ) ;
КонецПроцедуры
Процедура ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ)
Запрос. Текст = "ВЫБРАТЬ
| ОбъектЗапроса.Ссылка
|ИЗ
| Документ." + ОбъектЗапроса+ " КАК ОбъектЗапроса
|ГДЕ
| ОбъектЗапроса.ПометкаУдаления = ЛОЖЬ И
| ОбъектЗапроса.Дата МЕЖДУ &ДатаНач И &ДатаКон" ;
Запрос. УстановитьПараметр( "ДатаНач" , НачалоДня( НачПериода) ) ;
Запрос. УстановитьПараметр( "ДатаКон" , КонецДня( КонПериода) ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
НоваяСтрока = ТЗ. Добавить( ) ;
НоваяСтрока. Дата = Выборка. Ссылка. Дата;
НоваяСтрока. Документ = Выборка. Ссылка;
КонецЦикла ;
КонецПроцедуры
Процедура ЗаполнитьНажатие(Элемент)
ТабДокументы. Очистить( ) ;
ТЗ = Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "Дата" ) ;
ТЗ. Колонки. Добавить( "Документ" ) ;
Запрос = Новый Запрос;
Если флРеализация Тогда
ОбъектЗапроса = "РеализацияТоваровУслуг" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
Если флПоступление Тогда
ОбъектЗапроса = "ПоступлениеТоваровУслуг" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
Если флТребованиеНакладная Тогда
ОбъектЗапроса = "ТребованиеНакладная" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
ТЗ. Сортировать( "Дата" ) ;
Для Каждого Стр Из ТЗ Цикл
НоваяСтрока = ТабДокументы. Добавить( ) ;
НоваяСтрока. Документ = Стр. Документ;
НоваяСтрока. ФлагВыгружать = Истина ;
КонецЦикла ;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Где указать ОКВЭД организации? Меню справочники => Организации => выбираете свою организацию => нажимаете кнопку изменить => переходите на вкладку коды => и заполняете ОКВЭД (внизу страницы)
Категория:
1С Зарплата и Управление Персоналом 2.5 Добавление в список выбора листов excel-файла с возможностью последующего к ним обращения
Код 1C v 8.х
Процедура ЗаполнитьЛисты()
ЭлементыФормы. Листы. СписокВыбора. Очистить( ) ;
Таблица = ПолучитьCOMОбъект( Файл) ;
Для Н = 1 По Таблица. Sheets. Count Цикл
ТекущийЛист = Строка( Таблица. Sheets( Н) . Index) + ". " + Таблица. Sheets( Н) . Name;
ЭлементыФормы. Листы. СписокВыбора. Добавить( ТекущийЛист) ;
КонецЦикла ;
ЭлементыФормы. Листы. Значение = ТекущийЛист;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если ЭлементыФормы. Листы. Значение = "" Тогда
Предупреждение( "Выберите лист" , 5 ) ;
Возврат ;
КонецЕсли ;
Таблица = ПолучитьCOMОбъект( Файл) ;
Индекс = Число( Сред( ЭлементыФормы. Листы. Значение, 1 , Найти( ЭлементыФормы. Листы. Значение, ". " ) - 1 ) ) ;
Лист = Таблица. Sheets( Индекс) ;
Строка = 1 ;
Столбец = 4 ;
КодНоменклатуры = Лист. Cells( Строка, Столбец) . Value) ;
Номенклатура = Лист. Cells( Строка, Столбец + 1 ) . Text) ;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Преобразование дерева значений в таблицу значений и обратно Хочу поделиться с посетителями сайта своим подходом к преобразованию таблицы значений в дерево значений и обратно.
Вообще, при разработке отраслевой задачи, была необходимость почти во всех документах, выводить информацию в виде дерева и хранить ее в табличных частях документа, а также в интерактивной обработке данных в виде дерева.
Отсюда появился небольшой модуль для расширения возможности работы с деревом значений, хотя и с некоторыми оговорками.
Основной идеей является использование двух ключевых реквизитов/колонок КлючСтроки и КлючСвязи.
Однако они не всегда необходимы. Код, на мой взгляд достаточно "высушен".
Код 1C v 8.х
Функция ПолучитьНовыйКлючСтрокиДерева(Дерево, СписокКлючей = Неопределено) Экспорт
Если СписокКлючей = Неопределено Тогда
СписокКлючей = Новый СписокЗначений;
СписокКлючей. Добавить( 0 ) ;
КонецЕсли ;
Для Каждого СтрокаДерева Из Дерево. Строки Цикл
СписокКлючей. Добавить( СтрокаДерева. КлючСтроки) ;
ПолучитьНовыйКлючСтрокиДерева( СтрокаДерева, СписокКлючей) ;
СписокКлючей. СортироватьПоЗначению( НаправлениеСортировки. Убыв) ;
МаксКлюч = СписокКлючей[0 ]. Значение + 1 ;
КонецЦикла ;
Возврат МаксКлюч;
КонецФункции
Процедура ОбновитьКлючиСвязиВДеревеЗначений(Дерево) Экспорт
Для Каждого СтрокаДерева Из Дерево. Строки Цикл
Попытка
СтрокаДерева. КлючСвязи = СтрокаДерева. Родитель. КлючСтроки;
Исключение
СтрокаДерева. КлючСвязи = 0 ;
КонецПопытки ;
ОбновитьКлючиСвязиВДеревеЗначений( СтрокаДерева) ;
КонецЦикла ;
КонецПроцедуры
Процедура ОбновитьКлючиСтрокВДеревеЗначений(Дерево, КлючСтроки = 1) Экспорт
Для Каждого СтрокаДерева Из Дерево. Строки Цикл
СтрокаДерева. КлючСтроки = КлючСтроки;
КлючСтроки = КлючСтроки + 1 ;
ОбновитьКлючиСтрокВДеревеЗначений( СтрокаДерева, КлючСтроки) ;
КонецЦикла ;
КонецПроцедуры
Функция ВыгрузитьДеревоЗначенийВТаблицуЗначений(Дерево, Таблица = Неопределено) Экспорт
Если Таблица = Неопределено Тогда
Таблица = Новый ТаблицаЗначений;
Для Каждого Колонка Из Дерево. Колонки Цикл
Таблица. Колонки. Добавить( Колонка. Имя, Колонка. ТипЗначения) ;
КонецЦикла ;
КонецЕсли ;
Для Каждого СтрокаДерева Из Дерево. Строки Цикл
ЗаполнитьЗначенияСвойств( Таблица. Добавить( ) , СтрокаДерева) ;
ВыгрузитьДеревоЗначенийВТаблицуЗначений( СтрокаДерева, Таблица) ;
КонецЦикла ;
Возврат Таблица;
КонецФункции
Функция ВыгрузитьТаблицуЗначенийВДеревоЗначений(Таблица, КлючСтроки = "КлючСтроки" , КлючСвязи = "КлючСвязи" ) Экспорт
Дерево = Новый ДеревоЗначений;
Для Каждого Колонка Из Таблица. Колонки Цикл
Дерево. Колонки. Добавить( Колонка. Имя, Колонка. ТипЗначения) ;
КонецЦикла ;
Для Каждого СтрокаТаблицы Из Таблица Цикл
СтрокаГруппировки = Дерево. Строки. Найти( СтрокаТаблицы[КлючСвязи], КлючСтроки, Истина ) ;
Если СтрокаГруппировки = Неопределено Тогда
ЗаполнитьЗначенияСвойств( Дерево. Строки. Добавить( ) , СтрокаТаблицы) ;
Иначе
ЗаполнитьЗначенияСвойств( СтрокаГруппировки. Строки. Добавить( ) , СтрокаТаблицы) ;
КонецЕсли ;
КонецЦикла ;
Возврат Дерево;
КонецФункции
Процедура УстановитьЗначениеКолонкиДерева(Дерево, Колонка, Значение) Экспорт
Для каждого СтрокаДерева Из Дерево. Строки Цикл
СтрокаДерева[Колонка] = Значение;
УстановитьЗначениеКолонкиДерева( СтрокаДерева, Колонка, Значение) ;
КонецЦикла ;
КонецПроцедуры
Процедура СкопироватьПодчиненныеСтроки(СтрокаПриемник, СтрокаИсточник)
Для каждого Строка Из СтрокаИсточник. Строки Цикл
НоваяСтрока = СтрокаПриемник. Строки. Добавить( ) ;
НоваяСтрока. КлючСвязи = СтрокаПриемник. КлючСтроки;
ЗаполнитьЗначенияСвойств( НоваяСтрока, Строка) ;
СкопироватьПодчиненныеСтроки( НоваяСтрока, Строка) ;
КонецЦикла ;
КонецПроцедуры
Процедура ПеренестиСтрокиДереваЗначений(СтрокаПриемник, ВыделенныеСтроки) Экспорт
Если НЕ СтрокаПриемник = Неопределено Тогда
МассивСтрок = Новый Массив;
Для Каждого СтрокаПереноса Из ВыделенныеСтроки Цикл
МассивСтрок. Добавить( СтрокаПереноса) ;
НоваяСтрока = СтрокаПриемник. Строки. Добавить( ) ;
СкопироватьПодчиненныеСтроки( НоваяСтрока, СтрокаПереноса) ;
ЗаполнитьЗначенияСвойств( НоваяСтрока, СтрокаПереноса) ;
НоваяСтрока. КлючСвязи = СтрокаПриемник. КлючСтроки;
КонецЦикла ;
Для Каждого СтрокаДерева Из МассивСтрок Цикл
Если СтрокаДерева. Родитель = Неопределено Тогда
СтрокаДерева. Строки. Удалить( СтрокаДерева) ;
Иначе
СтрокаДерева. Родитель. Строки. Удалить( СтрокаДерева) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
Александр Синцов (Sintson) Категория:
Работа с Деревом Значений