Универсальные функции работы с регистрами сведений Разработка любой конфигурации потребует использования регистров сведений! Чтобы упростить запись и чтение данных в регистре сведений, Вы можете использовать универсальные функции:
Код 1C v 8.х
Процедура ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, Знач ИмяРегистра, Загрузка = Ложь) Экспорт
НаборЗаписей = СоздатьНаборЗаписейРегистраСведений( СтруктураЗаписи, ИмяРегистра) ;
НоваяЗапись = НаборЗаписей. Добавить( ) ;
ЗаполнитьЗначенияСвойств( НоваяЗапись, СтруктураЗаписи) ;
НаборЗаписей. ОбменДанными. Загрузка = Загрузка;
НаборЗаписей. Записать( ) ;
КонецПроцедуры
Процедура ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, Знач ИмяРегистра) Экспорт
МетаданныеРегистра = Метаданные. РегистрыСведений[ИмяРегистра];
МенеджерЗаписи = РегистрыСведений[ИмяРегистра]. СоздатьМенеджерЗаписи( ) ;
Для Каждого Измерение ИЗ МетаданныеРегистра. Измерения Цикл
Если СтруктураЗаписи. Свойство( Измерение. Имя) Тогда
МенеджерЗаписи[Измерение. Имя] = СтруктураЗаписи[Измерение. Имя];
КонецЕсли ;
КонецЦикла ;
МенеджерЗаписи. Прочитать( ) ;
ЗаполнитьЗначенияСвойств( МенеджерЗаписи, СтруктураЗаписи) ;
МенеджерЗаписи. Записать( ) ;
КонецПроцедуры
Процедура УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, ИмяРегистра, Загрузка = Ложь) Экспорт
НаборЗаписей = СоздатьНаборЗаписейРегистраСведений( СтруктураЗаписи, ИмяРегистра) ;
НаборЗаписей. ОбменДанными. Загрузка = Загрузка;
НаборЗаписей. Записать( ) ;
КонецПроцедуры
Функция СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра) Экспорт
МетаданныеРегистра = Метаданные. РегистрыСведений[ИмяРегистра];
НаборЗаписей = РегистрыСведений[ИмяРегистра]. СоздатьНаборЗаписей( ) ;
Для Каждого Измерение ИЗ МетаданныеРегистра. Измерения Цикл
Если СтруктураЗаписи. Свойство( Измерение. Имя) Тогда
НаборЗаписей. Отбор[Измерение. Имя]. Установить( СтруктураЗаписи[Измерение. Имя]) ;
КонецЕсли ;
КонецЦикла ;
Возврат НаборЗаписей;
КонецФункции
Категория:
Регистры сведений Как прочитать записи регистра сведений установив отбор и удалить записи? Прочитать записи регистра сведений можно двумя способами: Через Набор Записей или Менеджер
Вот пример через набор записей :
Код 1C v 8.х
НаборЗаписей = РегистрыСведений. ДокументоОборот. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Доставка. Установить( Доставка) ;
НаборЗаписей. Отбор. Этап. Установить( Этап) ;
НаборЗаписей. Прочитать( ) ;
Для каждого Запись из НаборЗаписей Цикл
Запись. ДатаВремя = ДатаР;
Запись. Отдел = фио. Подразделение;
Запись. ФИО = ПараметрыСеанса. ТекущийПользователь;
Запись. Документы = Документы;
Запись. Примечание = Примечание;
КонецЦикла ;
НаборЗаписей. Записать( ) ;
Пример с использованием набора записей и менеджера записи:
Код 1C v 8.х НаборЗаписей = РегистрыСведений. CRM_Напоминания. СоздатьНаборЗаписей( ) ;
Отбор = НаборЗаписей. Отбор;
Отбор. Объект. Установить( Объект. Ссылка) ;
Отбор. Завершено. Установить( Ложь ) ;
НаборЗаписей. Прочитать( ) ;
Если НаборЗаписей. Количество( ) > 0 Тогда
Если ЗадаватьВопрос Тогда
ТекстВопроса = "Завершить все напоминания для " + Строка( Объект. Ссылка) + " ?" ;
Ответ = Вопрос( ТекстВопроса, РежимДиалогаВопрос. ДаНет, , КодВозвратаДиалога. Да) ;
Иначе
Ответ = КодВозвратаДиалога. Да
КонецЕсли ;
Если Ответ = КодВозвратаДиалога. Да Тогда
Для каждого Запись Из НаборЗаписей Цикл
РегистрСведенийМенеджерЗаписи = РегистрыСведений. CRM_Напоминания. СоздатьМенеджерЗаписи( ) ;
ЗаполнитьЗначенияСвойств( РегистрСведенийМенеджерЗаписи, Запись) ;
РегистрСведенийМенеджерЗаписи. Прочитать( ) ;
Если РегистрСведенийМенеджерЗаписи. Выбран( ) Тогда
Если НЕ РегистрСведенийМенеджерЗаписи. УдалитьПоИстеченииСрока Тогда
РегистрСведенийМенеджерЗаписи. Завершено = Истина ;
РегистрСведенийМенеджерЗаписи. Записать( ) ;
Иначе
РегистрСведенийМенеджерЗаписи. Удалить( ) ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЕсли ;
А вот пример через менеджер записи:
Код 1C v 8.х МенеджерЗаписи = РегистрыСведений. НоменклатураКонтрагентов. СоздатьМенеджерЗаписи( ) ;
МенеджерЗаписи. Контрагент = Контрагент;
МенеджерЗаписи. Номенклатура = СтрокаТаблицыТовары. Номенклатура;
МенеджерЗаписи. ХарактеристикаНоменклатуры = СтрокаТаблицыТовары. ХарактеристикаНоменклатуры;
МенеджерЗаписи. Прочитать( ) ;
Если МенеджерЗаписи. Выбран( ) Тогда
Вес = МенеджерЗаписи. ВесНоменклатурыКонтрагента;
КонецЕсли ;
Категория:
Регистры сведений Чтение данных с сайта в формате XML и загрузка в 1С При разработке веб проекта нам потребовалось получать с одного сайта данные в формате XML и загружать их в 1С.
Сайт выдает XML вида (Ссылка на этот xml в коде, внизу):
Код 1C v 8.3 This XML file does not appear to have any style information associated with it. The document tree is shown below.
< updates version= "1.0" generator= "SEOBudget" url= "http://seobudget.ru/updates/" >
< update id= "cy" name= "Обновление тИЦ Яндекса" >
< date id= "1823" index= "1419324939" timestamp= "1419324939" > 23.12 . 2014 11 : 55 : 39 MSK< / date>
< date id= "1792" index= "1415776885" timestamp= "1415776885" > 12.11 . 2014 10 : 21 : 25 MSK< / date>
< date id= "1760" index= "1412923802" timestamp= "1412924102" > 10.10 . 2014 10 : 55 : 02 MSK< / date>
< / update>
< update id= "serp" name= "Обновление поисковой выдачи Яндекса" >
< date id= "1872" index= "1424898000" timestamp= "1425604249" > 06.03 . 2015 04 : 10 : 49 MSK< / date>
< date id= "1871" index= "1423602000" timestamp= "1425586715" > 05.03 . 2015 23 : 18 : 35 MSK< / date>
< date id= "1868" index= "1423602000" timestamp= "1425402241" > 03.03 . 2015 20 : 04 : 01 MSK< / date>
< / update>
< update id= "yaca" name= "Обновление Яндекс.Каталога" >
< date id= "1875" index= "1425931200" timestamp= "1425973201" > 10.03 . 2015 10 : 40 : 01 MSK< / date>
< date id= "1874" index= "1425758400" timestamp= "1425886502" > 09.03 . 2015 10 : 35 : 02 MSK< / date>
< date id= "1873" index= "1425585600" timestamp= "1425628803" > 06.03 . 2015 11 : 00 : 03 MSK< / date>
< / update>
< update id= "pr" name= "Обновление Google PR" >
< date id= "1512" index= "1386353345" timestamp= "1386353345" > 06.12 . 2013 22 : 09 : 05 MSK< / date>
< date id= "1265" index= "1360130400" timestamp= "1360130400" > 06.02 . 2013 10 : 00 : 00 MSK< / date>
< date id= "1196" index= "1352376123" timestamp= "1352376123" > 08.11 . 2012 16 : 02 : 03 MSK< / date>
< / update>
< update id= "user" name= "Обновление ПФ в Яндексе" >
< date id= "1799" index= "1415950021" timestamp= "1416986821" > 26.11 . 2014 10 : 27 : 01 MSK< / date>
< date id= "1763" index= "1409237032" timestamp= "1413211432" > 13.10 . 2014 18 : 43 : 52 MSK< / date>
< date id= "1665" index= "1400617705" timestamp= "1401222505" > 28.05 . 2014 00 : 28 : 25 MSK< / date>
< / update>
< / updates> < br>
В результате была написана обработка загрузки данных с сайта в 1С, ее код:
Код 1C v 8.3 &НаСервере
Функция ЧтениеXMLВДерево(Путь)
Дерево = Новый ДеревоЗначений;
Дерево. Колонки. Добавить( "Имя" ) ;
Дерево. Колонки. Добавить( "Значение" ) ;
XMLФайл = Новый ЧтениеXML;
XMLФайл. ОткрытьФайл( Путь) ;
ПрочитатьXMLПоТегам( XMLФайл, Дерево. Строки) ;
XMLФайл. Закрыть( ) ;
ТекДанные = Неопределено ;
Для каждого СтрокаП из Дерево. Строки Цикл
Для каждого СтрокаВ из СтрокаП. Строки Цикл
Для каждого СтрокаТ из СтрокаВ. Строки Цикл
Если СтрокаТ. Значение = "cy" тогда
ТекДанные = Перечисления. Показатель. TiC;
ИначеЕсли СтрокаТ. Значение = "serp" тогда
ТекДанные = Перечисления. Показатель. SYa;
ИначеЕсли СтрокаТ. Значение = "yaca" тогда
ТекДанные = Перечисления. Показатель. CatYa;
ИначеЕсли СтрокаТ. Значение = "pr" тогда
ТекДанные = Перечисления. Показатель. RP;
ИначеЕсли СтрокаТ. Значение = "user" тогда
ТекДанные = Перечисления. Показатель. PFYa;
КонецЕсли ;
Для каждого СтрокаД из СтрокаТ. Строки Цикл
Если СтрокаД. Имя= "timestamp" Тогда
ДатаИзменения = МестноеВремя( '19700101 '+ СтрокаД. значение) ;
НовЗапись = РегистрыСведений. ТиЦиRP. СоздатьМенеджерЗаписи( ) ;
НовЗапись. Показатель = ТекДанные;
НовЗапись. Период = ДатаИзменения;
НовЗапись. Записать( ) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецЦикла ;
КонецЦикла ;
КонецФункции
&НаСервереБезКонтекста
Процедура ПрочитатьXMLПоТегам(XMLФайл, ТекущийНаборСтрок)
Пока XMLФайл. Прочитать( ) Цикл
Если XMLФайл. ТипУзла = ТипУзлаXML. НачалоЭлемента Тогда
НоваяСтрока = ТекущийНаборСтрок. Добавить( ) ;
НоваяСтрока. Имя = XMLФайл. Имя;
НоваяСтрока. Значение = "" ;
Пока XMLФайл. ПрочитатьАтрибут( ) Цикл
НоваяСтрокаАтрибут = НоваяСтрока. Строки. Добавить( ) ;
НоваяСтрокаАтрибут. Имя = XMLФайл. Имя;
НоваяСтрокаАтрибут. Значение = СокрЛП( XMLФайл. Значение) ;
КонецЦикла ;
ПрочитатьXMLПоТегам( XMLФайл, НоваяСтрока. Строки) ;
ИначеЕсли XMLФайл. ТипУзла = ТипУзлаXML. КонецЭлемента Тогда
Возврат ;
ИначеЕсли XMLФайл. ТипУзла = ТипУзлаXML. Текст Тогда
ТекущийНаборСтрок. Родитель. Значение = СокрЛП( XMLФайл. Значение) ;
Иначе
Сообщить( "Тип узла: " + XMLФайл. ТипУзла + " НЕ ОБРАБОТАН" , СтатусСообщения. Важное) ;
Конецесли ;
КонецЦикла ;
КонецПроцедуры
&НаКлиенте
Процедура СборXML(Команда)
ЧтениеXMLВДерево( "http://seobudget.ru/downloads/updates.xml" ) ;
КонецПроцедуры
Результат загруженный в регистр сведений:
Категория:
Работа с Интернет, Почтой (Mail), FTP Как изменить запись регистра сведений? Код 1C v 8.х НаборЗаписей = РегистрыСведений. НумерацияДоговоров. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Период. Установить( НачалоГода( Дата) ) ;
НаборЗаписей. Отбор. Организация. Установить( Организация) ;
НаборЗаписей. Прочитать( ) ;
Если НаборЗаписей. Количество( ) = 0 Тогда
НовыйНомер = НаборЗаписей. Добавить( ) ;
НовыйНомер. Организация = Организация;
НовыйНомер. Период = НачалоГода( Дата) ;
НовыйНомер. Номер = 2 ; ном= 1 ;
ИначеЕсли НаборЗаписей. Количество( ) = 1 Тогда
НовыйНомер = НаборЗаписей[0 ];
ном = НовыйНомер. Номер;
НовыйНомер. Номер = ном+ 1 ;
КонецЕсли ;
НаборЗаписей. Записать( ) ;
Номер = Организация. Префикс + "-" + Ном + "/" + Строка( Прав( Год( ТекущаяДата( ) ) , 2 ) ) ;
Код 1C v 8.х
КурсыВалют = РегистрыСведений. КурсыВалют;
НаборКурсов = КурсыВалют. СоздатьНаборЗаписей( ) ;
Доллар = Справочники. Валюты. НайтиПоНаименованию( "USD" ) ;
НаборКурсов. Отбор. Валюта. Установить( Доллар) ;
НаборКурсов. Отбор. Период. Установить( НачалоДня( ТекущаяДата( ) ) ) ;
НаборКурсов. Прочитать( ) ;
Если НаборКурсов. Количество( ) = 0 Тогда
НовыйКурс = НаборКурсов. Добавить( ) ;
НовыйКурс. Валюта = Доллар;
НовыйКурс. Период = ТекущаяДата( ) ;
ИначеЕсли НаборКурсов. Количество( ) = 1 Тогда
НовыйКурс = НаборКурсов[0 ];
Иначе
Предупреждение( "Курс валюты задается один раз в день." , 60 ) ;
Возврат ;
КонецЕсли ;
НовыйКурс. Курс = 31.44 ;
НовыйКурс. Кратность = 1 ;
НаборКурсов. Записать( ) ;
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура И
| ШтрихкодыНоменклатуры.Характеристика = &Характеристика" ;
Запрос. УстановитьПараметр( "Номенклатура" , Товар) ;
Запрос. УстановитьПараметр( "Характеристика" , ХарактеристикаТовара) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если НЕ Выборка. Следующий( ) Тогда
ТекЗапись = РегистрыСведений. ШтрихкодыНоменклатуры. СоздатьМенеджерЗаписи( ) ;
ТекЗапись. Номенклатура = Товар;
Если ЗначениеЗаполнено( ХарактеристикаТовара) Тогда
ТекЗапись. Характеристика = ХарактеристикаТовара;
Иначе
ТекЗапись. Характеристика = Справочники. ХарактеристикиНоменклатуры. ПустаяСсылка( ) ;
КонецЕсли ;
ТекЗапись. Штрихкод = ? ( ПустаяСтрока( ШтрихКод) , РегистрыСведений. ШтрихкодыНоменклатуры. СформироватьШтрихкодEAN13( ) , Штрихкод) ;
Попытка
ТекЗапись. Записать( ) ;
Исключение
КонецПопытки ;
Иначе
НайденныйШтрихкод = Выборка. Штрихкод;
ТекЗапись = РегистрыСведений. ШтрихкодыНоменклатуры. СоздатьМенеджерЗаписи( ) ;
ТекЗапись. Штрихкод = НайденныйШтрихкод;
ТекЗапись. Прочитать( ) ;
ТекЗапись. Штрихкод = Штрихкод;
Попытка
ТекЗапись. Записать( ) ;
Исключение
КонецПопытки ;
КонецЕсли ;
Категория:
Регистры сведений Как заменить значение ресурса регистра сведений – универсальная процедура В том случае, когда в каком-то регистре сведений нужно заменить несколько видов значений какого-то конкретного ресурса на заданное значение, лучше использовать вот такую универсальную процедуру (при ее вызове достаточно подставить название регистра, название ресурса и передать старые заменяемые значения и новое, на которое они заменяются):
Код 1C v 8.х
Процедура ЗаменаРесурсаНезависимогоРегистра(ИмяРегистраСведений, ИмяИзменяемогоРесурса, МассивСтарыхЗначенийРесурса, НовоеЗначениеРесурса, ДопУсловие = "" )
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "МассивСтарыхЗначенийИзмерения" , МассивСтарыхЗначенийРесурса) ;
Запрос. УстановитьПараметр( "НовоеЗначениеИзмерения" , НовоеЗначениеРесурса) ;
Запрос. Текст =
"ВЫБРАТЬ *
|ИЗ
| РегистрСведений." + ИмяРегистраСведений + " КАК Регистр
|ГДЕ
| Регистр." + ИмяИзменяемогоРесурса + " В (&МассивСтарыхЗначенийИзмерения)" + ДопУсловие;
Сообщить( "1 Приступаем к выполнению запроса к данным регистра "" " + ИмяРегистраСведений + """ - " + ТекущаяДата( ) ) ;
ТаблицаЗаполнения = Запрос. Выполнить( ) . Выгрузить( ) ;
Сообщить( "2 Приступаем к обработке результата запроса к регистру "" " + ИмяРегистраСведений + """ - " + ТекущаяДата( ) ) ;
ЭлементыФормы. Индикатор2 . Значение = 0 ;
ЭлементыФормы. Индикатор2 . МаксимальноеЗначение = ТаблицаЗаполнения. Количество( ) ;
Для Каждого СтрокаЗаполнения Из ТаблицаЗаполнения Цикл
ЭлементыФормы. Индикатор2 . Значение = ЭлементыФормы. Индикатор2 . Значение + 1 ;
текЗапись = РегистрыСведений[ИмяРегистраСведений]. СоздатьМенеджерЗаписи( ) ;
ЗаполнитьЗначенияСвойств( текЗапись, СтрокаЗаполнения) ;
текЗапись. Прочитать( ) ;
Если текЗапись. Выбран( ) Тогда
текЗапись[ИмяИзменяемогоРесурса] = НовоеЗначениеРесурса;
текЗапись. Записать( ) ;
Иначе
Сообщить( "Возникла проблема определения " + НовоеЗначениеРесурса + " в регистре через менеджер записи " + НовоеЗначениеРесурса) ;
КонецЕсли ;
КонецЦикла ;
Сообщить( "3 Окончание исправления регистра "" " + ИмяРегистраСведений + """ - " + ТекущаяДата( ) ) ;
КонецПроцедуры
Категория:
Регистры сведений Управляемый режим блокировки данных Вопрос: Как использовать управляемый режим блокировки данных?
Ответ: Рассмотрим на примере удаления записей из регистра сведений.
1. В свойствах объекта, для которого используется управляемый режим блокировки данных установить поле «Режим управления блокировкой данных» в значение «Управляемый» (иначе будет сообщение об ошибке «Автоматический режим блокировки недопустим в этой транзакции»). Причем если это делается для документа, то необходимо перевести в этот же режим блокировки все регистры, в которых делает движения этот документ.
2. Пример кода управляемой блокировки регистра при удалении из него записи:
Например:
Код 1C v 8.х Процедура ОчиститьЗаПериод()
Пока Истина Цикл
НачатьТранзакцию( РежимУправленияБлокировкойДанных. Управляемый) ;
Попытка
текЗапрос = новый Запрос;
текЗапрос. Текст =
"ВЫБРАТЬ
| усИсторияОстатковПоПоказателям.Склад,
| усИсторияОстатковПоПоказателям.Поклажедатель,
| усИсторияОстатковПоПоказателям.Показатель,
| усИсторияОстатковПоПоказателям.Период
|ИЗ
| РегистрСведений.усИсторияОстатковПоПоказателям КАК усИсторияОстатковПоПоказателям
|ГДЕ
| усИсторияОстатковПоПоказателям.Период МЕЖДУ &ПериодС И &ПериодПо" ;
текЗапрос. УстановитьПараметр( "ПериодС" , ГраницаОчисткиС) ;
текЗапрос. УстановитьПараметр( "ПериодПо" , ГраницаОчисткиПо) ;
тбзЗаписиЖурнала = текЗапрос. Выполнить( ) . Выгрузить( ) ;
текБлокировка = Новый БлокировкаДанных;
тбдЖурнал = текБлокировка. Добавить( "РегистрСведений.усИсторияОстатковПоПоказателям" ) ;
тбдЖурнал. Режим = РежимБлокировкиДанных. Исключительный;
Если тбзЗаписиЖурнала. Количество( ) тогда
тбдЖурнал. ИсточникДанных = тбзЗаписиЖурнала;
тбдЖурнал. ИспользоватьИзИсточникаДанных( "Склад" , "Склад" ) ;
тбдЖурнал. ИспользоватьИзИсточникаДанных( "Поклажедатель" , "Поклажедатель" ) ;
тбдЖурнал. ИспользоватьИзИсточникаДанных( "Показатель" , "Показатель" ) ;
текБлокировка. Заблокировать( ) ;
Для каждого текЗаписьЖурнала из тбзЗаписиЖурнала цикл
текЗапись = РегистрыСведений. усИсторияОстатковПоПоказателям. СоздатьМенеджерЗаписи( ) ;
ЗаполнитьЗначенияСвойств( текЗапись, текЗаписьЖурнала) ;
текЗапись. Удалить( ) ;
КонецЦикла ;
КонецЕсли ;
ЗафиксироватьТранзакцию( ) ;
Прервать ;
Исключение
стрОписаниеОшибки = ОписаниеОшибки( ) ;
ОтменитьТранзакцию( ) ;
Сообщить( "Ошибка блокировки" + ОписаниеОшибки( ) ) ;
Прервать ;
КонецПопытки ;
КонецЦикла ;
КонецПроцедуры
Источник Категория:
Встроенные Функции Как поменять период у записей периодического независимого регистра, соответствующих ряду условий? В периодическом независимом регистре сведений ОтветственныеЛицаОрганизации все записи, касающиеся организации с наименованием Групп-трейдинг, период которых меньше 01 января 2005 года, необходимо перенести на 01 января 2004 года. Но записи с указанием должностей Продавец и Кладовщик должны остаться на своих местах.
Сначала получим таблицу записей, которые подлежат модификации. Поскольку условий несколько, да еще и не на равенство, оптимальнее это сделать при помощи запроса. А потом, перебирая результат запроса, добьемся требуемого результата:
Код 1C v 8.х
Процедура ЗаменаПериода()
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ОтветственныеЛицаОрганизации.Период,
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница,
| ОтветственныеЛицаОрганизации.ОтветственноеЛицо
|ИЗ
| РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации
|ГДЕ
| ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1)
| И
| ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование ПОДОБНО "" Групп-Трейдинг""
| И
| (ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL
| ИЛИ
| НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование ПОДОБНО "" Продавец""
| ИЛИ
| ОтветственныеЛицаОрганизации.Должность.Наименование ПОДОБНО "" Кладовщик"" ))" ;
Результат = Запрос. Выполнить( ) ;
Выборка = Результат. Выбрать( ) ;
Запись = РегистрыСведений. ОтветственныеЛицаОрганизации. СоздатьМенеджерЗаписи( ) ;
Пока Выборка. Следующий( ) Цикл
Запись. Период = Выборка. Период;
Запись. СтруктурнаяЕдиница = Выборка. СтруктурнаяЕдиница;
Запись. ОтветственноеЛицо = Выборка. ОтветственноеЛицо;
Запись. Прочитать( ) ;
Если Запись. Выбран( ) Тогда
Запись. Период = Дата( 2004 , 1 , 1 ) ;
Запись. Записать( ) ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры ;
Результат запроса – таблица, в которой по каждой записи заполнены все поля измерений из регистра и поле Период. Именно эту информацию мы используем для получения каждой нужной записи.
Источником данных для запроса послужила таблица РегистрСведений.ОтветственныеЛицаОрганизации.
Отборы были применены так, чтобы в результат попали записи с периодом менее 1 января 2005 года, наименование структурных единиц в которых – Групп-трейдинг, а наименования должностей не относятся к Продавец и Кладовщик. Кроме того, необходимо позаботиться о случае, когда должность вообще не указана, то есть ее наименование имеет значение NULL. Такие записи тоже нужно будет переносить.
Запрос выполнен, далее перебираем его результат и посредством менеджера записи регистра ОтветственныеЛицаОрганизации добиваемся желаемого. При каждом проходе цикла считываем очередную запись, предварительно указав значение ее поля Период и полей измерений.
Далее меняем значение поля Период у считанной записи и записываем ее в регистр.
Категория:
Регистры сведений Как добавить записи в независимый регистр сведений? Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект
РегистрСведенийМенеджерЗаписи.<имя>.
Например, для того, чтобы в независимый регистр сведений ЗначенияСвойствОбъектов с измерениями Объект, Свойство и ресурсом Значение добавить одну запись, содержащую значение некоторого свойства выбранной номенклатуры, можно использовать следующий код:
Код 1C v 8.х МенеджерЗаписи = РегистрыСведений. ЗначенияСвойствОбъектов. СоздатьМенеджерЗаписи( ) ;
МенеджерЗаписи. Объект = ПолеВводаНоменклатура;
МенеджерЗаписи. Свойство = ПолеВводаСвойствоНоменклатуры;
МенеджерЗаписи. Значение = ПолеВводаЗначениеСвойства;
МенеджерЗаписи. Записать( ) ;
В результате выполнения этого кода новая запись будет добавлена в регистр, или, если регистр уже содержит запись с выбранными значениями измерений Объект и Свойство, - существующая запись будет заменена новой.
Если требуется добавить несколько записей в регистр сведений, можно использовать объект
РегистрСведенийНаборЗаписей.<имя>.
Например, для того, чтобы в тот же самый регистр сведений ЗначенияСвойствОбъектов добавить несколько записей о значениях различных свойств выбранной номенклатуры, можно использовать следующий код (предполагается, что свойства и соответствующие им значения находятся в таблице значений ТаблицаСвойств, сформированной заранее):
Код 1C v 8.х НаборЗаписей = РегистрыСведений. ЗначенияСвойствОбъектов. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Объект. Установить( ПолеВводаНоменклатура) ;
Для Каждого СтрокаТаблицы Из ТаблицаСвойств Цикл
НоваяЗапись = НаборЗаписей. Добавить( ) ;
НоваяЗапись. Объект = ПолеВводаНоменклатура;
НоваяЗапись. Свойство = СтрокаТаблицы. Свойство;
НоваяЗапись. Значение = СтрокаТаблицы. ЗначениеСвойства;
КонецЦикла ;
НаборЗаписей. Записать( ) ;
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения Объект (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
Категория:
Регистры сведений Получения курса валют из Интернет Код 1C v 8.х Соединение = Новый HTTPСоединение( "export.rbc.ru" ) ;
ИмяФайла = ПолучитьИмяВременногоФайла( ".txt" ) ;
СтрокаСоединения= "/free/" + Источник+ "/free.fcgi?period=DAILY&tickers=" + Валюта1 + "&d1=" + День1 + "&m1=" + Месяц1 + "&y1=" + Год1 + "&d2=" + День2 + "&m2=" + Месяц2 + "&y2=" + Год2 + "&separator=%7C&data_format=BROWSER" ;
СтрокаСоединения= СтрЗаменить( СтрокаСоединения, " " , "" ) ;
Попытка
Соединение. Получить( СтрокаСоединения, ИмяФайла) ;
Исключение
Сообщить( "Невозможно получить курс по адресу http://export.rbc.ru" + СтрокаСоединения) ;
КонецПопытки ;
КурсыТекст= Новый ТекстовыйДокумент;
КурсыТекст. Прочитать( ИмяФайла) ;
Код 1C v 8.х
Функция ПолучитьКакСтроку(Адресс)
соминет = Новый COMОбъект( "MSXML2.XMLHTTP" ) ;
соминет. open ( "GET" , Адресс, Ложь ) ;
соминет. send( ) ;
Возврат соминет. responseText;
КонецФункции
Функция ПреобразоватьДату(дат)
Возврат Формат( Дат, "ДФ="" гггг/ММ/дд"" " ) ;
КонецФункции
Процедура КнопкаЗагрузитьКурсы(Элемент)
Для А = 1 по Список. Количество( ) цикл
Если Список[а- 1 ]. Пометка тогда
Сообщить( "Загружаем курсы для " + Строка( Список[а- 1 ]. Значение) ) ;
Код = Строка( Список[а- 1 ]. Значение. Код) ;
Дат = ПериодС;
Пока Дат < = ПериодПо цикл
Стр = ПолучитьКакСтроку( "http://cbrates.rbc.ru/tsv/" + Код+ "/" + ПреобразоватьДату( Дат) + ".tsv" ) ;
Поз = Найти( Стр, Символы. Таб) ;
Если Поз = 0 Тогда
Дат = Дат + 86400 ;
Продолжить;
КонецЕсли ;
Кратность = Число( СокрЛП( Лев( стр, Поз- 1 ) ) ) ;
курс = Число( СокрЛП( Сред( Стр, Поз+ 1 , СтрДлина( Стр) - Поз) ) ) ;
Сообщить( "Дата=" + Строка( Дат) + " Курс=" + Строка( курс) + " Кратность=" + Строка( Кратность) ) ;
Запись = РегистрыСведений. КурсыВалют. СоздатьМенеджерЗаписи( ) ;
Запись. Период = Дат;
Запись. Валюта = Список[а- 1 ]. Значение. Ссылка;
Запись. Курс = Курс;
Запись. Кратность = Кратность;
Запись. Записать( Истина ) ;
Дат = Дат + 86400 ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Код 1C v 7.x
перем тзПустышка;
процедура ПриНачалеВыбораЗначения(стрНазвание, чисФлаг)
если стрНазвание = "стрУРЛа" тогда
запуститьприложение( стрУРЛа) ;
конецесли ;
конецпроцедуры
процедура кнПолучить()
стрИмяФайла = каталогпользователя( ) + "$$$$.###" ;
олеХМЛ = создатьобъект( "Microsoft.XMLHTTP" ) ;
олеХМЛ. Open( "GET" , стрУРЛа, 0 ) ;
олеХМЛ. Send( ) ;
олеАДО = создатьобъект( "ADODB.Stream" ) ;
олеАДО. Mode = 3 ;
олеАДО. Type = 1 ;
олеАДО. Open( ) ;
олеШелл = создатьобъект( "MSScriptControl.ScriptControl" ) ;
олеШелл. Language = "vbscript" ;
олеШелл. AddObject( "oleADO" , олеАДО) ;
олеШелл. AddObject( "oleXML" , олеХМЛ) ;
олеШелл. Eval( "oleADO.Write(oleXML.ResponseBody)" ) ;
олеАДО. SaveToFile( стрИмяФайла, 2 ) ;
олеАДО. Close( ) ;
олеАДО. Mode= 3 ;
олеАДО. Type = 2 ;
олеАДО. CharSet= "UTF-8" ;
олеАДО. Open( ) ;
олеАДО. LoadFromFile( стрИмяФайла) ;
стрТемп = "" ;
пока олеАДО. EOS( ) = 0 цикл
стрТемп = стрТемп + олеАДО. ReadText( - 2 ) + разделительстрок;
конеццикла ;
олеАДО. Close( ) ;
фс. УдалитьФайл( стрИмяФайла) ;
чисПозиция = найти( стрТемп, "Официальные курсы валют на" ) ;
если чисПозиция = 0 тогда
предупреждение( "Не получилось получить курсы валют" ) ;
иначе
тзТемп = создатьобъект( "ТаблицаЗначений" ) ;
тзПустышка. Выгрузить( тзТемп) ;
стрТемп = сред( стрТемп, чисПозиция) ;
дтКурса = дата( стрзаменить( стрполучитьстроку( стрТемп, 2 ) , "/" , "." ) ) ;
чисПозиция = 18 ;
чисКоличествоСтрок = стрколичествострок( стрТемп) ;
стрТекущая = стрполучитьстроку( стрТемп, чисПозиция) ;
пока найти( стрТекущая, "input type="" checkbox"" name="" idval"" " ) > 0 цикл
тзТемп. НоваяСтрока( ) ;
стрТекущая = стрполучитьстроку( стрТемп, чисПозиция + 1 ) ;
тзТемп. Количество = число( стрТекущая) ;
тзТемп. Наименование = сокрлп( стрзаменить( стрзаменить( стрТекущая, тзТемп. Количество, "" ) , "</td>" , "" ) ) ;
стрТекущая = стрполучитьстроку( стрТемп, чисПозиция + 2 ) ;
стрТекущая = сокрлп( стрзаменить( стрзаменить( стрТекущая, "<td class="" gen7"" align="" center"" >" , "" ) , "</td>" , "" ) ) ;
тзТемп. Код1 = лев( стрТекущая, 3 ) ;
тзТемп. Код2 = прав( стрТекущая, 3 ) ;
стрТекущая = стрполучитьстроку( стрТемп, чисПозиция + 5 ) ;
тзТемп. Курс = число( стрзаменить( стрзаменить( стрТекущая, "<td class="" gen7"" align="" center"" >" , "" ) , "</td>" , "" ) ) ;
чисПозиция = чисПозиция + 17 ;
если чисПозиция > чисКоличествоСтрок тогда
стрТекущая = "" ;
иначе
стрТекущая = стрполучитьстроку( стрТемп, чисПозиция) ;
конецесли ;
конеццикла ;
тзТемп. Выгрузить( тзКурсов) ;
конецесли ;
конецпроцедуры
стрУРЛа = "http://www.nationalbank.kz/?docid=460&uid=DD54B73C-802C-E8F0-E27EDF82ECF77C1D" ;
тзПустышка = создатьобъект( "ТаблицаЗначений" ) ;
тзПустышка. НоваяКолонка( "Количество" , "число" , 3 , 0 , "" , 5 ) ;
тзПустышка. НоваяКолонка( "Наименование" , "строка" , , , "Наименование" , 70 ) ;
тзПустышка. НоваяКолонка( "Код1" , "строка" , 3 , , "код" , 10 ) ;
тзПустышка. НоваяКолонка( "Код2" , "строка" , 3 , , "код" , 10 ) ;
тзПустышка. НоваяКолонка( "Курс" , "число" , 7 , 2 , "Курс" , 10 ) ;
тзПустышка. Выгрузить( тзКурсов) ;
Категория:
COM-объекты, WMI, WSH Функция создания или изменения пользователя, его прав доступа, настроек Код 1C v 8.х
Функция СоздатьПользователя(Имя, Пароль)
Если ( Метаданные. Роли. Найти( "ПолныеПрава" ) = Неопределено ) или ( Метаданные. Роли. Найти( "Админ" ) = Неопределено ) Тогда
Сообщить( "Нет возможности создать пользователя "" " + Имя + """ . В конфигурации отсутствует роль с Админскими правами!" ) ;
Возврат Ложь ;
КонецЕсли ;
Попытка
ПользовательНайден = Ложь ;
ПользовательИБ = ПользователиИнформационнойБазы. НайтиПоИмени( Имя) ;
Если ПользовательИБ = Неопределено Тогда
ПользовательИБ = ПользователиИнформационнойБазы. СоздатьПользователя( ) ;
Иначе
ПользовательНайден = Истина ;
КонецЕсли ;
ПользовательИБ. АутентификацияОС = Ложь ;
ПользовательИБ. АутентификацияСтандартная = Истина ;
ПользовательИБ. Имя = Имя;
ПользовательИБ. ПолноеИмя = Имя;
ПользовательИБ. Пароль = Пароль;
ПользовательИБ. ЗапрещеноИзменятьПароль = Истина ;
ПользовательИБ. Роли. Очистить( ) ;
ПользовательИБ. Роли. Добавить( Метаданные. Роли. ПолныеПрава) ;
ПользовательИБ. ПоказыватьВСпискеВыбора = Ложь ;
ПользовательИБ. ОсновнойИнтерфейс = Метаданные. Интерфейсы. Общий;
ПользовательИБ. Записать( ) ;
ТекущийПользователь = Справочники. Пользователи. НайтиПоКоду( Имя) ;
Если ТекущийПользователь. Пустая( ) Тогда
ТекущийПользователь = Справочники. Пользователи. СоздатьЭлемент( ) ;
ТекущийПользователь. Код = Имя;
ТекущийПользователь. Наименование = Имя;
ТекущийПользователь. Записать( ) ;
КонецЕсли ;
Попытка
Движение = РегистрыСведений. НастройкиПользователей. СоздатьМенеджерЗаписи( ) ;
Движение. Пользователь = Пользователь. Ссылка;
Движение. Настройка = ПланыВидовХарактеристик. НастройкиПользователей. ОткрыватьПриЗапускеПанельФункций;
Движение. Значение = Ложь ;
Движение. Записать( ) ;
Исключение
КонецПопытки ;
Попытка
Движение = РегистрыСведений. НастройкиПользователей. СоздатьМенеджерЗаписи( ) ;
Движение. Пользователь = Пользователь. Ссылка;
Движение. Настройка = ПланыВидовХарактеристик. НастройкиПользователей. УчетПоВсемОрганизациям;
Движение. Значение = Истина ;
Движение. Записать( ) ;
Исключение
КонецПопытки ;
Возврат Истина ;
Исключение
Сообщить( "Не удалось создать или изменить пользователя " + Имя + " для выгрузки информационной базы. " + ОписаниеОшибки( ) ) ;
Возврат Ложь ;
КонецПопытки ;
КонецФункции
Категория:
Полезные, Универсальные Функции Запись в регистр сведений (Установить курс и кратность валюты) Код 1C v 8.х
Процедура ЗаписатьКурс(Валюта) Экспорт
РегистрКурсыВалют = РегистрыСведений. КурсыВалют. СоздатьМенеджерЗаписи( ) ;
РегистрКурсыВалют. Период = ДатаКурса;
РегистрКурсыВалют. Валюта = Валюта;
РегистрКурсыВалют. Курс = 1 ;
РегистрКурсыВалют. Кратность = 1 ;
РегистрКурсыВалют. Записать( ) ;
КонецПроцедуры
Категория:
Регистры сведений