Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Сворачивать, сортировать набор записей          
bolobol Подменю пользователя
сообщение 08.10.11, 22:29
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 65
Спасибо сказали: 0 раз
Рейтинг: 0

Здравствуйте.

Не уверен, что делаю всё правильно, поэтому вопросы по правильности решений (задачи переформулированы):
1. В документе имеется табличная часть с реквизитом Товары.
По подписке "обработка проведения" документа, по товару отбирается склад и другие реквизиты и ресурс из периодического регистра:
Стракт= Новый Структура;
Стракт.Вставить("Товар", Источник.ТабЧасть.ВыгрузитьКолонку("Товары"));
СкладыТоваров= РегистрыСведений.СкладыТоваров.СрезПоследних(Источник.Дата, Стракт);


2. В документе нет указания, что он формирует движения по периодическому регистру сведений "РегСв", таким образом, как я понимаю, чистить движения нужно самостоятельно, для того чтобы получить состояние регистра на дату документа:
НаборЗаписей= РегистрыСведений.РегСВ.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
НаборЗаписей.Записать();


3. Нужно создать таблицу значений аналогичной структуры как РегСВ:
ТЗВсеСклады= НаборЗаписей.Выгрузить();


4. Полученную выборку необходимо отсортировать по реквизиту "Склад":
СкладыТоваров.Сортировать("Склад");

и при определённых условиях остальных реквизитов - опустошить значение ресурса, но так как обход идёт по неизвестному заранее сценарию (надо ли опустошать и несколько записей регистра или одну), то получается такая схема:
ПредыдущийСклад= Неопределено;
ТЗОпустошения= Неопределено;
ВыполнениеУсловияОпустошения= ложь;
Для каждого Стр из СкладыТоваров Цикл
   Если ПредыдущийСклад <> Стр.Склад Тогда
      Если ПредыдущийСклад <> неопределено Тогда
         Если ВыполнениеУсловияОпустошения Тогда

Необходимо скопировать ТЗОпустошения в ТЗВсеСклады
            Для каждого Стр2 из ТЗОпустошения Цикл
               НовСтр= ТЗВсеСклады.Добавить();
               ЗаполнитьЗначенияСвойств(НовСтр, Стр2);
            КонецЦикла;

         КонецЕсли;
      КонецЕсли;
      ПредыдущийСклад= Стр.Склад;
      ВыполнениеУсловияОпустошения= ложь;
   КонецЕсли;
   Если НЕ ПроверкаВыполненияУсловияОпустошения(Стр, ТЗОпустошения) Тогда
      Если НужноОпустошить(Стр) Тогда
         НовСтр= ТЗВсеСклады.Добавить();
         ЗаполнитьЗначенияСвойств(НовСтр, Стр);
      КонецЕсли;
   Иначе
      ВыполнениеУсловияОпустошения= Истина;
   КонецЕсли;
КонецЦикла;

и повтор кода (здесь сделано через повтор, чтобы не путать текстом оптимизации, типа - зачем добавляется пустая строка в СкладыТоваров):
Если ПредыдущийСклад <> неопределено Тогда ... КонецЕсли;

Получается, что при заполнении по Стр, а затем по вдруг необходимому заполнению по Стр2 (которая может включать в себя отдельные записи Стр, уже добавленные) в ТЗВсеСклады появятся дублирующиеся записи, которые необходимо свернуть по реквизитам и ресурсам РегСВ:
Метаданное= Метаданные.РегистрыСведений.РегСВ;
СтрСвернуть= "";
Для каждого Стр из Метаданное.Реквизиты Цикл
   СтрСвернуть= СтрСвернуть + "," + Стр.Имя;
КонецЦикла;
Для каждого Стр из Метаданное.Ресурсы Цикл
   СтрСвернуть= СтрСвернуть + "," + Стр.Имя;
КонецЦикла;
ТЗВсеСклады.Свернуть(Сред(СтрСвернуть, 2));


5. И когда ТЗВсеСклады подготовлена к записи в регистр РегСВ, ведь с дублирующимися записями регистр не запишется:
НаборЗаписей.Загрузить(ТЗВсеСклады);
НаборЗаписей.Записать();


6. Что нужно изменить, чтобы было правильно? ))

Спасибо.

logist Подменю пользователя
сообщение 09.10.11, 6:18
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Цитата(bolobol @ 08.10.11, 23:29) *
6. Что нужно изменить, чтобы было правильно? ))

Немного ничего не понятно. А что конкретно НЕ правильно?
Мне кажется еще было бы не плохо описать структуру данных, и что нужно сделать словами, без примеров кода.

Вот это особо взорвало мой мозг
Метаданное= Метаданные.РегистрыСведений.РегСВ;
СтрСвернуть= "";
Для каждого Стр из Метаданное.Реквизиты Цикл
   СтрСвернуть= СтрСвернуть + "," + Стр.Имя;
КонецЦикла;
Для каждого Стр из Метаданное.Ресурсы Цикл
   СтрСвернуть= СтрСвернуть + "," + Стр.Имя;
КонецЦикла;

Прошу специалистов пояснить - это что код который "сворачивает" ВЕСЬ регистр? Если так то он же по топику "периодический", нифига не понимаю... sad.gif


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kivals Подменю пользователя
сообщение 09.10.11, 10:35
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 105
Из: Киев
Спасибо сказали: 27 раз
Рейтинг: 0

Цитата(logist @ 09.10.11, 7:18) *
Немного ничего не понятно. А что конкретно НЕ правильно?
Мне кажется еще было бы не плохо описать структуру данных, и что нужно сделать словами, без примеров кода.

+1

Цитата(logist @ 09.10.11, 7:18) *
Вот это особо взорвало мой мозг
Метаданное= Метаданные.РегистрыСведений.РегСВ;
СтрСвернуть= "";
Для каждого Стр из Метаданное.Реквизиты Цикл
СтрСвернуть= СтрСвернуть + "," + Стр.Имя;
КонецЦикла;
Для каждого Стр из Метаданное.Ресурсы Цикл
СтрСвернуть= СтрСвернуть + "," + Стр.Имя;
КонецЦикла;
Прошу специалистов пояснить - это что код который "сворачивает" ВЕСЬ регистр? Если так то он же по топику "периодический", нифига не понимаю... sad.gif

Следующая строка по-моему объясняет к чему это:
ТЗВсеСклады.Свернуть(Сред(СтрСвернуть, 2));

Сворачивается таблица, в которой могут быть и "лишние" поля чтобы не дублировать записи в регистре

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.06.25, 19:59
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!