Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
30 мар 2024, 03:55

Список регистров.

Автор MagistrPavel, 30 июн 2015, 08:13

0 Пользователей и 1 гость просматривают эту тему.

MagistrPavel

Добрый день.
Подскажите пожалуйста как вывести список регистров накопления на платформах 1С 8.2 и 8.3?
И каждому регистру список регистраторов (т.е. всех документов № документа, дата , наименование)
Пример (у регистра 2 не было задействовано ни одного регистратора)
Регистр 1
Реализация товаров 03838584353 от 16.09.2015
Реализация товаров 03838535455 от 18.09.2015
_________________
Регистр 2
_____________________________
Регистр 3
поступление товаров 7823757325 от 01.03.2014
_______________

mixqn

набросал за 15 минут следующий код:

Для каждого Регистр Из Метаданные.РегистрыНакопления Цикл
Сообщить(Регистр.Имя);
//НаборЗаписей = РегистрыНакопления[Регистр.Имя].СоздатьНаборЗаписей();
//Для каждого Регистратор Из НаборЗаписей.Отбор.Регистратор.ТипЗначения.Типы() Цикл
// Сообщить(Символы.Таб + Регистратор);
//КонецЦикла;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10
| ТоварыНаСкладах.Регистратор
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";

Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТоварыНаСкладах", Регистр.Имя);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Сообщить(Символы.Таб + Выборка.Регистратор);
КонецЦикла;
КонецЦикла;


если я правильно понял вопрос, то это то, что нужно

код в комментариях - получение списка всех возможных видов регистраторов.

MagistrPavel

Нет не правильно, вы выводите только товары на складах, мне нужен список вообще всех регистров накопления и всех регистраторов к ним, которые используются в базе, в примере просто формулировка вывода была на экран.

mixqn

Цитата: MagistrPavel от 30 июн 2015, 09:25
вы выводите только товары на складах
о чем это вы?

может стоило сначала попробовать выполнить? ну или на худой конец, код посмотреть повнимательнее. если присмотреться, можно заметить строку
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТоварыНаСкладах", Регистр.Имя);
Добавлено:


собственно, приложу готовую обработку. форма обычная. на управляемую если что не сложно перевести.

mixqn

Ну и совсем уж для полноты картины, вот кусочек результата в моей тестовой базе:

БракВПроизводстве
БракВПроизводствеБухгалтерскийУчет
БракВПроизводствеМеждународныйУчет
БракВПроизводствеНалоговыйУчет
ВзаиморасчетыСДепонентамиОрганизаций
ВзаиморасчетыСКонтрагентами
   Реализация товаров и услуг ТД000056285 от 17.10.2012 7:17:20
   Реализация товаров и услуг ТД000056287 от 17.10.2012 7:19:16
   Реализация товаров и услуг РНд00007342 от 17.10.2012 7:19:58
   Реализация товаров и услуг ТД000056288 от 17.10.2012 7:20:33
   Реализация товаров и услуг ТД000056290 от 17.10.2012 7:20:55
   Реализация товаров и услуг ТД000056294 от 17.10.2012 7:22:22
   Реализация товаров и услуг ТД000056296 от 17.10.2012 7:22:49
   Реализация товаров и услуг ТД000056300 от 17.10.2012 7:24:19
   Реализация товаров и услуг ТД000056302 от 17.10.2012 7:24:50
   Реализация товаров и услуг ТД000056305 от 17.10.2012 7:25:45
ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов
   Реализация товаров и услуг ТД000056262 от 17.10.2012 7:07:43
   Реализация товаров и услуг ТД000056263 от 17.10.2012 7:08:17
   Реализация товаров и услуг ТД000056263 от 17.10.2012 7:08:17
   Реализация товаров и услуг ТД000056264 от 17.10.2012 7:08:58
   Реализация товаров и услуг РНд00007340 от 17.10.2012 7:11:53
   Реализация товаров и услуг ТД000056268 от 17.10.2012 7:12:07
   Реализация товаров и услуг ТД000056269 от 17.10.2012 7:12:37
   Реализация товаров и услуг ТД000056270 от 17.10.2012 7:12:59
   Реализация товаров и услуг ТД000056271 от 17.10.2012 7:13:19
   Реализация товаров и услуг ТД000056272 от 17.10.2012 7:13:35

mixqn

единственное, что там надо исправить - убрать "ПЕРВЫЕ 10" из запроса, если нужно вывести все регистраторы за все время. Я просто для теста добавил это - чтобы запустить и в приемлемое время получить результат, убедиться, что он именно такой, как указано в стартпосте.

MagistrPavel

Спасибо большое. Работает проверил на БП 2.0 и Бп 3.0, т.е. на всех конфигурациях для платформ 8.2 и 8.3 будет работать? Код не меняется? А возможно вывод делать в таблицу а не в сообщения?

mixqn

любой каприз за ваши деньги ©

MagistrPavel

Вывод в таблицу додумал сам как сделать.
Процедура КнопкаВыполнитьНажатие(Кнопка)
   ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Регистр");
   ТЗ.Колонки.Добавить("Регистратор");
   Для каждого Регистр Из Метаданные.РегистрыНакопления Цикл
   НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Регистр = Регистр.Имя;
               
      Запрос = Новый Запрос;
      Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10
      |   ТоварыНаСкладах.Регистратор
      |ИЗ
      |   РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";
      
      Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТоварыНаСкладах", Регистр.Имя);
      
      Результат = Запрос.Выполнить();
      Выборка = Результат.Выбрать();
      
      Пока Выборка.Следующий() Цикл
      НоваяСтрока = ТЗ.Добавить();
      НоваяСтрока.Регистратор =Символы.Таб + Выборка.Регистратор;
      КонецЦикла;
   КонецЦикла;
   ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ;
   ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
КонецПроцедуры

Теперь не понимаю как лучше дату ограничить в запросе или при выводе? Т.е. например я хочу регистраторы по всем регистрам только после 1 января 15 года вывести.

vitasw

Однозначно в запросе.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск