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

Доступ К типу значений документа рассчетов

Автор Андрей Бутенко, 12 окт 2022, 18:29

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

Андрей Бутенко

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

МассивКонтрагентов = УбратьДублиИзМассива(Платежи.Выгрузить(, "Контрагент").ВыгрузитьКолонку("Контрагент"));
Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
| РассчетыСПокупателемОстатки.Контрагент КАК Контрагент,
| РассчетыСПокупателемОстатки.ДокументРассчетов КАК ДокументРассчетов,
| РассчетыСПокупателемОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РассчетыСПокупателем.Остатки(, Контрагент В (&Массив)) КАК РассчетыСПокупателемОстатки
|
|СГРУППИРОВАТЬ ПО
| РассчетыСПокупателемОстатки.Контрагент,
| РассчетыСПокупателемОстатки.ДокументРассчетов,
| РассчетыСПокупателемОстатки.СуммаОстаток" ;

Запрос.УстановитьПараметр("Массив", МассивКонтрагентов); 
Результат = Запрос.Выполнить();
ТабЗапроса = Результат.Выгрузить();
ТабличнаяЧастьТЗ = Платежи.Выгрузить();

Для Каждого Эл из ТабличнаяЧастьТЗ Цикл
Сообщить(Эл.Контрагент);
МассивСтрок = ТабЗапроса.НайтиСтроки(Новый Структура("Контрагент", Эл.Контрагент));
ТЗКонтрагента = ТабЗапроса.Скопировать(МассивСтрок);
Сообщить(ТЗКонтрагента.Количество());

МассивСтрок1 = ТЗКонтрагента.НайтиСтроки(Новый Структура("ДокументРассчетов", "???????"));
ТЗВыписок = ТЗКонтрагента.Скопировать(МассивСтрок1);
МассивСтрок2 = ТЗКонтрагента.НайтиСтроки(Новый Структура("ДокументРассчетов", "???????"));
ТЗНакладных = ТЗКонтрагента.Скопировать(МассивСтрок2);

ИтогВыписок =  ТЗВыписок.итог("СуммаОстаток");
ИтогНакладных =  ТЗНакладных.итог("СуммаОстаток");

Если  ИтогВыписок >= ИтогНакладных Тогда

НовоеДвижение = Движения.РассчетыСПокупателем.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = Дата;
НовоеДвижение.Контрагент = Эл.Контрагент;
НовоеДвижение.ДокументРассчетов = Ссылка;
НовоеДвижение.Сумма = Эл.СуммаПоступления;
Сообщить("ЗАписали1");
Продолжить;

Иначе
ГашениеДолгов = ИтогНакладных -  ИтогВыписок;
Если ГашениеДолгов >= Эл.СуммаПоступления Тогда

НовоеДвижение = Движения.РассчетыСПокупателем.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = Дата;
НовоеДвижение.Контрагент = Эл.Контрагент;
НовоеДвижение.ДокументРассчетов = Ссылка;
НовоеДвижение.Сумма = Эл.СуммаПоступления;
Сообщить("ЗАписали2");
Продолжить;
Иначе

Списание = Эл.СуммаПоступления -ГашениеДолгов;
НовоеДвижение = Движения.РассчетыСПокупателем.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = Дата;
НовоеДвижение.Контрагент = Эл.Контрагент;
НовоеДвижение.ДокументРассчетов = Ссылка;
НовоеДвижение.Сумма = ГашениеДолгов;
Сообщить("ЗАписали3");

НовоеДвижение = Движения.РассчетыСПокупателем.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = Дата;
НовоеДвижение.Контрагент = Эл.Контрагент;
НовоеДвижение.ДокументРассчетов = Ссылка;
НовоеДвижение.Сумма = Списание;
Сообщить("ЗАписали3");
Продолжить;
КонецЕсли;

КонецЕсли;   
Сообщить("Ничего не записали");
КонецЦикла;


КонецПроцедуры

Конкретно в этом месте вместо вопросов необходимо как то получать доступ к этому типу, чтобы, в зависимости от того, какой конкретно документ является регистратором, действовать далее
МассивСтрок1 = ТЗКонтрагента.НайтиСтроки(Новый Структура("ДокументРассчетов", "???????"));
ТЗВыписок = ТЗКонтрагента.Скопировать(МассивСтрок1);
МассивСтрок2 = ТЗКонтрагента.НайтиСтроки(Новый Структура("ДокументРассчетов", "???????"));
ТЗНакладных = ТЗКонтрагента.Скопировать(МассивСтрок2);

LexaK

Андрей Бутенко, какой-то "дикий" алгоритм, (и да, ДокументРассчетов - это не регистратор!  :befhbt:  )
одно из решений пробежаться в цикле после первого отбора (по контрагенту)
и проверять тип документа примерно так
Если ТипЗнч(Стр.ДокументРассчетов) = Тип("ДокументСсылка.Накладная") тогда
...
ИначеЕсли ТипЗнч(Стр.ДокументРассчетов) = Тип("ДокументСсылка.чтоТамЕще") тогда
...
КонецЕсли;

а для вашего варианта, можно использовать Тип значения в запросе, по нему и отбор потом делать
примерно так
 "ВЫБРАТЬ
    |    РассчетыСПокупателемОстатки.Контрагент КАК Контрагент,
    |    РассчетыСПокупателемОстатки.ДокументРассчетов КАК ДокументРассчетов,   
    |    ТипЗначения(РассчетыСПокупателемОстатки.ДокументРассчетов) КАК ТипДокументРассчетов,
...


и отбор примерно такой

      МассивСтрок1 = ТЗКонтрагента.НайтиСтроки(Новый Структура("ТипДокументРассчетов", Тип("ДокументСсылка.чтоТамНадо")));

примерно так.
 
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск