• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

БухЗапрос. ВыбратьВалюты()

  • Автор темы Mister-X
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Mister-X

Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьПланСчетов(ВыбранныйПланСчетов());
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ВыбКонтрагент, 1);

Если ВидВзаим = 1 Тогда
Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
СтрРах= "681,371,36,377,63";
Иначе
СтрРах = "36,377,63";
КонецЕсли;
ИначеЕсли ВидВзаим = 2 Тогда
Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
СтрРах= "681,63";
Иначе
СтрРах = "63";
КонецЕсли;
ИначеЕсли ВидВзаим = 3 Тогда
СтрРах= "371,36,377";
КонецЕсли;



Если Ит.ВыполнитьЗапрос(Дата1,Дата2,СтрРах, , ,3,"Проводка","СВ")=1 Тогда
Ит.ВыбратьСчета();
Пока Ит.ПолучитьСчет() = 1 Цикл
Рах = Ит.Счет;
Пока Ит.ПолучитьСубконто() = 1 Цикл
Ит.ВыбратьПериоды();
Пока Ит.ПолучитьПериод() = 1 Цикл
Ит.ВыбратьВалюты();
Пока Ит.ПолучитьВалюту() = 1 Цикл
Табл.НоваяСтрока();
Табл.Документ = Ит.Операция.Документ;
Если Рах.Валютный = 0 Тогда
Табл.СальдоПоч = Ит.СНД() - Ит.СНК();
Табл.ЗбільшГрн = Ит.ДО();
Табл.ЗменшГрн = Ит.КО();
Иначе
Табл.ЗбільшВал = Ит.ДО(2);
Табл.ЗменшВал = Ит.КО(2);
Табл.КінВал = Ит.ДО(2) - Ит.КО(2);
КонецЕсли;
Табл.Валюта = Ит.Валюта;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;

Не делает выборку по валютам ВыбратьВалюты()=0, хотя в выборке счетов есть счте "681"-валютный. Почему?
1С 7.7 релиз 7.70.025, БухУчет для Украины 7.70.265
 
V

vitfil

Вы выложили сюда слишком маленький кусок кода...
А если серьезно, выборка валют возможна только у валютных счетов (вам не кажется это логичным?), а если в выборке счетов есть не валютные... Думаю, дальше продолжать не стоИт?
 
M

Mister-X

Спасибо понял. А тепер ситуация з Таблицей Значений:
Табл=СоздатьОбъект("ТаблицаЗначений");
Табл.НоваяКолонка("Документ");
Табл.НоваяКолонка("Валюта");
Табл.НоваяКолонка("СальдоПоч");
Табл.НоваяКолонка("СальдоКін");
Табл.НоваяКолонка("Збільш");
Табл.НоваяКолонка("Зменш");
Табл.НоваяКолонка("ЗбільшВал");
Табл.НоваяКолонка("ЗменшВал");
Табл.НоваяКолонка("СальдоКінВал");

Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьПланСчетов(ВыбранныйПланСчетов());
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ВыбКонтрагент, 1);

Если ВидВзаим = 1 Тогда
Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
СтрРах= "681,371,36,377,63";
Иначе
СтрРах = "36,377,63";
КонецЕсли;
ИначеЕсли ВидВзаим = 2 Тогда
Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
СтрРах= "681,63";
Иначе
СтрРах = "63";
КонецЕсли;
ИначеЕсли ВидВзаим = 3 Тогда
СтрРах= "371,36,377";
КонецЕсли;

Ит.ВключатьСубсчета(1);
Если Ит.ВыполнитьЗапрос(Дата1,Дата2,СтрРах, , ,3,"Проводка","СВ")=1 Тогда
Ит.ВыбратьСчета();
Пока Ит.ПолучитьСчет() = 1 Цикл
Ит.ВыбратьПериоды();
Пока Ит.ПолучитьПериод() = 1 Цикл
Рах = Ит.Счет;
Табл.НоваяСтрока();
Табл.Документ = Ит.Операция.Документ;
Если Рах.Валютный = 1 Тогда
Ит.ВыбратьВалюты();
Пока Ит.ПолучитьВалюту() = 1 Цикл
Табл.ЗбільшВал = Ит.ДО(2);
Табл.ЗменшВал = Ит.КО(2);
Табл.СальдоКінВал = Ит.СКД(2) - Ит.СКК(2);
Табл.Валюта = Ит.Валюта;
КонецЦикла;
Иначе
Табл.СальдоПоч = Ит.СНД() - Ит.СНК();
Табл.Збільш = Ит.ДО();
Табл.Зменш = Ит.КО();
Табл.СальдоКін = Ит.СКД() - Ит.СКК();
КонецЕсли;
сообщить(Рах);
Табл.ВыбратьСтроку();
КонецЦикла;
КонецЦикла;
КонецЕсли;

При формировании таблицы "Табл" при выборе нового счета из выборки (в выборке есть счета 3771,681,6812) 681 т.е. переход из 3771 в 681 счет, в колонке "Документ" вдруг меняется значения, хотя остальные значения в других колонках остаются теми самыми.

Сначала заполнилась эта таблица по счету 3771. Колонка "Документ" заполнилась значением "Операция 1..." (другие колонки заполнились итогами по счету 3771). В колонке "Документ" прописано значение "Операция 1..." 10 раз, так и должно быть.
Тепер когда счет=681, вдруг в колонке "Документ" все значения из "Операция 1..." поменялись на "Операция 2... ", хотя в других колонках значения не изменились + добавились итоги по счету 681 и его субсчету 6812 ("6812" - фигурирует в Операции 2 - 1 проводка в ним, 3771 в операции 1 - 10 проводок с ним).
Какая причина ??
Если разбить все группы счетов на их субсчета:

Если ВидВзаим = 1 Тогда
Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
СтрРах= "6811,6812,3711,3712,361,362,363,3771,3772,3773,3774,3775, 631,632,633";
Иначе
СтрРах = "361,362,363,3771,3772,3773,3774,3775, 631,632,633";
КонецЕсли;
ИначеЕсли ВидВзаим = 2 Тогда
Если Константа.ВыделятьАвансы = Перечисление.ДаНет.Да Тогда
СтрРах= "6811,6812,631,632,633";
Иначе
СтрРах = "631,632,633";
КонецЕсли;
ИначеЕсли ВидВзаим = 3 Тогда
СтрРах= "3711,3712,361,362,363,3771,3772,3773,3774,3775";
КонецЕсли;

без метода Ит.ВключатьСубсчета(1) проблема остается в силе!!!
 
V

vitfil

Даже читать ваш огромный кусок кода не стану. Думается мне, что и другие не будут этого делать...
 
M

Mister-X

"Даже читать ваш огромный кусок кода не стану. Думается мне, что и другие не будут этого делать..."

Ну не надо, никто никого не заставляет. А за других не говорите.
 
V

vitfil

Для: Mister-X
В качестве "китайского предупреждения": почитайте правила форума.
В качестве рекомендации: почитайте уроки на www.mista.ru а также ЖКК.
Форум предназначен для обмена опытом и решения вопросов. Вы даже не удосужились более или менее осмыслить вопрос и четко его сформулировать. Вместо этого выложили кусок слабочитаемого кода, считая, что кто-то будет в нем разбираться?
Совет (можно ему и не следовать): для начала сформулируйте проблему четко и кратко и после этого задавайте свой вопрос на форуме. В этом случае буду рад оказать помощь.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!