1С 8.3 Данные формы коллекции
Данные > Примеры кода 1С > 1С 8.3 Форма, элементы
Перейти в раздел примеры кода 1С 8.3:
Заполнить Табличную часть в 1С 8.3:
&НаКлиенте
Процедура ЗаполнитьТЧ(Команда)
ГСЧ = Новый ГенераторСлучайныхЧисел();
Для Счетчик =0 По 4 Цикл
СтрокаТЧ = Объект.ТЧТовары.Добавить();
СтрокаТЧ.Номенклатура = "Товар " + (Счетчик+1);
СтрокаТЧ.Цена = ГСЧ.СлучайноеЧисло(1, 1000);
СтрокаТЧ.Количество = ГСЧ.СлучайноеЧисло(1, 100);
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТЧ(Команда)
ГСЧ = Новый ГенераторСлучайныхЧисел();
Для Счетчик =0 По 4 Цикл
СтрокаТЧ = Объект.ТЧТовары.Добавить();
СтрокаТЧ.Номенклатура = "Товар " + (Счетчик+1);
СтрокаТЧ.Цена = ГСЧ.СлучайноеЧисло(1, 1000);
СтрокаТЧ.Количество = ГСЧ.СлучайноеЧисло(1, 100);
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
КонецЦикла;
КонецПроцедуры
Работа с отдельными строками Табличной части в 1С 8.3:
//1.Добавить строку
&НаКлиенте
Процедура ДобавитьСтроку(Команда)
Объект.ТЧТовары.Добавить();
КонецПроцедуры
//2. Добавить строки
&НаКлиенте
Процедура ДобавитьСтроки(Команда)
Если КоличествоСтрок > 0 Тогда
Для Сч = 1 По КоличествоСтрок Цикл
Объект.ТЧТовары.Добавить();
КонецЦикла;
Иначе
Сообщить("Введите ""Количество строк""");
КонецЕсли;
КонецПроцедуры
//3. Вставить пустую строку
&НаКлиенте
Процедура ВставитьПустуюСтроку(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
ИначеЕсли НомерПустойВставляемойСтроки = 0 Или
НомерПустойВставляемойСтроки > Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверный номер строки. Введите ""Вставить пустую строку №"" от 1 до " +Объект.ТЧТовары.Количество());
Иначе
Объект.ТЧТовары.Вставить(НомерПустойВставляемойСтроки - 1);
КонецЕсли;
КонецПроцедуры
//4. Вставить строку с данными
&НаКлиенте
Процедура ВставитьСтрокуСДанными(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
ИначеЕсли НомерКопируемойСтроки = 0 Или НомерКопируемойСтроки > Объект.ТЧТовары.Количество() Тогда
Сообщить("Введите номер копируемой строки от 1 до " + Объект.ТЧТовары.Количество() + " в поле ""Строку №""");
ИначеЕсли НомерСтрокиВставки = 0 Или НомерСтрокиВставки > Объект.ТЧТовары.Количество()Тогда
Сообщить("Введите номер вставляемой строки от 1 до " + Объект.ТЧТовары.Количество() + " в поле ""вставить в строку №""");
Иначе
//Вставка пустой строки и заполнение ее нужными данными
ВставляемаяСтрока = Объект.ТЧТовары[НомерКопируемойСтроки - 1];
МестоВставкиСтроки = Объект.ТЧТовары.Вставить(НомерСтрокиВставки - 1);
МестоВставкиСтроки.Номенклатура = ВставляемаяСтрока.Номенклатура;
МестоВставкиСтроки.Цена = ВставляемаяСтрока.Цена;
МестоВставкиСтроки.Количество = ВставляемаяСтрока.Количество;
МестоВставкиСтроки.Сумма = ВставляемаяСтрока.Сумма;
КонецЕсли;
КонецПроцедуры
//5. Сдвинуть строку
&НаКлиенте
Процедура СдвинутьСтроку(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
ИначеЕсли НомерСдвигаемойСтроки = 0 Или НомерСдвигаемойСтроки> Объект.ТЧТовары.Количество()Тогда
Сообщить("Введите номер сдвигаемой строки от 1 до " + Объект.ТЧТовары.Количество() + " в поле ""Строку №""");
Возврат;
ИначеЕсли НаправлениеСдвига = "" Тогда
Сообщить("Выберите направление сдвига: в начало или конец");
Возврат;
КонецЕсли;
//Проверки по реквизиту Начало-Конец в зависимости от введенных данных или сдвиг или предупреждение Пользователю
Если НаправлениеСдвига = "Начало" Тогда
НаправлениеСдвига = -1*(ПозицияСдвигаемойСтроки);
Если НомерСдвигаемойСтроки - 1 + НаправлениеСдвига < 0 Тогда
Сообщить("Неверные данные.Строку № " + НомерСдвигаемойСтроки + " нельзя сдвинуть в начало больше, чем на " + (НомерСдвигаемойСтроки -1));
&НаКлиенте
Процедура ДобавитьСтроку(Команда)
Объект.ТЧТовары.Добавить();
КонецПроцедуры
//2. Добавить строки
&НаКлиенте
Процедура ДобавитьСтроки(Команда)
Если КоличествоСтрок > 0 Тогда
Для Сч = 1 По КоличествоСтрок Цикл
Объект.ТЧТовары.Добавить();
КонецЦикла;
Иначе
Сообщить("Введите ""Количество строк""");
КонецЕсли;
КонецПроцедуры
//3. Вставить пустую строку
&НаКлиенте
Процедура ВставитьПустуюСтроку(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
ИначеЕсли НомерПустойВставляемойСтроки = 0 Или
НомерПустойВставляемойСтроки > Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверный номер строки. Введите ""Вставить пустую строку №"" от 1 до " +Объект.ТЧТовары.Количество());
Иначе
Объект.ТЧТовары.Вставить(НомерПустойВставляемойСтроки - 1);
КонецЕсли;
КонецПроцедуры
//4. Вставить строку с данными
&НаКлиенте
Процедура ВставитьСтрокуСДанными(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
ИначеЕсли НомерКопируемойСтроки = 0 Или НомерКопируемойСтроки > Объект.ТЧТовары.Количество() Тогда
Сообщить("Введите номер копируемой строки от 1 до " + Объект.ТЧТовары.Количество() + " в поле ""Строку №""");
ИначеЕсли НомерСтрокиВставки = 0 Или НомерСтрокиВставки > Объект.ТЧТовары.Количество()Тогда
Сообщить("Введите номер вставляемой строки от 1 до " + Объект.ТЧТовары.Количество() + " в поле ""вставить в строку №""");
Иначе
//Вставка пустой строки и заполнение ее нужными данными
ВставляемаяСтрока = Объект.ТЧТовары[НомерКопируемойСтроки - 1];
МестоВставкиСтроки = Объект.ТЧТовары.Вставить(НомерСтрокиВставки - 1);
МестоВставкиСтроки.Номенклатура = ВставляемаяСтрока.Номенклатура;
МестоВставкиСтроки.Цена = ВставляемаяСтрока.Цена;
МестоВставкиСтроки.Количество = ВставляемаяСтрока.Количество;
МестоВставкиСтроки.Сумма = ВставляемаяСтрока.Сумма;
КонецЕсли;
КонецПроцедуры
//5. Сдвинуть строку
&НаКлиенте
Процедура СдвинутьСтроку(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
ИначеЕсли НомерСдвигаемойСтроки = 0 Или НомерСдвигаемойСтроки> Объект.ТЧТовары.Количество()Тогда
Сообщить("Введите номер сдвигаемой строки от 1 до " + Объект.ТЧТовары.Количество() + " в поле ""Строку №""");
Возврат;
ИначеЕсли НаправлениеСдвига = "" Тогда
Сообщить("Выберите направление сдвига: в начало или конец");
Возврат;
КонецЕсли;
//Проверки по реквизиту Начало-Конец в зависимости от введенных данных или сдвиг или предупреждение Пользователю
Если НаправлениеСдвига = "Начало" Тогда
НаправлениеСдвига = -1*(ПозицияСдвигаемойСтроки);
Если НомерСдвигаемойСтроки - 1 + НаправлениеСдвига < 0 Тогда
Сообщить("Неверные данные.Строку № " + НомерСдвигаемойСтроки + " нельзя сдвинуть в начало больше, чем на " + (НомерСдвигаемойСтроки -1));
Возврат;
КонецЕсли;
ИначеЕсли НаправлениеСдвига = "Конец" Тогда
НаправлениеСдвига = ПозицияСдвигаемойСтроки;
Если НомерСдвигаемойСтроки - 1 + НаправлениеСдвига > Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверные данные.Строку № " + НомерСдвигаемойСтроки + " нельзя сдвинуть в конец больше, чем на " +
(Объект.ТЧТовары.Количество() - НомерСдвигаемойСтроки));
Возврат;
КонецЕсли;
КонецЕсли;
Объект.ТЧТовары.Сдвинуть(НомерСдвигаемойСтроки - 1,НаправлениеСдвига)
КонецПроцедуры
//6. Удалить строку по индексу
&НаКлиенте
Процедура УдалитьСтрокуПоИндексу(Команда)
//Проверки на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
Если ИндексСтроки > Объект.ТЧТовары.Количество()-1 Тогда
Сообщить("Неверный Индекс. Введите значение Индекса от 0 до " + (Объект.ТЧТовары.Количество()-1));
Иначе
Объект.ТЧТовары.Удалить(ИндексСтроки);
КонецЕсли;
КонецПроцедуры
//7. Удалить строку по номенклатуре
&НаКлиенте
Процедура УдалитьПоНоменклатуре(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
ИначеЕсли Номенклатура = "" Тогда
Сообщить("Заполните поле ""Номенклатура""");
Возврат;
Иначе
//Создание структуры для отбора по значению Номенлатура
Отбор = Новый Структура("Номенклатура",Номенклатура);
МассивСтрок = Объект.ТЧТовары.НайтиСтроки(Отбор);
КонецЕсли;
//Проверка на наличие строк в ТЧ по избранным параметрам
Если МассивСтрок.Количество() = 0 Тогда
Сообщить("Нет строк с таким товаром");
Иначе
//При заполненном массиве (такие строки есть) - циклом в цикле удаляю строки из ТЧ
Для Каждого СтрокаМассива Из МассивСтрок Цикл
Для Каждого Строка Из Объект.ТЧТовары Цикл
Если Строка = СтрокаМассива Тогда
Объект.ТЧТовары.Удалить(Строка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
КонецЕсли;
ИначеЕсли НаправлениеСдвига = "Конец" Тогда
НаправлениеСдвига = ПозицияСдвигаемойСтроки;
Если НомерСдвигаемойСтроки - 1 + НаправлениеСдвига > Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверные данные.Строку № " + НомерСдвигаемойСтроки + " нельзя сдвинуть в конец больше, чем на " +
(Объект.ТЧТовары.Количество() - НомерСдвигаемойСтроки));
Возврат;
КонецЕсли;
КонецЕсли;
Объект.ТЧТовары.Сдвинуть(НомерСдвигаемойСтроки - 1,НаправлениеСдвига)
КонецПроцедуры
//6. Удалить строку по индексу
&НаКлиенте
Процедура УдалитьСтрокуПоИндексу(Команда)
//Проверки на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
Если ИндексСтроки > Объект.ТЧТовары.Количество()-1 Тогда
Сообщить("Неверный Индекс. Введите значение Индекса от 0 до " + (Объект.ТЧТовары.Количество()-1));
Иначе
Объект.ТЧТовары.Удалить(ИндексСтроки);
КонецЕсли;
КонецПроцедуры
//7. Удалить строку по номенклатуре
&НаКлиенте
Процедура УдалитьПоНоменклатуре(Команда)
//Проверки на заполненность ТЧ и реквизитов
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
ИначеЕсли Номенклатура = "" Тогда
Сообщить("Заполните поле ""Номенклатура""");
Возврат;
Иначе
//Создание структуры для отбора по значению Номенлатура
Отбор = Новый Структура("Номенклатура",Номенклатура);
МассивСтрок = Объект.ТЧТовары.НайтиСтроки(Отбор);
КонецЕсли;
//Проверка на наличие строк в ТЧ по избранным параметрам
Если МассивСтрок.Количество() = 0 Тогда
Сообщить("Нет строк с таким товаром");
Иначе
//При заполненном массиве (такие строки есть) - циклом в цикле удаляю строки из ТЧ
Для Каждого СтрокаМассива Из МассивСтрок Цикл
Для Каждого Строка Из Объект.ТЧТовары Цикл
Если Строка = СтрокаМассива Тогда
Объект.ТЧТовары.Удалить(Строка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Работа с данными в Табличной части в 1С 8.3:
//1. Получить индекс строки по значению ячейки (в данном случае в зависимости от значения Количество)
&НаКлиенте
Процедура ПолучитьИндекс(Команда)
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//если ставить тип Число в ячейке ответа , изначально выдает ответ как "0",потому тип Произвольный
//Значение Неопределено нужно, чтобы удалял результаты предыдущего поиска.
ИндексПоКоличествуВСтроке = Неопределено;
Для Каждого Строка Из Объект.ТЧТовары Цикл
//Поиск строки по параметру
Если Строка.Количество = КоличествоВСтрокеДляПоискаИндекса Тогда
ИндексПоКоличествуВСтроке = Объект.ТЧТовары.Индекс(Строка);
КонецЕсли;
КонецЦикла;
//Проверка на наличие строки и сообщение Пользователю в случае ее отсутствия
Если ИндексПоКоличествуВСтроке = Неопределено Тогда
Сообщить("Нет строки с таким количеством товара");
КонецЕсли;
КонецПроцедуры
//2. Получить количество строк в ТЧ
&НаКлиенте
Процедура УзнатьКоличествоСтрок(Команда)
//Для очищения результата предыдущего выполнения команды
КоличествоСтрок = Неопределено;
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Иначе
КоличествоСтрок = Объект.ТЧТовары.Количество();
КонецЕсли;
КонецПроцедуры
//3. Получить строку по индексу
&НаКлиенте
Процедура ПолучитьСтрокуПоИндексу(Команда)
//Очистка ТЧ результат для понятного результата
Объект.ТЧРезультат.Очистить();
//Проверки на заполненность
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
ИначеЕсли СтрокуПоИндексу >= Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверный номер индекса. Введите в поле""Индекс строки"" число от 0 до "
+ (Объект.ТЧТовары.Количество()-1));
//Получение строки по индексу и помещение в ТЧ Результат
Иначе
СтрокаТЧТовары = Объект.ТЧТовары.Получить(СтрокуПоИндексу);
СтрокаРезультат = Объект.ТЧРезультат.Добавить();
СтрокаРезультат.Номенклатура = СтрокаТЧТовары.Номенклатура;
СтрокаРезультат.Цена = СтрокаТЧТовары.Цена;
СтрокаРезультат.Количество = СтрокаТЧТовары.Количество;
СтрокаРезультат.Сумма = СтрокаТЧТовары.Сумма;
КонецЕсли;
КонецПроцедуры
//4. Посчитать итог
&НаКлиенте
Процедура ПосчитатьИтог(Команда)
//Очистка результата предыдущих команд
ИтоговаяСумма = Неопределено;
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Иначе
ИтоговаяСумма = Объект.ТЧТовары.Итог("Сумма");
КонецЕсли;
КонецПроцедуры
//5. Найти строки
&НаКлиенте
Процедура НайтиСтроки(Команда)
//Очистка ТЧ результат для понятного результата
Объект.ТЧРезультат.Очистить();
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка на выбор списка параметров для поиска
Если НайтиПоНоменклатуре = Ложь И
НайтиПоЦене = Ложь И
НайтиПоКоличеству = Ложь И
НайтиПоСумме = Ложь Тогда
Сообщить("Отметьте хотя бы один Параметр поиска (Номенклатура,Цена, Количество, Сумма)");
Возврат;
КонецЕсли;
//Создание структуры для команды найти и проверка правильности заполнения данных
СтруктураПоиска = Новый Структура();
Если НайтиПоНоменклатуре = Истина И
НайтиПоНоменклатуреЗначение<> "" Тогда
СтруктураПоиска.Вставить("Номенклатура",НайтиПоНоменклатуреЗначение);
ИначеЕсли
НайтиПоНоменклатуре = Ложь И
НайтиПоНоменклатуреЗначение<> "" Или
НайтиПоНоменклатуре = Истина И
НайтиПоНоменклатуреЗначение = ""Тогда
Сообщить("Заполните (очистите) Значение Номенклатуры или снимите (поставьте) отметку ""Номенклатура""");
Возврат;
КонецЕсли;
Если НайтиПоЦене = Истина И
НайтиПоЦенеЗначение <> 0 Тогда
СтруктураПоиска.Вставить("Цена",НайтиПоЦенеЗначение);
ИначеЕсли
НайтиПоЦене = Ложь И
НайтиПоЦенеЗначение <> 0 Или
НайтиПоЦене = Истина И
НайтиПоЦенеЗначение = 0 Тогда
Сообщить("Заполните (очистите) Значение Цена или снимите (поставьте) отметку ""Цена""");
Возврат;
КонецЕсли;
Если НайтиПоКоличеству = Истина И
НайтиПоКоличествуЗначение <> 0 Тогда
СтруктураПоиска.Вставить("Количество",НайтиПоКоличествуЗначение);
ИначеЕсли
НайтиПоКоличеству = Ложь И
НайтиПоКоличествуЗначение <> 0 Или
НайтиПоКоличеству = Истина И
НайтиПоКоличествуЗначение = 0 Тогда
Сообщить("Заполните (очистите) Значение Количество или снимите (поставьте) отметку ""Количество""");
Возврат;
КонецЕсли;
Если НайтиПоСумме = Истина И
НайтиПоСуммеЗначение <> 0 Тогда
СтруктураПоиска.Вставить("Сумма",НайтиПоСуммеЗначение);
ИначеЕсли
НайтиПоСумме = Ложь И
НайтиПоСуммеЗначение <> 0 Или
НайтиПоСумме = Истина И
НайтиПоСуммеЗначение = 0 Тогда
Сообщить("Заполните (очистите) Значение Сумма или снимите (поставьте) отметку ""Сумма""");
Возврат;
КонецЕсли;
//Формирование массива из найденных строк, соответствующих выбранным параметрам
МассивНайденныхСтрок = Объект.ТЧТовары.НайтиСтроки(СтруктураПоиска);
//Проверка на наличие искомых строк
Если МассивНайденныхСтрок.Количество() = 0 Тогда
Сообщить("Нет строк с такими значениями");
Иначе
//Добавление строк в ТЧ Результат
Для Каждого Элемент Из МассивНайденныхСтрок Цикл
СтрокаТЧРезультат = Объект.ТЧРезультат.Добавить();
СтрокаТЧРезультат.Номенклатура = Элемент.Номенклатура;
СтрокаТЧРезультат.Цена = Элемент.Цена;
СтрокаТЧРезультат.Количество = Элемент.Количество;
СтрокаТЧРезультат.Сумма = Элемент.Сумма;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьИндекс(Команда)
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//если ставить тип Число в ячейке ответа , изначально выдает ответ как "0",потому тип Произвольный
//Значение Неопределено нужно, чтобы удалял результаты предыдущего поиска.
ИндексПоКоличествуВСтроке = Неопределено;
Для Каждого Строка Из Объект.ТЧТовары Цикл
//Поиск строки по параметру
Если Строка.Количество = КоличествоВСтрокеДляПоискаИндекса Тогда
ИндексПоКоличествуВСтроке = Объект.ТЧТовары.Индекс(Строка);
КонецЕсли;
КонецЦикла;
//Проверка на наличие строки и сообщение Пользователю в случае ее отсутствия
Если ИндексПоКоличествуВСтроке = Неопределено Тогда
Сообщить("Нет строки с таким количеством товара");
КонецЕсли;
КонецПроцедуры
//2. Получить количество строк в ТЧ
&НаКлиенте
Процедура УзнатьКоличествоСтрок(Команда)
//Для очищения результата предыдущего выполнения команды
КоличествоСтрок = Неопределено;
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Иначе
КоличествоСтрок = Объект.ТЧТовары.Количество();
КонецЕсли;
КонецПроцедуры
//3. Получить строку по индексу
&НаКлиенте
Процедура ПолучитьСтрокуПоИндексу(Команда)
//Очистка ТЧ результат для понятного результата
Объект.ТЧРезультат.Очистить();
//Проверки на заполненность
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
ИначеЕсли СтрокуПоИндексу >= Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверный номер индекса. Введите в поле""Индекс строки"" число от 0 до "
+ (Объект.ТЧТовары.Количество()-1));
//Получение строки по индексу и помещение в ТЧ Результат
Иначе
СтрокаТЧТовары = Объект.ТЧТовары.Получить(СтрокуПоИндексу);
СтрокаРезультат = Объект.ТЧРезультат.Добавить();
СтрокаРезультат.Номенклатура = СтрокаТЧТовары.Номенклатура;
СтрокаРезультат.Цена = СтрокаТЧТовары.Цена;
СтрокаРезультат.Количество = СтрокаТЧТовары.Количество;
СтрокаРезультат.Сумма = СтрокаТЧТовары.Сумма;
КонецЕсли;
КонецПроцедуры
//4. Посчитать итог
&НаКлиенте
Процедура ПосчитатьИтог(Команда)
//Очистка результата предыдущих команд
ИтоговаяСумма = Неопределено;
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Иначе
ИтоговаяСумма = Объект.ТЧТовары.Итог("Сумма");
КонецЕсли;
КонецПроцедуры
//5. Найти строки
&НаКлиенте
Процедура НайтиСтроки(Команда)
//Очистка ТЧ результат для понятного результата
Объект.ТЧРезультат.Очистить();
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка на выбор списка параметров для поиска
Если НайтиПоНоменклатуре = Ложь И
НайтиПоЦене = Ложь И
НайтиПоКоличеству = Ложь И
НайтиПоСумме = Ложь Тогда
Сообщить("Отметьте хотя бы один Параметр поиска (Номенклатура,Цена, Количество, Сумма)");
Возврат;
КонецЕсли;
//Создание структуры для команды найти и проверка правильности заполнения данных
СтруктураПоиска = Новый Структура();
Если НайтиПоНоменклатуре = Истина И
НайтиПоНоменклатуреЗначение<> "" Тогда
СтруктураПоиска.Вставить("Номенклатура",НайтиПоНоменклатуреЗначение);
ИначеЕсли
НайтиПоНоменклатуре = Ложь И
НайтиПоНоменклатуреЗначение<> "" Или
НайтиПоНоменклатуре = Истина И
НайтиПоНоменклатуреЗначение = ""Тогда
Сообщить("Заполните (очистите) Значение Номенклатуры или снимите (поставьте) отметку ""Номенклатура""");
Возврат;
КонецЕсли;
Если НайтиПоЦене = Истина И
НайтиПоЦенеЗначение <> 0 Тогда
СтруктураПоиска.Вставить("Цена",НайтиПоЦенеЗначение);
ИначеЕсли
НайтиПоЦене = Ложь И
НайтиПоЦенеЗначение <> 0 Или
НайтиПоЦене = Истина И
НайтиПоЦенеЗначение = 0 Тогда
Сообщить("Заполните (очистите) Значение Цена или снимите (поставьте) отметку ""Цена""");
Возврат;
КонецЕсли;
Если НайтиПоКоличеству = Истина И
НайтиПоКоличествуЗначение <> 0 Тогда
СтруктураПоиска.Вставить("Количество",НайтиПоКоличествуЗначение);
ИначеЕсли
НайтиПоКоличеству = Ложь И
НайтиПоКоличествуЗначение <> 0 Или
НайтиПоКоличеству = Истина И
НайтиПоКоличествуЗначение = 0 Тогда
Сообщить("Заполните (очистите) Значение Количество или снимите (поставьте) отметку ""Количество""");
Возврат;
КонецЕсли;
Если НайтиПоСумме = Истина И
НайтиПоСуммеЗначение <> 0 Тогда
СтруктураПоиска.Вставить("Сумма",НайтиПоСуммеЗначение);
ИначеЕсли
НайтиПоСумме = Ложь И
НайтиПоСуммеЗначение <> 0 Или
НайтиПоСумме = Истина И
НайтиПоСуммеЗначение = 0 Тогда
Сообщить("Заполните (очистите) Значение Сумма или снимите (поставьте) отметку ""Сумма""");
Возврат;
КонецЕсли;
//Формирование массива из найденных строк, соответствующих выбранным параметрам
МассивНайденныхСтрок = Объект.ТЧТовары.НайтиСтроки(СтруктураПоиска);
//Проверка на наличие искомых строк
Если МассивНайденныхСтрок.Количество() = 0 Тогда
Сообщить("Нет строк с такими значениями");
Иначе
//Добавление строк в ТЧ Результат
Для Каждого Элемент Из МассивНайденныхСтрок Цикл
СтрокаТЧРезультат = Объект.ТЧРезультат.Добавить();
СтрокаТЧРезультат.Номенклатура = Элемент.Номенклатура;
СтрокаТЧРезультат.Цена = Элемент.Цена;
СтрокаТЧРезультат.Количество = Элемент.Количество;
СтрокаТЧРезультат.Сумма = Элемент.Сумма;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Работа со всей Табличной частью в 1С 8.3:
//1. Сортировать
&НаКлиенте
Процедура Сортировать(Команда)
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка на заполнение данных
Если СортироватьПоКолонке = "" Или СортироватьНаправление = "" Тогда
Сообщить("Выберите колонку и направление для сортировки данных");
Иначе
Объект.ТЧТовары.Сортировать(СортироватьПоКолонке + " " + СортироватьНаправление);
КонецЕсли;
КонецПроцедуры
//2. Загрузить строки по номеру
&НаКлиенте
Процедура ЗагрузитьСтрокиПоНомеру(Команда)
//Очистить Табличную часть с результатами
Объект.ТЧРезультат.Очистить();
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка заполнения Пользователем колонок на Отбор
Если ЗагрузитьСтрокиПоНомеруКолонкаНоменклатура = Ложь И
ЗагрузитьСтрокиПоНомеруКолонкаЦена = Ложь И
ЗагрузитьСтрокиПоНомеруКолонкаКоличество = Ложь И
ЗагрузитьСтрокиПоНомеруКолонкаСумма = Ложь Тогда
Сообщить("Выберите Наименования колонок для отбора");
Возврат;
Иначе
//Создание Массива из наименований колонок для формирования Параметра для Метода Выгрузить()
МассивКолонок = Новый Массив;
//Заполнение массива колонками, которые выбрал Пользователь
Если ЗагрузитьСтрокиПоНомеруКолонкаНоменклатура = Истина Тогда
МассивКолонок.Добавить("Номенклатура");
КонецЕсли;
Если ЗагрузитьСтрокиПоНомеруКолонкаЦена = Истина Тогда
МассивКолонок.Добавить("Цена");
КонецЕсли;
Если ЗагрузитьСтрокиПоНомеруКолонкаКоличество = Истина Тогда
МассивКолонок.Добавить("Количество");
КонецЕсли;
Если ЗагрузитьСтрокиПоНомеруКолонкаСумма = Истина Тогда
МассивКолонок.Добавить("Сумма");
КонецЕсли;
//Формирование строки для параметра Колонки в методе Выгрузить
Колонки = СтрСоединить(МассивКолонок,", ");
КонецЕсли;
ЗагрузитьСтрокиПоНомеруНаСервере(Колонки);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьСтрокиПоНомеруНаСервере(Колонки)
//Формирование Массива для параметра в методе Выгрузить
//1.Проверка на заполнение реквизита НомераСтрок
Если ЗагрузитьСтрокиПоНомеруНомерСтроки = "" Тогда
//Если номера строк не заполняются, нужно вывести все строки, потому параметр в Загрузить не нужен,
//поэтому
МассивСтрокТЧТовары = Неопределено;
Иначе
//2. Формирование Массива с номерами строк, указанных Пользователем
МассивНомеровСтрокТЧТовары = СтрРазделить(ЗагрузитьСтрокиПоНомеруНомерСтроки,", ",Ложь);
//3. Создание массива нужных строк ТЧТовары
МассивСтрокТЧТовары = Новый Массив;
//4. Заполнение массива нужными строками
Для Каждого Элемент Из МассивНомеровСтрокТЧТовары Цикл
//Проверка на корректность заполнения номера строки
Если Число(Элемент) > Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверно заполнены Номера строк. Строки № " + Элемент + " нет в Табличной части.
| Номер строки может быть только в диапазоне от 1 до " + Объект.ТЧТовары.Количество());
Возврат;
Иначе
МассивСтрокТЧТовары.Добавить(Объект.ТЧТовары[Число(Элемент-1)]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
//Выгрузка ТабличнойЧасти по параметрам, которые выбрал Пользователь, в ТЗ (УКЗ)
ТабЗнач = Объект.ТЧТовары.Выгрузить(МассивСтрокТЧТовары,Колонки);
// Загрузка из ТЗ в ТЧРезультат новой Табличной части
Объект.ТЧРезультат.Загрузить(ТабЗнач);
КонецПроцедуры
//3. Загрузить строки по отбору
&НаКлиенте
Процедура ЗагрузитьСтрокиПоОтбору(Команда)
//Очистить Табличную часть с результатами
Объект.ТЧРезультат.Очистить();
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка на заполненность реквизитов по отбору. Если пустые - копирование всех строк,
//если есть выбранные - создаем Структуру отбора
Если ЗагрузитьСтрокиПоОтборуНоменклатура = "" И
ЗагрузитьСтрокиПоОтборуЦена = 0 И
ЗагрузитьСтрокиПоОтборуКоличество = 0 И
ЗагрузитьСтрокиПоОтборуСумма = 0 Тогда
ПараметрыОтбора = Неопределено;
Иначе
ПараметрыОтбора = Новый Структура;
КонецЕсли;
//Заполнение Структуры для формирования для метода Выгрузить()
Если ЗагрузитьСтрокиПоОтборуНоменклатура <> "" Тогда
ПараметрыОтбора.Вставить("Номенклатура",ЗагрузитьСтрокиПоОтборуНоменклатура);
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуЦена <> 0 Тогда
ПараметрыОтбора.Вставить("Цена",ЗагрузитьСтрокиПоОтборуЦена);
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКоличество <> 0 Тогда
ПараметрыОтбора.Вставить("Количество",ЗагрузитьСтрокиПоОтборуКоличество);
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуСумма <> 0 Тогда
ПараметрыОтбора.Вставить("Сумма",ЗагрузитьСтрокиПоОтборуСумма);
КонецЕсли;
//Проверка на Отбор колонок Пользователем
Если ЗагрузитьСтрокиПоОтборуКолонкаНоменклатура = Ложь И
ЗагрузитьСтрокиПоОтборуКолонкаЦена = Ложь И
ЗагрузитьСтрокиПоОтборуКолонкаКоличество = Ложь И
ЗагрузитьСтрокиПоОтборуКолонкаСумма = Ложь Тогда
Сообщить("Выберите Наименования колонок для отбора");
Возврат;
Иначе
//Создание Массива из наименований колонок
МассивКолонок = Новый Массив;
//Заполнение массива колонками, которые выбрал Пользователь
Если ЗагрузитьСтрокиПоОтборуКолонкаНоменклатура = Истина Тогда
МассивКолонок.Добавить("Номенклатура");
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКолонкаЦена = Истина Тогда
МассивКолонок.Добавить("Цена");
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКолонкаКоличество = Истина Тогда
МассивКолонок.Добавить("Количество");
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКолонкаСумма = Истина Тогда
МассивКолонок.Добавить("Сумма");
КонецЕсли;
//Формирование строки для параметра Колонки в методе Выгрузить
Колонки = СтрСоединить(МассивКолонок,", ");
КонецЕсли;
//Передача на сервер параметров и
ЗагрузитьСтрокиПоОтборуНаСервере(ПараметрыОтбора, Колонки);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьСтрокиПоОтборуНаСервере(ПараметрыОтбора, Колонки)
//Выгрузка ТабличнойЧасти по параметрам, которые выбрал Пользователь, в ТЗ (УКЗ)
ТабЗнач = Объект.ТЧТовары.Выгрузить(ПараметрыОтбора,Колонки);
Если ТабЗнач.Количество() = 0 Тогда
Сообщить("Нет строк, удовлетворяющих таким параметрам");
Иначе
// Загрузка из ТЗ в ТЧРезультат новой Табличной части
Объект.ТЧРезультат.Загрузить(ТабЗнач);
КонецЕсли;
КонецПроцедуры
//4. Очистить
&НаКлиенте
Процедура ОчиститьТабличнуюЧасть(Команда)
Объект.ТЧТовары.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура Сортировать(Команда)
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка на заполнение данных
Если СортироватьПоКолонке = "" Или СортироватьНаправление = "" Тогда
Сообщить("Выберите колонку и направление для сортировки данных");
Иначе
Объект.ТЧТовары.Сортировать(СортироватьПоКолонке + " " + СортироватьНаправление);
КонецЕсли;
КонецПроцедуры
//2. Загрузить строки по номеру
&НаКлиенте
Процедура ЗагрузитьСтрокиПоНомеру(Команда)
//Очистить Табличную часть с результатами
Объект.ТЧРезультат.Очистить();
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка заполнения Пользователем колонок на Отбор
Если ЗагрузитьСтрокиПоНомеруКолонкаНоменклатура = Ложь И
ЗагрузитьСтрокиПоНомеруКолонкаЦена = Ложь И
ЗагрузитьСтрокиПоНомеруКолонкаКоличество = Ложь И
ЗагрузитьСтрокиПоНомеруКолонкаСумма = Ложь Тогда
Сообщить("Выберите Наименования колонок для отбора");
Возврат;
Иначе
//Создание Массива из наименований колонок для формирования Параметра для Метода Выгрузить()
МассивКолонок = Новый Массив;
//Заполнение массива колонками, которые выбрал Пользователь
Если ЗагрузитьСтрокиПоНомеруКолонкаНоменклатура = Истина Тогда
МассивКолонок.Добавить("Номенклатура");
КонецЕсли;
Если ЗагрузитьСтрокиПоНомеруКолонкаЦена = Истина Тогда
МассивКолонок.Добавить("Цена");
КонецЕсли;
Если ЗагрузитьСтрокиПоНомеруКолонкаКоличество = Истина Тогда
МассивКолонок.Добавить("Количество");
КонецЕсли;
Если ЗагрузитьСтрокиПоНомеруКолонкаСумма = Истина Тогда
МассивКолонок.Добавить("Сумма");
КонецЕсли;
//Формирование строки для параметра Колонки в методе Выгрузить
Колонки = СтрСоединить(МассивКолонок,", ");
КонецЕсли;
ЗагрузитьСтрокиПоНомеруНаСервере(Колонки);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьСтрокиПоНомеруНаСервере(Колонки)
//Формирование Массива для параметра в методе Выгрузить
//1.Проверка на заполнение реквизита НомераСтрок
Если ЗагрузитьСтрокиПоНомеруНомерСтроки = "" Тогда
//Если номера строк не заполняются, нужно вывести все строки, потому параметр в Загрузить не нужен,
//поэтому
МассивСтрокТЧТовары = Неопределено;
Иначе
//2. Формирование Массива с номерами строк, указанных Пользователем
МассивНомеровСтрокТЧТовары = СтрРазделить(ЗагрузитьСтрокиПоНомеруНомерСтроки,", ",Ложь);
//3. Создание массива нужных строк ТЧТовары
МассивСтрокТЧТовары = Новый Массив;
//4. Заполнение массива нужными строками
Для Каждого Элемент Из МассивНомеровСтрокТЧТовары Цикл
//Проверка на корректность заполнения номера строки
Если Число(Элемент) > Объект.ТЧТовары.Количество() Тогда
Сообщить("Неверно заполнены Номера строк. Строки № " + Элемент + " нет в Табличной части.
| Номер строки может быть только в диапазоне от 1 до " + Объект.ТЧТовары.Количество());
Возврат;
Иначе
МассивСтрокТЧТовары.Добавить(Объект.ТЧТовары[Число(Элемент-1)]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
//Выгрузка ТабличнойЧасти по параметрам, которые выбрал Пользователь, в ТЗ (УКЗ)
ТабЗнач = Объект.ТЧТовары.Выгрузить(МассивСтрокТЧТовары,Колонки);
// Загрузка из ТЗ в ТЧРезультат новой Табличной части
Объект.ТЧРезультат.Загрузить(ТабЗнач);
КонецПроцедуры
//3. Загрузить строки по отбору
&НаКлиенте
Процедура ЗагрузитьСтрокиПоОтбору(Команда)
//Очистить Табличную часть с результатами
Объект.ТЧРезультат.Очистить();
//Проверка на заполненность ТЧ
Если Объект.ТЧТовары.Количество() = 0 Тогда
Сообщить("Сначала заполните Табличную Часть");
Возврат;
КонецЕсли;
//Проверка на заполненность реквизитов по отбору. Если пустые - копирование всех строк,
//если есть выбранные - создаем Структуру отбора
Если ЗагрузитьСтрокиПоОтборуНоменклатура = "" И
ЗагрузитьСтрокиПоОтборуЦена = 0 И
ЗагрузитьСтрокиПоОтборуКоличество = 0 И
ЗагрузитьСтрокиПоОтборуСумма = 0 Тогда
ПараметрыОтбора = Неопределено;
Иначе
ПараметрыОтбора = Новый Структура;
КонецЕсли;
//Заполнение Структуры для формирования для метода Выгрузить()
Если ЗагрузитьСтрокиПоОтборуНоменклатура <> "" Тогда
ПараметрыОтбора.Вставить("Номенклатура",ЗагрузитьСтрокиПоОтборуНоменклатура);
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуЦена <> 0 Тогда
ПараметрыОтбора.Вставить("Цена",ЗагрузитьСтрокиПоОтборуЦена);
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКоличество <> 0 Тогда
ПараметрыОтбора.Вставить("Количество",ЗагрузитьСтрокиПоОтборуКоличество);
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуСумма <> 0 Тогда
ПараметрыОтбора.Вставить("Сумма",ЗагрузитьСтрокиПоОтборуСумма);
КонецЕсли;
//Проверка на Отбор колонок Пользователем
Если ЗагрузитьСтрокиПоОтборуКолонкаНоменклатура = Ложь И
ЗагрузитьСтрокиПоОтборуКолонкаЦена = Ложь И
ЗагрузитьСтрокиПоОтборуКолонкаКоличество = Ложь И
ЗагрузитьСтрокиПоОтборуКолонкаСумма = Ложь Тогда
Сообщить("Выберите Наименования колонок для отбора");
Возврат;
Иначе
//Создание Массива из наименований колонок
МассивКолонок = Новый Массив;
//Заполнение массива колонками, которые выбрал Пользователь
Если ЗагрузитьСтрокиПоОтборуКолонкаНоменклатура = Истина Тогда
МассивКолонок.Добавить("Номенклатура");
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКолонкаЦена = Истина Тогда
МассивКолонок.Добавить("Цена");
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКолонкаКоличество = Истина Тогда
МассивКолонок.Добавить("Количество");
КонецЕсли;
Если ЗагрузитьСтрокиПоОтборуКолонкаСумма = Истина Тогда
МассивКолонок.Добавить("Сумма");
КонецЕсли;
//Формирование строки для параметра Колонки в методе Выгрузить
Колонки = СтрСоединить(МассивКолонок,", ");
КонецЕсли;
//Передача на сервер параметров и
ЗагрузитьСтрокиПоОтборуНаСервере(ПараметрыОтбора, Колонки);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьСтрокиПоОтборуНаСервере(ПараметрыОтбора, Колонки)
//Выгрузка ТабличнойЧасти по параметрам, которые выбрал Пользователь, в ТЗ (УКЗ)
ТабЗнач = Объект.ТЧТовары.Выгрузить(ПараметрыОтбора,Колонки);
Если ТабЗнач.Количество() = 0 Тогда
Сообщить("Нет строк, удовлетворяющих таким параметрам");
Иначе
// Загрузка из ТЗ в ТЧРезультат новой Табличной части
Объект.ТЧРезультат.Загрузить(ТабЗнач);
КонецЕсли;
КонецПроцедуры
//4. Очистить
&НаКлиенте
Процедура ОчиститьТабличнуюЧасть(Команда)
Объект.ТЧТовары.Очистить();
КонецПроцедуры
* - Автором не являюсь. Примеры кода данных формы коллекции прислал читатель Trixcity через форму обратной связи.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник