(5)
Функция ПроверитьЗаполнениеКатегории(ДокОснование,Категория) экспорт
// проверяет стоит ли категория в документе
// док основание тип документ
//параметры Докоснование ссылка на документ
//параметры категория строка с названием типа проверки категории
// возвращает булево
Кат = Справочники.КатегорииОбъектов.НайтиПоНаименованию(категория);
//дописывать здесь
//РС = Регистрысведений.КатегорииОбъектов;
Док = ДокОснование.Ссылка;
Запрос = новый Запрос;
Запрос.УстановитьПараметр(«Док»,Док);
Запрос.УстановитьПараметр(«Категория»,Кат);
Запрос.Текст =
«ВЫБРАТЬ
| КатегорииОбъектов.Объект,
| КатегорииОбъектов.Категория
|ИЗ
| РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
|ГДЕ
| КатегорииОбъектов.Объект = &Док
| И КатегорииОбъектов.Категория = &категория»;
результат = Запрос.Выполнить().Выгрузить();
если результат.Количество()= 0 тогда
ЕстьКатегория = ложь;
иначе ЕстьКатегория = истина;
КонецЕсли;
возврат ЕстьКатегория;
КонецФункции
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
/// Как прочитать записи регистра сведений /// в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьЗаписиРегистраСведенийНаСервере() // Прочитаем все записи регистра сведений "ЦенаНаЕдуДляКлиентов" // для организации ООО "Ромашка", упорядоченные по дате. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦенаНаЕдуДляКлиентов.Период, | ЦенаНаЕдуДляКлиентов.Регистратор, | ЦенаНаЕдуДляКлиентов.НомерСтроки, | ЦенаНаЕдуДляКлиентов.Активность, | ЦенаНаЕдуДляКлиентов.Номенклатура, | ЦенаНаЕдуДляКлиентов.Контрагент, | ЦенаНаЕдуДляКлиентов.Организация, | ЦенаНаЕдуДляКлиентов.Цена |ИЗ | РегистрСведений.ЦенаНаЕдуДляКлиентов КАК ЦенаНаЕдуДляКлиентов |ГДЕ | ЦенаНаЕдуДляКлиентов.Активность = Истина И | ЦенаНаЕдуДляКлиентов.Организация = &ВыбОрганизация |УПОРЯДОЧИТЬ ПО | ЦенаНаЕдуДляКлиентов.Период"; Запрос.УстановитьПараметр( "ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Период + "] " + Записи.Контрагент + " " + Записи.Номенклатура + " " + Записи.Цена + " руб." ); КонецЦикла; КонецПроцедуры /// Как получить наиболее поздние записи (срез последних) /// регистра сведений на указанную дату (включительно) /// в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьНаиболееПоздниеЗаписиРегистраСведенийНаСервере() // За возможности выборки наиболее поздних записей регистра // сведений (среза последних) в разрезе заданной аналитики // отвечает виртуальная таблица СрезПоследних. // У неё есть следующие параметры: // 1. Период (включительно) // 2. Условие (например, Организация = &ВыбОрганизация) // Получим цены на бананы для каждого контрагента // на конец 1 квартала 2014 года (включительно) // по организации ООО "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦенаНаЕдуДляКлиентовСрезПоследних.Период, | ЦенаНаЕдуДляКлиентовСрезПоследних.Активность, | ЦенаНаЕдуДляКлиентовСрезПоследних.Номенклатура, | ЦенаНаЕдуДляКлиентовСрезПоследних.Контрагент, | ЦенаНаЕдуДляКлиентовСрезПоследних.Организация, | ЦенаНаЕдуДляКлиентовСрезПоследних.Цена |ИЗ | РегистрСведений.ЦенаНаЕдуДляКлиентов.СрезПоследних( | ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59), | Активность = Истина И | Организация = &ВыбОрганизация И | Номенклатура = &ВыбНоменклатура | ) КАК ЦенаНаЕдуДляКлиентовСрезПоследних |УПОРЯДОЧИТЬ ПО | ЦенаНаЕдуДляКлиентовСрезПоследних.Контрагент"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Контрагент + ", " + Записи.Период + "] " + Записи.Номенклатура + " " + Записи.Цена + " руб." ); КонецЦикла; КонецПроцедуры /// Как получить наиболее ранние записи (срез первых) /// регистра сведений на указанную дату (включительно) /// в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьНаиболееРанниеЗаписиРегистраСведенийНаСервере() // За возможности выборки наиболее ранних записей регистра // сведений (среза первых) в разрезе заданной аналитики // отвечает виртуальная таблица СрезПервых. // У неё есть следующие параметры: // 1. Период (включительно) // 2. Условие (например, Организация = &ВыбОрганизация) // ! Нужно внимательно вдуматься. СрезПервых получает по каждой // комбинации измерений наиболее раннюю запись, но НЕ БОЛЕЕ // РАННЮЮ, чем указанная дата. // Получим самые первые цены, которые были установлены на бананы // для каждого контрагента в 2014 году (включительно) // по организации ООО "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦенаНаЕдуДляКлиентовСрезПервых.Период, | ЦенаНаЕдуДляКлиентовСрезПервых.Активность, | ЦенаНаЕдуДляКлиентовСрезПервых.Номенклатура, | ЦенаНаЕдуДляКлиентовСрезПервых.Контрагент, | ЦенаНаЕдуДляКлиентовСрезПервых.Организация, | ЦенаНаЕдуДляКлиентовСрезПервых.Цена |ИЗ | РегистрСведений.ЦенаНаЕдуДляКлиентов.СрезПервых( | ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00), | Активность = Истина И | Организация = &ВыбОрганизация И | Номенклатура = &ВыбНоменклатура | ) КАК ЦенаНаЕдуДляКлиентовСрезПервых |УПОРЯДОЧИТЬ ПО | ЦенаНаЕдуДляКлиентовСрезПервых.Контрагент"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Контрагент + ", " + Записи.Период + "] " + Записи.Номенклатура + " " + Записи.Цена + " руб." ); КонецЦикла; КонецПроцедуры /// Как найти и изменить програмно записи в регистр сведений /// документа в 1с 8.3, 8.2 &НаСервере Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере() // Предположим, у нас есть ссылка на проведенный документ // "Установка цен на еду" № ВМБП-000001 УстановкаЦенСсылка = Документы.УстановкаЦенНаЕдуДляКлиентов.НайтиПоНомеру( "ВМБП-000001", '20141231' ); // Мы знаем, что этот документ делает записи в регистр // сведений "ЦенаНаЕдуДляКлиентов": // [Организация, Контрагент, Номенклатура] [Цена] // Наша задача: найти эти записи и изменит их (например, удвоим // цену) и записать вместо старых. // Используем объектную технику получения записей, // ведь мы будем их изменять. УстановкаЦен = УстановкаЦенСсылка.ПолучитьОбъект(); // Получим набор записей этого документа в регистр // "ЦенаНаЕдуДляКлиентов" НаборЗаписей = УстановкаЦен.Движения.ЦенаНаЕдуДляКлиентов; // Прочитаем записи из базы данных. НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Выведем старые значения. Сообщить( "[" + Запись.Организация + ", " + Запись.Контрагент + ", " + Запись.Номенклатура + "] " + "[" + Запись.Цена + "]" ); Запись.Цена = Запись.Цена * 2; КонецЦикла; // Добавим новую запись. НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка"""); НоваяЗапись.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Петров Ю.В."); НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Банан"); НоваяЗапись.Цена = 500; // Разом запишем набор записей. НаборЗаписей.Записать( Истина // Удалим старые записи и запишем вместо них новые. ); // Теперь записи регистра "ЦенаНаЕдуДляКлиентов" для документа // № ВМБП000001, отличаются от тех, что были записаны // документом при проведении. Чтобы вернуть их к начальному виду // нужно заново провести документ. КонецПроцедуры /// Как прочитать записи документа в регистр сведений запросом /// в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере() // Этот прием используется, если не требуется изменять // найденные записи. // Предположим, у нас есть ссылка на проведенный документ // "Установка цен на еду" № ВМБП-000001 УстановкаЦенСсылка = Документы.УстановкаЦенНаЕдуДляКлиентов.НайтиПоНомеру( "ВМБП-000001", '20141231' ); // Мы знаем, что этот документ делает записи в регистр // сведений "ЦенаНаЕдуДляКлиентов". // Прочитаем эти записи запросом. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦенаНаЕдуДляКлиентов.Период, | ЦенаНаЕдуДляКлиентов.Регистратор, | ЦенаНаЕдуДляКлиентов.НомерСтроки, | ЦенаНаЕдуДляКлиентов.Активность, | ЦенаНаЕдуДляКлиентов.Номенклатура, | ЦенаНаЕдуДляКлиентов.Контрагент, | ЦенаНаЕдуДляКлиентов.Организация, | ЦенаНаЕдуДляКлиентов.Цена |ИЗ | РегистрСведений.ЦенаНаЕдуДляКлиентов КАК ЦенаНаЕдуДляКлиентов |ГДЕ | ЦенаНаЕдуДляКлиентов.Регистратор = &ВыбРегистратор |УПОРЯДОЧИТЬ ПО | ЦенаНаЕдуДляКлиентов.НомерСтроки"; Запрос.УстановитьПараметр( "ВыбРегистратор", УстановкаЦенСсылка ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Организация + ", " + Записи.Контрагент + ", " + Записи.Номенклатура + "] " + "[" + Записи.Цена + "] <" + Записи.Регистратор + ">" ); КонецЦикла; КонецПроцедуры /// Как создать записи в регистр сведений без привязки к /// документу в 1с 8.3, 8.2 &НаСервере Процедура КакСоздатьЗаписиБезПривязкиКДокументуНаСервере() // Создавать записи в регистре сведений без привязки // к документу можно только для регистров, у которых // выбран режим записи "Независимый". В нашей конфигурации // таким регистром является "КурсВалют". // Если бы мы захотели проделать такую же штуку для // регистра "ЦенаНаЕдуДляКлиентов", то нам бы пришлось // воспользоваться документом "ОперацияБух" или им подобным // для ручных операций (см. аналогичный пример в регистрах // накопления). // Пример №1. // Для единичных записей удобно пользоваться менеджером // записей. НоваяЗапись = РегистрыСведений.КурсВалют.СоздатьМенеджерЗаписи(); НоваяЗапись.Период = '20140101'; НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар"); НоваяЗапись.Курс = 30; НоваяЗапись.Записать( Истина // замещать, если уже есть запись с такими же измерениями // и таким же периодом ); // Пример №2. // При помощи менеджера можно также легко // менять или удалять единичные записи. // Найдём, изменим, а затем удалим созданную запись. Выборка = РегистрыСведений.КурсВалют.Выбрать('20140101', '20140101'); Если Выборка.Следующий() Тогда Запись = Выборка.ПолучитьМенеджерЗаписи(); // изменим Запись.Прочитать(); Запись.Курс = 25; // запишем Запись.Записать(Истина); // и тут же удалим Запись.Удалить(); КонецЕсли; // Пример №3. // Если нужно изменить сразу много записей - // удобнее всего использовать набор записей. // Запишем курсы валют за первые 3 дня 2014 года. Доллар = Справочники.Валюты.НайтиПоНаименованию("Доллар"); НаборЗаписей = РегистрыСведений.КурсВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(Доллар); Запись01 = НаборЗаписей.Добавить(); Запись01.Период = '20140101'; Запись01.Валюта = Доллар; Запись01.Курс = 30; Запись02 = НаборЗаписей.Добавить(); Запись02.Период = '20140102'; Запись02.Валюта = Доллар; Запись02.Курс = 40; Запись03 = НаборЗаписей.Добавить(); Запись03.Период = '20140103'; Запись03.Валюта = Доллар; Запись03.Курс = 60; // Запишем весь набор разом. НаборЗаписей.Записать( Истина // затрём все другие записи по // доллару (мы установили его в отборе) ); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
+9
1С 8.x : Как выбрать записи из регистра сведений?
//ВНИМАНИЕ !!!
// В качестве полей для отбора могут задаваться измерения или реквизиты, для которых
// в конфигураторе признак индексирования установлен в значение "Индексировать" или
// установлен признак "Ведущее". Вид сравнения может быть только Равно.
// Пример 1 Периодический регистр сведений
Отбор = Новый Структура("Сотрудник");
Отбор.Сотрудник = Результат.Сотрудник;
ВыборкаОКЛАД = РегистрыСведений.ПлановыеНачисленияРаботниковОрганизаций.Выбрать(Результат.Период,ТекДата, Отбор);
// КРАТКИЙ ВАРИАНТ
ВыборкаОКЛАД = РегистрыСведений.ПлановыеНачисленияРаботниковОрганизаций.Выбрать(Результат.Период,ТекДата,Новый Структура("Сотрудник", Результат.Сотрудник));
СумОкл=0;
Пока ВыборкаОКЛАД.Следующий() Цикл
СумОкл=СумОкл+ВыборкаОКЛАД.Показатель1;
КонецЦикла;
// Пример 2 Непериодический регистр сведений
ВыборкаОРГ = РегистрыСведений.КонтактнаяИнформация.Выбрать(Новый Структура("Объект", Организация));
Пока ВыборкаОРГ.Следующий() Цикл
Если Строка(ВыборкаОРГ.Вид) = "Юридический адрес организации" Тогда
ЮрАдрес = ВыборкаОРГ.Представление;
ИначеЕсли Строка(ВыборкаОРГ.Вид) = "Телефон организации" Тогда
Телефон = ВыборкаОРГ.Представление;
КонецЕсли;
КонецЦикла;
Существует несколько видов регистров в 1С:
- Накопления, хранящие остатки или обороты в числовом виде;
- Расчета, хранящие виды расчетов и сами расчеты, обычно используются для расчета зарплаты;
- Бухгалтерии с данными о бухгалтерских расчетах в виде Дт-Кт;
- Регистры сведений.
Приглашаем на
бесплатный вебинар!
06 июня в 11:00 мск
1 час
На последних мы остановимся поподробнее, поскольку они позволяют компилировать данные из БД по разрезам измерений. Например, в «Ценыноменклатуры» хранятся данные для конкретной номенклатуры и характеристики по определенному виду цен.
Характеристики
Регистр бывает как периодическим, так и непериодическим, когда не нужно сохранять последовательность изменений. Но если все-таки хранить нужно, то устанавливается, в пределах какого периода программа установит контроль уникальности записей: посекундно, за день, месяц, за квартал и год.
Если попытаться создать две записи в пределах одного периода, программа выдаст ошибку «Запись с такими ключевыми полями существует!» и не даст произвести запись в базу данных.
Также можно указать режим записи. Первый с «Подчинением регистратору», при котором записи будут регистрироваться документами и в каждой из них будет указан документ-регистратор. Если выбирать второй – независимый режим, то данные регистрируются не регистратором, а добавляются, например, непосредственно из списка или как обработка.
Особенность периодического регистра в том, что можно использовать срез крайних или первых, получая готовые значения из базы данных о последнем/первом установленном значении на определенную дату.
Запись в регистр сведений 1С
Строки в регистре с периодом и регистратором, содержащие информацию о ресурсах в разрезе измерений, называются записями.
Чтобы добавить запись в регистр используются или менеджер записей, или набор записей. Если у записей в регистре имеется общий ключ, то необходимо использовать НаборЗаписей. А для записи одной единственной записи, если в регистре все записи уникальны, необходимо использовать МенеджерЗаписи.
Пример записи при использовании объекта РегистрСведенийНаборЗаписей.
Использование менеджера записи:
НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НоваяЗапись.Период = Дата(31,12,2016);
НоваяЗапись.Курс = 100;
НоваяЗапись.Кратность = 1;
НоваяЗапись.Записать();
При использовании набора записей и метода «Записать» происходит запись в регистр сведений набора записей. При этом может происходить как просто добавление строк, так и замещение уже имеющихся строк в регистре. Для независимых регистров, без установки отборов, будет произведено удаление всех записей в регистре и замещение на добавляемые записи.
Если записать без отбора данные в подчиненны регистр, возникнет ошибка.
Пример записи с использованием набора записей в подчиненный регистратору регистр сведений ЦеныНоменклатуры:
НовыйНаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НовыйНаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();
НоваяЗаписьНабора.Период = Ссылка.Дата;
НоваяЗаписьНабора.Номенклатура = Ссылка.Номенклатура;
НоваяЗаписьНабора.Цена = Ссылка.Цена;
НовыйНаборЗаписей.Записать();
Пример записи через менеджер записи:
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = Дата;
Запись.Курс = Курс;
Запись.Валюта = Валюта;
Запись.Записать();
Поиск и чтение в регистре сведений
Чтобы найти в регистре сведений запись и прочитать ее, нужна помощь запросов. Например, нам надо получить цены, внесенные определенным регистратором:
ВЫБРАТЬ
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
ЦеныНоменклатуры.Регистратор = &Регистратор
Изменение и удаление записей
Чтобы удалить запись регистра сведений, например, все курсы валюты EUR, воспользуйтесь следующим кодом:
СтруктураОтбора = новый Структура("Валюта", Справочники.Валюты.НайтиПоНаименованию("EUR"));
Выборка = РегистрыСведений.КурсыВалют.Выбрать(,,СтруктураОтбора);
Пока Выборка.Следующий() Цикл
МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();
Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;
Для быстрой и полной очистки регистра можно использовать следующий код:
НоваяЗапись = РегистрыСведений.ТестовыйРегистр.СоздатьНаборЗаписей();
НоваяЗапись.Записать();
Чтобы скорректировать и изменить регистр, а также быстро заполнить регистр данными, можно написать универсальную обработку.
Регистры сведений в 1С 8.3 — это объекты метаданных, которые нужны для хранения справочной информации в разрезе нескольких измерений. Пример применения регистра сведений — хранение, с привязкой к периоду, цен предприятия в разрезе товаров и типов цен или курсов валют в разрезе валют. Данные в регистре сведений хранятся в виде записей, каждая из которых содержит значения измерений и соответствующие им значения ресурсов:
- Измерения регистра сведений описывают разрезы, в которых хранится информация
- Ресурсы регистра сведений соответственно хранят саму информацию
Чтение записи регистра сведений в 1С 8.3:
&НаСервере
Процедура ЧтениеЗаписи()// Чтение всех записей регистра «ЦеныРеализации» по организации ОАО «Гипермаркет АЗИЯ» (упорядоченных по дате).
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ЦеныРеализации.Период,
| ЦеныРеализации.Регистратор,
| ЦеныРеализации.НомерСтроки,
| ЦеныРеализации.Активность,
| ЦеныРеализации.Номенклатура,
| ЦеныРеализации.Контрагент,
| ЦеныРеализации.Организация,
| ЦеныРеализации.Цена
|ИЗ
| РегистрСведений.ЦеныРеализации КАК ЦеныРеализации
|ГДЕ
| ЦеныРеализации.Активность = Истина И
| ЦеныРеализации.Организация = &ВыбОрганизация
|УПОРЯДОЧИТЬ ПО
| ЦеныРеализации.Период»;Запрос.УстановитьПараметр(«ВыбОрганизация», Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»));
РезультатЗапроса = Запрос.Выполнить();Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() ЦиклСообщить(«за » + Записи.Период + » на » +Записи.Номенклатура + » » + Записи.Контрагент + » = » +Записи.Цена + » руб.»);
КонецЦикла;
КонецПроцедуры
Поиск и программное изменение записи документа в регистр сведений в 1С 8.3:
&НаСервере
Процедура ПоискИИзменениеЗаписи()УстановкаЦенСсылка = Документы.УстановкаЦен.НайтиПоНомеру(«ПТО-00000001», ‘20201231’);
УстановкаЦен = УстановкаЦенСсылка.ПолучитьОбъект();// Получение набора записей документа Установка цен № ПТО-00000001 от 31.12.20 в регистр «ЦеныРеализации»
НаборЗаписей = УстановкаЦен.Движения.ЦеныРеализации;// Чтение набора записей из базы данных.
НаборЗаписей.Прочитать();
Для Каждого
Запись Из НаборЗаписей Цикл// Получение старых значений
Сообщить(» по » + Запись.Организация + «, » + Запись.Контрагент + «, » + Запись.Номенклатура + » = » + Запись.Цена);
// Проведение удорожания на 30%
Запись.Цена = Запись.Цена + (Запись.Цена * (30/100));
КонецЦикла;
// Добавление новой записи
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»);
НоваяЗапись.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(«ООО «»БелИмпортТорг»»»);
НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(«Молоко 3,2%»);
НоваяЗапись.Цена = 3;// Замещение старых записей и запись новых
НаборЗаписей.Записать(Истина);
КонецПроцедуры
Чтение записи документа в регистре сведений запросом в 1С 8.3:
&НаСервере
Процедура ЧтениеЗаписиЗапросом()// Если не требуется изменять найденные записи.
СсылкаДок = Документы.УстановкаЦен.НайтиПоНомеру(«ПТО-00000001», ‘20201231’);// Чтение запросом записей регистра сведений «ЦеныРеализации» текущего документа
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ЦеныРеализации.Период,
| ЦеныРеализации.Регистратор,
| ЦеныРеализации.НомерСтроки,
| ЦеныРеализации.Активность,
| ЦеныРеализации.Номенклатура,
| ЦеныРеализации.Контрагент,
| ЦеныРеализации.Организация,
| ЦеныРеализации.Цена
|ИЗ
| РегистрСведений.ЦеныРеализации КАК ЦеныРеализации
|ГДЕ
| ЦеныРеализации.Регистратор = &Регистратор
|УПОРЯДОЧИТЬ ПО
| ЦеныРеализации.НомерСтроки»;Запрос.УстановитьПараметр(«Регистратор»,СсылкаДок);
РезультатЗапроса = Запрос.Выполнить();Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() ЦиклСообщить(«по документу » + Записи.Регистратор + » по » +Записи.Организация + «, «
+ Записи.Контрагент + » » + Записи.Номенклатура +» = «+ Записи.Цена + » руб.»);
КонецЦикла;
КонецПроцедуры
Получение наиболее ранних записей регистра сведений через срез первых на дату в 1С 8.3:
&НаСервере
Процедура ПолучениеНаиболееРаннихЗаписей()// Параметры виртуальной таблицы СрезПервых:
// 1. Период (включительно)
// 2. Условие (например, Организация = &ВыбОрганизация)
// Получение цен на Молоко 3,2% для каждого контрагента на начало 2 квартала 2020 года (включительно)
// по организации ОАО «Гипермаркет АЗИЯ».
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ЦеныРеализацииСрезПервых.Период,
| ЦеныРеализацииСрезПервых.Активность,
| ЦеныРеализацииСрезПервых.Номенклатура,
| ЦеныРеализацииСрезПервых.Контрагент,
| ЦеныРеализацииСрезПервых.Организация,
| ЦеныРеализацииСрезПервых.Цена
|ИЗ
| РегистрСведений.ЦеныРеализации.СрезПервых(
| ДАТАВРЕМЯ(2020, 04, 01, 00, 00, 00),
| Активность = Истина И
| Организация = &ВыбОрганизация И
| Номенклатура = &ВыбНоменклатура) КАК ЦеныРеализацииСрезПервых
|УПОРЯДОЧИТЬ ПО
| ЦеныРеализацииСрезПервых.Контрагент»;Запрос.УстановитьПараметр(«ВыбОрганизация»,Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»));
Запрос.УстановитьПараметр(«ВыбНоменклатура»,Справочники.Номенклатура.НайтиПоНаименованию(«Молоко 3,2%»));
РезультатЗапроса = Запрос.Выполнить();Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() ЦиклСообщить(«за » + Записи.Период + » на » +Записи.Номенклатура + » » + Записи.Контрагент + » = » +Записи.Цена + » руб.»);
КонецЦикла;
КонецПроцедуры
Получение наиболее поздних записей регистра сведений через срез последних на дату в 1С 8.3:
&НаСервере
Процедура ПолучениеНаиболееПозднихЗаписей()// Параметры виртуальной таблицы СрезПоследних:
// 1. Период (включительно)
// 2. Условие (например, Организация = &ВыбОрганизация)
// Получение цен на Молоко 3,2% для каждого контрагента на конец 2 квартала 2020 года (включительно)
// по организации ОАО «Гипермаркет АЗИЯ».
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ЦеныРеализацииСрезПоследних.Период,
| ЦеныРеализацииСрезПоследних.Активность,
| ЦеныРеализацииСрезПоследних.Номенклатура,
| ЦеныРеализацииСрезПоследних.Контрагент,
| ЦеныРеализацииСрезПоследних.Организация,
| ЦеныРеализацииСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныРеализации.СрезПоследних(
| ДАТАВРЕМЯ(2020, 06, 30, 23, 59, 59),
| Активность = Истина И
| Организация = &ВыбОрганизация И
| Номенклатура = &ВыбНоменклатура
| ) КАК ЦеныРеализацииСрезПоследних
|УПОРЯДОЧИТЬ ПО
| ЦеныРеализацииСрезПоследних.Контрагент»;Запрос.УстановитьПараметр(«ВыбОрганизация»,Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»));
Запрос.УстановитьПараметр(«ВыбНоменклатура»,Справочники.Номенклатура.НайтиПоНаименованию(«Молоко 3,2%»));
РезультатЗапроса = Запрос.Выполнить();Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() ЦиклСообщить(«за » + Записи.Период + » на » +Записи.Номенклатура + » » + Записи.Контрагент + » = » +Записи.Цена + » руб.»);
КонецЦикла;
КонецПроцедуры
Создание записи в регистре сведений без привязки к документу в 1С 8.3:
&НаСервере
Процедура СозданиеЗаписиБезПривязкиКДокументу()// Создание записи в регистре сведений без привязки к документу можно только для регистров,
// в свойствах которых установлен режим записи «Независимый».
// Создание записи — для единичных записей лучше использовать «Менеджер Записей»
НоваяЗапись = РегистрыСведений.КурсВалют.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ‘20200401’;
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию(«Евро»);
НоваяЗапись.Курс = 2.8010;
НоваяЗапись.Записать(Истина); // Замещение — если уже есть запись с такими же измерениями и таким же периодом
// Поиск, изменение и удаление созданной запись на дату
Выборка = РегистрыСведений.КурсВалют.Выбрать(‘20200401’, ‘20200401’);
Если Выборка.Следующий() ТогдаЗапись = Выборка.ПолучитьМенеджерЗаписи();
Запись.Прочитать();
Запись.Курс = 2.8020;// Изменение курса Евро
Запись.Записать(Истина);// Запись курса Евро
Запись.Удалить();// Удаление курса ЕвроКонецЕсли;// Для группового изменения записей лучше использовать «Набор Записей»
Евро = Справочники.Валюты.НайтиПоНаименованию(«Евро»);НаборЗаписей = РегистрыСведений.КурсВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(Евро);Запись_1 = НаборЗаписей.Добавить();
Запись_1.Период = ‘20200401’; // 01 апреля 2020 г.
Запись_1.Валюта = Евро;
Запись_1.Курс = 2.8446;Запись_2 = НаборЗаписей.Добавить();
Запись_2.Период = ‘20200402’; // 02 апреля 2020 г.
Запись_2.Валюта = Евро;
Запись_2.Курс = 2.8478;Запись_3 = НаборЗаписей.Добавить();
Запись_3.Период = ‘20200403’; // 03 апреля 2020 г.
Запись_3.Валюта = Евро;
Запись_3.Курс = 2.8320;Запись_4 = НаборЗаписей.Добавить();
Запись_4.Период = ‘20200404’; // 04 апреля 2020 г.
Запись_4.Валюта = Евро;
Запись_4.Курс = 2.7943;Запись_5 = НаборЗаписей.Добавить();
Запись_5.Период = ‘20200405’; // 05 апреля 2020 г.
Запись_5.Валюта = Евро;
Запись_5.Курс = 2.7797;// Запись сразу всего набора
НаборЗаписей.Записать(Истина); // Замещение — если уже есть запись с такими же измерениями и таким же периодомКонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Регистры сведений:
Copyright©, «Программист 1С в г.Минске», 05.04.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник