Ошибка: Неверная дата ранее 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 ;
СтрокаСуммыДолга. СчетУчетаРасчетов = ПланыСчетов. Хозрасчетный. НайтиПоКоду( СимволСчета) ;
КонецЕсли ;
Документ. ВалютаДокумента = Валюта;
Документ. СчетДт = ПланыСчетов. Хозрасчетный. Вспомогательный;
Документ. СчетКт = ПланыСчетов. Хозрасчетный. Вспомогательный;
Документ. Записать( РежимЗаписиДокумента. Проведение) ;
ФайлОстатков. Следующая( ) ;
КонецЦикла ;
ФайлОстатков. ЗакрытьФайл( ) ;
Категория:
JSON, XML, TXT, CSV, DBF Получить статус сетевой карты(устройства), Работает или уже нет Код 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