Версия для печати темы (https://pro1c.org.ua/index.php?s=621bfa0c7c44724d4a500a226d9cf1c2&showtopic=57812)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Сгруппировать и сравнить в ТЧ записи по определенному отбору

Автор: Constantus 19.03.20, 11:51

Приветствую, Форумчане!
1с8.3.12, УФ, самопис

В ТЧ есть два реквизита "ТипДанных" и "Оформитель" (все перечисления)

Покрытие - Офис
Покрытие - Офис
Покрытие - Производство
Покрытие - Производство
Ерунда1 - Игнор
Ерунда1 - Игнор

Требуется проанализировать только по парам "Покрытие - Офис" и "Покрытие - Производство"
Т.е. проверить наличие этих пар в ТЧ, причем главным условием должно быть наличие только одной из этих пар: если есть обе, то это очень плохо и больно...

Проверка идет перед записью в модуле объекта.

Перепробовал несколько мыслей:

СтруктураДляПоиска.Вставить("ТипДанных, Оформитель", Перечисления.ТипыДанныхОформления.Покрытие, Перечисления.СпособыИзготовления.Производство);
МассивСтрокНаПроизводстве = Оформление.НайтиСтроки(структураДляПоиска);

там нужно использовать только один параметр для поиска

ПроверкаПокрытия.Свернуть("ТипДанных", "Оформитель");

требует число в суммируемом поле

Использовать запрос не удобно, т.к. проверка может идти для нового документа

Посоветуйте как правильно свернуть, сгруппировать или есчё что-нить, чтобы получить мечту жизни?


Автор: TohaMonster 20.03.20, 8:54

Опять 90% Вами выполнено. Нужен еще шаг. "Свернуть" отбрасываем. "НайтиСтроки" - самое то.

Пара1ДляПоиска.Вставить("ТипДанных, Оформитель", Перечисления.ТипыДанныхОформления.Покрытие, Перечисления.СпособыИзготовления.Производство);
МассивСтрокПара1 = Оформление.НайтиСтроки(Пара1ДляПоиска);

Пара2ДляПоиска.Вставить("ТипДанных, Оформитель", Перечисления.ТипыДанныхОформления.Покрытие, Перечисления.СпособыИзготовления.Офис);
МассивСтрокПара2 = Оформление.НайтиСтроки(Пара2ДляПоиска);

Если МассивСтрокПара1.Количество()>0 И МассивСтрокПара2.Количество()>0 Тогда
  Сообщить("Смотри чо творишь, Пользователь!");
  Отказ = ИСТИНА;
КонецЕсли;


Но, как вариант, эту проверку делать при проведении, тогда можно запросом

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua