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

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

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

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

Остатки по счетам

  • Автор темы ge4r
  • Дата начала
G

ge4r

задача:
есть 3 счета 012.1 , 012.2 , 10.1
во всех трех ведется учет материалов, их места хранения,при чем кол-во определенного наименования по 10.1му счету должно быть равно сумме кол-в по 12.1 и 12.2
нужно сделать отчет,что бы таблица имела вид
Место хранения | 012.1 | 012.2 | 10.1
Наименование тут кол-ва

как это лучше делать? бух итогами или ВыбратьОперацииСПроводками?

Код:
Опер.ВыбратьОперацииСПроводками (ВыбДата,ВыбДата,"10.1",,,);
Пока Опер.ПолучитьОперацию() = 1 Цикл
Опер.ВыбратьПроводки();
Пока Опер.ПолучитьПроводку() = 1 Цикл
С1 = Опер.Субконто(1);
С2 = Опер.Субконто(3);
Таб.ВывестиСекцию("Строка");
КонецЦикла;
КонецЦикла;
пишу так,у меня вылетает
С1 = Опер.Субконто(1);
{C:\DOCUMENTS AND SETTINGS\ADMIN.ADMIN-F279AA595\DESKTOP\ОТЧЕТСВГК.ERT(17)}: Поле агрегатного объекта не обнаружено (Субконто)
хотя с 12ым счетом не вылетает эта ошибка...
 
G

ge4r

понял... а как в данный цикл еще добавить получение кол-ва? Опер.Количество? в структуре проводок если не ошибаюсь оно,но опер.количество выглядит как то дико
 
G

ge4r

это да...но порой получается работающий,но ересевидный код...
 
G

ge4r

помогите найти косяк...добавил в код отбор по материалу и по месту хран-ия , + флаг "по остаткам"... но почему то когда не стоит галочка по остаткам вылетает пустая таблица...

Код:
Процедура Сформировать()
Перем Таб,ТЗ,БухИтог;
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка");
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Материал");
ТЗ.НоваяКолонка("МестоХранения");
ТЗ.НоваяКолонка("Кво0121");
ТЗ.НоваяКолонка("Кво0122");
ТЗ.НоваяКолонка("Кво101"); 
Ит=СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
Ит.ИспользоватьСубконто(ВидыСубконто.Материалы);
Ит.ВыполнитьЗапрос(ВыбДата,ВыбДата,"012.1,012.2,10.1",,,"К");

Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения)=1 Цикл
МестоХранения=Ит.Субконто(ВидыСубконто.МестаХранения);

Ит.ВыбратьСубконто(ВидыСубконто.Материалы);
Пока Ит.ПолучитьСубконто(ВидыСубконто.Материалы)=1 Цикл
Материал=Ит.Субконто(ВидыСубконто.Материалы);

ТЗ.НоваяСтрока();
ТЗ.МестоХранения=МестоХранения;
ТЗ.Материал=Материал;

Ит.ВыбратьСчета();
Пока Ит.ПолучитьСчет()=1 Цикл
Кво=Ит.ДО(3); // Количественный д*цензура*овый оборот по счету
Если Ит.Счет.Код="012.1" Тогда
ТЗ.Кво0121=Кво;
ИначеЕсли Ит.Счет.Код="012.2" Тогда
ТЗ.Кво0122=Кво;
ИначеЕсли Ит.Счет.Код="10.1" Тогда
ТЗ.Кво101=Кво;
Иначе
Сообщить("Не опознан счет: "+Ит.Счет.Код);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;


Если ВыбМесто.Выбран()= 1 Тогда
С1 = ВыбМесто;
Таб.ВывестиСекцию ("Заголовок");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл 
Если ТЗ.МестоХранения = С1 Тогда
Если ВыбОстатки = 1 Тогда
Если (ТЗ.Кво0121+ ТЗ.Кво0122 <>0) и (ТЗ.Кво101<>0) Тогда
С2 = ТЗ.Материал;
Кво0121 = ТЗ.Кво0121;  
Кво0122 = ТЗ.Кво0122;
Кво101 = ТЗ.Кво101;
Таб.ВывестиСекцию("Строка");
Иначе
С2 = ТЗ.Материал;
Кво0121 = ТЗ.Кво0121;  
Кво0122 = ТЗ.Кво0122;
Кво101 = ТЗ.Кво101;
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;		

Если ВыбМатериал.Выбран()= 1 Тогда
С1 = ВыбМатериал;
Таб.ВывестиСекцию ("Заголовок");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл 
Если ТЗ.Материал = С1 Тогда
Если ВыбОстатки = 1 Тогда
Если (ТЗ.Кво0121+ ТЗ.Кво0122 <>0) и (ТЗ.Кво101<>0) Тогда
С2 = ТЗ.МестоХранения;
Кво0121 = ТЗ.Кво0121;  
Кво0122 = ТЗ.Кво0122;
Кво101 = ТЗ.Кво101;
Таб.ВывестиСекцию("Строка");
КонецЕсли;
Иначе

С2 = ТЗ.МестоХранения;
Кво0121 = ТЗ.Кво0121;  
Кво0122 = ТЗ.Кво0122;
Кво101 = ТЗ.Кво101;
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//	Таб.ВывестиСекцию("Подвал");
Таб.Показать();


Таб.Опции(0,0,0,0);
Таб.Показать();
КонецПроцедуры
 
U

unknown181538

Юзайте отладчик. Я так понимаю, если не стоит "По остаткам" выводится только если выбран материал?
По коду:
- Лучше бы делать отбор прямо методом "ИспользоватьСубконто" с параметром "отбирать" и ускорит, и уменьшит код.
- " Если (ТЗ.Кво0121+ ТЗ.Кво0122 <>0) и (ТЗ.Кво101<>0) Тогда" - перенести в точку заполнения таблицы.
- Много повторяющегося текста.
 
Мы в соцсетях:

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