По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) sai_NT,
Процедура КнопкаВыполнитьНажатие(Кнопка)
////////////////////////////////////
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.Субконто1.КодЭлюдии КАК КодКонтрагента,
| ХозрасчетныйОстатки.Субконто2.Наименование КАК ДоговорНаименование,
| ХозрасчетныйОстатки.Субконто2 КАК ДоговорСпр,
| ХозрасчетныйОстатки.Субконто3 КАК Документ,
| ХозрасчетныйОстатки.Субконто2.Номер КАК НомерДоговора,
| ХозрасчетныйОстатки.Субконто2.Дата КАК ДатаДоговора,
| ХозрасчетныйОстатки.Субконто2.Подразделение КАК Подразделение,
| СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &ДатаКон,
| Счет В ИЕРАРХИИ (&СписокСчетов),
| ,
| Организация = &Организация
| И Субконто1 В ИЕРАРХИИ (&Контрагент)) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.Субконто2,
| ХозрасчетныйОстатки.Субконто1.ИНН,
| ХозрасчетныйОстатки.Субконто1.КПП,
| ХозрасчетныйОстатки.Субконто1.КодЭлюдии,
| ХозрасчетныйОстатки.Субконто2.КодЭлюдии,
| ХозрасчетныйОстатки.Субконто2.Номер,
| ХозрасчетныйОстатки.Субконто2.Дата,
| ХозрасчетныйОстатки.Субконто2.Подразделение,
| ХозрасчетныйОстатки.Субконто3
|
|УПОРЯДОЧИТЬ ПО
| Контрагент,
| Подразделение
|ИТОГИ
| СУММА(СуммаДт)
|ПО
| Контрагент,
| ДоговорСпр";
///////////////////////////////////////////////////////////
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Результат = Запрос.Выполнить();
//////////////////////////////////////////////////////////
Макет = ПолучитьМакет("МакетВыгрузки");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДокумент = Новый ТабличныйДокумент();
ТабДокумент.Вывести(ОбластьШапка);
Парам = ОбластьСтрока.Параметры;
ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаДетальныеЗаписи = ВыборкаКонтрагент.Выбрать();
//////////////////////////////////////////////////////////// ///////////////
Пока ВыборкаКонтрагент.Следующий() Цикл
Если не ВыборкаКонтрагент.Контрагент = Справочники.Контрагенты.ПустаяСсылка() Тогда
Парам.УчетнаяСистема = "";
ВыборкаДоговор = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ////////////////
//////////////////////////////////////////////////////////// /////////////////
Парам.Причина = "";
Пока ВыборкаДоговор.Следующий() Цикл
Если ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда ////
Если ВыборкаДетальныеЗаписи.Документ.Товары.Количество() > 0 Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Товары[0].Номенклатура.Наименование;
ИначеЕсли ВыборкаДетальныеЗаписи.Документ.Услуги.Количество() > 0 Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Услуги[0].Содержание;
КонецЕсли;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ВводНачальныхОстатковПоВзаиморасчетам") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Комментарий;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.КорректировкаЗаписейРегистров") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Комментарий;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ОперацияБух") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Содержание;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ПлатежноеПоручениеВходящее") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.НазначениеПлатежа;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ПлатежноеПоручениеИсходящее") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.НазначениеПлатежа;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Основание;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.РасходныйКассовыйОрдер") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Основание;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ОперацияБух") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Содержание;
КонецЕсли;
//////////////////////////////////////////////////////////// /////////////////////////////
Если не ВыборкаДоговор.ДоговорСпр = Справочники.ДоговорыКонтрагентов.ПустаяСсылка() Тогда
Парам.Заполнить(ВыборкаДоговор);
Парам.Контрагент = ВыборкаДоговор.Контрагент.НаименованиеПолное;
Парам.СуммаДт = Формат(ВыборкаДоговор.СуммаДт,"ЧДЦ=2; ЧГ=0");
Парам.Дата = Формат(ДатаКон, "ДЛФ=Д");
//////////////////////////////////////////////////////////// //////////////////////////////////
Если (ВыборкаДоговор.НомерДоговора = Null)
и (ВыборкаДоговор.ДатаДоговора = Null) Тогда
Парам.Договор = ВыборкаДоговор.ДоговорНаименование;
ИначеЕсли (ПустаяСтрока(ВыборкаДоговор.НомерДоговора))
и (ВыборкаДоговор.ДатаДоговора = Дата(1,1,1)) Тогда
Парам.Договор = ВыборкаДоговор.ДоговорНаименование;
Иначе
Парам.Договор = ВыборкаДоговор.НомерДоговора+ " от " + Формат(ВыборкаДоговор.ДатаДоговора, "ДЛФ=Д");
КонецЕсли;
// Парам.Дата = "";
// Парам.Договор = "";
ТабДокумент.Вывести(ОбластьСтрока);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
//////////////////////////////////////////////////////////// ///////////////////
ТабДокумент.Защита = Истина;
ТабДокумент.Показать();
ТекстДок = Новый ТекстовыйДокумент();
ИмяФ = КаталогВыгрузки;
ИмяФайла = ИмяФ+ "\debts.csv";
СимволРазделитель = " ";
КонечнаяСтрока = ТабДокумент.ВысотаТаблицы;
КонечнаяКолонка = ТабДокумент.ШиринаТаблицы;
Для строка = 1 по КонечнаяСтрока Цикл
СтрКа = "";
Для колонка = 1 по КонечнаяКолонка Цикл
ОбластьЯчейки = ТабДокумент.Область(Строка,Колонка);
ОбластьТекст = ОбластьЯчейки.Текст;
СтрКа = СтрКа+ОбластьТекст+СимволРазделитель;
КонецЦикла;
СтрКа = СтрКа + строка;
ТекстДок.ДобавитьСтроку(СтрКа)
КонецЦикла;
ТекстДок.Записать(ИмяФайла, "windows-1251");
КонецПроцедуры
Процедура КаталогВыгрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогВыбораКаталогВыгрузки = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогВыбораКаталогВыгрузки.Заголовок = "Открытие каталога для передачи файлов в систему Элюдия";
ДиалогВыбораКаталогВыгрузки.Каталог = КаталогВыгрузки;
Если Не ДиалогВыбораКаталогВыгрузки.Выбрать() Тогда
Возврат;
КонецЕсли;
КаталогВыгрузки = ДиалогВыбораКаталогВыгрузки.Каталог;
КонецПроцедуры
Процедура ПриОткрытии()
Организация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяОрганизация");
СписокСчетов.Очистить();
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданным);
ДатаКон = ТекущаяДата();
КаталогВыгрузки = "";
КонецПроцедуры
Показать
Обход результата запроса дурацкий. В первом цикле получаем результат по первой группировке, по контрагенту. На тот момент ему соответствует список документов и "причина" будет пустая. Второй цикл разворачивает все остальные элементы внутри группировки по контрагентам. Если перенести Определение "Причины" во второй цикл, то результат дожен получиться. Но я бы вообшще переписал обход и вывод результатов запроса.
Пока ВыборкаДоговор.Следующий() Цикл
ВыборкаДетальныеЗаписи = ВыборкаДоговор.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// вот тут уже сможешь получить значение поля Документ
КонецЦикла;
и убери:
ВыборкаДетальныеЗаписи = ВыборкаКонтрагент.Выбрать();
Процедура КнопкаВыполнитьНажатие(Кнопка)
////////////////////////////////////
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.Субконто1.КодЭлюдии КАК КодКонтрагента,
| ХозрасчетныйОстатки.Субконто2.Наименование КАК ДоговорНаименование,
| ХозрасчетныйОстатки.Субконто2 КАК ДоговорСпр,
| ХозрасчетныйОстатки.Субконто3 КАК Документ,
| ХозрасчетныйОстатки.Субконто2.Номер КАК НомерДоговора,
| ХозрасчетныйОстатки.Субконто2.Дата КАК ДатаДоговора,
| ХозрасчетныйОстатки.Субконто2.Подразделение КАК Подразделение,
| СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &ДатаКон,
| Счет В ИЕРАРХИИ (&СписокСчетов),
| ,
| Организация = &Организация
| И Субконто1 В ИЕРАРХИИ (&Контрагент)) КАК ХозрасчетныйОстатки
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОстатки.Субконто1,
| ХозрасчетныйОстатки.Субконто2,
| ХозрасчетныйОстатки.Субконто1.ИНН,
| ХозрасчетныйОстатки.Субконто1.КПП,
| ХозрасчетныйОстатки.Субконто1.КодЭлюдии,
| ХозрасчетныйОстатки.Субконто2.КодЭлюдии,
| ХозрасчетныйОстатки.Субконто2.Номер,
| ХозрасчетныйОстатки.Субконто2.Дата,
| ХозрасчетныйОстатки.Субконто2.Подразделение,
| ХозрасчетныйОстатки.Субконто3
|
|УПОРЯДОЧИТЬ ПО
| Контрагент,
| Подразделение
|ИТОГИ
| СУММА(СуммаДт)
|ПО
| Контрагент,
| ДоговорСпр";
///////////////////////////////////////////////////////////
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Результат = Запрос.Выполнить();
//////////////////////////////////////////////////////////
Макет = ПолучитьМакет("МакетВыгрузки");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДокумент = Новый ТабличныйДокумент();
ТабДокумент.Вывести(ОбластьШапка);
Парам = ОбластьСтрока.Параметры;
ВыборкаДокумент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//////////////////////////////////////////////////////////// /////// ТУТ
ВыборкаДетальныеЗаписи = ВыборкаДокумент.Выбрать();
//////////////////////////////////////////////////////////// ///////////////
Пока ВыборкаКонтрагент.Следующий() Цикл
Если не ВыборкаКонтрагент.Контрагент = Справочники.Контрагенты.ПустаяСсылка() Тогда
Парам.УчетнаяСистема = "";
ВыборкаДоговор = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ////////////////
//////////////////////////////////////////////////////////// /////////////////
Парам.Причина = "";
Пока ВыборкаДоговор.Следующий() Цикл
Если ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда ////
Если ВыборкаДетальныеЗаписи.Документ.Товары.Количество() > 0 Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Товары[0].Номенклатура.Наименование;
ИначеЕсли ВыборкаДетальныеЗаписи.Документ.Услуги.Количество() > 0 Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Услуги[0].Содержание;
КонецЕсли;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ВводНачальныхОстатковПоВзаиморасчетам") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Комментарий;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.КорректировкаЗаписейРегистров") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Комментарий;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ОперацияБух") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Содержание;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ПлатежноеПоручениеВходящее") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.НазначениеПлатежа;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ПлатежноеПоручениеИсходящее") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.НазначениеПлатежа;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Основание;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.РасходныйКассовыйОрдер") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Основание;
ИначеЕсли ТипЗнч(ВыборкаДетальныеЗаписи.Документ) = Тип("ДокументСсылка.ОперацияБух") Тогда
Причина = ВыборкаДетальныеЗаписи.Документ.Содержание;
КонецЕсли;
//////////////////////////////////////////////////////////// /////////////////////////////
Если не ВыборкаДоговор.ДоговорСпр = Справочники.ДоговорыКонтрагентов.ПустаяСсылка() Тогда
Парам.Заполнить
(ВыборкаДоговор);
Парам.Контрагент = ВыборкаДоговор.Контрагент.НаименованиеПолное;
Парам.СуммаДт = Формат(ВыборкаДоговор.СуммаДт,"ЧДЦ=2; ЧГ=0");
Парам.Дата = Формат(ДатаКон, "ДЛФ=Д");
//////////////////////////////////////////////////////////// //////////////////////////////////
Если (ВыборкаДоговор.НомерДоговора = Null)
и (ВыборкаДоговор.ДатаДоговора = Null) Тогда
Парам.Договор = ВыборкаДоговор.ДоговорНаименование;
ИначеЕсли (ПустаяСтрока(ВыборкаДоговор.НомерДоговора))
и (ВыборкаДоговор.ДатаДоговора = Дата(1,1,1)) Тогда
Парам.Договор = ВыборкаДоговор.ДоговорНаименование;
Иначе
Парам.Договор = ВыборкаДоговор.НомерДоговора+ " от " + Формат(ВыборкаДоговор.ДатаДоговора, "ДЛФ=Д");
КонецЕсли;
// Парам.Дата = "";
// Парам.Договор = "";
ТабДокумент.Вывести(ОбластьСтрока);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
//////////////////////////////////////////////////////////// //////////////
Пока ВыборкаДоговор.Следующий() Цикл ////////////
ВыборкаДетальныеЗаписи = ВыборкаДоговор.Выбрать(); ////////////
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ////////////
Документ = ВыборкаКонтрагент.Документ; ////////////
КонецЦикла; //////////
КонецЦикла; ///////////
////////////
//////////////////////////////////////////////////////////// //////////////
ТабДокумент.Защита = Истина;
ТабДокумент.Показать();
ТекстДок = Новый ТекстовыйДокумент();
ИмяФ = КаталогВыгрузки;
ИмяФайла = ИмяФ+ "\debts.csv";
СимволРазделитель = " ";
КонечнаяСтрока = ТабДокумент.ВысотаТаблицы;
КонечнаяКолонка = ТабДокумент.ШиринаТаблицы;
Для строка = 1 по КонечнаяСтрока Цикл
СтрКа = "";
Для колонка = 1 по КонечнаяКолонка Цикл
ОбластьЯчейки = ТабДокумент.Область(Строка,Колонка);
ОбластьТекст = ОбластьЯчейки.Текст;
СтрКа = СтрКа+ОбластьТекст+СимволРазделитель;
КонецЦикла;
СтрКа = СтрКа + строка;
ТекстДок.ДобавитьСтроку(СтрКа)
КонецЦикла;
ТекстДок.Записать(ИмяФайла, "windows-1251");
КонецПроцедуры
Процедура КаталогВыгрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогВыбораКаталогВыгрузки = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогВыбораКаталогВыгрузки.Заголовок = "Открытие каталога для передачи файлов в систему Элюдия";
ДиалогВыбораКаталогВыгрузки.Каталог = КаталогВыгрузки;
Если Не ДиалогВыбораКаталогВыгрузки.Выбрать() Тогда
Возврат;
КонецЕсли;
КаталогВыгрузки = ДиалогВыбораКаталогВыгрузки.Каталог;
КонецПроцедуры
Процедура ПриОткрытии()
Организация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяОрганизация");
СписокСчетов.Очистить();
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданным);
ДатаКон = ТекущаяДата();
КаталогВыгрузки = "";
КонецПроцедуры
Показать
(14) Rayrat7, мда-а-а-а-а-а-а
Структура обхода группировок должна быть такой. Все остальные выборки убей!!!
Структура обхода группировок должна быть такой. Все остальные выборки убей!!!
ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаКонтрагент.Следующий() Цикл
ВыборкаДоговор = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДоговор.Следующий() Цикл
ВыборкаДетальныеЗаписи = ВыборкаДоговор.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// вот тут уже сможешь получить значение поля Документ
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот