Написал запрос, добавил на форму реквизит "Контрагент", нужно чтобы при выборе только подгруппы контрагентов получались документы
Функция ПолучитьДокумент(Кон, Дог)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента";
Запрос.УстановитьПараметр("Дата", НачалоДня(ЭтотОбъект.ДатаДокументов));
Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
Запрос.УстановитьПараметр("Контрагент", Кон.Ссылка);
Запрос.УстановитьПараметр("ДоговорКонтрагента", Дог.Ссылка);
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество() > 0 Тогда
Стр = ТЗ.Получить(0);
Возврат Стр.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
ПоказатьКак сделать чтобы при выборе подгрупп, документы получить только по контрагентам которые входят в подгруппу?
По теме из базы знаний
Найденные решения
ВЫБРАТЬ
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента
| И АктСверкиВзаиморасчетов.Контрагент.Родитель = &Родитель";
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента
| И АктСверкиВзаиморасчетов.Контрагент.Родитель = &Родитель";
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)
(94) Так студенту я и предлагал дописать обработку :)
Ну да есть, привычка, просто...уже..обычно это использую ток на числах...
А сложнее...да :)..ну так учиться учится и еще раз учиться, при том вы просили я написал, с учетом регистра бухгалтерии что в принципе в задаче было :) и я считаю условие правильное, выше написал почему...
(94) Так студенту я и предлагал дописать обработку :)
ЕСТЬNULL( АктСверкиВзаиморасчетов.Ссылка,"Нет Акта Сверки") КАК АктСверки
Ну да есть, привычка, просто...уже..обычно это использую ток на числах...
А сложнее...да :)..ну так учиться учится и еще раз учиться, при том вы просили я написал, с учетом регистра бухгалтерии что в принципе в задаче было :) и я считаю условие правильное, выше написал почему...
ВЫБРАТЬ
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента
| И АктСверкиВзаиморасчетов.Контрагент.Родитель = &Родитель";
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента
| И АктСверкиВзаиморасчетов.Контрагент.Родитель = &Родитель";
(12) что значит - "засунуть" - перенесите всех кто не в группе в эту группу.
Но это не очень хороший метод - группа - очень условное место, сегодня они все в группе а завтра кто-то взял да и перетащил их еще куда .
Лучше использовать на мой взгляд Реквизит Договора с контрагентом ВидДоговора (если это БП3) и отбирать тех у кого есть договор с видом "С поставщиком"
Но это не очень хороший метод - группа - очень условное место, сегодня они все в группе а завтра кто-то взял да и перетащил их еще куда .
Лучше использовать на мой взгляд Реквизит Договора с контрагентом ВидДоговора (если это БП3) и отбирать тех у кого есть договор с видом "С поставщиком"
(16) Полный код
Процедура КнопкаВыполнитьНажатие(Кнопка)
ЭтотОбъект.Состав.Очистить();
Если (Не ЗначениеЗаполнено(ЭтотОбъект.НачПериода)) или (Не ЗначениеЗаполнено(ЭтотОбъект.КонПериода)) Тогда
Предупреждение("Не заполнен период сверки расчетов!!!");
Возврат;
КонецЕсли;
Если ЭтотОбъект.ВыбКонтрагент.ЭтоГруппа Тогда
Выборка = Справочники.Контрагенты.Выбрать(ВыбКонтрагент.Ссылка);
Пока Выборка.Следующий() Цикл
Состояние("Обрабатывается контрагент: " + СокрЛП(Выборка.Наименование));
ВыборкаД = Справочники.ДоговорыКонтрагентов.Выбрать(,Выборка.Ссылка);
Пока ВыборкаД.Следующий() Цикл
Состояние("Обрабатывается контрагент: " + СокрЛП(Выборка.Наименование) + "; по договору: " + СокрЛП(ВыборкаД.Наименование));
Если ЭлементыФормы.Переключатель1.Значение = 2 Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 1 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 0 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
Продолжить;
КонецЕсли;
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Состояние("Обрабатывается контрагент: " + СокрЛП(ЭтотОбъект.ВыбКонтрагент.Наименование));
ВыборкаД = Справочники.ДоговорыКонтрагентов.Выбрать(, ЭтотОбъект.ВыбКонтрагент);
Пока ВыборкаД.Следующий() Цикл
Состояние("Обрабатывается контрагент: " + СокрЛП(ЭтотОбъект.ВыбКонтрагент.Наименование) + "; по договору: " + СокрЛП(ВыборкаД.Наименование));
Если ЭлементыФормы.Переключатель1.Значение = 2 Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 1 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 0 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
Продолжить;
КонецЕсли;
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
ЭтотОбъект.ВыбКонтрагент = Справочники.Контрагенты.НайтиПоКоду("000000001");
ЭтотОбъект.Организация = Справочники.Организации.НайтиПоКоду("000000001");
ЭтотОбъект.ДатаДокументов = НачалоДня(ТекущаяДата());
ЭтотОбъект.КолКопий = 2;
ЭтотОбъект.ПредставительОрганизации = Справочники.ФизическиеЛица.НайтиПоКоду("0000000221");
КонецПроцедуры
Процедура СформироватьАктСверки(Кон, Дог)
ТемпДок = ПолучитьДокумент(Кон, Дог);
Если ТемпДок <> Неопределено Тогда
Если ЭтотОбъект.ОбновлятьДокументы Тогда
Объект = ТемпДок.ПолучитьОбъект();
Сообщить("Акт сверки расчетов № " + Объект.Номер + " от " + Объект.Дата + " для контрагента: " + Объект.Контрагент + " существует и будет перезаполнен.");
Иначе
Сообщить("Акт сверки расчетов № " + ТемпДок.Номер + " от " + ТемпДок.Дата + " для контрагента: " + ТемпДок.Контрагент + " существует и НЕ будет перезаполнен.");
СтрТЧ = ЭтотОбъект.Состав.Добавить();
СтрТЧ.Документ = ТемпДок.Ссылка;
СтрТЧ.Контрагент = Кон.Ссылка;
СтрТЧ.Договор = Дог.Ссылка;
Возврат;
КонецЕсли;
Иначе
Объект = Документы.АктСверкиВзаиморасчетов.СоздатьДокумент();
Объект.Дата = НачалоДня(ЭтотОбъект.ДатаДокументов);
Объект.УстановитьНовыйНомер();
Объект.ДатаНачала = ЭтотОбъект.НачПериода;
Объект.ДатаОкончания = ЭтотОбъект.КонПериода;
Объект.Контрагент = Кон.Ссылка;
Объект.ДоговорКонтрагента = Дог.Ссылка;
Объект.Организация = ЭтотОбъект.Организация;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("66");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("67");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76");
СтрСч.УчаствуетВРасчетах = Истина;
Объект.ВалютаДокумента = Дог.ВалютаВзаиморасчетов;
Объект.ВыводитьПолныеНазванияДокументов = Истина;
Объект.УчитыватьДепозит = ОпределитьДепозит(Кон, Дог);
Объект.УчитыватьДепозитПоДоговору = Объект.УчитыватьДепозит;
КонецЕсли;
Если Объект.ПоДаннымОрганизации.Количество() > 0 Тогда
Объект.ПоДаннымОрганизации.Очистить();
Объект.ПоДаннымКонтрагента.Очистить();
КонецЕсли;
Объект.ПредставительОрганизации = ЭтотОбъект.ПредставительОрганизации;
Объект.ЗаполнитьПоДаннымБухгалтерскогоУчета();
Объект.ЗаполнитьПоДаннымОрганизации();
Если Найти(Объект.ДоговорКонтрагента, " П") > 0 Тогда
Объект.УчитыватьДепозит = Ложь;
КонецЕсли;
Если Найти(Объект.ДоговорКонтрагента, " ПАП") > 0 Тогда
Объект.УчитыватьДепозит = Ложь;
КонецЕсли;
Если Объект.ПоДаннымОрганизации.Количество() > 0 Тогда
Попытка
Объект.Записать(РежимЗаписиДокумента.Запись);
СтрТЧ = ЭтотОбъект.Состав.Добавить();
СтрТЧ.Документ = Объект.Ссылка;
СтрТЧ.Контрагент = Кон.Ссылка;
СтрТЧ.Договор = Дог.Ссылка;
Исключение
Сообщить("Не удалось записать акт сверки с " + СокрЛП(Кон.Наименование) + " по договору " + СокрЛП(Дог.Наименование));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Функция ОпределитьДепозит(Кон, Дог)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СуммаДепозитаСрезПоследних.Сумма,
| СуммаДепозитаСрезПоследних.СуммаВал
|ИЗ
| РегистрСведений.СуммаДепозита.СрезПоследних(&ДатаОтчета, ) КАК СуммаДепозитаСрезПоследних
|ГДЕ
| СуммаДепозитаСрезПоследних.Контрагент = &Контрагент
| И СуммаДепозитаСрезПоследних.ДоговорКонтрагента = &ДоговорКонтрагента";
Запрос.УстановитьПараметр("Контрагент", Кон);
Запрос.УстановитьПараметр("ДоговорКонтрагента", Дог);
Запрос.УстановитьПараметр("ДатаОтчета", ЭтотОбъект.КонПериода);
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество() > 0 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Функция ПолучитьДокумент(Кон, Дог)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Дата", НачалоДня(ЭтотОбъект.ДатаДокументов));
Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
Запрос.УстановитьПараметр("Контрагент", Кон.Ссылка);
Запрос.УстановитьПараметр("ДоговорКонтрагента", Дог.Ссылка);
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество() > 0 Тогда
Стр = ТЗ.Получить(0);
Возврат Стр.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ОсновныеДействияФормыПечатьОбычная(Кнопка)
ТабДок = Новый ТабличныйДокумент;
Для Каждого Стр Из ЭтотОбъект.Состав Цикл
Объект = Стр.Документ.ПолучитьОбъект();
ТабДокТемп = Объект.ПечатьГрупповая();
й = 1;
Пока й <= ЭтотОбъект.КолКопий Цикл
ТабДок.Вывести(ТабДокТемп);
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
й = й + 1;
КонецЦикла;
КонецЦикла;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Акты сверки взаиморасчетов");
КонецПроцедуры
Процедура ОсновныеДействияФормыПечатьЗаполненная(Кнопка)
ТабДок = Новый ТабличныйДокумент;
Для Каждого Стр Из ЭтотОбъект.Состав Цикл
й = 1;
ТабДокТемп = ПечатьЗаполненный(Стр.Документ.Ссылка);
Пока й <= ЭтотОбъект.КолКопий Цикл
ТабДок.Вывести(ТабДокТемп);
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
й = й + 1;
КонецЦикла;
КонецЦикла;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Акты сверки взаиморасчетов");
КонецПроцедуры
Функция ПечатьЗаполненный(СсылкаНаОбъект) Экспорт
СверкаСогласована = Истина;
ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_АктСверкиВзаиморасчетов_АктСверки";
Макет = ПолучитьМакет("АктСверки");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьНачОстатки = Макет.ПолучитьОбласть("НачОстатки");
ОбластьНачОстаткиД = Макет.ПолучитьОбласть("НачОстаткиДепозит");
ОбластьНачОстаткиП = Макет.ПолучитьОбласть("НачОстаткиПени");
ОбластьДоговор = Макет.ПолучитьОбласть("Договор");
ОбластьДоговорИтоги = Макет.ПолучитьОбласть("ДоговорИтоги");
ОбластьОбороты = Макет.ПолучитьОбласть("Обороты");
ОбластьОборотыИтог = Макет.ПолучитьОбласть("ОборотыИтог");
ОбластьКонОстатки = Макет.ПолучитьОбласть("КонОстатки");
ОбластьКонОстаткиД = Макет.ПолучитьОбласть("КонОстаткиДепозит");
ОбластьКонОстаткиП = Макет.ПолучитьОбласть("КонОстаткиПени");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата);
ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
СведенияОКонтрагенте = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаОбъект.Контрагент, СсылкаНаОбъект.Дата);
ПредставлениеКонтрагента = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОКонтрагенте, "НаименованиеДляПечатныхФорм,");
ОбластьЗаголовок.Параметры.НазваниеОрганизации = ПредставлениеОрганизации;
ОбластьЗаголовок.Параметры.НаименованиеКонтрагента = ПредставлениеКонтрагента;
Если СсылкаНаОбъект.ДатаНачала = '00010101' Тогда
Если СсылкаНаОбъект.ПоДаннымОрганизации.Количество()>0 Тогда
ДатаНачалаОтчета=СсылкаНаОбъект.ПоДаннымОрганизации[0].Дата;
Иначе
ДатаНачалаОтчета = '00010101';
КонецЕсли;
Иначе
ДатаНачалаОтчета = СсылкаНаОбъект.ДатаНачала;
КонецЕсли;
ОписаниеПериода = "за период: " + ПредставлениеПериода(НачалоДня(ДатаНачалаОтчета), КонецДня(СсылкаНаОбъект.ДатаОкончания), "ФП = Истина");
ТекстЗаголовка = "взаимных расчетов " + ОписаниеПериода + Символы.ПС
+ "между " + ПредставлениеОрганизации + Символы.ПС + "и " + ПредставлениеКонтрагента;
Если ЗначениеЗаполнено(СсылкаНаОбъект.ДоговорКонтрагента) Тогда
Если СсылкаНаОбъект.ДоговорКонтрагента.ЭтоГруппа Тогда
МассивДоговоров = СсылкаНаОбъект.ПоДаннымОрганизации.ВыгрузитьКолонку("Договор");
МассивДоговоров = ОбщегоНазначения.УдалитьПовторяющиесяЭлементыМассива(МассивДоговоров);
ТекстЗаголовка = ТекстЗаголовка + Символы.ПС + "по договору ";
ТекстДоговоров = "";
Для каждого ТекДоговор Из МассивДоговоров Цикл
ТекстДоговоров = ТекстДоговоров + ?(ПустаяСтрока(ТекстДоговоров), "", ", ") + ТекДоговор;
КонецЦикла;
ТекстЗаголовка = ТекстЗаголовка + ТекстДоговоров;
Иначе
ТекстЗаголовка = ТекстЗаголовка + Символы.ПС + "по договору " + СсылкаНаОбъект.ДоговорКонтрагента;
КонецЕсли;
КонецЕсли;
ОбластьЗаголовок.Параметры.ТекстЗаголовка = ТекстЗаголовка;
ДанныеПредставителяОрганизации = ОбщегоНазначения.ДанныеФизЛица(СсылкаНаОбъект.Организация, СсылкаНаОбъект.ПредставительОрганизации, СсылкаНаОбъект.Дата);
ФИОПредставителя = ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Фамилия),"",ДанныеПредставителяОрганизации.Фамилия
+ ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Имя),""," "+ДанныеПредставителяОрганизации.Имя)
+ ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Отчество),""," "+ДанныеПредставителяОрганизации.Отчество));
СтрЗаголовокТаблица = "Мы, нижеподписавшиеся, " + ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Должность),"________________",ДанныеПредставителяОрганизации.Должность) + " " + ПредставлениеОрганизации
+ " " + ?(ФИОПредставителя<>"",ФИОПредставителя,"_______________________") + ", с одной стороны, "
+ "и " + ?(НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ПредставительКонтрагента.Должность),"________________",СсылкаНаОбъект.ПредставительКонтрагента.Должность) + " " + ПредставлениеКонтрагента + " "
+ ?(НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ПредставительКонтрагента),"_______________________",СсылкаНаОбъект.ПредставительКонтрагента) + ", с другой стороны, "
+ "составили настоящий акт сверки в том, что состояние взаимных расчетов по данным учета следующее:";
ОбластьЗаголовок.Параметры.СтрЗаголовокТаблица = СтрЗаголовокТаблица;
ОбластьЗаголовок.Параметры.ВалютаДокумента = СсылкаНаОбъект.ВалютаДокумента;
СуммаДепозитаИзДоговора = ПолучитьСуммуДепозита(СсылкаНаОбъект);
//альфа
Если СсылкаНаОбъект.УчитыватьДепозит Тогда
ТекстДеп = ?(СсылкаНаОбъект.УчитыватьДепозитПоДоговору, "предусмотрена в сумме "+Формат(СуммаДепозитаИзДоговора, "ЧЦ=21; ЧДЦ=2")+" "+Строка(СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов), "не предусмотрена");
ОбластьЗаголовок.Параметры.ИнфоДепозит = "По условиям договора оплата депозита " + ТекстДеп;
КонецЕсли;
//альфа
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ОбластьНачОстатки.Параметры.СуммаНачальныйОстатокДт = ?(СсылкаНаОбъект.ОстатокНаНачало > 0, СсылкаНаОбъект.ОстатокНаНачало, 0);
ОбластьНачОстатки.Параметры.СуммаНачальныйОстатокКт = ?(СсылкаНаОбъект.ОстатокНаНачало < 0, -СсылкаНаОбъект.ОстатокНаНачало, 0);
ТабДок.Вывести(ОбластьНачОстатки);
//альфа
Если СсылкаНаОбъект.УчитыватьДепозит и СсылкаНаОбъект.УчитыватьДепозитПоДоговору Тогда
// ОбластьНачОстаткиД.Параметры.СуммаНачальныйОстатокДт = СуммаДепозита;
ОбластьНачОстаткиД.Параметры.СуммаНачальныйОстатокКт = СсылкаНаОбъект.ОплатаДепозитаНаНачало;
ТабДок.Вывести(ОбластьНачОстаткиД);
КонецЕсли;
Если СсылкаНаОбъект.ОплатаПениНаНачало > 0 Тогда
ОбластьНачОстаткиП.Параметры.СуммаНачальныйОстатокКт = СсылкаНаОбъект.ОплатаПениНаНачало;
Иначе
ОбластьНачОстаткиП.Параметры.СуммаНачальныйОстатокДт = -СсылкаНаОбъект.ОплатаПениНаНачало;
КонецЕсли;
ТабДок.Вывести(ОбластьНачОстаткиП);
//альфа
ОборотыДт = 0;
ОборотыКт = 0;
ОборотыДтКонтр = 0;
ОборотыКтКонтр = 0;
Если СсылкаНаОбъект.ПоДаннымОрганизации.Количество()>0 ИЛИ СсылкаНаОбъект.ПоДаннымКонтрагента.Количество()>0 Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| ВлЗапрос.Договор КАК Договор,
| ВлЗапрос.Дата КАК Дата,
| ВлЗапрос.Документ,
| ВлЗапрос.Представление,
| ВлЗапрос.ДатаК,
| ВлЗапрос.ПредставлениеК,
| Дебет как СуммаДогДт,
| Кредит как СуммаДогКт,
| ДебетК как СуммаДогДтКонтр,
| КредитК как СуммаДогКтКонтр
|Из
| (Выбрать"
+?(СсылкаНаОбъект.РазбитьПоДоговорам,"
| ПоДаннымОрганизации.Договор КАК Договор,","
| NULL КАК Договор,")
+"
| ПоДаннымОрганизации.Дата как Дата,
| NUll как ДатаК,
| ПоДаннымОрганизации.Документ КАК Документ,
| ПоДаннымОрганизации.Представление КАК Представление,
| NULL КАК ПредставлениеК,
| ПоДаннымОрганизации.Дебет КАК Дебет,
| ПоДаннымОрганизации.Кредит КАК Кредит,
| 0 КАК ДебетК,
| 0 КАК КредитК,
| ПоДаннымОрганизации.НомерСтроки КАК НомерСтроки,
| 0 КАК НомерТабЧасти
| ИЗ
| Документ.АктСверкиВзаиморасчетов.ПоДаннымОрганизации КАК ПоДаннымОрганизации
| Где
| ПоДаннымОрганизации.Ссылка = &ТекущийДокумент
|
| ОБЪЕДИНИТЬ ВСЕ
|
| Выбрать"
+?(СсылкаНаОбъект.РазбитьПоДоговорам,"
| ПоДаннымКонтрагента.Договор,","
| NULL КАК Договор,")
+"
| NULL,
| ПоДаннымКонтрагента.Дата,
| NULL,
| NULL,
| ПоДаннымКонтрагента.Представление,
| 0,
| 0,
| ПоДаннымКонтрагента.Дебет,
| ПоДаннымКонтрагента.Кредит,
| ПоДаннымКонтрагента.НомерСтроки КАК НомерСтроки,
| 1 КАК НомерТабЧасти
|
| ИЗ
| Документ.АктСверкиВзаиморасчетов.ПоДаннымКонтрагента КАК ПоДаннымКонтрагента
| Где
| ПоДаннымКонтрагента.Ссылка = &ТекущийДокумент
|
|
|) КАК ВлЗапрос
| УПОРЯДОЧИТЬ ПО НомерТабЧасти,НомерСтроки
|
| ИТОГИ
| СУММА(СуммаДогДт),
| СУММА(СуммаДогКт),
| СУММА(СуммаДогДтКонтр),
| СУММА(СуммаДогКтКонтр)
| ПО
| Общие,Договор";
Результат = Запрос.Выполнить();
ОбходПоОбщимИтогам = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие");
ОбходПоОбщимИтогам.Следующий();
ОборотыДт = ОбходПоОбщимИтогам.СуммаДогДт;
ОборотыКт = ОбходПоОбщимИтогам.СуммаДогКт;
ОборотыДтКонтр = ОбходПоОбщимИтогам.СуммаДогДтКонтр;
ОборотыКтКонтр = ОбходПоОбщимИтогам.СуммаДогКтКонтр;
ОбходПоДоговорам = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Договор");
Пока ОбходПоДоговорам.Следующий() Цикл
Если СсылкаНаОбъект.РазбитьПоДоговорам Тогда
//Выводим заголовок с договором
ОбластьДоговор.Параметры.Договор = ОбходПоДоговорам.Договор;
ОбластьДоговор.Параметры.Регистратор = ОбходПоДоговорам.Договор;
ТабДок.Вывести(ОбластьДоговор);
ОбходПоДокументам=ОбходПоДоговорам.Выбрать();
Иначе
ОбходПоДокументам=Результат.Выбрать();
КонецЕсли;
//Создадим список документов по организации и контрагенту
СписокДокументов = новый массив;
СписокДокументовК = новый массив;
Пока ОбходПоДокументам.Следующий() Цикл
Если ОбходПоДокументам.Дата<>NULL Тогда
СписокДокументов.Добавить(новый структура("ДатаДокумента,РегистраторПредставление,Регистратор,СуммаОборотДт,СуммаОборотКт",
ОбходПоДокументам.Дата,ОбходПоДокументам.Представление,ОбходПоДокументам.Документ,ОбходПоДокументам.СуммаДогДт,ОбходПоДокументам.СуммаДогКт));
КонецЕсли;
Если ОбходПоДокументам.ДатаК<>NULL Тогда
СписокДокументовК.Добавить(новый структура("ДатаДокументаКонтр,РегистраторПредставлениеКонтр,СуммаОборотДтКонтр,СуммаОборотКтКонтр",
ОбходПоДокументам.ДатаК,ОбходПоДокументам.ПредставлениеК,ОбходПоДокументам.СуммаДогДтКонтр,ОбходПоДокументам.СуммаДогКтКонтр));
КонецЕсли;
КонецЦикла;
//Для упрощения вывода, сравним списки по количеству элементов, добавив пустые
МаксИндекс = Макс(СписокДокументов.Количество(), СписокДокументовК.Количество())-1;
МинИндекс = Мин(СписокДокументов.Количество(), СписокДокументовК.Количество())-1;
Если СписокДокументов.Количество()<СписокДокументовК.Количество() Тогда
Для инд = МинИндекс По МаксИндекс-1 Цикл
СписокДокументов.Добавить(новый структура("ДатаДокумента,РегистраторПредставление,Регистратор,СуммаОборотДт,СуммаОборотКт","","","","",""));
КонецЦикла;
ИначеЕсли СписокДокументов.Количество()>СписокДокументовК.Количество() Тогда
Для инд = МинИндекс По МаксИндекс-1 Цикл
СписокДокументовК.Добавить(новый структура("ДатаДокументаКонтр,РегистраторПредставлениеКонтр,СуммаОборотДтКонтр,СуммаОборотКтКонтр","","","",""));
КонецЦикла;
КонецЕсли;
Для Инд = 0 По МаксИндекс Цикл
ОбластьОбороты.Параметры.Заполнить(СписокДокументов[Инд]);
ОбластьОбороты.Параметры.Заполнить(СписокДокументовК[Инд]);
ТабДок.Вывести(ОбластьОбороты);
КонецЦикла;
Если СсылкаНаОбъект.РазбитьПоДоговорам Тогда
//Выводим итоги по каждому договору
ОбластьДоговорИтоги.Параметры.Заполнить(ОбходПоДоговорам);
ТабДок.Вывести(ОбластьДоговорИтоги);
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
ОбластьОборотыИтог.Параметры.СуммаОборотДт = ОборотыДт;
ОбластьОборотыИтог.Параметры.СуммаОборотКт = ОборотыКт;
Если СверкаСогласована тогда
ОбластьОборотыИтог.Параметры.СуммаОборотДтКонтр = ОборотыДтКонтр;
ОбластьОборотыИтог.Параметры.СуммаОборотКтКонтр = ОборотыКтКонтр;
КонецЕсли;
ТабДок.Вывести(ОбластьОборотыИтог);
КонецЕсли;
ОстатокНаКонец = СсылкаНаОбъект.ОстатокНаНачало + ОборотыДт - ОборотыКт;
ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокДт = ?(ОстатокНаКонец > 0, ОстатокНаКонец, 0);
ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокКт = ?(ОстатокНаКонец < 0, -ОстатокНаКонец, 0);
Если СверкаСогласована тогда
ОстатокНаКонецК = СсылкаНаОбъект.ОстатокНаНачало - ОборотыДтКонтр + ОборотыКтКонтр;
ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокКтКонтр = ?(ОстатокНаКонецК > 0, ОстатокНаКонецК, 0);
ОбластьКонОстатки.Параметры.СуммаКонечныйОстатокДтКонтр = ?(ОстатокНаКонецК < 0, -ОстатокНаКонецК, 0);
КонецЕсли;
ТабДок.Вывести(ОбластьКонОстатки);
//альфа
Если СсылкаНаОбъект.УчитыватьДепозит и СсылкаНаОбъект.УчитыватьДепозитПоДоговору Тогда
// ОбластьКонОстаткиД.Параметры.СуммаКонечныйОстатокДт = СуммаДепозита;
Если СсылкаНаОбъект.ОплатаДепозитаНаКонец > 0 Тогда
ОбластьКонОстаткиД.Параметры.СуммаКонечныйОстатокКт = СсылкаНаОбъект.ОплатаДепозитаНаКонец;
Если СверкаСогласована Тогда
ОбластьКонОстаткиД.Параметры.СуммаКонечныйОстатокДтКонтр = СсылкаНаОбъект.ОплатаДепозитаНаКонец;
КонецЕсли;
СуммаДолгаПоДепозиту = СуммаДепозитаИзДоговора - СсылкаНаОбъект.ОплатаДепозитаНаКонец;
ИначеЕсли СсылкаНаОбъект.ОплатаДепозитаНаКонец < 0 Тогда
ОбластьКонОстаткиД.Параметры.СуммаКонечныйОстатокДт = -СсылкаНаОбъект.ОплатаДепозитаНаКонец;
Если СверкаСогласована Тогда
ОбластьКонОстаткиД.Параметры.СуммаКонечныйОстатокКтКонтр = -СсылкаНаОбъект.ОплатаДепозитаНаКонец;
КонецЕсли;
СуммаДолгаПоДепозиту = СуммаДепозитаИзДоговора + СсылкаНаОбъект.ОплатаДепозитаНаКонец;
Иначе
СуммаДолгаПоДепозиту = СуммаДепозитаИзДоговора;
КонецЕсли;
ТабДок.Вывести(ОбластьКонОстаткиД);
КонецЕсли;
Если СсылкаНаОбъект.ОплатаПениНаКонец >= 0 Тогда
ОбластьКонОстаткиП.Параметры.СуммаКонечныйОстатокКт = СсылкаНаОбъект.ОплатаПениНаКонец;
Если СверкаСогласована Тогда
ОбластьКонОстаткиП.Параметры.СуммаКонечныйОстатокДтКонтр = СсылкаНаОбъект.ОплатаПениНаКонец;
КонецЕсли;
Иначе
ОбластьКонОстаткиП.Параметры.СуммаКонечныйОстатокДт = -СсылкаНаОбъект.ОплатаПениНаКонец;
Если СверкаСогласована Тогда
ОбластьКонОстаткиП.Параметры.СуммаКонечныйОстатокКтКонтр = -СсылкаНаОбъект.ОплатаПениНаКонец;
КонецЕсли;
КонецЕсли;
ТабДок.Вывести(ОбластьКонОстаткиП);
//альфа
//ОстатокНаКонецД = СуммаДепозитаИзДоговора - ОплатаДепозитаНаКонец;
ОбщаяЗадолжность = СуммаДепозитаИзДоговора + ОстатокНаКонец;
// Результаты сверки
Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ДатаОкончания) Тогда
РезультатыСверки = "<не указана дата сверки>";
ИначеЕсли НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Контрагент) Тогда
РезультатыСверки = "<не указан контрагент>";
Иначе
РезультатыСверки = "на " + Формат(СсылкаНаОбъект.ДатаОкончания, "ДФ=dd.MM.yyyy") + " задолженность ";
Если ОстатокНаКонец > 0 Тогда
РезультатыСверки = РезультатыСверки + "в пользу " + ПредставлениеОрганизации + " "
+ Формат(ОстатокНаКонец, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента)
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(ОстатокНаКонец, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
ИначеЕсли ОстатокНаКонец < 0 Тогда
РезультатыСверки = РезультатыСверки + "в пользу " + ПредставлениеКонтрагента + " "
+ Формат(-ОстатокНаКонец, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента)
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(-ОстатокНаКонец, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
Иначе
РезультатыСверки = РезультатыСверки + "отсутствует.";
КонецЕсли;
КонецЕсли;
ОбластьПодвал.Параметры.РезультатыСверки = РезультатыСверки;
Если СсылкаНаОбъект.УчитыватьДепозит Тогда
// Результаты сверки доп
Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ДатаОкончания) Тогда
РезультатыСверкиДоп = "<не указана дата сверки>";
ИначеЕсли НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Контрагент) Тогда
РезультатыСверкиДоп = "<не указан контрагент>";
Иначе
//РезультатыСверкиДоп = "на " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy") + " задолженность ";
РезультатыСверкиДоп = "задолженность с учетом депозита ";
//Если ОстатокНаКонец > 0 Тогда
Если ОбщаяЗадолжность > 0 Тогда
РезультатыСверкиДоп = РезультатыСверкиДоп + "в пользу " + ПредставлениеОрганизации + " "
//+ Формат(ОстатокНаКонец, "ЧЦ=21; ЧДЦ=2") + " "
+ Формат(ОбщаяЗадолжность, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента)
//+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(ОстатокНаКонец, ВалютаДокумента,Ложь)+")" ;
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(ОбщаяЗадолжность, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
//ИначеЕсли ОстатокНаКонец < 0 Тогда
ИначеЕсли ОбщаяЗадолжность < 0 Тогда
РезультатыСверкиДоп = РезультатыСверкиДоп + "в пользу " + ПредставлениеКонтрагента + " "
//+ Формат(-ОстатокНаКонец, "ЧЦ=21; ЧДЦ=2") + " "
+ Формат(-ОбщаяЗадолжность, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента)
//+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(-ОстатокНаКонец, ВалютаДокумента,Ложь)+")" ;
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(-ОбщаяЗадолжность, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
Иначе
РезультатыСверкиДоп = РезультатыСверкиДоп + "отсутствует.";
КонецЕсли;
КонецЕсли;
ОбластьПодвал.Параметры.РезультатыСверкиДоп = РезультатыСверкиДоп;
Если СуммаДолгаПоДепозиту = Неопределено Тогда
СуммаДолгаПоДепозиту = 0;
КонецЕсли;
КонецЕсли;
//альфа
РезультатыСверкиД = "";
Если СсылкаНаОбъект.УчитыватьДепозит и СсылкаНаОбъект.УчитыватьДепозитПоДоговору Тогда
//РезультатыСверкиД = "в т.ч. депозит: " + Формат(ОплатаДепозитаНаКонец, "ЧЦ=21; ЧДЦ=2") + " " + Строка(ДоговорКонтрагента.ВалютаВзаиморасчетов) + Символы.ПС;
//ОстатокНаКонецД = ОстатокНаКонец + ОплатаДепозитаНаКонец;
Если СуммаДолгаПоДепозиту > 0 Тогда
//РезультатыСверкиД = РезультатыСверкиД + "задолженность с учетом депозита в пользу " + ПредставлениеОрганизации + " "
РезультатыСверкиД = "задолженность по депозиту в пользу " + ПредставлениеОрганизации + " "
+ Формат(СуммаДолгаПоДепозиту, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента);
//+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(СуммаДолгаПоДепозиту, ВалютаДокумента,Ложь)+")" ;
ИначеЕсли СуммаДолгаПоДепозиту < 0 Тогда
//РезультатыСверкиД = РезультатыСверкиД + "задолженность с учетом депозита в пользу " + ПредставлениеКонтрагента + " "
РезультатыСверкиД = "задолженность по депозиту в пользу " + ПредставлениеКонтрагента + " "
+ Формат(-СуммаДолгаПоДепозиту, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента);
//+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(-СуммаДолгаПоДепозиту, ВалютаДокумента,Ложь)+")" ;
Иначе
РезультатыСверкиД = "задолжность по депозиту отсутствует.";
КонецЕсли;
КонецЕсли;
Если СсылкаНаОбъект.ОплатаПениНаКонец < 0 Тогда
//РезультатыСверкиП = "в т.ч. пени: " + Формат(ОплатаПениНаКонец, "ЧЦ=21; ЧДЦ=2") + " " + Строка(ДоговорКонтрагента.ВалютаВзаиморасчетов) + Символы.ПС + " (переплата)";
РезультатыСверкиП = "задолженность по пени в пользу " + ПредставлениеОрганизации + " "
+ Формат(-СсылкаНаОбъект.ОплатаПениНаКонец, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента);
ИначеЕсли СсылкаНаОбъект.ОплатаПениНаКонец > 0 Тогда
//РезультатыСверкиП = "в т.ч. пени: " + Формат(-ОплатаПениНаКонец, "ЧЦ=21; ЧДЦ=2") + " " + Строка(ДоговорКонтрагента.ВалютаВзаиморасчетов) + Символы.ПС;
РезультатыСверкиП = "задолженность по пени в пользу " + ПредставлениеКонтрагента + " "
+ Формат(СсылкаНаОбъект.ОплатаПениНаКонец, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента);
Иначе
РезультатыСверкиП = "задолжность по пени отсутствует.";
КонецЕсли;
ОбластьПодвал.Параметры.РезультатыСверкиД = РезультатыСверкиД;
ОбластьПодвал.Параметры.РезультатыСверкиП = РезультатыСверкиП;
//альфа
Если СверкаСогласована тогда
ОбластьПодвал.Параметры.ПоДаннымКонтрагента = "По данным " + ПредставлениеКонтрагента;
Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ДатаОкончания) Тогда
РезультатыСверки = "<не указана дата сверки>";
ИначеЕсли НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Контрагент) Тогда
РезультатыСверки = "<не указан контрагент>";
Иначе
РезультатыСверки = "на " + Формат(СсылкаНаОбъект.ДатаОкончания, "ДФ=dd.MM.yyyy") + " задолженность ";
Если ОстатокНаКонецК > 0 Тогда
РезультатыСверки = РезультатыСверки + "в пользу " + ПредставлениеОрганизации + " "
+ Формат(ОстатокНаКонецК, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента)
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(ОстатокНаКонецК, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
ИначеЕсли ОстатокНаКонецК < 0 Тогда
РезультатыСверки = РезультатыСверки + "в пользу " + ПредставлениеКонтрагента + " "
+ Формат(-ОстатокНаКонецК, "ЧЦ=21; ЧДЦ=2") + " "
+ строка(СсылкаНаОбъект.ВалютаДокумента)
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(-ОстатокНаКонецК, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
Иначе
РезультатыСверки = РезультатыСверки + "отсутствует.";
КонецЕсли;
КонецЕсли;
ОбластьПодвал.Параметры.РезультатыСверкиК = РезультатыСверки;
Если СсылкаНаОбъект.Расхождение<>0 Тогда
ИтогСверки = "В результате сверки выявлено расхождение информации о состоянии расчетов в размере "
+Формат(?(СсылкаНаОбъект.Расхождение>0,1,-1)*СсылкаНаОбъект.Расхождение, "ЧЦ=21; ЧДЦ=2")
+" "+ Строка(СсылкаНаОбъект.ВалютаДокумента)
+" ("+ФормированиеПечатныхФорм.ФорматироватьСуммуПрописьюПлатежногоДокумента(?(СсылкаНаОбъект.Расхождение>0,1,-1)*СсылкаНаОбъект.Расхождение, СсылкаНаОбъект.ВалютаДокумента,Ложь)+")" ;
ОбластьПодвал.Параметры.ИтогСверки = Символы.ПС+ ИтогСверки+Символы.ПС+" ";
КонецЕсли;
КонецЕсли;
ОбластьПодвал.Параметры.НазваниеОрганизации = ПредставлениеОрганизации;
ОбластьПодвал.Параметры.НаименованиеКонтрагента = ПредставлениеКонтрагента;
ОбластьПодвал.Параметры.Должность = ?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации.Должность),"________________",ДанныеПредставителяОрганизации.Должность);
ОбластьПодвал.Параметры.ДолжностьК = ?(НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ПредставительКонтрагента.Должность),"________________",СсылкаНаОбъект.ПредставительКонтрагента.Должность);
ОбластьПодвал.Параметры.ФИОПредставителя = "("+?(НЕ ЗначениеЗаполнено(ДанныеПредставителяОрганизации),"_______________________",ДанныеПредставителяОрганизации.Представление)+")";
ОбластьПодвал.Параметры.ФИОПредставителяК = "("+?(НЕ ЗначениеЗаполнено(СсылкаНаОбъект.ПредставительКонтрагента),"_______________________",ОбщегоНазначения.ФамилияИнициалыФизЛица(СсылкаНаОбъект.ПредставительКонтрагента.Фамилия + " " + СсылкаНаОбъект.ПредставительКонтрагента.Имя + " " + СсылкаНаОбъект.ПредставительКонтрагента.Отчество))+")";
ТабДок.Вывести(ОбластьПодвал);
Возврат ТабДок;
КонецФункции
Функция ПолучитьСуммуДепозита(СсылкаНаОбъект)
СумДеп = 0;
Если Не ЗначениеЗаполнено(СсылкаНаОбъект.ДоговорКонтрагента) Тогда
Возврат СумДеп;
КонецЕСли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СуммаДепозитаСрезПоследних.Сумма,
| СуммаДепозитаСрезПоследних.СуммаВал
|ИЗ
| РегистрСведений.СуммаДепозита.СрезПоследних(&Период, ) КАК СуммаДепозитаСрезПоследних
|ГДЕ
| СуммаДепозитаСрезПоследних.Контрагент = &Контрагент
| И СуммаДепозитаСрезПоследних.ДоговорКонтрагента = &ДоговорКонтрагента";
Запрос.УстановитьПараметр("Период", КонецДня(СсылкаНаОбъект.Дата));
Запрос.УстановитьПараметр("Контрагент", СсылкаНаОбъект.Контрагент);
//Запрос.УстановитьПараметр("Актуальность", Истина);
Запрос.УстановитьПараметр("ДоговорКонтрагента", СсылкаНаОбъект.ДоговорКонтрагента);
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество() > 0 Тогда
Стр = ТЗ.Получить(0);
Если СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов.Код = "643" Тогда
СумДеп = Стр.Сумма;
Иначе
СумДеп = Стр.СуммаВал;
КонецЕсли;
КонецЕсли;
Возврат СумДеп;
КонецФункции
Функция Расторгнут(Контр, Дог)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| АР_РасторжениеДоговораАренды.Ссылка
|ИЗ
| Документ.АР_РасторжениеДоговораАренды КАК АР_РасторжениеДоговораАренды
|ГДЕ
| АР_РасторжениеДоговораАренды.Контрагент = &Контрагент
| И АР_РасторжениеДоговораАренды.ДоговорКонтрагента = &ДоговорКонтрагента
| И АР_РасторжениеДоговораАренды.Дата < &Дата
| И АР_РасторжениеДоговораАренды.Проведен = &Проведен";
Запрос.УстановитьПараметр("Контрагент", Контр.Ссылка);
Запрос.УстановитьПараметр("ДоговорКонтрагента", Дог.Ссылка);
Запрос.УстановитьПараметр("Дата", ЭтотОбъект.ДатаДокументов);
Запрос.УстановитьПараметр("Проведен", Истина);
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество() > 0 Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Процедура ОсновныеДействияФормыРеестрДокументов(Кнопка)
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("РеестрАктов");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьШапка.Параметры.СтрокаОтчета = "Реестр сформированных актов сверки от " + Формат(ЭтотОбъект.ДатаДокументов, "ДЛФ = ДД");
ТабДок.Вывести(ОбластьШапка);
Ном = 1;
Для Каждого Стр Из ЭтотОбъект.Состав Цикл
ОбластьСтрока.Параметры.Ном = Ном;
ОбластьСтрока.Параметры.Контрагент = СокрЛП(Стр.Контрагент.Наименование);
//Вычислим Фактический адрес для каждого контрагента и добавим в печатную форму, Альфаком
ФактическийАдрес = УправлениеКонтактнойИнформацией.ПолучитьАдресИзКонтактнойИнформации(Стр.Контрагент, "Фактический");
ОбластьСтрока.Параметры.Почта = ФактическийАдрес;
ОбластьСтрока.Параметры.Договор = СокрЛП(Стр.Договор);
ОбластьСтрока.Параметры.Документ = СокрЛП(Стр.Документ);
ТабДок.Вывести(ОбластьСтрока);
Ном = Ном + 1;
КонецЦикла;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Реестр актов сверки");
КонецПроцедуры
Процедура СоставДокументПриИзменении(Элемент)
Данные = ЭлементыФормы.Состав.ТекущиеДанные;
Если ЗначениеЗаполнено(Данные.Документ) Тогда
Данные.Контрагент = Данные.Документ.Контрагент;
Данные.Договор = Данные.Документ.ДоговорКонтрагента;
Иначе
Данные.Контрагент = "";
Данные.Договор = "";
КонецЕсли;
КонецПроцедуры
Показать
(23)
Функция ПолучитьДокумент(Кон, Дог) //Получаем документы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| АктСверкиВзаиморасчетов.Ссылка
|ИЗ
| Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
|ГДЕ
| АктСверкиВзаиморасчетов.Дата = &Дата
| И АктСверкиВзаиморасчетов.Организация = &Организация
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента";
Запрос.УстановитьПараметр("Дата", НачалоДня(ЭтотОбъект.ДатаДокументов));
Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
Запрос.УстановитьПараметр("Контрагент", Кон.Ссылка);
Запрос.УстановитьПараметр("ДоговорКонтрагента", Дог.Ссылка);
ТЗ = Запрос.Выполнить().Выгрузить();
Если ТЗ.Количество() > 0 Тогда
Стр = ТЗ.Получить(0);
Возврат Стр.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
ПоказатьПроцедура СформироватьАктСверки(Кон, Дог)
ТемпДок = ПолучитьДокумент(Кон, Дог);
Если ТемпДок <> Неопределено Тогда
Если ЭтотОбъект.ОбновлятьДокументы Тогда
Объект = ТемпДок.ПолучитьОбъект();
Сообщить("Акт сверки расчетов № " + Объект.Номер + " от " + Объект.Дата + " для контрагента: " + Объект.Контрагент + " существует и будет перезаполнен.");
Иначе
Сообщить("Акт сверки расчетов № " + ТемпДок.Номер + " от " + ТемпДок.Дата + " для контрагента: " + ТемпДок.Контрагент + " существует и НЕ будет перезаполнен.");
СтрТЧ = ЭтотОбъект.Состав.Добавить();
СтрТЧ.Документ = ТемпДок.Ссылка;
СтрТЧ.Контрагент = Кон.Ссылка;
СтрТЧ.Договор = Дог.Ссылка;
Возврат;
КонецЕсли;
Иначе
Объект = Документы.АктСверкиВзаиморасчетов.СоздатьДокумент();
Объект.Дата = НачалоДня(ЭтотОбъект.ДатаДокументов);
Объект.УстановитьНовыйНомер();
Объект.ДатаНачала = ЭтотОбъект.НачПериода;
Объект.ДатаОкончания = ЭтотОбъект.КонПериода;
Объект.Контрагент = Кон.Ссылка;
Объект.ДоговорКонтрагента = Дог.Ссылка;
Объект.Организация = ЭтотОбъект.Организация;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("66");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("67");
СтрСч.УчаствуетВРасчетах = Истина;
СтрСч = Объект.СписокСчетов.Добавить();
СтрСч.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76");
СтрСч.УчаствуетВРасчетах = Истина;
Объект.ВалютаДокумента = Дог.ВалютаВзаиморасчетов;
Объект.ВыводитьПолныеНазванияДокументов = Истина;
Объект.УчитыватьДепозит = ОпределитьДепозит(Кон, Дог);
Объект.УчитыватьДепозитПоДоговору = Объект.УчитыватьДепозит;
КонецЕсли;
Если Объект.ПоДаннымОрганизации.Количество() > 0 Тогда
Объект.ПоДаннымОрганизации.Очистить();
Объект.ПоДаннымКонтрагента.Очистить();
КонецЕсли;
Объект.ПредставительОрганизации = ЭтотОбъект.ПредставительОрганизации;
Объект.ЗаполнитьПоДаннымБухгалтерскогоУчета();
Объект.ЗаполнитьПоДаннымОрганизации();
Если Найти(Объект.ДоговорКонтрагента, " П") > 0 Тогда
Объект.УчитыватьДепозит = Ложь;
КонецЕсли;
Если Найти(Объект.ДоговорКонтрагента, " ПАП") > 0 Тогда
Объект.УчитыватьДепозит = Ложь;
КонецЕсли;
Если Объект.ПоДаннымОрганизации.Количество() > 0 Тогда
Попытка
Объект.Записать(РежимЗаписиДокумента.Запись);
СтрТЧ = ЭтотОбъект.Состав.Добавить();
СтрТЧ.Документ = Объект.Ссылка;
СтрТЧ.Контрагент = Кон.Ссылка;
СтрТЧ.Договор = Дог.Ссылка;
Исключение
Сообщить("Не удалось записать акт сверки с " + СокрЛП(Кон.Наименование) + " по договору " + СокрЛП(Дог.Наименование));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Показать
(24) Программа не рабочая!
И гда же вы реализовали свои ГРУППЫ?
Если она и выдает какой-то результат - то совершенно случайно, поверьте! Ибо вы писали ее под конкретный документ, она его и выдаст...
Еще раз говорю НЕКОРРЕКТНО сравнивать дату знаком равенства - может отличаться время и вы не получите правильный результат.
Только больше меньше!
Следующее
Закчем вы ищете по Контрагенту и Договору одновременно? Это совершенно избыточно.
Один договор полностью достаточен.
Опять же ОРГАНИЗАЦИЯ при поиске по договору совершенно не нужна - ведь она есть в договоре
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента";
А еще интресно вы ищете ВСЕ Акты сверок, но возвращаете только первый полученный , а остальные куда?
И гда же вы реализовали свои ГРУППЫ?
Если она и выдает какой-то результат - то совершенно случайно, поверьте! Ибо вы писали ее под конкретный документ, она его и выдаст...
Еще раз говорю НЕКОРРЕКТНО сравнивать дату знаком равенства - может отличаться время и вы не получите правильный результат.
Только больше меньше!
Следующее
Закчем вы ищете по Контрагенту и Договору одновременно? Это совершенно избыточно.
Один договор полностью достаточен.
Опять же ОРГАНИЗАЦИЯ при поиске по договору совершенно не нужна - ведь она есть в договоре
| И АктСверкиВзаиморасчетов.Контрагент = &Контрагент
| И АктСверкиВзаиморасчетов.ДоговорКонтрагента = &ДоговорКонтрагента";
А еще интресно вы ищете ВСЕ Акты сверок, но возвращаете только первый полученный , а остальные куда?
(27)
Процедура КнопкаВыполнитьНажатие(Кнопка)
ЭтотОбъект.Состав.Очистить();
Если (Не ЗначениеЗаполнено(ЭтотОбъект.НачПериода)) или (Не ЗначениеЗаполнено(ЭтотОбъект.КонПериода)) Тогда
Предупреждение("Не заполнен период сверки расчетов!!!");
Возврат;
КонецЕсли;
Если ЭтотОбъект.ВыбКонтрагент.ЭтоГруппа Тогда
Выборка = Справочники.Контрагенты.Выбрать(ВыбКонтрагент.Ссылка);
Пока Выборка.Следующий() Цикл
Состояние("Обрабатывается контрагент: " + СокрЛП(Выборка.Наименование));
ВыборкаД = Справочники.ДоговорыКонтрагентов.Выбрать(, Выборка.Ссылка);
Пока ВыборкаД.Следующий() Цикл
Состояние("Обрабатывается контрагент: " + СокрЛП(Выборка.Наименование) + "; по договору: " + СокрЛП(ВыборкаД.Наименование));
Если ЭлементыФормы.Переключатель1.Значение = 2 Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 1 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 0 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
Продолжить;
КонецЕсли;
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Состояние("Обрабатывается контрагент: " + СокрЛП(ЭтотОбъект.ВыбКонтрагент.Наименование));
ВыборкаД = Справочники.ДоговорыКонтрагентов.Выбрать(, ЭтотОбъект.ВыбКонтрагент);
Пока ВыборкаД.Следующий() Цикл
Состояние("Обрабатывается контрагент: " + СокрЛП(ЭтотОбъект.ВыбКонтрагент.Наименование) + "; по договору: " + СокрЛП(ВыборкаД.Наименование));
Если ЭлементыФормы.Переключатель1.Значение = 2 Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 1 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
ИначеЕсли ЭлементыФормы.Переключатель1.Значение = 0 Тогда
Если Расторгнут(Выборка.Ссылка, ВыборкаД.Ссылка) Тогда
Продолжить;
КонецЕсли;
СформироватьАктСверки(Выборка.Ссылка, ВыборкаД.Ссылка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать
(28)
Ну хорошо вы мечетесь от простого запроса к сложным и медленным выборам из справочников...
Но ГДЕ вы используете в своих выборах ЭтотОбъект.НачПериода и ЭтотОбъект.КонПериода?
Или вам даты нужны просто для красоты на форме?
Имею виду если у вас 10 актов сверки по каждому договору ... В каждом месяце по одному - что выберет ваша программа?
Ну хорошо вы мечетесь от простого запроса к сложным и медленным выборам из справочников...
Но ГДЕ вы используете в своих выборах ЭтотОбъект.НачПериода и ЭтотОбъект.КонПериода?
Или вам даты нужны просто для красоты на форме?
Имею виду если у вас 10 актов сверки по каждому договору ... В каждом месяце по одному - что выберет ваша программа?
(29)
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
(40) Вот запрос который даст вам акты всех контрагентов у которых есть договоры "с поставщиком" и которые как-то цепляют выбранный период
ВЫБРАТЬ РАЗЛИЧНЫЕ
АктСверкиВзаиморасчетов.Ссылка КАК Ссылка,
ДоговорыКонтрагентов.Владелец КАК Контрагент
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ДоговорыКонтрагентов.Владелец)
ГДЕ
АктСверкиВзаиморасчетов.Организация = &Организация
И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
И ( АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания )
ВЫБРАТЬ РАЗЛИЧНЫЕ
АктСверкиВзаиморасчетов.Ссылка КАК Ссылка,
ДоговорыКонтрагентов.Владелец КАК Контрагент
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ДоговорыКонтрагентов.Владелец)
ГДЕ
АктСверкиВзаиморасчетов.Организация = &Организация
И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
И ( АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания )
(51)
А можно как то сделать чтобы и те которые в "Поставщиках" искались и те что в запросе?
Мой запрос тебе выдаст за выбранный период все акты сверки именно тех контрагентов, которые ПОСТАВЩИКИ, ибо не бывает поставщиков без договора "С поставщиком"
Остальное прикрути ...
Остальное прикрути ...
А можно как то сделать чтобы и те которые в "Поставщиках" искались и те что в запросе?
Запрос выдаст ВСЕХ, и тех и тех, что тебе еще надо?
В ПОСТАВЩИКАХ может случайно затесаться контрагент не являющийся Поставщиком - ну так ктото случайно туда его занесет...
Мой запрос найдет именно всех Поставщиков - тебе разве не ЭТО надо?
В ПОСТАВЩИКАХ может случайно затесаться контрагент не являющийся Поставщиком - ну так ктото случайно туда его занесет...
Мой запрос найдет именно всех Поставщиков - тебе разве не ЭТО надо?
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДоговорыКонтрагентов.Владелец КАК Контрагент,
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
ТОГДА АктСверкиВзаиморасчетов.Ссылка
ИНАЧЕ "Нет акта"
КОНЕЦ КАК АктСверки
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ДоговорыКонтрагентов.Владелец)
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
УПОРЯДОЧИТЬ ПО
ДоговорыКонтрагентов.Владелец.Наименование
ДоговорыКонтрагентов.Владелец КАК Контрагент,
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
ТОГДА АктСверкиВзаиморасчетов.Ссылка
ИНАЧЕ "Нет акта"
КОНЕЦ КАК АктСверки
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ДоговорыКонтрагентов.Владелец)
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
УПОРЯДОЧИТЬ ПО
ДоговорыКонтрагентов.Владелец.Наименование
(65)
Вот интересно когда вы NULL получете в акте сверки, а вы получите его, так как далеко не по всем договорам акты есть, что будете с ошибкой делать так как у NULL нету ДатаНачала
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДоговорыКонтрагентов.Владелец КАК Контрагент,
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
ТОГДА АктСверкиВзаиморасчетов.Ссылка
ИНАЧЕ "Нет акта"
КОНЕЦ КАК АктСверки
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ДоговорыКонтрагентов.Владелец)
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
ПоказатьВот интересно когда вы NULL получете в акте сверки, а вы получите его, так как далеко не по всем договорам акты есть, что будете с ошибкой делать так как у NULL нету ДатаНачала
(74)
Где проверка на NULL ?
Или У Вас это нормально ?
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
ТОГДА АктСверкиВзаиморасчетов.Ссылка
ИНАЧЕ "Нет акта"
КОНЕЦ КАК АктСверки
Где проверка на NULL ?
Или У Вас
NULL.ДатаНачала
(88)Т.Е по вашему Это нормально ?
И Где вы отбираете те которые имеют не NULL в запросе я не нашел
А еще проще делать не левое а Тогда вы NULL точно не получите по этому полю да и левое поле ограничите сразу только теми записями что есть в правом
NULL МЕЖДУ &ДатаНачала И &ДатаОкончания
И Где вы отбираете те которые имеют не NULL в запросе я не нашел
ГДЕ НЕ АктСверкиВзаиморасчетов ЕСТЬ NULL
А еще проще делать не левое а
Внутреннее соединение
1. Сравнение типа "ЧТО-ТО МЕЖДУ &ДатаНачала И &ДатаОкончания" - Нормально - отберется только то что соответствует ЭТОМУ условию.
2. Не требуется такого отбора, потому что 1 исключает все что в него не входит, а не входит именно когда NULL
3. А вот внутренне как раз не годится, ибо мне нужны и NULL значения Актов - они будут отображаться текстом "Нет акта"
При внутреннем соединении вы просто получите тех контриков у кого есть акты, а это не полный список
Да вы возьмите сами создать попытайтесь рабочий запрос , чтобы выдал ВСЕХ поставщиков с данными о наличии актов сверки в периоде
2. Не требуется такого отбора, потому что 1 исключает все что в него не входит, а не входит именно когда NULL
3. А вот внутренне как раз не годится, ибо мне нужны и NULL значения Актов - они будут отображаться текстом "Нет акта"
При внутреннем соединении вы просто получите тех контриков у кого есть акты, а это не полный список
Да вы возьмите сами создать попытайтесь рабочий запрос , чтобы выдал ВСЕХ поставщиков с данными о наличии актов сверки в периоде
Да вот пожалуйста, и 60 счет и период хоть год поставь он на каждый месяц покажет, главное что бы акты попадали в этот период....так же можно контрагентов выбрать как в иерархии так и вообще не выбирать.... а так подогнать под свои условия данный запрос можно всегда..И кстати бухгалтер права, зачем делать акты (показывать контрагентов по которым не было расчетов вообще за указанный период)
(91)ВЫБРАТЬ
Контрагенты.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО (ДоговорыКонтрагентов.Владелец = Контрагенты.Ссылка)
И (Контрагенты.Ссылка В ИЕРАРХИИ (&Контрагент)
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.СубконтоКт1 КАК Контрагент,
СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот,
СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.КоличествоОборотКт, 0)) КАК Количество,
НАЧАЛОПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ) КАК Месяц
ПОМЕСТИТЬ ВТ_РасчетыСКонтрагентом
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
&ДатаНачала,
&ДатаОкончания,
Регистратор,
,
,
,
,
СубконтоДт1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
ИЛИ СубконтоКт1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)) КАК ХозрасчетныйОборотыДтКт
ГДЕ
ХозрасчетныйОборотыДтКт.СчетКт В (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщиками))
СГРУППИРОВАТЬ ПО
ХозрасчетныйОборотыДтКт.СубконтоКт1,
НАЧАЛОПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_РасчетыСКонтрагентом.Месяц КАК Месяц,
ВТ_РасчетыСКонтрагентом.Контрагент КАК Контрагент,
ВТ_РасчетыСКонтрагентом.СуммаОборот КАК СуммаОборот,
ВТ_РасчетыСКонтрагентом.Количество КАК Количество,
ЕСТЬNULL(АктСверкиВзаиморасчетов.ОстатокНаНачало, 0) КАК ОстатокПоАкту,
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.Ссылка ЕСТЬ NULL
ТОГДА "Нет Акта Сверки"
ИНАЧЕ АктСверкиВзаиморасчетов.Ссылка
КОНЕЦ КАК АктСверки
ИЗ
ВТ_РасчетыСКонтрагентом КАК ВТ_РасчетыСКонтрагентом
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (ВТ_РасчетыСКонтрагентом.Контрагент = АктСверкиВзаиморасчетов.Контрагент
И АктСверкиВзаиморасчетов.Проведен
И АктСверкиВзаиморасчетов.ДатаНачала >= ВТ_РасчетыСКонтрагентом.Месяц
И АктСверкиВзаиморасчетов.ДатаОкончания < КОНЕЦПЕРИОДА(ВТ_РасчетыСКонтрагентом.Месяц, МЕСЯЦ))
Показать
(92) Теперь я понимаю как писалась 1С ЗУП 3... )))
Там враг наш ногу сломит...
Ваш запрос безусловно вполне стройный, но насколько он сложнее - ради чего?
Вы сравните размеры и сложность вашего запроса с моим, при том что функциональность - одинаковая. точнее у вас избыточная - не запрашиваемая изначально
Там враг наш ногу сломит...
Ваш запрос безусловно вполне стройный, но насколько он сложнее - ради чего?
Вы сравните размеры и сложность вашего запроса с моим, при том что функциональность - одинаковая. точнее у вас избыточная - не запрашиваемая изначально
(92) А кроме того зачем такая этажерка???
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.Ссылка ЕСТЬ NULL
ТОГДА "Нет Акта Сверки"
ИНАЧЕ АктСверкиВзаиморасчетов.Ссылка
КОНЕЦ КАК АктСверки
Если есть совершенно простая схемка
ЕСТЬNULL( АктСверкиВзаиморасчетов.Ссылка,"Нет Акта Сверки") КАК АктСверки
Которую вы сами же использовали строкой выше?
Чтоб запутать студента?
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.Ссылка ЕСТЬ NULL
ТОГДА "Нет Акта Сверки"
ИНАЧЕ АктСверкиВзаиморасчетов.Ссылка
КОНЕЦ КАК АктСверки
Если есть совершенно простая схемка
ЕСТЬNULL( АктСверкиВзаиморасчетов.Ссылка,"Нет Акта Сверки") КАК АктСверки
Которую вы сами же использовали строкой выше?
Чтоб запутать студента?
(99) Вы то написали , что труда не составит - но труд составит, уж поверьте автор не великий специалист в запросах...
Думаю он даже не использовал никогда временные таблицы.
А я с самого начала предложил вариант именно когда запрос выдаст все существующие АКТЫ , задевающие своим периодом заданные даты.
При том что запрос был в разы короче и проще.
Ну зачем усложнять то что можно получить простым способом?
Думаю он даже не использовал никогда временные таблицы.
А я с самого начала предложил вариант именно когда запрос выдаст все существующие АКТЫ , задевающие своим периодом заданные даты.
При том что запрос был в разы короче и проще.
Ну зачем усложнять то что можно получить простым способом?
(99) И кстати совершенно не понял зачем вы нагородили огород в первой временной таблице
Безо всяких соединений вы получите тот же результат
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДоговорыКонтрагентов.Владелец КАК Владелец
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
И (ДоговорыКонтрагентов.Владелец.Ссылка В ИЕРАРХИИ (&Контрагент)
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) )
Безо всяких соединений вы получите тот же результат
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДоговорыКонтрагентов.Владелец КАК Владелец
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
И (ДоговорыКонтрагентов.Владелец.Ссылка В ИЕРАРХИИ (&Контрагент)
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) )
(99) А вот можете расшифровать назначение такого хитрого условия
СубконтоДт1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
ИЛИ СубконтоКт1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
Это явно чтоб запутать бедного студента?
СубконтоДт1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
ИЛИ СубконтоКт1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
Это явно чтоб запутать бедного студента?
(103)А чет тут расшифровывать то ? Хотите посмотреть допустим отработку ограничений как я делал
вот там точно можно долго думать...зато данную добавку к любому запросу приладить можно...правда здесь используется отдельный справочник с ограничениями по статьям и пользователям, почти RLS в принципе и мысдь была содрана оттуда,
А то что вы показываете, так...детские игрушки, можно было и соединением это сделать...просто способ показал
вот там точно можно долго думать...зато данную добавку к любому запросу приладить можно...правда здесь используется отдельный справочник с ограничениями по статьям и пользователям, почти RLS в принципе и мысдь была содрана оттуда,
А то что вы показываете, так...детские игрушки, можно было и соединением это сделать...просто способ показал
И
ИСТИНА В
(ВЫБРАТЬ ПЕРВЫЕ 1
ИСТИНА
ИЗ
Справочник.NF_ОграниченияСтатейРасходов.СтатьиДохода КАК СтатьиДохода
ГДЕ
(СтатьиДохода.Ссылка.Пользователь = &Пользователь
И НЕ СтатьиДохода.Ссылка.РазрешеныДоходы
И ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиДоходов.ВыручкаОтПродаж) = СтатьиДохода.СтатьяДоходов
ИЛИ НЕ &Пользователь В
(ВЫБРАТЬ
ВТСтатьиДохода.Пользователь
ИЗ
Справочник.NF_ОграниченияСтатейРасходов КАК ВТСтатьиДохода
ГДЕ НЕ ВТСтатьиДохода.ПометкаУдаления))
ИЛИ СтатьиДохода.Ссылка.Пользователь = &Пользователь
И СтатьиДохода.Ссылка.РазрешеныДоходы
И НЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиДоходов.ВыручкаОтПродаж) В (ВЫБРАТЬ
ВТСтатьиДохода.СтатьяДоходов
ИЗ
Справочник.NF_ОграниченияСтатейРасходов.СтатьиДохода КАК ВТСтатьиДохода
ГДЕ ВТСтатьиДохода.Ссылка.Пользователь = &Пользователь))
Показать
(100) Ну реально я не говорил что все так делают, !!!!! сколько можно одно и то же
Я могу больше сказать если будет сделано более одного акта за месяц он задвоит и "более" записи..., еще раз ЭТО ШАБЛОН, подогнать под свои потребности никто не мешает. Я показал как МОЖНО сделать а не как надо...
Я могу больше сказать если будет сделано более одного акта за месяц он задвоит и "более" записи..., еще раз ЭТО ШАБЛОН, подогнать под свои потребности никто не мешает. Я показал как МОЖНО сделать а не как надо...
(106) Вот кстати опять же запрос проще вашего но уже с учетом 60 счета. Я просто все пытаюсь поянть - зачем вы все усложняете?
И самое страшное, что ваши запросы в РАЗЫ медленнее .
Ваша вторая временная таблица выполнялась у меня 36,149. Моя временная за 7,125. и это стабильный результат.
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДоговорыКонтрагентов.Владелец КАК Владелец,
СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт,
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Период, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщиками), , , , ) КАК ХозрасчетныйОбороты
ПО (ХозрасчетныйОбороты.Субконто1 = ДоговорыКонтрагентов.Владелец)
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
И (ДоговорыКонтрагентов.Владелец.Ссылка В ИЕРАРХИИ (&Контрагент)
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
И (НЕ ХозрасчетныйОбороты.СуммаОборотДт Есть NULL ИЛИ НЕ ХозрасчетныйОбороты.СуммаОборотКт Есть NULL )
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Владелец
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВТ_Обороты.Владелец КАК Контрагент,
ВТ_Обороты.СуммаОборотДт КАК СуммаОборотДт,
ВТ_Обороты.СуммаОборотКт КАК СуммаОборотКт,
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
ТОГДА АктСверкиВзаиморасчетов.Ссылка
ИНАЧЕ "Нет акта"
КОНЕЦ КАК АктСверки
ИЗ
ВТ_Обороты КАК ВТ_Обороты
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ВТ_Обороты.Владелец И (АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания) )
И самое страшное, что ваши запросы в РАЗЫ медленнее .
Ваша вторая временная таблица выполнялась у меня 36,149. Моя временная за 7,125. и это стабильный результат.
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДоговорыКонтрагентов.Владелец КАК Владелец,
СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт,
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &ДатаОкончания, Период, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщиками), , , , ) КАК ХозрасчетныйОбороты
ПО (ХозрасчетныйОбороты.Субконто1 = ДоговорыКонтрагентов.Владелец)
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
И (ДоговорыКонтрагентов.Владелец.Ссылка В ИЕРАРХИИ (&Контрагент)
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
И (НЕ ХозрасчетныйОбороты.СуммаОборотДт Есть NULL ИЛИ НЕ ХозрасчетныйОбороты.СуммаОборотКт Есть NULL )
СГРУППИРОВАТЬ ПО
ДоговорыКонтрагентов.Владелец
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВТ_Обороты.Владелец КАК Контрагент,
ВТ_Обороты.СуммаОборотДт КАК СуммаОборотДт,
ВТ_Обороты.СуммаОборотКт КАК СуммаОборотКт,
ВЫБОР
КОГДА АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания
ТОГДА АктСверкиВзаиморасчетов.Ссылка
ИНАЧЕ "Нет акта"
КОНЕЦ КАК АктСверки
ИЗ
ВТ_Обороты КАК ВТ_Обороты
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ПО (АктСверкиВзаиморасчетов.Контрагент = ВТ_Обороты.Владелец И (АктСверкиВзаиморасчетов.ДатаНачала МЕЖДУ &ДатаНачала И &ДатаОкончания
ИЛИ АктСверкиВзаиморасчетов.ДатаОкончания МЕЖДУ &ДатаНачала И &ДатаОкончания) )
(109) [Да вы много я смотрю чего понять не можете :)..Взяли Оборотку только без ДТ И КТ, и потом условие наложите
а теперь сравните вот это с вашей То что вы кор счет убрали я молчу, вам то нафиг конечно он не сдался, вы же знаете что такое активные и пассивные счета, ч то на ДТ ляжет а что на КТ, я как то все больше по старинке, знаете...
Кстати специально для ВАШЕЙ базы что бы вы акты увидели....
А то у вас бухия странная акты наверное раз в год делает, хотя нормальные люди если и делают сверку то помесячно :)
а теперь сравните вот это с вашей То что вы кор счет убрали я молчу, вам то нафиг конечно он не сдался, вы же знаете что такое активные и пассивные счета, ч то на ДТ ляжет а что на КТ, я как то все больше по старинке, знаете...
Кстати специально для ВАШЕЙ базы что бы вы акты увидели....
ВЫБРАТЬ
Контрагенты.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО (ДоговорыКонтрагентов.Владелец = Контрагенты.Ссылка)
И (Контрагенты.Ссылка В ИЕРАРХИИ (&Контрагент)
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
ГДЕ
ДоговорыКонтрагентов.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Субконто1 КАК Контрагент,
ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаОборот,
ЕСТЬNULL(ХозрасчетныйОборотыДтКт.КоличествоОборотКт, 0) КАК Количество,
ХозрасчетныйОборотыДтКт.Период КАК Месяц
ПОМЕСТИТЬ ВТ_РасчетыСКонтрагентом
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(
&ДатаНачала,
&ДатаОкончания,
МЕСЯЦ,Счет В (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщиками))
,
,
Субконто1 В
(ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
) КАК ХозрасчетныйОборотыДтКт
ГДЕ
ХозрасчетныйОборотыДтКт.СуммаОборот <> 0
//СГРУППИРОВАТЬ ПО
// ХозрасчетныйОборотыДтКт.Субконто1,
// НАЧАЛОПЕРИОДА(ХозрасчетныйОборотыДтКт.Период, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ АктСверкиВзаиморасчетов.Ссылка) КАК КоличествоЗаМесяц,
НАЧАЛОПЕРИОДА(АктСверкиВзаиморасчетов.ДатаНачала, МЕСЯЦ) КАК ДатаНачала,
КОНЕЦПЕРИОДА(АктСверкиВзаиморасчетов.ДатаОкончания, МЕСЯЦ) КАК ДатаОкончания,
МАКСИМУМ(АктСверкиВзаиморасчетов.Ссылка) КАК АктВзаиморасчетов,
АктСверкиВзаиморасчетов.Контрагент КАК Контрагент,
МАКСИМУМ(АктСверкиВзаиморасчетов.Дата) КАК Дата
ПОМЕСТИТЬ ВТ_Акты
ИЗ
Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
ГДЕ
АктСверкиВзаиморасчетов.ДатаОкончания <= &ДатаОкончания
И АктСверкиВзаиморасчетов.Проведен
И АктСверкиВзаиморасчетов.Контрагент В (ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
ВТ_Контрагенты КАК Контрагенты)
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(АктСверкиВзаиморасчетов.ДатаНачала, МЕСЯЦ),
КОНЕЦПЕРИОДА(АктСверкиВзаиморасчетов.ДатаОкончания, МЕСЯЦ),
АктСверкиВзаиморасчетов.Контрагент
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_РасчетыСКонтрагентом.Контрагент КАК Контрагент,
МИНИМУМ(ВТ_Акты.ДатаОкончания) КАК ДатаОкончания,
ВТ_РасчетыСКонтрагентом.Месяц КАК Месяц,
МАКСИМУМ(ВТ_Акты.КоличествоЗаМесяц) КАК КоличествоЗаМесяц
ПОМЕСТИТЬ ВТ_АктыСПериодом
ИЗ
ВТ_РасчетыСКонтрагентом КАК ВТ_РасчетыСКонтрагентом
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Акты КАК ВТ_Акты
ПО (ВТ_РасчетыСКонтрагентом.Контрагент = ВТ_Акты.Контрагент)
И (ВТ_РасчетыСКонтрагентом.Месяц < ВТ_Акты.ДатаОкончания)
СГРУППИРОВАТЬ ПО
ВТ_РасчетыСКонтрагентом.Контрагент,
//ВТ_Акты.АктВзаиморасчетов,
ВТ_РасчетыСКонтрагентом.Месяц
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_РасчетыСКонтрагентом.Месяц КАК Месяц,
ВТ_РасчетыСКонтрагентом.Контрагент КАК Контрагент,
ВТ_РасчетыСКонтрагентом.СуммаОборот КАК СуммаОборот,
ВТ_РасчетыСКонтрагентом.Количество КАК Количество,
ЕСТЬNULL(Акты.АктВзаиморасчетов, "Нет акта") КАК АктВзаиморасчетов,
Акты.ДатаОкончания КАК ДатаОкончания,
Акты.ДатаНачала КАК ДатаНачала,
ВТ_АктыСПериодом.КоличествоЗаМесяц КАК КоличествоЗаМесяц
ИЗ
ВТ_РасчетыСКонтрагентом КАК ВТ_РасчетыСКонтрагентом
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АктыСПериодом КАК ВТ_АктыСПериодом
ПО ВТ_РасчетыСКонтрагентом.Контрагент = ВТ_АктыСПериодом.Контрагент
И (ВТ_АктыСПериодом.Месяц = ВТ_РасчетыСКонтрагентом.Месяц)
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Акты КАК Акты
ПО ВТ_АктыСПериодом.Контрагент = Акты.Контрагент
И ВТ_АктыСПериодом.ДатаОкончания = Акты.ДатаОкончания
УПОРЯДОЧИТЬ ПО
Контрагент,
Месяц
ПоказатьА то у вас бухия странная акты наверное раз в год делает, хотя нормальные люди если и делают сверку то помесячно :)
(111) Вав запрос разбух неимоверно , но резулттата совершенно не дает!!!
при наличии Актов у контрагента, ваш запрос тупо показывает неизвестно что , но только не акты...
Мой запрос показывает все акты
(110) тут каюсь прошляпил - кт-дт...
Но я просто не понял - зачем использовать ОборотыКТДТ, если достаточно для нашей задачи просто обороты. И именно это меня сбило с толку...
при наличии Актов у контрагента, ваш запрос тупо показывает неизвестно что , но только не акты...
Мой запрос показывает все акты
(110) тут каюсь прошляпил - кт-дт...
Но я просто не понял - зачем использовать ОборотыКТДТ, если достаточно для нашей задачи просто обороты. И именно это меня сбило с толку...
Прикрепленные файлы:
(113)Он тупо показывает акт, если он есть и ДатаОкончания у него больше чем дата в оборотке, в вашем случае акт был сделан..намного раньше первой записи в регистре, это кстати ваша выборка :) я тупо убрал кор счет из нее. а то вы хвалились что у вас запрос быстрее, я могу вам сказать больше условие ИЛИ не рекомендуется в запросах делать, так как очень затратная операция, и рекомендации объеденять два запроса...
Вы похоже не понимаете что такое регистр бухгалтерии и что у него есть как дТ так и КТ, или "субконто и корСубконто", и так как вы убрали корСубконто то записи по оплате он тупо не видит, только поступления услуг товаров...и поэтому ваш акт и не попал в выборку...Для лучшего понимания вам запросик
посмотрите движухи с отбором по счету и корсчету кстати тоже касается и субконто...
Вы похоже не понимаете что такое регистр бухгалтерии и что у него есть как дТ так и КТ, или "субконто и корСубконто", и так как вы убрали корСубконто то записи по оплате он тупо не видит, только поступления услуг товаров...и поэтому ваш акт и не попал в выборку...Для лучшего понимания вам запросик
посмотрите движухи с отбором по счету и корсчету кстати тоже касается и субконто...
ВЫБРАТЬ
ХозрасчетныйОбороты.Регистратор КАК Регистратор,
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.КорСчет КАК КорСчет,
ХозрасчетныйОбороты.Субконто1 КАК Субконто,
ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто,
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт,
ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&Нач, &Кон, Регистратор, , , , КорСчет = &КорСчет, ) КАК ХозрасчетныйОбороты
СГРУППИРОВАТЬ ПО
ХозрасчетныйОбороты.Регистратор,
ХозрасчетныйОбороты.КорСчет,
ХозрасчетныйОбороты.Субконто1,
ХозрасчетныйОбороты.КорСубконто1,
ХозрасчетныйОбороты.Счет,
ХозрасчетныйОбороты.СуммаОборот,
ХозрасчетныйОбороты.СуммаОборотДт
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОбороты.Регистратор КАК Регистратор,
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.КорСчет КАК КорСчет,
ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1,
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборотКт,
СУММА(ХозрасчетныйОбороты.СуммаНУОборотКт) КАК СуммаНУОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&Нач, &Кон, Регистратор, Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты
СГРУППИРОВАТЬ ПО
ХозрасчетныйОбороты.Регистратор,
ХозрасчетныйОбороты.КорСчет,
ХозрасчетныйОбороты.КорСубконто1,
ХозрасчетныйОбороты.Субконто1,
ХозрасчетныйОбороты.Счет
Показать
(114)
Я прекрасно понимаю все это...
Я не понимаю - зачем это использовать в текущей задаче?
Это не оптимально по меньшей мере, о чем и говорит скорость вашего запроса, который кстати так и не показал созданные Акты, то есть как минимум не выполнил возложенную на него задачу.
Я допускаю что вы знаете очень много , но всегда ли нужно палить из пушек по воробьям?
Это все равно что ученик 2 класса прийдет ко мне с задачкой по математике на поиск неизвестного, а я ему предложу решение через интегралы и дифференциалы... Решить любую задачу можно всегда различными способами. И по любому наилучший будет тот который проще и быстрее (при правильном результате естественно)
Вы похоже не понимаете что такое регистр бухгалтерии и что у него есть как дТ так и КТ, или "субконто и корСубконто"
Я прекрасно понимаю все это...
Я не понимаю - зачем это использовать в текущей задаче?
Это не оптимально по меньшей мере, о чем и говорит скорость вашего запроса, который кстати так и не показал созданные Акты, то есть как минимум не выполнил возложенную на него задачу.
Я допускаю что вы знаете очень много , но всегда ли нужно палить из пушек по воробьям?
Это все равно что ученик 2 класса прийдет ко мне с задачкой по математике на поиск неизвестного, а я ему предложу решение через интегралы и дифференциалы... Решить любую задачу можно всегда различными способами. И по любому наилучший будет тот который проще и быстрее (при правильном результате естественно)
(111) "То что вы кор счет убрали я молчу"
Я так и не понял ОТКУДА я убрал? У вас его нигде и не было...
(114) "Он тупо показывает акт, если он есть" - а как он должен его показывать?
задача стоит именно такая - как бы не ввели акты сверок, если они касаются указанного периода - их нужно видеть и переделывать (при желании)
Про ИЛИ я прекрасно знаю, но это не в нашем случае, когда актов 100 штук
Я так и не понял ОТКУДА я убрал? У вас его нигде и не было...
(114) "Он тупо показывает акт, если он есть" - а как он должен его показывать?
задача стоит именно такая - как бы не ввели акты сверок, если они касаются указанного периода - их нужно видеть и переделывать (при желании)
Про ИЛИ я прекрасно знаю, но это не в нашем случае, когда актов 100 штук
(115)
Он не на акты накладывается,..ну да ладно
Почему он у вас не вывел, тут все просто, так как записи по регистру у вас не все получены были, то и период в котором акт должен был встать просто не получили из регистра...
И еще раз ЭТО ШАБЛОН :)...
По поводу избыточности...ну тут..вопрос такой более философский..если я могу написать это за 20 минут , и мне это не составит труда..то лучше я сделаю так, а кто то на это потратит времени сутки и более, тогда да..тут уже вопрос времени и как ни странно "денег"...ту уже вопрос более в знаниях..
Вот отсюда ПО (ХозрасчетныйОбороты.Субконто1 = ДоговорыКонтрагентов.Владелец) там еще корСубконто есть
Просто пл КТ проще, открыл документ посмотрел движения...и уже запрос пишешь по этим движениям, если тупо с обороткой, там надо разбираться какое субконто какой счет обычный или кор...
И еще если бы я писал запрос под конкретную задачу, я бы все равно его не так сделал, Он бы еще больше был :)...а так на коленке написан по быстрому...
Ладно мир дружба :)...а то мы тут развели холивар....
Про ИЛИ я прекрасно знаю, но это не в нашем случае, когда актов 100 штук .
Он не на акты накладывается,..ну да ладно
Почему он у вас не вывел, тут все просто, так как записи по регистру у вас не все получены были, то и период в котором акт должен был встать просто не получили из регистра...
И еще раз ЭТО ШАБЛОН :)...
По поводу избыточности...ну тут..вопрос такой более философский..если я могу написать это за 20 минут , и мне это не составит труда..то лучше я сделаю так, а кто то на это потратит времени сутки и более, тогда да..тут уже вопрос времени и как ни странно "денег"...ту уже вопрос более в знаниях..
Я так и не понял ОТКУДА я убрал? У вас его нигде и не было...
Вот отсюда ПО (ХозрасчетныйОбороты.Субконто1 = ДоговорыКонтрагентов.Владелец) там еще корСубконто есть
Просто пл КТ проще, открыл документ посмотрел движения...и уже запрос пишешь по этим движениям, если тупо с обороткой, там надо разбираться какое субконто какой счет обычный или кор...
И еще если бы я писал запрос под конкретную задачу, я бы все равно его не так сделал, Он бы еще больше был :)...а так на коленке написан по быстрому...
Ладно мир дружба :)...а то мы тут развели холивар....
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот