Как выгрузить все дополнительные обработки и отчеты в каталог? Выгрузить все дополнительные обработки и отчеты в каталог всего за пару кликов. Простейшая обработка в один реквизит и команду.
Набросайте элементы на форму и вставьте код в модуль формы обработки. И без всякого скачивания.
Работоспособность проверена на БП 3.0, Документооборот 1.4-2.0, платформы 1С 8.3.7, 8.3.8
Код 1C v 8.3 #Область ВыборКаталогаДляВыгрузки
&НаКлиенте
Процедура КаталогВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДопПараметры = новый Структура;
ДопПараметры. Вставить( "ИмяЭлемента" , "КаталогВыгрузки" ) ;
ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработатьВыборКаталога" , ЭтаФорма, ДопПараметры) ;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. ВыборКаталога) ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
Если ЗначениеЗаполнено( Объект. КаталогВыгрузки) Тогда
ДиалогОткрытияФайла. Каталог = Объект. КаталогВыгрузки;
КонецЕсли ;
ДиалогОткрытияФайла. Показать( ОписаниеОповещения) ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборКаталога(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат ;
КонецЕсли ;
Объект[ДополнительныеПараметры. ИмяЭлемента] = ВыбранныеФайлы[0 ];
КонецПроцедуры
#КонецОбласти
#Область НажатиеНаКнопку
&НаКлиенте
Процедура Выгрузить(Команда)
ОчиститьСообщения( ) ;
Если НЕ ЗначениеЗаполнено( Объект. КаталогВыгрузки) Тогда
Сообщить( "Укажите каталог для выгрузки" ) ;
Возврат ;
КонецЕсли ;
Каталог = Новый Файл( Объект. КаталогВыгрузки) ;
Если НЕ Каталог. Существует( ) Тогда
Сообщить( "Указанный каталог не существует" ) ;
Возврат ;
КонецЕсли ;
МассивФайлов = НайтиФайлы( Объект. КаталогВыгрузки, "*.*" ) ;
Если МассивФайлов. Количество( ) > 0 Тогда
ОписаниеОповещения = новый ОписаниеОповещения( "ПодвержденияЗамещения" , ЭтаФорма) ;
ПоказатьВопрос( ОписаниеОповещения, "В каталоге есть файлы. При выгрузке будет выполнение замещение существующих." + Символы. ПС+ "Начать выгрузку?" , РежимДиалогаВопрос. ДаНет) ;
Возврат ;
КонецЕсли ;
ВыгрузкаНачнись( ) ;
КонецПроцедуры
&НаКлиенте
Процедура ПодвержденияЗамещения(ЧтоОтветилПользователь, Параметры) Экспорт
Если ЧтоОтветилПользователь = КодВозвратаДиалога. Да Тогда
ВыгрузкаНачнись( ) ;
Иначе
Возврат ;
КонецЕсли ;
КонецПроцедуры
#КонецОбласти
#Область СамаВыгрузка
&НаКлиенте
Процедура ВыгрузкаНачнись()
ПолучаемыеФайлы = ПодготовимФайлыНаСервере( ЭтаФорма. УникальныйИдентификатор) ;
Обработчик = Новый ОписаниеОповещения( "ОбработкаРезультатаВыгрузки" , ЭтотОбъект) ;
НачатьПолучениеФайлов( Обработчик, ПолучаемыеФайлы, Объект. КаталогВыгрузки, Ложь ) ;
КонецПроцедуры
&НаСервере
Функция ПодготовимФайлыНаСервере(ИдентификаторФормы)
Массив = Новый Массив;
Выборка = Справочники. ДополнительныеОтчетыИОбработки. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Если ТипЗнч( Выборка. ХранилищеОбработки) = Тип( "ХранилищеЗначения" ) Тогда
Адрес = ПоместитьВоВременноеХранилище( Выборка. ХранилищеОбработки. Получить( ) , ИдентификаторФормы) ;
Массив. Добавить( Новый ОписаниеПередаваемогоФайла( Выборка. ИмяФайла, Адрес) ) ;
КонецЕсли ;
КонецЦикла ;
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура ОбработкаРезультатаВыгрузки(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
ПоказатьПредупреждение( , "Выгрузка в каталог завершена" , 10 ) ;
КонецПроцедуры
#КонецОбласти
Автор: Михали Задорнов (MZadornov)
Категория:
Внешние печатные формы, отчеты и обработк�… Скрипт автообновления типовых конфигураций Батник на "языке 1С" для клиент серверных баз, скачивает с сайта ИТС нужное обновление, бекапит базу и обновляет. Подойдет как рабочая заготовка для собственных "обновляторов". В текущем виде все работает. Надо только занести свои переменные.
Код 1C v 8.3
Перем мРасположениеОбновлений;
Перем мИтсЛогин;
Перем мИтсПароль;
Перем home;
Перем DumpIB;
Перем ФайлСписокОбновленийZIP;
Перем ФайлСписокОбновленийXML;
Перем КодВозврата;
Функция ФайлСуществует(Знач ПутьКФайлу) Экспорт
Файл = Новый Файл( ПутьКФайлу) ;
Возврат Файл. Существует( ) ;
КонецФункции
Процедура УстановитьКонстанты()
каталог_tmplts = "D:\tmplts" ;
мИтсЛогин = "---" ;
мИтсПароль = "---" ;
мРасположениеОбновлений = каталог_tmplts + "\1c" ;
home = каталог_tmplts + "\1Cupdate" ;
DumpIB = home + "\DumpIB\" ;
ФайлСписокОбновленийXML = home + "\v8cscdsc.xml" ;
ФайлСписокОбновленийZIP = home + "\v8upd11.zip" ;
Если НЕ ФайлСуществует( home) Тогда
СоздатьКаталог( home) ;
КонецЕсли ;
Если НЕ ФайлСуществует( DumpIB) Тогда
СоздатьКаталог( DumpIB) ;
КонецЕсли ;
Если НЕ ФайлСуществует( мРасположениеОбновлений) Тогда
СоздатьКаталог( мРасположениеОбновлений) ;
КонецЕсли ;
КонецПроцедуры
Функция ВернутьРелизИПлатформу(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль)
ПараметрыБазы = Неопределено ;
Попытка
COMОбъект = Новый COMОбъект( "V" + мВерсияПлатформы+ ".COMConnector" ) ;
Исключение
Сообщить( "Не удалось создать COM-объект!" ) ;
Возврат ПараметрыБазы;
КонецПопытки ;
ПутьКБазе = "srvr="" " + СокрЛП( мИмяСервера) + """ ;" + "ref="" " + СокрЛП( мИмяБазы) + """ ;" ;
СтрокаСоединения = ПутьКБазе + "Usr="" " + СокрЛП( мБазаЛогин) + """ ;" + "Pwd="" " + СокрЛП( мБазаПароль) + """ ;" ;
Попытка
V82 = COMОбъект. Connect( СтрокаСоединения) ;
Исключение
Сообщить( СтрокаСоединения) ;
Сообщить( "Внешнее соединение не установлено!" ) ;
Возврат ПараметрыБазы;
КонецПопытки ;
ПараметрыБазы = Новый Структура;
ПараметрыБазы. Вставить( "ТекущаяВерсия" , v82. Метаданные. Версия) ;
ПараметрыБазы. Вставить( "ПутьКПлатформе" , v82. КаталогПрограммы( ) + "1cv8.exe" ) ;
Возврат ПараметрыБазы;
КонецФункции
Процедура УстановитьCOMСоединение(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль)
Попытка
COMОбъект = Новый COMОбъект( "V" + мВерсияПлатформы+ ".COMConnector" ) ;
Исключение
Сообщить( "Не удалось создать COM-объект!" ) ;
Возврат ;
КонецПопытки ;
ПутьКБазе = "srvr="" " + СокрЛП( мИмяСервера) + """ ;" +
"ref="" " + СокрЛП( мИмяБазы) + """ ;" ;
СтрокаСоединения = ПутьКБазе +
"Usr="" " + СокрЛП( мБазаЛогин) + """ ;" +
"Pwd="" " + СокрЛП( мБазаПароль) + """ ;" ;
Сообщить( СтрокаСоединения) ;
Попытка
V82 = COMОбъект. Connect( СтрокаСоединения) ;
Исключение
Сообщить( СтрокаСоединения) ;
Сообщить( "Внешнее соединение не установлено!" ) ;
Возврат ;
КонецПопытки ;
КонецПроцедуры
Функция ВыполнитьЗагрузкуСпискаОбновлений(ИмяФайлаЗагрузки,ТекущаяВерсияКонфигурации)
СообщениеОбОшибке = "Ошибка при чтении файла списка обновлений." ;
Если НЕ ФайлСуществует( ИмяФайлаЗагрузки) Тогда
Сообщить( "Нету XML файла (списка обновлений)" ) ;
Возврат Неопределено ;
КонецЕсли ;
ВерсияДляОбновления = Неопределено ;
Попытка
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML. ОткрытьФайл( ИмяФайлаЗагрузки) ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
ДатаФормирования = ЧтениеXML. Значение;
ЧтениеXML. Прочитать( ) ;
Пока ЧтениеXML. Прочитать( ) Цикл
Если ЧтениеXML. Имя = "v8u:updateList" Тогда
Прервать ;
Иначе
Конфигурация = ЧтениеXML. ПолучитьАтрибут( "configuration" ) ;
Пока ЧтениеXML. Прочитать( ) Цикл
Если ЧтениеXML. Имя = "v8u:update" Тогда
Прервать ;
Иначе
Если ЧтениеXML. Имя = "v8u:vendor" Тогда
ЧтениеXML. Прочитать( ) ;
Поставщик = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:version" Тогда
ЧтениеXML. Прочитать( ) ;
Версия = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:file" Тогда
ЧтениеXML. Прочитать( ) ;
ПутьКФайлуОбновления = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:size" Тогда
ЧтениеXML. Прочитать( ) ;
РазмерФайлаОбновления = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:target" Тогда
ЧтениеXML. Прочитать( ) ;
Если ЧтениеXML. Значение = ТекущаяВерсияКонфигурации Тогда
ВерсияДляОбновления = Версия;
КонецЕсли ;
КонецЕсли ;
ЧтениеXML. Прочитать( ) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Исключение
Сообщить( СообщениеОбОшибке) ;
ЧтениеXML. Закрыть( ) ;
Возврат Неопределено ;
КонецПопытки ;
ЧтениеXML. Закрыть( ) ;
Возврат ВерсияДляОбновления;
КонецФункции
Процедура ПроверитьОбновлениеКонфигурации(мИмяСервера,мИмяБазы,мТипКонфигурации,мВерсияРелиза,мВерсияПлатформы,мБазаЛогин,мБазаПароль)
Сообщить( "----------------------------------------------------------------------" ) ;
УдалитьФайлы( ФайлСписокОбновленийXML) ;
УдалитьФайлы( ФайлСписокОбновленийZIP) ;
СерверОбновлений = Новый HTTPСоединение( "downloads.1c.ru" , , мИтсЛогин, мИтсПароль, ) ;
ЗапросКСерверуОбновлений = Новый HTTPЗапрос( "/ipp/ITSREPV/V8Update/Configs/" + мТипКонфигурации+ "/" + мВерсияРелиза+ "/" + мВерсияПлатформы+ "/v8upd11.zip" ) ;
СерверОбновлений. Получить( ЗапросКСерверуОбновлений, ФайлСписокОбновленийZIP) ;
ФайлZip = Новый ЧтениеZipФайла( ФайлСписокОбновленийZIP) ;
ФайлZip. ИзвлечьВсе( home) ;
ФайлZip. Закрыть( ) ;
УдалитьФайлы( ФайлСписокОбновленийZIP) ;
ПараметрыComБазы = ВернутьРелизИПлатформу( мИмяСервера, мИмяБазы, мВерсияПлатформы, мБазаЛогин, мБазаПароль) ;
Если ПараметрыComБазы = Неопределено Тогда
Возврат ;
КонецЕсли ;
ВерсияДляОбновления = ВыполнитьЗагрузкуСпискаОбновлений( ФайлСписокОбновленийXML, ПараметрыComБазы. ТекущаяВерсия) ;
ТребуетсяОбновление = Ложь ;
Если ВерсияДляОбновления = Неопределено Тогда
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " ОБНОВЛЕНИЕ НЕ ТРЕБУЕТСЯ" ) ;
Возврат ;
КонецЕсли ;
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " update: " + ВерсияДляОбновления) ;
КомандаПакетногоАрхивирования = """ " + ПараметрыComБазы. ПутьКПлатформе + """ " + " CONFIG /S" + мИмяСервера+ "\" + мИмяБазы+ " /N"" " + мБазаЛогин+ """ /P"" " + мБазаПароль+ """ /DumpIB " + DumpIB + мИмяБазы + ".dt /OUT "" " + home+ "\" + мИмяБазы+ ".log"" -NoTruncate" ;
ЗапуститьПриложение( КомандаПакетногоАрхивирования, , Истина , КодВозврата) ;
Если КодВозврата = 0 Тогда
Сообщить( "Резервная копия успешно создана." ) ;
Иначе
Сообщить( "Ошибка при создании резервной копии" ) ;
Возврат ;
КонецЕсли ;
Версия_Для_Обновления = СтрЗаменить( ВерсияДляОбновления, "." , "_" ) ;
Если НЕ ФайлСуществует( мРасположениеОбновлений + "\" + мТипКонфигурации+ "\" + Версия_Для_Обновления+ "\" ) Тогда
Заголовки = Новый Соответствие( ) ;
Заголовки. Вставить( "User-Agent" , "1C+Enterprise/8.2" ) ;
СерверОбновлений = Новый HTTPСоединение( "downloads.v8.1c.ru" , , мИтсЛогин, мИтсПароль, ) ;
СтрокаЗапросHTTP = "/tmplts/1c/" + мТипКонфигурации+ "/" + Версия_Для_Обновления + "/1cv8.zip" ;
Сообщить( СтрокаЗапросHTTP) ;
ЗапросКСерверуОбновлений = Новый HTTPЗапрос( СтрокаЗапросHTTP, Заголовки) ;
СерверОбновлений. Получить( ЗапросКСерверуОбновлений, мРасположениеОбновлений+ "\1cv8.zip" ) ;
ФайлZip = Новый ЧтениеZipФайла( мРасположениеОбновлений+ "\1cv8.zip" ) ;
ФайлZip. ИзвлечьВсе( мРасположениеОбновлений+ "\" + мТипКонфигурации+ "\" + Версия_Для_Обновления) ;
ФайлZip. Закрыть( ) ;
УдалитьФайлы( мРасположениеОбновлений+ "\1cv8.zip" ) ;
КонецЕсли ;
КомандаПакетногоОбновления = """ " + ПараметрыComБазы. ПутьКПлатформе + """ " + " CONFIG /S" + мИмяСервера+ "\" + мИмяБазы+ " /N"" " + мБазаЛогин+ """ /P"" " + мБазаПароль+ """ /UpdateCfg " + мРасположениеОбновлений+ "\" + мТипКонфигурации+ "\" + Версия_Для_Обновления + "\1cv8.cfu /UpdateDBCfg /OUT "" " + home+ "\" + мИмяБазы+ ".log"" -NoTruncate" ;
ЗапуститьПриложение( КомандаПакетногоОбновления, , Истина , КодВозврата) ;
Если КодВозврата = 0 Тогда
Сообщить( "База Успешно обновлена" ) ;
Иначе
Сообщить( "ОШИБКА ПРИ ОБНОВЛЕНИИ" ) ;
Возврат ;
КонецЕсли ;
ПараметрыComБазы = ВернутьРелизИПлатформу( мИмяСервера, мИмяБазы, мВерсияПлатформы, мБазаЛогин, мБазаПароль) ;
Если ПараметрыComБазы = Неопределено Тогда
Возврат ;
КонецЕсли ;
ВерсияДляОбновления = ВыполнитьЗагрузкуСпискаОбновлений( ФайлСписокОбновленийXML, ПараметрыComБазы. ТекущаяВерсия) ;
ТребуетсяОбновление = Ложь ;
Если ВерсияДляОбновления = Неопределено Тогда
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " ОБНОВЛЕНИЕ НЕ ТРЕБУЕТСЯ" ) ;
Возврат ;
КонецЕсли ;
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " update: " + ВерсияДляОбновления) ;
КонецПроцедуры
УстановитьКонстанты( ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1641" , "up_el" , "HRM" , "25" , "82" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1641" , "up_spb" , "HRM" , "25" , "82" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_domx" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_el" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_ip" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_guild" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_lebedeva" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_porsche" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1641" , "up_service" , "HRM" , "25" , "82" , "Администратор" , "Администратор" ) ;
Источник
Категория:
Администрирование Как узнать текущие релизы 7.7 для Украины Код 1C v 7.x
Функция ПолучитьВерсии()
Перем Url, HtmlTab, Строк, Р, НомСтроки, Таб, Версия, ДатаВремя;
ОчиститьОкноСообщений( ) ;
СтатусВозврата( 0 ) ;
Url = "http://www.1c.ru/ukraina/support/release.jsp?time=" + _GetPerformanceCounter( ) ;
Сообщить( Url) ;
IE = СоздатьОбъект( "InternetExplorer.Application" ) ;
IE. Navigate( Url) ;
Пока ( IE. readyState < > 4 ) Или ( IE. Busy = - 1 ) Цикл
Состояние( "Получение страницы... " + Url) ;
КонецЦикла ;
HtmlTab = IE. Document. getElementsByTagName( "table" ) . item( 4 ) . rows( 0 ) . cells( 4 ) . childNodes. item( 10 ) ;
Строк = HtmlTab. rows. length;
Таб = СоздатьОбъект( "ТаблицаЗначений" ) ;
Таб. НоваяКолонка( "Версия" , "Строка" ) ;
Таб. НоваяКолонка( "Дата" , "Дата" ) ;
Таб. НоваяКолонка( "Время" , "Строка" ) ;
Таб. НоваяКолонка( "Продукт" , "Строка" ) ;
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab. rows( НомСтроки - 1 ) ;
Если Р. cells. length < > 3 Тогда
Продолжить;
КонецЕсли ;
Версия = Р. cells( 2 ) . innerText;
Если Найти( Версия, "7.70." ) = 0 Тогда
Продолжить;
КонецЕсли ;
ДатаВремя = Р. cells( 0 ) . innerText;
Таб. НоваяСтрока( ) ;
Таб. Дата = ДатаВремя;
Таб. Время = Сред( ДатаВремя, 12 ) ;
Таб. Продукт = Р. cells( 1 ) . innerText;
Таб. Версия = Версия;
КонецЦикла ;
Таб. Сортировать( "Дата-,Время-" ) ;
Возврат Таб;
КонецФункции
Категория:
HTML, JS, VML Настройка и подключение сканера штрих кода к 1С Нужно сделать РМК (рабочее место кассира) с работающим сканером и другим нужным функционалом.
Порядок действий:
1. Ставим 1с, конфигурацию.
Для начала сделаем пару пользователей, первый он всегда «Админ«, второго назовем «Кассир» и дадим ему полные права (для теста, по хорошему надо настраивать персональные права) .
В конфигураторе (от админа) подправим пользователя «Кассир». Ставим «тип запуска» & «обычное приложение»
Идем дальше, что бы в «Администрировании» появился пункт «Подключаемое оборудование» (иначе как мы его будем настраивать? ) нужно поставить галку на
«Использовать подключаемое оборудование» и «Использовать группы пользователей»
Администрирование & Настройка параметров учета.
Возможности пользователя в РМК настраиваем в Администрировании & Дополнительные права пользователя
2. Настраиваем сканер на эмуляцию com порта, это позволит нам работать в РМК со сканером без лишних заморочек.
Для этого мне потребовалось скачать драйвер Symbol COM Port Emulation Driver v 1.8.5
т.к. проверять уже не охота, а перед установкой драйвера была применена вот эта инструкция:
Настройка_сканеров_Symbol_в_1С прикладываю и ее, в ней показаны штрих кода для программирования сканера на эмуляцию и настройка в 1с сканера.
Ну и в принципе на этом настройка сканера завершена. Теперь в РМК будет перехватывать все сканированные штрихкода.
Все тоже самое только на Windows 7
Сканер установился автоматом. Заставить эмулировать его COM порт я не стал. Сканер работает как клавиатура. Для 1с пришлось настроить сканер что бы он сначала слал F7 (ввод по штриху) + сам штрих + enter.
Прежде чем купить сканер штрих кода обратите особое внимание на то, каким образом будет подключаться сканер к компьютеру .
Несмотря на обилие видов сканеров штрих кода на рынке все они, в конечном счете, подключаются через один из четырех типов коннекторов или интерфейсных портов:
- PS/2 Разрыв клавиатуры – из названия следует что сканер штрих кода подключается в разрыв между компьютером и клавиатурой.
- USB Эмуляция ( фактически подключение через порт usb а настройки как в PS/2)
- RS-232 Последовательный (Com) порт – подключается в Com порт компьютера, однако требует дополнительно блок питания.
- USB Эмуляция ( фактически подключение через порт usb а настройки как в RS-232)
Настройка сканера штрих-кода в программах 1С в разрыв клавиатуры
Настроить сканер штрих-кода 1С, подключаемый в разрыв клавиатуры, совсем не сложная задача. Первое что надо сделать - настроить префикс сканера штрих-кода. По умолчанию сканер штрих-кода, подключаемый в разрыв клавиатуры при сканировании штрих-кода товара он возвращает цифры штрих-кода и символ возврата – это аналогично тому, как если бы вы нажимали после сканирования клавишу ENTER на клавиатуре компьютера. Однако для сканирования штрих – кода товара в программе 1С нажать клавишу F7 - Возврат каретки необходимо. Чтобы постоянно не нажимать F7, нам и поможет добавление специального символа – префикса. Префиксом называется в данном случае некий набор символов, которые сканер отсылает перед отправкой штрих-кода. В качестве префикса в основном используют значение “150” - это ASCII-код клавиши F7. Этот способ подойдет и для USB-сканера в том случае, когда нет возможности установить драйвер эмуляции COM-порта.
Настройка сканера штрих-кода в программах 1С через порт USB.
Программа 1C не видит сканеры штрих-кода подключенные через USB-разъем, зато их прекрасно “видит” операционная система Windows. При первом включении сканера операционная система предложит установить его драйвер, но мы ей этого не позволим и откажемся от автоматической установки, а поставим драйвер вручную. Как правило, драйвер эмуляции COM-порта находится на диске из комплекта поставки сканера штрих-кода, там же есть и специализированные утилиты для настройки свойств самого сканера штрих-кода, такие как: громкость бипера, префикс, суфикс и т.п. Или же имеется специальное руководство пользователя с конфигурационными штрих-кодами, сканируя которые можно определенным образом настроить сканер. В процессе установки этого драйвера, операционная система создает виртуальный COM-порт. Далее нужно произвести конфигурирование порта. После того как настроен сам сканер – переходим к настройке в 1С. Для этого в меню Сервис?Настройки торгового оборудования?Находим закладку Сканеры и переходим в нее и устанавливаем новый сканер штрих-кодов. В качестве обработки обычно используют входящую в поставку стандартную обработку обслуживания «1CScanOPOSScan_v2.epf». Далее заходим в “Параметры” настраиваем COM-порт и параметр Скорость сканера. Сканер штрих-кода настроен!
Настройка сканера штрих кода в программах 1С через COM-порт.
Настройка сканера штрих-кода 1С производим как в предыдущем примере. После того как настроен сам сканер – переходим к настройке в 1С. Для этого в меню Сервис?Настройки торгового оборудования?Находим закладку Сканеры и переходим в нее и устанавливаем новый сканер штрих-кодов. В качестве обработки обычно используют входящую в поставку стандартную обработку обслуживания «1CScanOPOSScan_v2.epf». Далее заходим в “Параметры” настраиваем COM-порт и параметр Скорость сканера. Сканер штрих-кода настроен!
Категория:
Торговое оборудование Синтаксический анализ JSON - выражения средствами 1С 7.7 Код 1C v 7.x
Перем Л_Лев_Фиг_Скобка, Л_Прав_Фиг_Скобка, Л_Лев_Кв_Скобка, Л_Прав_Кв_Скобка, Л_Кавычка, Л_Экран, Л_Двоеточие, Л_Запятая, Л_Число, Л_Строка, Л_Константа, Л_Финиш;
Перем Цифры1 _9, Цифры0 _9, ПервыеСимволыКонстант, ОдносимвольныеЛексемы;
Перем НомЛексемы, ТекЛексема;
Перем JSON_Error;
Перем В_Массив, В_Объект, В_Значение;
Перем НомерСимвола;
Перем ФлагОшибки;
Перем СписокСтроковыхКонстант;
Перем СтекЛексем;
Перем АнализируемаяСтрока;
Перем ТекКаталог, ТекФайл;
Функция ПолучитьОбъект_ТЗ() Далее
Функция ПолучитьМассив_ТЗ() Далее
Функция ТекущиеСимволы(Сколько)
Возврат Сред( АнализируемаяСтрока, НомерСимвола, Сколько) ;
КонецФункции
Функция ПрошлыйСимвол(Сдвиг)
Возврат Сред( АнализируемаяСтрока, НомерСимвола - Сдвиг, 1 ) ;
КонецФункции
Процедура ДобавитьЛексему(Лексема, Значение, Сдвиг)
СтекЛексем. НоваяСтрока( ) ;
СтекЛексем. Лексема = Лексема;
СтекЛексем. Значение = Значение;
НомерСимвола = НомерСимвола + Сдвиг;
КонецПроцедуры
Процедура ОбвестиОбласть(Обл)
Обл. РамкаСнизу( 1 ) ;
Обл. РамкаСверху( 1 ) ;
Обл. РамкаСлева( 1 ) ;
Обл. РамкаСправа( 1 ) ;
КонецПроцедуры
Процедура НапечататьТЗ(Таб, ТЗ, НомС, НомК)
Перем Тип, Обл1 , НС, КС, Ключ, Зн, Обл2 ;
Тип = ТЗ. ПолучитьЗначение( 1 , 1 ) ;
НомС = НомС + 1 ;
Обл1 = Таб. Область( НомС, НомК) ;
ОбвестиОбласть( Обл1 ) ;
Если Тип = В_Значение Тогда
ТипЗн = ТЗ. ПолучитьЗначение( 2 , 1 ) ;
Обл1 . Текст = ТЗ. ПолучитьЗначение( 2 , 2 ) ;
Обл1 . ГоризонтальноеПоложение( 1 ) ;
Если ТипЗн = Л_Число Тогда
Обл1 . ГоризонтальноеПоложение( 2 ) ;
ИначеЕсли ТипЗн = Л_Константа Тогда
Обл1 . Полужирный( 1 ) ;
ИначеЕсли ТипЗн = Л_Строка Тогда
Обл1 . Контроль( 4 ) ;
КонецЕсли ;
Возврат ;
ИначеЕсли ( Тип = В_Объект) Или ( Тип = В_Массив) Тогда
Обл1 . Текст = Тип;
Обл1 . Полужирный( 1 ) ;
Обл1 . ЦветФона( 12648447 ) ;
Обл1 . РамкаСнизу( 5 ) ;
КС = ТЗ. КоличествоСтрок( ) ;
Для НС = 2 По КС Цикл
НомС = НомС + 1 ;
Обл2 = Таб. Область( НомС, НомК) ;
Обл2 . Текст = ТЗ. ПолучитьЗначение( НС, 1 ) ;
Если Тип = В_Массив Тогда
Обл2 . ГоризонтальноеПоложение( 2 ) ;
КонецЕсли ;
ОбвестиОбласть( Обл2 ) ;
НомС = НомС - 1 ;
НапечататьТЗ( Таб, ТЗ. ПолучитьЗначение( НС, 2 ) , НомС, НомК + 1 ) ;
КонецЦикла ;
Иначе
Сообщить( "Фигня " + Тип, "!" ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыравнятьТЗ(Таб, ОграничениеШирины)
Перем НомерКол, НомерСтр, МаксШирина, Обл, ТекШирина, ТекДлина;
Для НомерКол = 1 По Таб. ШиринаТаблицы( ) Цикл
МаксШирина = 0 ;
Для НомерСтр = 1 По Таб. ВысотаТаблицы( ) Цикл
Обл = Таб. Область( НомерСтр, НомерКол) ;
ТекШирина = Обл. ШиринаСтолбца( ) ;
ТекДлина = СтрДлина( СокрЛП( Обл. Текст) ) ;
МаксШирина = Макс( МаксШирина, ТекШирина, ТекДлина) ;
КонецЦикла ;
Таб. Область( , НомерКол) . ШиринаСтолбца( Мин( МаксШирина, ОграничениеШирины) ) ;
КонецЦикла ;
КонецПроцедуры
Процедура Напечатать_ТЗ(ТЗ)
Перем Таб, НС, НК, МаксШирина, ТекДлина, Обл;
Таб = СоздатьОбъект( "Таблица" ) ;
МаксНК = 1 ;
НС = 0 ;
НК = 1 ;
НапечататьТЗ( Таб, ТЗ, НС, НК) ;
ВыравнятьТЗ( Таб, 30 ) ;
Таб. Область( 1 , 1 , Таб. ВысотаТаблицы( ) , Таб. ШиринаТаблицы( ) ) . ВертикальноеПоложение( 2 ) ;
Таб. Опции( 0 , 0 ) ;
Таб. Показать( "JSON" ) ;
КонецПроцедуры
Функция Ошибка()
ФлагОшибки = 1 ;
Возврат 0 ;
КонецФункции
Функция ЧитатьКонстанту(ПервСимвол)
Перем КонстантаСтр, ДлинаКонстанты;
КонстантаСтр = СписокСтроковыхКонстант. Получить( ПервСимвол) ;
ДлинаКонстанты = СтрДлина( КонстантаСтр) ;
Если ТекущиеСимволы( ДлинаКонстанты) = КонстантаСтр Тогда
ДобавитьЛексему( Л_Константа, КонстантаСтр, ДлинаКонстанты) ;
Возврат 1 ;
Иначе
Возврат Ошибка( ) ;
КонецЕсли ;
КонецФункции
Процедура ДописатьСимвол(Стр)
Стр = Стр + ТекущиеСимволы( 1 ) ;
НомерСимвола = НомерСимвола + 1 ;
КонецПроцедуры
Функция ЧитатьЧисло()
Перем ЧислоСтр;
ЧислоСтр = "" ;
Если ТекущиеСимволы( 1 ) = "-" Тогда
ДописатьСимвол( ЧислоСтр) ;
КонецЕсли ;
Если Найти( Цифры1 _9, ТекущиеСимволы( 1 ) ) > 0 Тогда
ДописатьСимвол( ЧислоСтр) ;
Пока Найти( Цифры0 _9, ТекущиеСимволы( 1 ) ) > 0 Цикл
ДописатьСимвол( ЧислоСтр) ;
КонецЦикла ;
ИначеЕсли ТекущиеСимволы( 1 ) = "0" Тогда
ДописатьСимвол( ЧислоСтр) ;
Иначе
Возврат Ошибка( ) ;
КонецЕсли ;
Если ТекущиеСимволы( 1 ) = "." Тогда
ДописатьСимвол( ЧислоСтр) ;
Пока Найти( Цифры0 _9, ТекущиеСимволы( 1 ) ) > 0 Цикл
ДописатьСимвол( ЧислоСтр) ;
КонецЦикла ;
КонецЕсли ;
Если ВРег( ТекущиеСимволы( 1 ) ) = "E" Тогда
ДописатьСимвол( ЧислоСтр) ;
Если Найти( "+-" , ТекущиеСимволы( 1 ) ) > 0 Тогда
ДописатьСимвол( ЧислоСтр) ;
КонецЕсли ;
Пока Найти( Цифры0 _9, ТекущиеСимволы( 1 ) ) > 0 Цикл
ДописатьСимвол( ЧислоСтр) ;
КонецЦикла ;
КонецЕсли ;
ДобавитьЛексему( Л_Число, ЧислоСтр, 0 ) ;
Возврат 1 ;
КонецФункции
Функция ЧитатьСтроку()
Перем СтрокаСтр;
СтрокаСтр = "" ;
НомерСимвола = НомерСимвола + 1 ;
Пока ( ТекущиеСимволы( 1 ) < > Л_Кавычка) Или ( ( ТекущиеСимволы( 1 ) = Л_Кавычка) И ( ПрошлыйСимвол( 1 ) = Л_Экран) И ( ПрошлыйСимвол( 2 ) < > Л_Экран) ) Цикл
ДописатьСимвол( СтрокаСтр) ;
КонецЦикла ;
ДобавитьЛексему( Л_Строка, СтрокаСтр, 1 ) ;
Возврат 1 ;
КонецФункции
Функция ПрочитатьФайл(ИмяФайла)
Перем Т, НомерСтрокиФайла, СтрокаРез;
Т = СоздатьОбъект( "Текст" ) ;
Т. Открыть( ИмяФайла) ;
СтрокаРез = "" ;
Для НомерСтрокиФайла = 1 По Т. КоличествоСтрок( ) Цикл
СтрокаРез = СтрокаРез + Т. ПолучитьСтроку( НомерСтрокиФайла) ;
КонецЦикла ;
Возврат СтрокаРез;
КонецФункции
Функция СледующаяЛексема()
НомЛексемы = НомЛексемы + 1 ;
СтекЛексем. ПолучитьСтрокуПоНомеру( НомЛексемы) ;
ТекЛексема = СтекЛексем. Лексема;
Возврат 1 ;
КонецФункции
Функция ОшибкаЛексемы()
Перем РезСтр, НомСтр, ТЛ, ТС;
Сообщить( "Ошибочная лексема № " + НомЛексемы + " : <" + ТекЛексема + ">" , "!" ) ;
РезСтр = "" ;
Для НомСтр = НомЛексемы + 1 По СтекЛексем. КоличествоСтрок( ) Цикл
СтекЛексем. ПолучитьСтрокуПоНомеру( НомСтр) ;
ТЛ = СтекЛексем. Лексема;
Если ТЛ = Л_Строка Тогда
ТС = "<" + ТЛ + "(" + СтекЛексем. Значение + ")>" ;
ИначеЕсли ТЛ = Л_Константа Тогда
ТС = "<" + ТЛ + "(" + СтекЛексем. Значение + ")>" ;
Иначе
ТС = "<" + ТЛ + ">" ;
КонецЕсли ;
РезСтр = РезСтр + ТС + "," ;
КонецЦикла ;
Сообщить( Лев( РезСтр, 400 ) , "!" ) ;
Возврат 0 ;
КонецФункции
Процедура ДобавитьПару(ТЗ, Ключ, Значение)
ТЗ. НоваяСтрока( ) ;
ТЗ. Ключ = Ключ;
ТЗ. Значение = Значение;
КонецПроцедуры
Функция НоваяТЗ(Тип)
Перем _ТЗ;
_ТЗ = СоздатьОбъект( "ТаблицаЗначений" ) ;
_ТЗ. НоваяКолонка( "Ключ" ) ;
_ТЗ. НоваяКолонка( "Значение" ) ;
ДобавитьПару( _ТЗ, Тип, "" ) ;
Возврат _ТЗ;
КонецФункции
Функция ПолучитьПроизвольноеЗначение_ТЗ()
Перем ТЗ;
Если ( ТекЛексема = Л_Строка) Или ( ТекЛексема = Л_Число) Или ( ТекЛексема = Л_Константа) Тогда
ТЗ = НоваяТЗ( В_Значение) ;
ДобавитьПару( ТЗ, ТекЛексема, СтекЛексем. Значение) ;
СледующаяЛексема( ) ;
Возврат ТЗ;
ИначеЕсли ТекЛексема = Л_Лев_Фиг_Скобка Тогда
Возврат ПолучитьОбъект_ТЗ( ) ;
ИначеЕсли ТекЛексема = Л_Лев_Кв_Скобка Тогда
Возврат ПолучитьМассив_ТЗ( ) ;
КонецЕсли ;
Возврат ОшибкаЛексемы( ) ;
КонецФункции
Функция ДобавитьКлючЗначение(ТЗ)
Перем НовКлюч, НовЗначение;
Если ТекЛексема < > Л_Строка Тогда
Возврат 0 ;
КонецЕсли ;
НовКлюч = СтекЛексем. Значение;
СледующаяЛексема( ) ;
Если ТекЛексема < > Л_Двоеточие Тогда
Возврат ОшибкаЛексемы( ) ;
КонецЕсли ;
СледующаяЛексема( ) ;
НовЗначение = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
Если НовЗначение = 0 Тогда
Возврат 0 ;
КонецЕсли ;
ДобавитьПару( ТЗ, НовКлюч, НовЗначение) ;
Возврат 1 ;
КонецФункции
Функция ПолучитьОбъект_ТЗ()
Перем ТЗ;
ТЗ = НоваяТЗ( В_Объект) ;
СледующаяЛексема( ) ;
Если ТекЛексема = Л_Прав_Фиг_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
Если ДобавитьКлючЗначение( ТЗ) = 0 Тогда
Возврат 0 ;
КонецЕсли ;
Пока ТекЛексема = Л_Запятая Цикл
СледующаяЛексема( ) ;
Если ДобавитьКлючЗначение( ТЗ) = 0 Тогда
Возврат 0 ;
КонецЕсли ;
КонецЦикла ;
Если ТекЛексема = Л_Прав_Фиг_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
Возврат 0 ;
КонецФункции
Функция ПолучитьМассив_ТЗ()
Перем ТЗ, _Ключ, _Значение;
ТЗ = НоваяТЗ( В_Массив) ;
СледующаяЛексема( ) ;
Если ТекЛексема = Л_Прав_Кв_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
_Значение = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
Если _Значение = 0 Тогда
Возврат 0 ;
КонецЕсли ;
_Ключ = 0 ;
ДобавитьПару( ТЗ, _Ключ, _Значение) ;
Пока ТекЛексема = Л_Запятая Цикл
СледующаяЛексема( ) ;
_Значение = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
Если _Значение = 0 Тогда
Возврат 0 ;
КонецЕсли ;
_Ключ = _Ключ + 1 ;
ДобавитьПару( ТЗ, _Ключ, _Значение) ;
КонецЦикла ;
Если ТекЛексема = Л_Прав_Кв_Скобка Тогда
СледующаяЛексема( ) ;
Возврат ТЗ;
КонецЕсли ;
Возврат 0 ;
КонецФункции
Функция ПрочитатьОбъект_ТЗ()
Перем Рез;
НомЛексемы = 0 ;
СледующаяЛексема( ) ;
Если ТекЛексема = Л_Лев_Фиг_Скобка Тогда
Рез = ПолучитьОбъект_ТЗ( ) ;
ИначеЕсли ТекЛексема = Л_Лев_Кв_Скобка Тогда
Рез = ПолучитьМассив_ТЗ( ) ;
Иначе
Рез = ПолучитьПроизвольноеЗначение_ТЗ( ) ;
КонецЕсли ;
Если ( Рез = 0 ) Или ( ТекЛексема < > Л_Финиш) Тогда
ОшибкаЛексемы( ) ;
Возврат 0 ;
КонецЕсли ;
Возврат Рез;
КонецФункции
Функция СгенерироватьТЗ(НачАнализируемаяСтрока)
Перем НачальныйСимвол, Рез;
АнализируемаяСтрока = НачАнализируемаяСтрока;
СтекЛексем = СоздатьОбъект( "ТаблицаЗначений" ) ;
СтекЛексем. НоваяКолонка( "Лексема" , "Строка" ) ;
СтекЛексем. НоваяКолонка( "Значение" , "Строка" ) ;
ФлагОшибки = 0 ;
НомерСимвола = 1 ;
Пока НомерСимвола < = СтрДлина( АнализируемаяСтрока) Цикл
НачальныйСимвол = ТекущиеСимволы( 1 ) ;
Если Найти( " " + Симв( 9 ) , НачальныйСимвол) > 0 Тогда
НомерСимвола = НомерСимвола + 1 ;
ИначеЕсли НачальныйСимвол = Л_Кавычка Тогда
ЧитатьСтроку( ) ;
ИначеЕсли Найти( ОдносимвольныеЛексемы, НачальныйСимвол) > 0 Тогда
ДобавитьЛексему( НачальныйСимвол, "" , 1 ) ;
ИначеЕсли Найти( ПервыеСимволыКонстант, НачальныйСимвол) > 0 Тогда
Если ЧитатьКонстанту( НачальныйСимвол) = 0 Тогда
Прервать;
КонецЕсли ;
ИначеЕсли Найти( "-" + Цифры0 _9, НачальныйСимвол) > 0 Тогда
Если ЧитатьЧисло( ) = 0 Тогда
Прервать;
КонецЕсли ;
Иначе
Сообщить( "========= " + НомерСимвола, "!" ) ;
Сообщить( НачальныйСимвол, "!" ) ;
Сообщить( "<" + НачальныйСимвол + "> " + КодСимв( НачальныйСимвол) , "!" ) ;
Сообщить( ТекущиеСимволы( 100 ) , "!" ) ;
Возврат 0 ;
КонецЕсли ;
КонецЦикла ;
Если ФлагОшибки < > 0 Тогда
Сообщить( "Ошибка парсинга JSON - выражения" , "!" ) ;
Возврат 0 ;
ИначеЕсли СтекЛексем. КоличествоСтрок( ) = 0 Тогда
Сообщить( "Пустой стек" , "!" ) ;
Возврат 0 ;
КонецЕсли ;
ДобавитьЛексему( Л_Финиш, "" , 0 ) ;
Возврат ПрочитатьОбъект_ТЗ( ) ;
КонецФункции
Функция JSON_Error(Стр = "" )
Если Стр < > "" Тогда
Сообщить( "JSON-ОШИБКА: " + Стр, "!" ) ;
КонецЕсли ;
Возврат JSON_Error;
КонецФункции
Функция JSON_Type(Парам)
Если ТипЗначенияСтр( Парам) < > "ТаблицаЗначений" Тогда
Возврат JSON_Error( ) ;
ИначеЕсли Парам. КоличествоКолонок( ) < > 2 Тогда
Возврат JSON_Error( ) ;
ИначеЕсли Парам. КоличествоСтрок( ) < 2 Тогда
Возврат JSON_Error( ) ;
КонецЕсли ;
Возврат Парам. ПолучитьЗначение( 1 , 1 ) ;
КонецФункции
Функция JSON_GetValue(Парам, Keys)
Перем Тип, До, После, ПозЗакр, Л1 , П2 , Инд, ИндСтр, НС, КвоСтрок;
Тип = JSON_Type( Парам) ;
ПозЗакр = Найти( Keys, "]" ) ;
Если ПозЗакр = 0 Тогда
ПозЗакр = СтрДлина( Keys) + 1 ;
КонецЕсли ;
До = Лев( Keys, ПозЗакр) ;
После = Сред( Keys, ПозЗакр + 1 ) ;
Л1 = Лев( До, 1 ) ;
П2 = Найти( До, "]" ) ;
Если Тип = JSON_Error Тогда
Возврат JSON_Error( "Параметра" ) ;
КонецЕсли ;
КвоСтрок = Парам. КоличествоСтрок( ) ;
Если До = "" Тогда
Если ( Тип = В_Массив) Или ( Тип = В_Объект) Тогда
Возврат JSON_Error( ) ;
ИначеЕсли Тип = В_Значение Тогда
Возврат Парам. ПолучитьЗначение( 2 , 2 ) ;
Иначе
Возврат JSON_Error( "№ 1" ) ;
КонецЕсли ;
ИначеЕсли До = ".length" Тогда
Если ( Тип = В_Массив) Или ( Тип = В_Объект) Тогда
Возврат Парам. КоличествоСтрок( ) - 1 ;
Иначе
Возврат JSON_Error( "Длина скаляра" ) ;
КонецЕсли ;
ИначеЕсли Л1 = "[" Тогда
Если П2 = 0 Тогда
Возврат JSON_Error( "Индексация: <" + До + ">" ) ;
КонецЕсли ;
Инд = Сред( До, 2 , П2 - 2 ) ;
Если ( Найти( "'"" " , Лев( Инд, 1 ) ) > 0 ) И ( Найти( "'"" " , Прав( Инд, 1 ) ) > 0 ) Тогда
ИндСтр = Сред( Инд, 2 , СтрДлина( Инд) - 2 ) ;
Если Тип < > В_Объект Тогда
Возврат JSON_Error( "Строковый индекс <" + ИндСтр + "> только для Объекта" ) ;
КонецЕсли ;
НС = 0 ;
Если Парам. НайтиЗначение( ИндСтр, НС, 1 ) = 1 Тогда
Возврат JSON_GetValue( Парам. ПолучитьЗначение( НС, 2 ) , После) ;
КонецЕсли ;
Возврат JSON_Error( "Нет индекса <" + ИндСтр + ">" ) ;
КонецЕсли ;
ИндЧис = 0 + Инд;
Если "" + ИндЧис < > Инд Тогда
Возврат JSON_Error( "Ошибка 1 числового индекса <" + Инд + ">" ) ;
ИначеЕсли Цел( ИндЧис) < > ИндЧис Тогда
Возврат JSON_Error( "Ошибка 2 числового индекса <" + Инд + "> (нецелый)" ) ;
ИначеЕсли ИндЧис < 0 Тогда
Возврат JSON_Error( "Ошибка 3 числового индекса <" + Инд + "> (отрицательный)" ) ;
ИначеЕсли ИндЧис > ( КвоСтрок - 2 ) Тогда
Возврат JSON_Error( "Ошибка 4 числового индекса <" + Инд + "> (" + ИндЧис + ">" + ( КвоСтрок - 2 ) + ")" ) ;
КонецЕсли ;
Возврат JSON_GetValue( Парам. ПолучитьЗначение( ИндЧис + 1 , 2 ) , После) ;
Иначе
Возврат JSON_Error( "Ошибка 5 <" + До + ">" ) ;
КонецЕсли ;
КонецФункции
Процедура ПриОткрытии()
Перем Рез1 , ТипУзла1 , Зн1 , Значение;
ОчиститьОкноСообщений( ) ;
СтатусВозврата( 0 ) ;
Рез1 = СгенерироватьТЗ( ПрочитатьФайл( ТекКаталог + "j1.json" ) ) ;
Напечатать_ТЗ( Рез1 ) ;
ТипУзла1 = JSON_Type( Рез1 ) ;
Сообщить( "Тип узла: " + ТипУзла1 ) ;
Зн1 = JSON_GetValue( Рез1 , ".length" ) ; Сообщить( "1) Размер: " + Зн1 ) ;
Зн3 = JSON_GetValue( Рез1 , "['1']" ) ; Сообщить( "3) ['1']: <" + Зн3 + ">" ) ;
Зн4 = JSON_GetValue( Рез1 , "[1]" ) ; Сообщить( "4) [1]: <" + Зн4 + ">" ) ;
Зн5 = JSON_GetValue( Рез1 , "['Массив'][6]" ) ; Сообщить( "5) [*]: <" + Зн5 + ">" ) ;
Зн6 = JSON_GetValue( Рез1 , "['Соответствие']['ДопустимоеИмяСвойства']" ) ; Сообщить( "6) [*]: <" + Зн6 + ">" ) ;
КонецПроцедуры
Процедура ДобавитьСтроковуюКонстанту(КонстантаСтр)
Перем ПервыйСимвол;
ПервыйСимвол = Лев( КонстантаСтр, 1 ) ;
ПервыеСимволыКонстант = ПервыеСимволыКонстант + ПервыйСимвол;
СписокСтроковыхКонстант. Установить( ПервыйСимвол, КонстантаСтр) ;
КонецПроцедуры
РасположениеФайла( ТекКаталог, ТекФайл) ;
Л_Лев_Фиг_Скобка = "{" ;
Л_Прав_Фиг_Скобка = "}" ;
Л_Лев_Кв_Скобка = "[" ;
Л_Прав_Кв_Скобка = "]" ;
Л_Двоеточие = ":" ;
Л_Запятая = "," ;
Л_Экран = "\" ;
Л_Кавычка = """ " ;
Л_Финиш = "" ;
Л_Число = "number" ;
Л_Строка = "string" ;
Л_Константа = "const" ;
ОдносимвольныеЛексемы = Л_Лев_Фиг_Скобка + Л_Прав_Фиг_Скобка + Л_Лев_Кв_Скобка + Л_Прав_Кв_Скобка + Л_Двоеточие + Л_Запятая;
Цифры1 _9 = "123456789" ;
Цифры0 _9 = "0" + Цифры1 _9;
В_Массив = "###array" ;
В_Объект = "###object" ;
В_Значение = "###value" ;
СписокСтроковыхКонстант = СоздатьОбъект( "СписокЗначений" ) ;
ПервыеСимволыКонстант = "" ;
ДобавитьСтроковуюКонстанту( "null" ) ;
ДобавитьСтроковуюКонстанту( "false" ) ;
ДобавитьСтроковуюКонстанту( "true" ) ;
JSON_Error = "ERROR" ;
В качестве примера взят файл j1.json :
{
"999": 88,
"Null": null,
"Сэкраном": "\"",
"Ложь": false,
"ОдинСимв": "1",
"1": "11111",
"Пустышка": "",
"Истина": true,
"Число (плавающая точка)": 1.001e-2,
"Число (плавающая)": -1.001e-2,
"Число (фиксированная точка)": -1000.001,
"Дата": "2011-01-01T12:00:00Z",
"Строка (двойная кавычка)": "Двойная кавычка",
"Строка (одинарная кавычка)": "Одинарная кавычка",
"Маскируемые символы": " \\ \/ \b \t \n \f \r \" ",
"Заковыристая строка": "\\n\\",
"Проблемные символы": "Спец. символы: \u0000, \u0001, \u0002, ... , \u001e, \u001f; Юникод символы: \u0421\u0430\u0448\u0430\u0020\u003a\u0029",
"Кириллические символы": "’АБВГҐДЂЃЕ?ЁЄЖЗЅИ?ІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ",
"Идентификатор": "a763cfbb-f94f-4c67-8e13-0e96a3a7f353",
"Пустой массив": [],
"Пустой объект": {},
"Массив": [
null,
false,
true,
1.001e-2,
-1000.001,
"2011-01-01T12:00:00Z",
"Двойная кавычка",
"Одинарная кавычка",
"a763cfbb-f94f-4c67-8e13-0e96a3a7f353",
[
"Первый элемент",
"Второй элемент"
],
{
"Имя": "Александр",
"Отчество": "Владимирович",
"Фамилия": "Переверзев"
},
{
"ДопустимоеИмяСвойства": true,
"Недопустимое Имя Свойства": false
}
],
"Структура":
{
"Имя": "Александр",
"Отчество": "Владимирович",
"Фамилия": "Переверзев"
},
"Соответствие":
{
"ДопустимоеИмяСвойства": true,
"Недопустимое Имя Свойства": false
},
"Ссылка":
{
"Ссылка": "00000000-0000-0000-0000-000000000000",
"Представление": "Неизвестная ссылка"
},
"COMSafeArray": [
0,
1,
2,
3,
4,
5
]
}
Категория:
HTML, JS, VML Отслеживание получения оригиналов документов от контрагентов. В программе появилась возможность отследить получение оригиналов документов от контрагентов.
Основное применение - легкий и удобный механизм учета наличия и возврата бумажных оригиналов документов в бухгалтерии.
Галка в документе:
В списке документов:
Если Вам необходимо данное решение в других конфигурациях, то мы можем помочь вам это настроить!
Пример реализации в Бухгалтерии 2.0: http://all4cf.ru/auto-otslezhivanie_nalichiya_buma...
Категория:
1С Бухгалтерия 3.0 Вопрос/Сообщение пользователю. Интерфейс Добрый день. Прошу помочь. надо вывести вопрос пользователю, при попытке изменить содержимое поля ввода. В синтакс-помощнике есть примерно такой вариант решения. Пробую при нажатии кнопки "отмена" или "нет"
все равно открывается справочник для выбора пользователя, нужно отменить это, а "Отказ", "Возврат" почему то не работают.........
Процедура ПолеВводаАвторНачалоВыбора(Элемент, СтандартнаяОбработка)
Режим = РежимДиалогаВопрос.ОКОтмена;
текст = "Сменить автора документа?";
ответ= вопрос (Текст, Режим, 0);
Если Ответ = КодВозвратаДиалога.Отмена Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
Категория:
1С Общие вопросы - Обычные формы Как получить текст из html? Один мой хороший клиент использует встроенный в 1С почтовый клиент.
До этого все работало хорошо, но недавно из-за установки нового банк-клиента на компьютере обновили Internet Explorer до 11 версии - стала появляться ошибка:
Поле объекта не обнаружено innerText
Пришлось немного доработать типовую функцию получения текста из html:
Код 1C v 8.х Функция ПреобразоватьТекстИзХТМЛФорматаВПростой(ТекстВФорматеХТМЛ) Экспорт
Попытка
НовыйHTMLДокумент = Новый COMОбъект( "HtmlFile" ) ;
НовыйHTMLДокумент. open( "text/html" ) ;
НовыйHTMLДокумент. write( ТекстВФорматеХТМЛ) ;
НовыйHTMLДокумент. close( ) ;
Возврат СтрЗаменить( НовыйHTMLДокумент. all. item( 0 ) . innerText, Символ( 13 ) , "" ) ;
Исключение
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML. УстановитьСтроку( ТекстВФорматеХТМЛ) ;
ДокументHTML = Построитель. Прочитать( ЧтениеHTML) ;
Возврат СокрЛП( ДокументHTML. Тело. ТекстовоеСодержимое) ;
КонецПопытки ;
КонецФункции
еще функции пример получения:
Код 1C v 8.х
Функция удИзменитьФорматТекста(ЭУHTML,ЭУТекст, Кнопка) Экспорт
Если ТипЗнч( Кнопка) = Тип( "Строка" ) Тогда
НовыйВидТекстаПисьма = Кнопка;
ЕстьКнопка = Ложь ;
Иначе
Если Кнопка. Пометка Тогда
Возврат Ложь ;
КонецЕсли ;
НовыйВидТекстаПисьма = Кнопка. Текст;
ЕстьКнопка = Истина ;
КонецЕсли ;
Если Найти( НовыйВидТекстаПисьма, "Простой текст" ) > 0 Тогда
ИсходныйТекст = ЭУHTML. ПолучитьТекст( ) ;
НачалоBODY = Найти( ИсходныйТекст, "<BODY>" ) ;
КонецBODY = Найти( ИсходныйТекст, "</BODY>" ) ;
Если ЕстьКнопка и ( НачалоBODY > 0 И КонецBODY > 0 И ( НачалоBODY + 6 ) < КонецBODY) Тогда
СтрокаВопроса = "Будет потеряно форматирование текста. Продолжить?" ;
ОтветНаВопрос = Вопрос( СтрокаВопроса, РежимДиалогаВопрос. ДаНет, , КодВозвратаДиалога. Нет) ;
Если ОтветНаВопрос < > КодВозвратаДиалога. Да Тогда
Возврат Ложь ;
КонецЕсли ;
КонецЕсли ;
ФорматТекста = ЭУHTML. Документ. all. item( 0 ) . innerText;
ЭУТекст. Значение = СтрЗаменить( ФорматТекста, Символ( 13 ) , "" ) ;
ЭУТекст. Видимость = Истина ;
ЭУHTML. Видимость = Ложь ;
ЭУHTML. УстановитьТекст( "" ) ;
Иначе
ФорматХТМЛ = СтрЗаменить( ЭУТекст. Значение, Символы. ПС, "<BR>" ) ;
ЭУHTML. УстановитьТекст( ФорматХТМЛ) ;
ЭУHTML. Видимость = Истина ;
ЭУТекст. Видимость = Ложь ;
КонецЕсли ;
Если ЕстьКнопка Тогда
Кнопка. Пометка = Истина ;
КонецЕсли ;
Возврат Истина ;
КонецФункции
Категория:
Работа с Интернет, Почтой (Mail), FTP Как прочитать записи регистра сведений установив отбор и удалить записи? Прочитать записи регистра сведений можно двумя способами: Через Набор Записей или Менеджер
Вот пример через набор записей :
Код 1C v 8.х
НаборЗаписей = РегистрыСведений. ДокументоОборот. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Доставка. Установить( Доставка) ;
НаборЗаписей. Отбор. Этап. Установить( Этап) ;
НаборЗаписей. Прочитать( ) ;
Для каждого Запись из НаборЗаписей Цикл
Запись. ДатаВремя = ДатаР;
Запись. Отдел = фио. Подразделение;
Запись. ФИО = ПараметрыСеанса. ТекущийПользователь;
Запись. Документы = Документы;
Запись. Примечание = Примечание;
КонецЦикла ;
НаборЗаписей. Записать( ) ;
Пример с использованием набора записей и менеджера записи:
Код 1C v 8.х НаборЗаписей = РегистрыСведений. CRM_Напоминания. СоздатьНаборЗаписей( ) ;
Отбор = НаборЗаписей. Отбор;
Отбор. Объект. Установить( Объект. Ссылка) ;
Отбор. Завершено. Установить( Ложь ) ;
НаборЗаписей. Прочитать( ) ;
Если НаборЗаписей. Количество( ) > 0 Тогда
Если ЗадаватьВопрос Тогда
ТекстВопроса = "Завершить все напоминания для " + Строка( Объект. Ссылка) + " ?" ;
Ответ = Вопрос( ТекстВопроса, РежимДиалогаВопрос. ДаНет, , КодВозвратаДиалога. Да) ;
Иначе
Ответ = КодВозвратаДиалога. Да
КонецЕсли ;
Если Ответ = КодВозвратаДиалога. Да Тогда
Для каждого Запись Из НаборЗаписей Цикл
РегистрСведенийМенеджерЗаписи = РегистрыСведений. CRM_Напоминания. СоздатьМенеджерЗаписи( ) ;
ЗаполнитьЗначенияСвойств( РегистрСведенийМенеджерЗаписи, Запись) ;
РегистрСведенийМенеджерЗаписи. Прочитать( ) ;
Если РегистрСведенийМенеджерЗаписи. Выбран( ) Тогда
Если НЕ РегистрСведенийМенеджерЗаписи. УдалитьПоИстеченииСрока Тогда
РегистрСведенийМенеджерЗаписи. Завершено = Истина ;
РегистрСведенийМенеджерЗаписи. Записать( ) ;
Иначе
РегистрСведенийМенеджерЗаписи. Удалить( ) ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЕсли ;
А вот пример через менеджер записи:
Код 1C v 8.х МенеджерЗаписи = РегистрыСведений. НоменклатураКонтрагентов. СоздатьМенеджерЗаписи( ) ;
МенеджерЗаписи. Контрагент = Контрагент;
МенеджерЗаписи. Номенклатура = СтрокаТаблицыТовары. Номенклатура;
МенеджерЗаписи. ХарактеристикаНоменклатуры = СтрокаТаблицыТовары. ХарактеристикаНоменклатуры;
МенеджерЗаписи. Прочитать( ) ;
Если МенеджерЗаписи. Выбран( ) Тогда
Вес = МенеджерЗаписи. ВесНоменклатурыКонтрагента;
КонецЕсли ;
Категория:
Регистры сведений Пример хранения изображений в базе (отдельный справочник), в интерфейсе Такси и без модальности Часто разрабатывая некую конфигурацию, пользователи хотят прикреплять к элементу справочника фото и чтобы они хранились в базе данных.
В этой статье я расскажу как к справочнику объекты строительства подключить хранилище фотографий в виде справочника Хранилище файлов.
Основные элементы конфигурации с которыми нам работать :
1. Справочник Объекты строительства - основной справочник в котором хранится инфо и к каждому элементу нужно подгружать фото
2. Справочник Хранилище Фалов, он подчинен справочнику Объекты строительства и в нем есть реквизит ДанныеХЗ - хранилище значений в котором мы будем хранить фото
Форма элемента Объекты строительства , добавим кнопку загрузить фото для списка Файлы (динамический список, в котором запросом отбирается по владельцу приложенные файлы)
Код команды Добавить Файлы (Код для отключенного режима модальности):
Код 1C v 8.3 &НаКлиенте
Процедура ДобавитьФайлы()
Если ЗначениеЗаполнено( Объект. Ссылка) Тогда
Оповещение = Новый ОписаниеОповещения( "ОбработатьВыборФайла" , ЭтотОбъект) ;
НачатьПомещениеФайла( Оповещение, , , Истина , УникальныйИдентификатор) ;
Иначе
Оповещение = Новый ОписаниеОповещения( "ОтветНаВопросЗаписать" , ЭтотОбъект) ;
ТекстВопроса = "Элемент не записан, Записать?" ;
ПоказатьВопрос( Оповещение, ТекстВопроса, РежимДиалогаВопрос. ДаНет) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОтветНаВопросЗаписать(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога. Да Тогда
ЭтотОбъект. Записать( ) ;
ДобавитьФайлы( ) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат ;
КонецЕсли ;
ОписаниеФайла = Новый Файл( ВыбранноеИмяФайла) ;
СохранитьФайлВХранилище( Адрес, Объект. Ссылка, ОписаниеФайла. ИмяБезРасширения) ;
Элементы. Файлы. Обновить( ) ;
ЭтаФорма. ОбновитьОтображениеДанных( ) ;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СохранитьФайлВХранилище(Адрес,Владелец,Имя)
НовФайл = Справочники. ХранилищеФайлов. СоздатьЭлемент( ) ;
НовФайл. Владелец = Владелец;
НовФайл. Наименование = Имя;
НовФайл. ДанныеТекущаяДата = ТекущаяДата( ) ;
НовФайл. ДанныеХЗ = Новый ХранилищеЗначения( ПолучитьИзВременногоХранилища( Адрес) ) ;
НовФайл. Записать( ) ;
КонецПроцедуры
файлы записаны, далее если файлов много, то пользователь может перемещаться по списку файлов и ему должны показываться файлы
Добавим для списка файлы Событие ФайлыПриАктивизацииСтроки
Код 1C v 8.3 &НаКлиенте
Процедура ФайлыПриАктивизацииСтроки(Элемент)
Попытка
ТекКартинка = ФайлыПриАктивизацииСтрокиНаСервере( Элемент. ТекущиеДанные. Ссылка) ;
Исключение
КонецПопытки ;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ФайлыПриАктивизацииСтрокиНаСервере(ЭлементС)
Возврат ПолучитьНавигационнуюСсылку( ЭлементС, "ДанныеХЗ" ) ;
КонецФункции
+ чуть не забыл, т.к. файлы это динамический список с установленным запросом и параметром - необходимо при открытии задать параметр:
Установим параметр при открытии:
Код 1C v 8.3 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Файлы. Параметры. УстановитьЗначениеПараметра( "Владелец" , Объект. Ссылка) ;
КонецПроцедуры
Результат:
Скачать DT с примером : Foto_V_BD.7z
Если у Вас есть вопросы или комментарии - пишите ниже, обсудим
Категория:
1С Общие вопросы - Управляемые формы и Такс… Авто добавление обработки в справочник Внешних обработок Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автоматически добавляет в конфигурацию:
Код 1C v 8.х ПолноеИмяФайлаОбработки = ЭтотОбъект. ИспользуемоеИмяФайла;
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Наименование" , ЭтотОбъект. Метаданные( ) . Синоним) ;
Запрос. УстановитьПараметр( "ВидОбработки" , Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма) ;
Запрос. Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВнешниеОбработки.Ссылка
|ИЗ
| Справочник.ВнешниеОбработки КАК ВнешниеОбработки
|ГДЕ
| ВнешниеОбработки.Наименование = &Наименование
| И ВнешниеОбработки.ВидОбработки = &ВидОбработки" ;
Если НЕ Запрос. Выполнить( ) . Пустой( ) Тогда Возврат ; КонецЕсли ;
Если Вопрос( "Зарегистрировать обработку как печатную форму для документа "" ЗарплатаКВыплатеОрганизаций"" в справочнике "" Внешние обработки"" ?" , РежимДиалогаВопрос. ДаНет) = КодВозвратаДиалога. Да Тогда
ВнешняяОбработка = Справочники. ВнешниеОбработки. СоздатьЭлемент( ) ;
ВнешняяОбработка. Наименование = ЭтотОбъект. Метаданные( ) . Синоним;
ВнешняяОбработка. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
ВнешняяОбработка. ВидОбработки = Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма;
ВнешняяОбработка. Комментарий = "Внешняя печатная форма для документа "" ЗарплатаКВыплатеОрганизаций"" " ;
ВнешняяОбработка. КомментарийКФайлуИсточнику = ПолучитьКомментарийКФайлу( ПолноеИмяФайлаОбработки) ;
НовСтр = ВнешняяОбработка. Принадлежность. Добавить( ) ;
НовСтр. ПредставлениеОбъекта = "Документ "" Зарплата к выплате организаций"" " ;
НовСтр. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
НовСтр. СсылкаОбъекта = Документы. ЗарплатаКВыплатеОрганизаций. ПустаяСсылка( ) ;
Попытка
ВнешняяОбработка. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
КонецПопытки ;
КонецЕсли ;
Категория:
1С Общие вопросы - Обычные формы Табличная часть ~ Как получить массив строк по условию (отбору)? Для УП:
Код 1C v 8.3
&НаКлиенте
. . . .
ФМ= Новый ФиксированнаяСтруктура( "КлючСвязи" , Элементы. ДанныеБезКоррекции. ТекущиеДанные. КлючСвязи) ;
Элементы. СписокПодразделений. ОтборСтрок= ФМ;
Код 1C v 8.3
Функция ПолучитьЗаписиСогласноОтбору(ТабличноеПолеИсточник)
ОтборСтрок = ТабличноеПолеИсточник. ОтборСтрок;
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса. ИсточникДанных = Новый ОписаниеИсточникаДанных( ТабличноеПолеИсточник. Значение) ;
Для Каждого ЭлементОтбора Из ОтборСтрок Цикл
Если ЭлементОтбора. Использование Тогда
НовыйОтбор = ПостроительЗапроса. Отбор. Добавить( ЭлементОтбора. Имя) ;
НовыйОтбор. Использование = Истина ;
НовыйОтбор. ВидСравнения = ЭлементОтбора. ВидСравнения;
НовыйОтбор. ЗначениеС = ЭлементОтбора. ЗначениеС;
НовыйОтбор. ЗначениеПо = ЭлементОтбора. ЗначениеПо;
НовыйОтбор. Значение = ЭлементОтбора. Значение;
КонецЕсли ;
КонецЦикла ;
Таблица = ПостроительЗапроса. Результат. Выгрузить( ) ;
МассивСтрок = Новый Массив;
Для Каждого Стр ИЗ Таблица Цикл
СтруктураПоиска = Новый Структура;
Для Каждого Колонка Из Таблица. Колонки Цикл
СтруктураПоиска. Вставить( Колонка. Имя, Стр[Колонка. Имя]) ;
КонецЦикла ;
НайденыеСтроки = ТабличноеПолеИсточник. Значение. НайтиСтроки( СтруктураПоиска) ;
Если НайденыеСтроки. Количество( ) > 0 Тогда
МассивСтрок. Добавить( НайденыеСтроки[0 ]) ;
КонецЕсли ;
КонецЦикла ;
Возврат МассивСтрок;
КонецФункции
Для Обычных форм:
Код 1C v 8.х ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ДокСсылка", ДанныеПоШК.Объект);
НайденныеСтроки = ПакетДокументов.НайтиСтроки(ПараметрыОтбора);
// Подробнее
СтруктураОтбора = Новый Структура("ВидДокумента, Контрагент", ПФ, ?(Контр = Неопределено, Справочники.Контрагенты.ПустаяСсылка(), Контр));
ПакетДокументов = ЗадачаОбъект.ПакетДокументов;
МассивСтрок = ПакетДокументов.НайтиСтроки(СтруктураОтбора);
Если МассивСтрок.Количество() Тогда
Для Каждого СтрокаМассива Из МассивСтрок Цикл
СтрокаМассива.ДобавленоПользователем = Истина;
СтрокаМассива.Пользователь = ПараметрыСеанса.ТекущийПользователь;
СтрокаМассива.ДатаВремя = ТекущаяДата();
КонецЦикла;
КонецЕсли;
//или
ТЧ = ПромежуточнаяНакладная.Выгрузить();
ТЧ.Свернуть("СхемаПродажи");
СтрокаСПустойСП = ТЧ.НайтиСтроки(Новый Структура("СхемаПродажи", Справочники.СхемыПродаж.ПустаяСсылка()));
Если ТЧ.Количество() - СтрокаСПустойСП.Количество() > 1 Тогда
Если Вопрос("Сбросить все схемы в строках?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
НесколькоСхем = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
Для каждого СтрокаПН из ПромежуточнаяНакладная Цикл
Если СтрокаПН.Номенклатура.ВидНоменклатуры.ТипНоменклатуры <> Перечисления.ТипыНоменклатуры.Услуга Тогда
СтрокаПН.СхемаПродажи = СхемаПродажи;
КонецЕсли;
КонецЦикла;
Категория:
Работа с Формой (Диалог) и её элементами Настройка счетов учета расчетов с контрагентами в 1С Бух 2.0 Для настройки счетов учета расчетов с контрагентами необходимо зайти в меню:
Справочники/Бухгалтерский и налоговый учет/Счета учета расчетов с контрагентами
Счета учета расчетов с контрагентами настраиваются при первом запуске программы, вместе с настройками учетных политик и констант.
Настройки определяют, те счета бухгалтерского учета расчетов и авансов, которые будут подставляться в документах: расходных, приходных накладных, возврата х, таможенных декларациях, поступлениях дополнительных расходов, авансовых отчетах, платежках, кассовых ордерах и.т.д.
Нажмите кнопку «Изменить» на записи с видом расчета «Расчеты в валюте регламентированного учета (с резидентами)».
Организация определяет настройку счетов учета в разрезе каждой из организаций, введенных в нашу базу, для того чтобы настройки счетов учета распространялись на все организации, это поле можно не заполнять.
Настройка Контрагент и договор – также выполняет детализацию счетов расчетов по каждому из введенных контрагентов и договоров, если поля пустые, настройки распространяются на всех контрагентов, введенных в справочник контрагентов.
Вид расчетов – определяет, выполняется ли настройка для резидентов или для не резидентов
Детализация настроек по контрагентам и договорам имеет смысл в том случае, если с определенными контрагентами ожидаются специфические настройки счетов взаиморасчетов, например по счетам 6851, 3771.
Но даже в таком случае имеет смысл собрать всех таких контрагентов в одну папку и настроить счета учета в целом на папку.
На закладке Счета учета НДС настраиваются счета бухгалтерского учета по НДС кредиту и обязательствам, а также ставки НДС.
Чем более крупненно настроены настройки взаиморасчетов, тем лучше: на всю папку, на всех покупателей, на всю организацию и.т.д
FaceЧем более крупненно настроены настройки взаиморасчетов, тем лучше: на всю папку, на всех покупателей, на всю организацию и.т.д
Если вы не используете счета авансов НЕ ОСТАВЛЯЙТЕ поля: авансов выданных, авансов полученных пустыми, заполняйте их ТЕМИ ЖЕ СЧЕТАМИ как и для взаиморасчетов.
Это позволит избежать случаев не сворачивания вторых событий по документу аванса.
Резюмируя:
Настройки счетов учета желательно выполнить сразу же после установки программы.
Максимально укрупнить их по папкам или в целом по организации.
Обязательно обратить внимание на счета авансов они должны быть такими же, как и счета учета взаиморасчетов, если мы не используем счета авансов у себя в организации.
Счета учета взаиморасчетов, так же как и ставки НДС могут быть изменены в самих первичных документах при отражении хозяйственных операций.
Категория:
1С Бухгалтерия 2.0 Использование модальных окон в данном режиме запрещено! Модальные окна не работают, как быть? В конфигураторе в свойства конфигурации, есть параметр «Режим использования модальности»
Если установить Не использовать , то - принципе весь код, который после ОткрытьФормуМодально() Вопрос(), Предупреждение(), Выборов и диалогов открытия-сохранения станет работать с ошибками!
Рассмотрим пример с Использовать :
Код 1C v 8.3 &НаКлиенте
Процедура КомандаВопрос(Команда)
Ответ = Вопрос( "Ну что скажешь? " , РежимДиалогаВопрос. ДаНет) ;
Если Ответ = КодВозвратаДиалога. Да Тогда
Сообщить( "Ответили ДА!" ) ;
КонецЕсли ;
КонецПроцедуры
В режиме Предприятие получаем
Если мы поставим Режим использования модальности = Не использовать то получим ошибку: Использование модальных окон в данном режиме запрещено
Теперь код нужно писать по новому:
Код 1C v 8.3 &НаКлиенте
Процедура КомандаВопросПоНовому(Команда)
Оповещение = Новый ОписаниеОповещения( "ОтветНаВопросЗавершение" , ЭтотОбъект) ;
ТекстВопроса = "Ну что скажешь?" ;
ПоказатьВопрос( Оповещение, ТекстВопроса, РежимДиалогаВопрос. ДаНет) ;
КонецПроцедуры
&НаКлиенте
Процедура ОтветНаВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога. Да Тогда
Сообщить( "Ответили ДА" ) ;
КонецЕсли ;
КонецПроцедуры
в результате
Почему 1С решила отказаться от использования модальных окон ?
В наш век развития мобильных технологий все идет к тому - что скоро все будут работать на планшетах и телефонах. 1С сделала для этого «Web Клиент» и «Мобильное приложение». И чтобы успешно двигаться вперед нужно решать такие проблемы как, блокировка всплывающих окон. Ведь даже обычные браузеры по умолчанию блокируют модальные (всплывающие) окна!
Категория:
1С Общие вопросы - Управляемые формы и Такс… Загрузить данные в 1с из текстового файла с разделителями В этой статье я расскажу, как загружать данные в 1с 8 из простейших текстовых файлов с разделителями. Обычно они имеют расширение csv (Comma-Separated Values). Т. е. название подразумевает, что в каждой строке такого текстового файла значения разделены запятой. Но на самом деле, запятую, в качестве разделителя, использовать не надёжно. Поэтому применяют другие разделители, которые в обычном тексте встречаются редко. Это могут быть символы «^», «~»,«|» и другие. Итак, наша задача состоит в том, чтобы загрузить имеющуюся в csv файле информацию в базу данных 1с. Например, в файле будут содержаться товары интернет - магазина. В качестве образца, я взял выгрузку из магазина на скрипте virtuemart. Посмотрим, как выглядит файл.
Привожу две первых строки из него:
Код ~product_sku~^~category_path~^~product_name~^~product_desc~
~20~^~Книги/Электронные книги~^~Amazon Kindle 4 Touch~^~<p>Популярная электронная книга с ч/б экраном 6", электронной бумагой E-Ink Pearl, разрешением 600x800 пикс. с 16 - ю оттенками серого.</p>~
Посмотрим на файл.
Первая строка служебная. В ней описан формат нашего файла. Т. е. в какой ячейке, что находится. Однако, имейте в виду, что такой строки может и не быть.
Ячейки образуются при помощи разделителя «^», а данные в ячейках обрамляются символом «~».
В любой конфигурации 1с есть иерархический справочник товаров. В него и будем загружать информацию.
Создадим внешнюю обработку. Добавим строковый реквизит «путьКФайлуЗагрузки» для хранения имени файла. Добавим на форму поле ввода, связанное с данным реквизитом. Включим в свойствах поля ввода кнопку выбора и создадим обработчик события «НачалоВыбора» и напишем в нём такой код:
Код 1C v 8.х Процедура путьКФайлуЗагрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла. Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = "" ;
Фильтр = "Comma separated file (*.csv)|*.csv" ;
ДиалогОткрытияФайла. Фильтр = Фильтр;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
ДиалогОткрытияФайла. Заголовок = "Выберите файл" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
путьКФайлуЗагрузки = ДиалогОткрытияФайла. ПолноеИмяФайла;
КонецЕсли ;
КонецПроцедуры
Т. о. мы организовали диалог для выбора файла в нашей обработке.
Хорошо. Теперь, для удобства и наглядности я предлагаю создать временную табличку, в которую мы загрузим текстовый файл, а уже после её заполнения - будем осуществлять загрузку в базу 1с. Для этого, на форму добавим табличное поле «табЗагрузки», с типом значения «ТаблицаЗначений» и командной панелью. В панели поместим кнопку «Заполнить» и создадим обработчик её нажатия «КоманднаяПанель1Заполнить». Также для элемента универсальности, добавим в обработку два строковых реквизита «символОграничения» и «разделительПолей». В них мы будем хранить «^», и «~». Можно в теле модуля формы осуществить их начальную инициализацию:
разделительПолей = "^";
символОграничения = "~";
Это позволит пользователю задать свои значения и при желании сохранить настройку, которая впоследствии не затрется нашей инициализацией.
Код 1C v 8.х Процедура КоманднаяПанель1Заполнить(Кнопка)
Если табЗагрузки. Количество( ) > 0 И Вопрос( "Таблица будет очищена. Вы уверены?" , РежимДиалогаВопрос. ДаНет)
= КодВозвратаДиалога. Нет Тогда
Возврат ;
КонецЕсли ;
ЗаполнитьТаблицу( ) ;
КонецПроцедуры
Процедура ЗаполнитьТаблицу()
текст = Новый ТекстовыйДокумент;
Попытка
текст. Прочитать( путьКФайлуЗагрузки, КодировкаТекста. UTF8) ;
Исключение
Сообщить( "Не удалось прочитать файл: "
+ ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
Возврат ;
КонецПопытки ;
табЗагрузки. Очистить( ) ;
табЗагрузки. Колонки. Очистить( ) ;
квоСтрок = текст. КоличествоСтрок( ) ;
Если Не квоСтрок > 0 Тогда
Сообщить( "Файл пустой" , СтатусСообщения. Внимание) ;
Возврат ;
КонецЕсли ;
стрТекста = текст. ПолучитьСтроку( 1 ) ;
масЗначСтр = ОбщегоНазначения. РазложитьСтрокуВМассивПодстрок( стрТекста, разделительПолей) ;
табЗагрузки. Колонки. Добавить( "не_загружать" , Новый ОписаниеТипов( "Булево" ) , "Не загружать" ) ;
табЗагрузки. Колонки. Добавить( "номер_строки" , Новый ОписаниеТипов( "Число" ,
Новый КвалификаторыЧисла( 10 , 0 , ДопустимыйЗнак. Неотрицательный) ) , "Номер строки" ) ;
Для каждого зн Из масЗначСтр Цикл
значение = СтрЗаменить( зн, символОграничения, "" ) ;
кол = табЗагрузки. Колонки. Добавить( значение, Новый ОписаниеТипов( "Строка" ) ) ;
КонецЦикла ;
ЭлементыФормы. табЗагрузки. СоздатьКолонки( ) ;
Для номСтр = 2 По квоСтрок Цикл
стрТекста = текст. ПолучитьСтроку( номСтр) ;
масЗначСтр = ОбщегоНазначения. РазложитьСтрокуВМассивПодстрок( стрТекста, разделительПолей) ;
новСтр = табЗагрузки. Добавить( ) ;
новСтр. номер_строки = номСтр;
номЗнач = 2 ;
Для каждого зн Из масЗначСтр Цикл
новСтр[номЗнач] = СтрЗаменить( зн, символОграничения, "" ) ;
номЗнач = номЗнач + 1 ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Функцию разложения строки с разделителями в массив можно разместить как в одном из общих модулей, так и непосредственно в обработке.
Код 1C v 8.х Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока Истина Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока Истина Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Отлично. В итоге, после заполнения, получим примерно такую картинку:
Теперь приступим непосредственно к загрузке товаров. Рядом с кнопкой «заполнить» добавим кнопку «загрузить» и добавим обработчик её нажатия «КоманднаяПанель1Загрузить», а также добавим реквизит «ПапкаЗагрузкиВыгрузкиТоваров» с типом вашего справочника товаров для опциональной их загрузки в определенную папку. Текст обработчика будет такой:
Код 1C v 8.х Процедура КоманднаяПанель1Загрузить(Кнопка)
Если Вопрос( "Вы уверены, что хотите загрузить файл?" , РежимДиалогаВопрос. ДаНет)
= КодВозвратаДиалога. Нет Тогда
Возврат ;
КонецЕсли ;
ВсегоСтрок = табЗагрузки. Количество( ) ;
номСтр = 1 ;
Для каждого стрТЗ Из табЗагрузки Цикл
Состояние( "Обработано: " + Окр( номСтр * 100 / ВсегоСтрок) + "%" ) ;
номСтр = номСтр + 1 ;
ОбработкаПрерыванияПользователя( ) ;
Если стрТЗ. не_загружать Тогда
Продолжить;
КонецЕсли ;
объект1 С = вернутьТовар( стрТЗ) ;
Если объект1 С = Неопределено Тогда
Возврат ;
КонецЕсли ;
Если Не ЗаписатьЭлементСпр( объект1 С) Тогда
Сообщить( "Загрузка прервана!" , СтатусСообщения. ОченьВажное) ;
Возврат ;
КонецЕсли ;
стрТЗ. не_загружать = Истина ;
КонецЦикла ;
КонецПроцедуры
В приведенном коде две новые функции «вернутьТовар» и «ЗаписатьЭлементСпр». Вот их текст:
Код 1C v 8.х Функция вернутьТовар(стрТабФайла)
Артикул = стрТабФайла. product_sku;
Если Не ЗначениеЗаполнено( Артикул) Тогда
Сообщить( "В строке " + стрТабФайла. номер_строки + " не заполнен product_sku" ,
СтатусСообщения. ОченьВажное) ;
Возврат Неопределено ;
КонецЕсли ;
Запрос = Новый Запрос( "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул" ) ;
Запрос. УстановитьПараметр( "Артикул" , Артикул) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. Ссылка. ПолучитьОбъект( ) ;
Иначе
ЭтоНовый = Истина ;
объект1 С = Справочники. Номенклатура. СоздатьЭлемент( ) ;
объект1 С. Артикул = Артикул;
объект1 С. Наименование = стрТабФайла. product_name;
объект1 С. Родитель = вернутьРодителяТовара( стрТабФайла. category_path) ;
Возврат объект1 С;
КонецЕсли ;
КонецФункции
Функция ЗаписатьЭлементСпр(Спр)
Попытка
Спр. Записать( ) ;
Исключение
Сообщить( "При записи элемента справочника " + Спр + " возникла ошибка: " + ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
Возврат Ложь ;
КонецПопытки ;
Возврат Истина ;
КонецФункции
И осталась последняя новая функция для обработки родителя товара вернутьРодителяТовара. Текст её смотрите ниже. Комментарии по тексту.
Код 1C v 8.х Функция вернутьРодителяТовара(стрКатегории)
Родитель = ПапкаЗагрузкиВыгрузкиТоваров;
масРодителей = РазложитьСтрокуВМассивПодстрок( стрКатегории, "/" ) ;
Для каждого Род Из масРодителей Цикл
РодСс = Справочники. Номенклатура. НайтиПоНаименованию( Род, Истина ) ;
Если РодСс. Пустая( ) Тогда
НовРод = Справочники. Номенклатура. СоздатьГруппу( ) ;
НовРод. Наименование = Род;
НовРод. Родитель = Родитель;
Если Не ЗаписатьЭлементСпр( НовРод) Тогда
Возврат Неопределено ;
КонецЕсли ;
Родитель = НовРод. Ссылка;
Иначе
Родитель = РодСс;
КонецЕсли ;
КонецЦикла ;
Возврат Родитель;
КонецФункции
Все. Конечно, в реальной жизни еще много чего нужно будет дописать, но не все сразу. Такой шаблон можно использовать как отправную точку.
Скачивать файлы может только зарегистрированный пользователь!
Успехов в разработке!
Источник Категория:
Текстовый документ