Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 12:15

Табличный документ.

Автор LAFUDR, 30 июн 2011, 00:29

0 Пользователей и 1 гость просматривают эту тему.

LAFUDR

Вечер добрый.
Вопрос заключается в следующем:
Необходимо организовать таличный документ в который будут вводиться товары с ценами, количеством и т.д.
в котором наименование товара повторяться не будет.

Я смог организовать 2-мя способами.
1-й связал таблицу с регистром сведений по полям Измерение - Номенклатура, Ресурс - Номенклатура.
2-й при вводе товара проверяет таблицу на наличие такого же товара (Циклом).

Если ли еще способы организации данного действия (более простые и правильные?).

Шурыгин Иван Сергеевич

это вы создаете отчет? или проверку при записи?
Цитата: LAFUDR от 30 июн 2011, 00:29

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


и

Цитата: LAFUDR от 30 июн 2011, 00:29

Я смог организовать 2-мя способами.
1-й связал таблицу с регистром сведений по полям Измерение - Номенклатура, Ресурс - Номенклатура.
2-й при вводе товара проверяет таблицу на наличие такого же товара (Циклом).


как то не сходится.. либо вы ради отчета заполняете регистр сведений. либо причем тут табличный документ?
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

LAFUDR

Пытаюсь создать проверку при записи.
Как правильно будет сделать?

progmikon

Цитата: LAFUDR от 30 июн 2011, 20:02
Пытаюсь создать проверку при записи.
Как правильно будет сделать?
Еще раз по порядку...табличный документ вообще не понятен в данном контексте

LAFUDR

Неправильно выразился. Не табличный документ а табличная часть.
Имеем справочник Номенклатура, Документ приходная в котором создана форма элемента. На данной форме расположено табличное поле товары, одним из реквизитов таблицы является номенклатура.
Необходимо при записи документа осуществлять контроль дублей строк в табличной части, т.е. если в табличной части содержатся 2 строки с одним и тем же товаром, документ не записывается

progmikon

Вариантов реализации масса.

Вот один из них, который первым пришел в голову:
   ТЗ = Док.Товары.Выгрузить(, "Номенклатура");
   ТЗ.Колонки.Добавить("Единица");
   ТЗ.ЗаполнитьЗначения(1, "Единица");
   ТЗ.Свернуть("Номенклатура", "Единица");
   Для Каждого ТекСтрока Из ТЗ Цикл
      Если ТекСтрока.Единица > 1 Тогда
         Сообщить("Номенклатура " + ТекСтрока.Номенклатура + " встречается " + Строка(ТекСтрока.Единица));
      КонецЕсли;
   КонецЦикла;

progmikon

Суть метода заключается в следующем: выгружаем нашу колонку с номенклатурой из документа (Док) в таблицу значений. Далее в таблицу значений добавляем новую колонку "Единица". Заполняем ее 1.
Далее делаем свертку таблицы по номенклатуре. Если номенклатура встречается не один раз, то в поле "Единица" будет число > 1. Все что осталось сделать - обойти нашу таблицу значений и проверить, где значение > 1

LAFUDR

Помойму мой первый вариант был чуток проще:

Процедура ПроверкаНоменклатуры (Элемент)
   
   КолНоменклатур = 0;
   
   Для Каждого ТекСтрокаТовары Из Товары Цикл
      Если ТекСтрокаТовары.Номенклатура.Наименование = Элемент.Значение.Наименование Тогда
          КолНоменклатур = КолНоменклатур +1;
       КонецЕсли;         
   КонецЦикла;
   Если КолНоменклатур >1 Тогда
      Сообщить("Данная номеклатура уже присутствует в списке!");
      ТекСтрокаТовары.Номенклатура ="";
   КонецЕсли;   
      
КонецПроцедуры

Вопрос по коду:
1. Как прервать цикл? (какая команда)
2. После данного кода в текущей строке образуется пробел на месте номенклатуры, хочу удалить строку. (в поиске команду не нашел).
3. После выдачи сообщения снова открывается окно выбора номенклатры. Как организовать?
Пробовал код
Форма= Справочники.Номенклатура.ПолучитьФормуСписка("ФормаСписка");
Форма.Открыть();

Форма открывается, но номенклатура не выбирается.

progmikon

1. Прервать
2. Добавляйте эти строки в массив
МассивНаУдаление = Новый Массив;
.....
МассивНаУдаление.Добавить(ТекСтрокаТовары);
Для Каждого ТекЭлемент Из МассивНаУдаление Цикл
Товары.Удалить(ТекЭлемент);
КонецЦикла;
3. Не понял

LAFUDR

Прервать прерывает цикл, а как прервать выполнение процедуры?

Мы можем программно открыть окно выбора номенклатуры из табличного поля товары?
При выборе номенклатуры в табличной части появляется выбранная номенклатура.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск