Ошибка: Неверная дата ранее 01.01.1991 или позднее текущей даты как исправить? Большая часть контрагентов в справочнике покраснели с ошибкой "Неверная дата ранее 01.01.1991 или позднее текущей даты"
Решение:
1. Удалить Состояния контрагентов в регистре сведений. Открываем в программе обработку: Удаление и изменение записей регистра сведений
Выбираем регистр "Состояние сотрудников" и жмем Удалить записи
2. Потом в поддержке и обслуживании в фоновых заданиях (регламентированные), нашел проверка контрагентов нажал выполнить
Все проверилось и статусы в списках контрагентов стали актуальными
Категория:
Системные Ошибки Сложение дат в запросе (Прибавить к дате секунды, дни) - ДобавитьКДате При разработке отчетов бывает необходимо в запросе прибавить к дате несколько секунд, дней, месяцев.
Для этого имеется встроенная функция ДобавитьКДате
Синтаксис функции:
ДОБАВИТЬКДАТЕ(<Исходная Дата>, <Единица Измерения>, <Количество>)
Исходная дата – дата, к которой необходимо прибавить или вычесть требуемое количество временных единиц. Единица измерения – параметр, который определяет единицу прибавляемого времени. Возможные значения: Год, Квартал, Месяц, День, Час, Минута, Секунда. Количество – количество временных единиц, которых необходимо прибавить к исходному значению. Код 1C v 8.2 УП // Разные примеры использования
// Минута
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2999, 1, 1, 0, 0, 0), Минута, 30) КАК Часы,
// Час
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2999, 1, 1, 0, 0, 0), ЧАС, ЧАС(СтатусыУслуг.ЗапланированноеВремя)) КАК Часы
// Месяц
ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)
Рабочий код:
Код 1C v 8.2 УП Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсточникиRSS.Ссылка КАК Ссылка
|ИЗ
| Справочник.ИсточникиRSS КАК ИсточникиRSS
|ГДЕ
| ИсточникиRSS.Использовать
| И ДОБАВИТЬКДАТЕ(ИсточникиRSS.ДатаПоследнегоОбновления, СЕКУНДА, ИсточникиRSS.ПериодОбновленияВСекундах) <ТекДата";
Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Категория:
Запросы Как получить ПредопределенноеЗначение? Чтобы обратиться к предопределенному значению перечисления на клиенте нужно использовать метод глобального контекста ПредопределенноеЗначение (PredefinedValue)
Синтаксис:
Код 1C v 8.2 УП ПредопределенноеЗначение(<ИмяПредопределенногоЗначения>)
Параметры: <ИмяПредопределенногоЗначения> (обязательный)
Тип: Строка. Содержит полный путь до предопределенного значения, включая имя самого значения. Например, "ПланСчетов.Основной.Счет41".
Синтаксис описания предопределенного значения совпадает с синтаксисом оператора ЗНАЧЕНИЕ языка запросов:
<Тип предопределенного значения>.<Имя объекта метаданных>.<Значение>
Тип предопределенного значения> может быть:
Справочник (Catalog);
ПланВидовХарактеристик (ChartOfCharacteristicTypes);
ПланСчетов (ChartOfAccounts);
ПланВидовРасчета (ChartOfCalculationTypes);
Перечисление (Enum);
БизнесПроцесс (BusinessProcess)
В качестве <Имя объекта метаданных> указывается имя объекта метаданных, как оно задано в конфигураторе.
Для перечислений, определенных в конфигурации, <Значение> указывается как имя соответствующего объекта метаданных типа ЗначениеПеречисления. Для всех остальных типов предопределенных значений <Значение> указывается как имя предопределенного элемента данных, как оно указано в конфигураторе, или ПустаяСсылка для указания пустой ссылки.
Для точек маршрутов бизнес-процессов имя предопределенного значения имеет вид:
БизнесПроцесс.<Имя объекта метаданных>.ТочкаМаршрута.<Имя точки маршрута>
Также метод может быть использован для получения значения системного перечисления. В этом случае параметр формируется как:
<ИмяСистемногоПеречисления>.<ИмяЗначенияСистемногоПеречисления>
Описание: Возвращает ссылку на предопределенный элемент из предопределенных данных, прикладных перечислений и точек маршрута бизнес-процессов, а также значения системных перечислений.
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Вызов метода выполняет обращение к серверу.
Код 1C v 8.2 УП &Наклиенте
Процедура ГрафикРемонтовСпособВыполненияПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ГрафикРемонтов.ТекущиеДанные;
Если СтрокаТабличнойЧасти.СпособВыполнения = ПредопределенноеЗначение("Перечисление.СпособыВыполненияРемонтныхРабот.Подрядный") Тогда
Элементы.ГрафикРемонтовИсполнитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
иначе
Элементы.ГрафикРемонтовИсполнитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизации");
КонецЕсли;
КонецПроцедуры
Программируя функционал в платформе 8.2 Управляемые Формы нужно четко понимать где он будет исполняться (на сервере или клиенте). Многие привычные методы теперь не работают так как раньше. И элементарная проверка заполнения реквизита на предопределенное значение на клиенте будет иметь следующий вид:
Код 1C v 8.х &НаКлиенте
Процедура ПриИзменениеСтатусаЗаказа()
Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказов.Завершен") Тогда
ЗакрытьЗаказ();
КонецЕсли;
КонецПроцедуры
Вот так работать не будет:
Код 1C v 8.х // НЕ РАБОТАЕТ
&НаКлиенте
Процедура ПриИзменениеСтатусаЗаказа()
Если Объект.Статус = Перечисления.СтатусыЗаказов.Завершен Тогда
ЗакрытьЗаказ();
КонецЕсли;
КонецПроцедуры
Категория:
Встроенные Функции Отправка sms из 1C через avisosms.ru. Столкнулся с задачей отправки sms из 1С. Спасибо Якову за напутствие в решении данной задачи и указание сервиса avisosms.ru.
На сайте сервиса предоставлена документация по работе с ним. В частности сервис предлагает следующие варианты работы:
* JSON протокол
* email2SMS протокол
* HTTP GET протокол
* Удаленный доступ к телефонной книге
* XML протокол
После проб и ошибок с протоколом email2sms (ну не любит мой провайдер через smtp слать письма на не очень красивые адреса относя их к спаму и блокируя) был выбран вариант решения с JSON протоколом. Для краткой демонстрации работы сервера приведена небольшая конфигурация. Конфигурация написана на 1С Предприятие 8.2 с поддержкой работы веб-клиента. Для работы конфигурации необходимо заполнить константы:
* ПользовательСМС – Ваш логин в систему;
* ПарольСМС – Ваш пароль в систему;
* ПодписьСМС – Ваш адрес отправителя, который был создан в личном кабинете.
Конфигурация позволяет:
* Отправлять смс контрагенту, номер которого записан в соответствующем реквизите (номер пишем в формате 380ХХХХХХХХХХ);
* Получать
статусы отправленных смс.
Ниже приведу код формирования запроса на отправку смс
Код 1C v 8.2 УП &НаСервере
Функция ОтправитьСервер()
УспешнаяОтправка = Ложь;
ПараметрJSON = "{'username': '" + Константы.ПользовательСМС.Получить() + "'";
ПараметрJSON = ПараметрJSON + ",'password': '" + Константы.ПарольСМС.Получить() + "'";
ПараметрJSON = ПараметрJSON + ",'request_type': 'send_message'";
ПараметрJSON = ПараметрJSON + ",'destination_address': '" + Объект.Контрагент.НомерТелефона+ "'";
ПараметрJSON = ПараметрJSON + ",'message': '" + Объект.ТекстСМС+ "'";
ПараметрJSON = ПараметрJSON + ",'source_address': '" + Константы.ПодписьСМС.Получить() + "'";
ПараметрJSON = ПараметрJSON + ",flash:'0'}";
Попытка
WinHttp=Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"Windows-1251");
WinHttp.Open("POST","http://api.avisosms.ru/sms/json/",0);
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
WinHttp.Send(ПараметрJSON);
ТекстОтвет = WinHttp.ResponseText();
Если Найти(ТекстОтвет, "OK_Operation_Completed") Тогда
УспешнаяОтправка = Истина;
КонецЕсли;
Исключение
Сообщить("Ошибка соединения:");
Сообщить(ОписаниеОшибки());
КонецПопытки;
//Запись отправленной смс в историю
Если УспешнаяОтправка Тогда
ПозицияКодаНачало = Найти(ТекстОтвет, "messageId") + СтрДлина("messageId")+3;
ПозицияКодаКонец = Найти(ТекстОтвет, "}");
КодСМС = Сред(ТекстОтвет, ПозицияКодаНачало, ПозицияКодаКонец-ПозицияКодаНачало-1);
СМСРассылка.ЗаписатьСМСВИсторию(Объект.Контрагент, Объект.ТекстСМС, КодСМС);
Иначе
Сообщить("Отправка смс не состоялась. Текст ошибки: " + ТекстОтвет);
КонецЕсли;
Возврат УспешнаяОтправка;
КонецФункции
Источник Категория:
COM-объекты, WMI, WSH Пример загрузки остатков в документ 1С из DBF файла Код 1C v 8.х ФайлОстатков = Новый XBase;
ФайлОстатков.Кодировка = КодировкаXBase.OEM;
ФайлОстатков.ОткрытьФайл(ПутьКТаблицеОстатков);
ФайлОстатков.Первая();
Пока Не ФайлОстатков.ВКонце() Цикл
КодКонтрагента = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("ZKPO"));
Если КодКонтрагента = "" Тогда
КодКонтрагента = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("IDENKOD"));
КонецЕсли;
НаименованиеКонтрагента = СокрЛП(СтрЗаменить(ФайлОстатков.ПолучитьЗначениеПоля("NAME"),"?","і"));
Контрагент = ПолучитьКонтрагента(КодКонтрагента,НаименованиеКонтрагента);
СимволСчета = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("SYMBOL"));
ОстатокДебет = ФайлОстатков.ПолучитьЗначениеПоля("DB_PP");
ОстатокКредит = ФайлОстатков.ПолучитьЗначениеПоля("KR_PP");
Документ = Документы.КорректировкаДолга.СоздатьДокумент();
Документ.Организация = Организация;
Документ.Дата = "20090630235959";
Документ.ВидОперации = Перечисления.ВидыОперацийКорректировкаДолга.ВводНачальныхОстатков;
Если ОстатокДебет > 0 Тогда
Документ.КонтрагентДебитор = Контрагент;
Документ.СуммыДолга.Очистить();
СтрокаСуммыДолга = Документ.СуммыДолга.Добавить();
СтрокаСуммыДолга.ВидЗадолженности = Перечисления.ВидыЗадолженности.Дебиторская;
СтрокаСуммыДолга.ДоговорКонтрагента = ПолучитьДоговор(Документ.КонтрагентДебитор);
Если Лев(СимволСчета,3) = "361" Тогда
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель;
Иначе
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик;
КонецЕсли;
СтрокаСуммыДолга.КратностьВзаиморасчетов = 1.00;
СтрокаСуммыДолга.КурсВзаиморасчетов = 1.00;
СтрокаСуммыДолга.Сумма = ОстатокДебет;
СтрокаСуммыДолга.СуммаВзаиморасчетов = ОстатокДебет;
СтрокаСуммыДолга.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
СтрокаСуммыДолга.СчетУчетаРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СимволСчета);
Иначе
Документ.КонтрагентДебитор = Контрагент;
Документ.СуммыДолга.Очистить();
СтрокаСуммыДолга = Документ.СуммыДолга.Добавить();
СтрокаСуммыДолга.ВидЗадолженности = Перечисления.ВидыЗадолженности.Кредиторская;
СтрокаСуммыДолга.ДоговорКонтрагента = ПолучитьДоговор(Документ.КонтрагентДебитор);
Если Лев(СимволСчета,3) = "361" Тогда
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель;
Иначе
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик;
КонецЕсли;
СтрокаСуммыДолга.КратностьВзаиморасчетов = 1.00;
СтрокаСуммыДолга.КурсВзаиморасчетов = 1.00;
СтрокаСуммыДолга.Сумма = ОстатокКредит;
СтрокаСуммыДолга.СуммаВзаиморасчетов = ОстатокКредит;
СтрокаСуммыДолга.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
СтрокаСуммыДолга.СчетУчетаРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СимволСчета);
КонецЕсли;
Документ.ВалютаДокумента = Валюта;
Документ.СчетДт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Документ.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Документ.Записать(РежимЗаписиДокумента.Проведение);
ФайлОстатков.Следующая();
КонецЦикла;
ФайлОстатков.ЗакрытьФайл();
Категория:
XML, DBF, TXT, CSV Получить статус сетевой карты(устройства), Работает или уже нет Код 1C v 7.x // Глобальная переменная в которой будем хранить
// известные нам типы статусов сетевой карты
перем сзТипСтатуса;
// Глобальная переменая
перем обШелл;
//*******************************************
// стрСтатусАдаптера(стрИмя = "")
//
// Параметры:
// стрИмя - Строка. Имя сетевой статус которой надо определить.
// В том виде как показа в сетвых подключениях.
//
// Возвращаемое значение:
// Строка. Статус заданой сетевой.
//
// Описание:
// Функция определяет статус сетевой.
//
функция стрСтатусАдаптера(стрИмя = "")
Ответ = "";
// Попытаемся получить статус через контрол скриптов
попытка
сзСтевые = создатьобъект("списокзначений");
// Выполняем скрипт. Из полученного значения пытаемся
// сформировать список значений
сзСтевые = значениеизстроки(обШелл.Run("strGetAdapterInfo"));
исключение
// По каким-то причинам выполнить скрипт не удалось
Ответ = "Статус установить не удалось";
конецпопытки;
// Если в возращаемом значение пустая строка, то скрипт
// выполнился. Можно смотреть дальше.
если Ответ = "" тогда
// Получаем индекс статуса сетевой.
стрСтатус = строка(сзСтевые.Получить(стрИмя));
// Проверяем на пустое значение индекса.
если пустоезначение(стрСтатус) = 1 тогда
// Если индекс пуст, то сетевая суказанным именем отсуствует
Ответ = "Сетевая с таким именем отсуствует";
иначе
// Ищем индекс статуса в известных нам типов статуса.
чисПозиция = сзТипСтатуса.НайтиЗначение(стрСтатус);
если чисПозиция = 0 тогда
// Не нашли. Смотрим MSDN
Ответ = "Не известный тип статуса сетевой";
иначе
// Получаем строковое представление статуса.
сзТипСтатуса.ПолучитьЗначение(чисПозиция, Ответ);
конецесли;
конецесли;
конецесли;
// Возвращаем полученный статус
возврат Ответ;
конецфункции;
//*******************************************
// Этот блок обязателен.
// Необходимо что бы он отработал до первого вызова
// функции стрСтатусАдаптера
//*******************************************
// Создаем объект для управления скриптами
обШелл = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем рабочий язык для выполнения скриптов
обШелл.Language = "VBScript";
// Сам срипт который соберет статусы всех сетевых устройств
тхтКод = "
|function strGetAdapterInfo()
| dim objNetworkAdapter
| Answer = ""{""""СписокЗначений"""",{""
| set objWMI = getobject(""WinMgmts:\\.\Root\CIMV2"")
| set objNetworkAdapters = objWMI.ExecQuery(""S_elect * FROM Win32_NetworkAdapter"", , 48)
| for each objNetworkAdapter in objNetworkAdapters
| Answer = Answer & ""{{""""Строка"""","""""" & objNetworkAdapter.NetConnectionStatus &_
| """"""}, """""" & objNetworkAdapter.NetConnectionID & """""",""""0""""}""
|
| next
| Answer = Answer & ""}}""
| strGetAdapterInfo = Answer
| end function";
// Добавим наш скрипт в котрол скриптов
обШелл.AddCode(тхтКод);
// Создадим список значений в который поместим все известные нам
// виды статуса сетевых устройств.
сзТипСтатуса = создатьобъект("списокзначений");
// Поместим в список значений виды статусов их строковое представление
сзТипСтатуса.ДобавитьЗначение("0", "Отключенно");
сзТипСтатуса.ДобавитьЗначение("1", "Подключение");
сзТипСтатуса.ДобавитьЗначение("2", "Подключено");
сзТипСтатуса.ДобавитьЗначение("3", "Отключение");
сзТипСтатуса.ДобавитьЗначение("4", "Устройство не представленно");
сзТипСтатуса.ДобавитьЗначение("5", "Устройство отключено");
сзТипСтатуса.ДобавитьЗначение("6", "Устройство не исправно");
сзТипСтатуса.ДобавитьЗначение("7", "Соединение разорвано");
сзТипСтатуса.ДобавитьЗначение("8", "Аутентификация");
сзТипСтатуса.ДобавитьЗначение("9", "Аутентификация прошла успешно");
сзТипСтатуса.ДобавитьЗначение("10", "Аутентификация не прошла");
сзТипСтатуса.ДобавитьЗначение("11", "Неправильный адресс");
сзТипСтатуса.ДобавитьЗначение("12", "Требуется полномочия");
IUnknown Категория:
COM-объекты, WMI, WSH