Как выбрать конкретное значение из ТЗ циклом
По теме из базы знаний
- Объединение двух таблиц значений запросом, циклом
- Как сдать экзамен 1С:Специалист по платформе?
- Удаление строк из таблицы значений различными способами с замером производительности
- Как не допустить раздувания склада. Контроль баланса между продажами и закупками еще на этапе оплат.
- "Чистый код в 1С" или как прокачать свой код? Пошаговая инструкция, часть №1
Найденные решения
(23)
У вас же цикл по всей таблице идет, без отбора
У вас же цикл по всей таблице идет, без отбора
Отбор = Новый Структура("ПараметрВыработки", Справочники.уатПараметрыВыработки.ВремяВРаботе);
НайденныеСтроки = тблДвижений.НайтиСтроки(Отбор);
Для Каждого стрВремяВРаботе из НайденныеСтроки Цикл
РазбивкаПутЛистаПоДням(тблДвижений, стрВремяВРаботе);
КонецЦикла;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(12)
Что значит перебирал каждую строку? Вы циклом проходите таблицу значений и на каждой итерации можете получить значения нужных вам колонок. Если хотите получить строки по определенному отбору, то используйте НайтиСтроки
Что значит перебирал каждую строку? Вы циклом проходите таблицу значений и на каждой итерации можете получить значения нужных вам колонок. Если хотите получить строки по определенному отбору, то используйте НайтиСтроки
Отбор = Новый Структура("ПараметрВыработки", "Время в работе");
Для Каждого Строка из тблДвижений.НайтиСтроки(Отбор) Цикл
Количество = Строка.Количество;
КонецЦикла;
(21)
Этот код разбивает строку на периоды, но не ту которую нужно
Строка находиться в таблице значений "тбзДвижения"
Процедура РазбивкаПутЛистаПоДням(тблДвижений, стрВремяВРаботе)
НачалоПериода = стрВремяВРаботе.Период - стрВремяВРаботе.Количество;
КонецПериода = стрВремяВРаботе.Период;
ТаблицаДат = Новый ТаблицаЗначений;
ТаблицаДат.Колонки.Добавить("НачалоПериода");
ТаблицаДат.Колонки.Добавить("КонецПериода");
ПервыйОбходЦикла = Истина;
Пока НачалоПериода <= КонецПериода Цикл
Если ПервыйОбходЦикла Тогда
Если КонецДня(НачалоПериода) >= КонецПериода Тогда
НоваяСтрока = ТаблицаДат.Добавить();
НоваяСтрока.НачалоПериода = НачалоПериода;
НоваяСтрока.КонецПериода = КонецПериода;
Прервать;
Иначе
НоваяСтрока = ТаблицаДат.Добавить();
НоваяСтрока.НачалоПериода = НачалоПериода;
НоваяСтрока.КонецПериода = КонецДня(НачалоПериода);
КонецЕсли;
Иначе
Если КонецДня(НачалоПериода) >= КонецПериода Тогда
НоваяСтрока = ТаблицаДат.Добавить();
НоваяСтрока.НачалоПериода = НачалоДня(НачалоПериода);
НоваяСтрока.КонецПериода = КонецПериода;
Прервать;
Иначе
НоваяСтрока = ТаблицаДат.Добавить();
НоваяСтрока.НачалоПериода = НачалоДня(НачалоПериода);
НоваяСтрока.КонецПериода = КонецДня(НачалоПериода);
КонецЕсли;
КонецЕсли;
НачалоПериода = КонецДня(НачалоПериода) + 1;
ПервыйОбходЦикла = Ложь;
КонецЦикла;
ЭтоПервый = Истина;
Для каждого СтрокаДат Из ТаблицаДат Цикл
НоваяСтрока = тблДвижений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, стрВремяВРаботе);
НоваяСтрока.Период = СтрокаДат.КонецПериода;
НоваяСтрока.Количество = (СтрокаДат.КонецПериода - СтрокаДат.НачалоПериода + ?(ЭтоПервый = Ложь, 1, 0));
ЭтоПервый = Ложь;
КонецЦикла;
тблДвижений.Удалить(стрВремяВРаботе);
КонецПроцедуры
ПоказатьЭтот код разбивает строку на периоды, но не ту которую нужно
Строка находиться в таблице значений "тбзДвижения"
(23)
У вас же цикл по всей таблице идет, без отбора
У вас же цикл по всей таблице идет, без отбора
Отбор = Новый Структура("ПараметрВыработки", Справочники.уатПараметрыВыработки.ВремяВРаботе);
НайденныеСтроки = тблДвижений.НайтиСтроки(Отбор);
Для Каждого стрВремяВРаботе из НайденныеСтроки Цикл
РазбивкаПутЛистаПоДням(тблДвижений, стрВремяВРаботе);
КонецЦикла;
(22) Если я Вас правильно понял; Вызывайте разбивку ТОЛЬКО для нужных строк; Остальные хотя и перебираются в цикле, но никак не обрабатываются !!!
// Отбор = Новый Структура("ПараметрВыработки", "Время в работе");
Для Каждого Строка из тблДвижений Цикл
_ПараметрВыработки = Строка.ПараметрВыработки;
_Количество = Строка.Количество;
Если _ПараметрВыработки = "Время в работе" Тогда // Выполним разбивку ТОЛЬКО для нужных строк
// РазбивкаПутЛистаПоДням( ... )
КонецЕсли;
КонецЦикла;
Показать
(21)
Процедура СформироватьТаблицаВыработкаТС(ДокументСсылка, СтруктураДополнительныеСвойства)
ТекстЗапроса =
"ВЫБРАТЬ
| уатПутевойЛистВыработкаТС.Ссылка.ДатаВозвращения КАК Период,
| уатПутевойЛистВыработкаТС.ТС КАК ТС,
| уатПутевойЛистВыработкаТС.ПараметрВыработки КАК ПараметрВыработки,
| уатПутевойЛистВыработкаТС.Количество КАК Количество,
| уатПутевойЛистВыработкаТС.Подразделение КАК Подразделение,
| уатПутевойЛистВыработкаТС.Контрагент КАК Контрагент,
| уатПутевойЛистВыработкаТС.Ссылка.Организация КАК Организация,
| уатПутевойЛистВыработкаТС.ОбъектСтроительства КАК ОбъектСтроительства,
| уатПутевойЛистВыработкаТС.Маршрут КАК Маршрут,
| уатМестонахождениеТССрезПоследних.Колонна КАК Колонна
|ИЗ
| Документ.уатПутевойЛист.ВыработкаТС КАК уатПутевойЛистВыработкаТС
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатМестонахождениеТС.СрезПоследних(&Период, ) КАК уатМестонахождениеТССрезПоследних
| ПО уатПутевойЛистВыработкаТС.Ссылка.ТранспортноеСредство = уатМестонахождениеТССрезПоследних.ТС
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.уатПутевойЛист КАК уатПутевойЛист
| ПО уатПутевойЛистВыработкаТС.Ссылка = уатПутевойЛист.Ссылка
|ГДЕ
| уатПутевойЛистВыработкаТС.Ссылка = &Док
| И уатПутевойЛист.ДатаВозвращения = &Период"
;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Док", ДокументСсылка);
Запрос.УстановитьПараметр("Период",ДокументСсылка.ДатаВозвращения);
тблДвижений = Запрос.Выполнить().Выгрузить();
УчетВыработкиПоКонтрагентам = уатПраваИНастройки.уатПолучитьПраваИНастройкиПользователя(ДокументСсылка.Организация, ПланыВидовХарактеристик.уатПраваИНастройки.УчетВыработкиПоКонтрагентам);
УчетВыработкиПоПодразделениям = уатПраваИНастройки.уатПолучитьПраваИНастройкиПользователя(ДокументСсылка.Организация, ПланыВидовХарактеристик.уатПраваИНастройки.УчетВыработкиПоПодразделениям);
УчетВыработкиПоОбъектамСтроительства = уатПраваИНастройки.уатПолучитьПраваИНастройкиПользователя(ДокументСсылка.Организация, ПланыВидовХарактеристик.уатПраваИНастройки.УчетВыработкиПоОбъектамСтроительства);
УчетВыработкиПоМаршрутам = уатПраваИНастройки.уатПолучитьПраваИНастройкиПользователя(ДокументСсылка.Организация, ПланыВидовХарактеристик.уатПраваИНастройки.УчетВыработкиПоМаршрутам);
Если НЕ УчетВыработкиПоКонтрагентам Тогда
тблДвижений.ЗаполнитьЗначения(Неопределено, "Контрагент");
КонецЕсли;
Если НЕ УчетВыработкиПоПодразделениям Тогда
тблДвижений.ЗаполнитьЗначения(Неопределено, "Подразделение");
КонецЕсли;
Если НЕ УчетВыработкиПоОбъектамСтроительства Тогда
тблДвижений.ЗаполнитьЗначения(Неопределено, "ОбъектСтроительства");
КонецЕсли;
Если НЕ УчетВыработкиПоМаршрутам Тогда
тблДвижений.ЗаполнитьЗначения(Неопределено, "Маршрут");
КонецЕсли;
Если (НЕ УчетВыработкиПоКонтрагентам) ИЛИ (НЕ УчетВыработкиПоПодразделениям) ИЛИ (НЕ УчетВыработкиПоОбъектамСтроительства) ИЛИ (НЕ УчетВыработкиПоМаршрутам) Тогда
тблДвижений.Свернуть("ТС, ПараметрВыработки, Подразделение, Контрагент, Организация, ОбъектСтроительства, Маршрут, Колонна, Период", "Количество");
КонецЕсли;
//Деканов.М
стрВремяВРаботе = тблДвижений.Найти(Справочники.уатПараметрыВыработки.ВремяВРаботе, "ПараметрВыработки");
Для Каждого стрВремяВРаботе из тблДвижений Цикл
РазбивкаПутЛистаПоДням(тблДвижений, стрВремяВРаботе);
КонецЦикла;
//
СтруктураДополнительныеСвойства.ТаблицыДляДвижений.Вставить("ТаблицаВыработкиТС", тблДвижений);
КонецПроцедуры
Показать
(12)Либо перебирать в цикле, либо НайтиСтроки(ПараметрыОтбора)
Только некоторые строки:
Для Каждого ТекСтр из тблДвижений Цикл
Если ТекСтр.НомерСтроки<5 Тогда
Сообщить(""+ТекСтр.ПараметрВыработки + " " + ТекСтр.Количество);
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
ПоказатьТолько некоторые строки:
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ПараметрыВыработки", !ЗначениПараметрыВыработки);
ПараметрыОтбора.Вставить("Количество", 0);
МассивСтрок = тблДвижений.НайтиСтроки(ПараметрыОтбора);
Если МассивСтрок.Количество()>0 Тогда
Для Каждого ТекСтр из МассивСтрок Цикл
Сообщить(""+ТекСтр.ПараметрыВыработки + " " + ТекСтр.Количество);
КонецЦикла;
Иначе
Сообщить("Ничего не нашли!");
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот