Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Задвоеные элементы справочника , Выборка и вывод в отчет задвоеных элементов справочника          
dcc3 Подменю пользователя
сообщение 12.05.11, 0:33
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 11
Из: Украина, Горловка
Спасибо сказали: 0 раз
Рейтинг: 0

Есть самописная база 1С 8.1. Необходимо найти элементы справочника ПолученныеНН с одинаковыми значениями реквизитов: Наименование + ИНН + СуммаСНДС.

Vofka Подменю пользователя
сообщение 12.05.11, 6:51
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Записываете все данные в таблицу значений с, соответственными, 3 полями + 1 поле "Количество", в котором везде пишите 1. После того, как весь справочник будет туда записан - сворачиваете таблицу. Где количество больше 1 будет - это дубли.

Спасибо сказали: dcc3,

dcc3 Подменю пользователя
сообщение 12.05.11, 23:34
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 11
Из: Украина, Горловка
Спасибо сказали: 0 раз
Рейтинг: 0

Спасибо за Ваш ответ. Но к сожалению я бухгалтер, а программирование в 1С начал осваивать недавно (нужда заставила). Нашел на форуме (http://pro1c.org.ua/index.php?showtopic=1936) описание по работе с таблицами значений, но разобраться сложновато. Пожалуйста если можете выложите примерный код.

Ardi Подменю пользователя
сообщение 13.05.11, 0:47
Сообщение #4

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Как создать таблицу значений и заполнить ее поля?
Для создания таблицы значений используется оператор Новый (листинг 2.70):
Листинг 2.70. Создание таблицы значений
ТаблицаЗначений = Новый ТаблицаЗначений;


После этого можно создать колонки таблицы (при необходимости можно задать допустимые типы значений для колонки, заголовок и ширину колонки в символах), листинг 2.71.
Листинг 2.71. Создание колонок таблицы значений
// Создать нужные колонки.
ТаблицаЗначений.Колонки.Добавить("Фамилия");
ТаблицаЗначений.Колонки.Добавить("Возраст");

Затем можно добавить новую строку и установить значения в колонках таблицы следующим образом (листинг 2.72, 2.73):
Листинг 2.72. Добавление новой строки таблицы значений, используя явное указание имен колонок
// Добавить новую строку и задать значения в колонках таблицы.
НоваяСтрока = ТаблицаЗначений.Добавить();

НоваяСтрока.Фамилия = "Иванов";
НоваяСтрока.Возраст = 23;

Листинг 2.73. Добавление новой строки таблицы значений, используя переменные, хранящие имена колонок
// Добавить новую строку и задать значения в колонках таблицы.
НоваяСтрока = ТаблицаЗначений.Добавить();

НоваяСтрока["Фамилия"] = "Иванов";
НоваяСтрока["Возраст"] = 23;
i Как перебрать элементы справочника?
Для того чтобы перебрать элементы справочника, необходимо сформировать выборку элементов с нужными параметрами и затем обойти ее в цикле.
Например, для перебора всех элементов справочника Номенклатура в иерархическом порядке можно использовать следующий код (листинг 3.10):
Листинг 3.10. Перебор элементов справочника в порядке иерархии
Выборка = Справочники.Номенклатура.ВыбратьИерархически();

Пока Выборка.Следующий() Цикл
    Наименование = Выборка.Наименование;

    // Обращение к другим данным справочника.
    //    ...

КонецЦикла;
Аналогичного результата можно добиться, используя запрос (листинг 3.11):
Листинг 3.11. Перебор элементов справочника запросом
Запрос = Новый Запрос(
"ВЫБРАТЬ
|    Ссылка,
|    Наименование
|ИЗ
|    Справочник.Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ");

Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл
    Наименование = Результат.Наименование;
    //    ...
    
КонецЦикла;

Благодаря использованию запроса можно формировать выборку элементов справочника более «гибко», поскольку запрос позволяет задать произвольные условия на выбираемые данные.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: dcc3,

dcc3 Подменю пользователя
сообщение 16.05.11, 19:08
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 11
Из: Украина, Горловка
Спасибо сказали: 0 раз
Рейтинг: 0

То есть насколько я понял можно осуществить перебор элементов справочника либо посредством создания таблицы значения, либо посредством выборки???

Vofka Подменю пользователя
сообщение 16.05.11, 19:39
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Нельзя
Цитата
осуществить перебор элементов справочника посредством создания таблицы значения


Делается выборка или запрос и результат помещается в таблицу значений

dcc3 Подменю пользователя
сообщение 16.05.11, 20:18
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 11
Из: Украина, Горловка
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 12.05.11, 6:51) *
Записываете все данные в таблицу значений с, соответственными, 3 полями + 1 поле "Количество", в котором везде пишите 1. После того, как весь справочник будет туда записан - сворачиваете таблицу. Где количество больше 1 будет - это дубли.

Хорошо. Создал и записал нужные данные в Таблицу значений, вывел в отчет. Все нормально. Создал дополнительное поле "Количество", но как записать 1 в каждую строку, в этом поле. И как свернуть таблицу.
Вотпрограммный код который у меня получился
                  ЭлементыФормы.ПолеТабличногоДокумента1.Очистить();
    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
    Макет = ОтчетОбъект.ПолучитьМакет("ДублиНН");

    ТаблицаЗначений = Новый ТаблицаЗначений;
    // Создаем нужные колонки.
    ТаблицаЗначений.Колонки.Добавить("ИНН");
    ТаблицаЗначений.Колонки.Добавить("Наименование");
    ТаблицаЗначений.Колонки.Добавить("НДС");
    ТаблицаЗначений.Колонки.Добавить("Количество");
    // Перебираем элемент справочника
    Выборка = Справочники.ПолученныеНН.Выбрать();
    
    Область = Макет.ПолучитьОбласть("Строка");
    Пока Выборка.Следующий() Цикл
        Область.Параметры.ИНН = Выборка.ИНН;
        Область.Параметры.Наименование = Выборка.Наименование;
        Область.Параметры.НДС = Выборка.НДС;
        ТабДок.Вывести(Область);
    КонецЦикла;

Vofka Подменю пользователя
сообщение 16.05.11, 20:23
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

  ЭлементыФормы.ПолеТабличногоДокумента1.Очистить();
    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
    Макет = ОтчетОбъект.ПолучитьМакет("ДублиНН");

    ТаблицаЗначений = Новый ТаблицаЗначений;
    // Создаем нужные колонки.
    ТаблицаЗначений.Колонки.Добавить("ИНН");
    ТаблицаЗначений.Колонки.Добавить("Наименование");
    ТаблицаЗначений.Колонки.Добавить("НДС");
    ТаблицаЗначений.Колонки.Добавить("Количество");
    // Перебираем элемент справочника
    Выборка = Справочники.ПолученныеНН.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Строка = ТаблицаЗначений.Добавить();
        Строка.ИНН = Выборка.ИНН;
        Строка.Количество =  1;
        // остальные колонки заполните сами
    КонецЦикла;

    ТаблицаЗначений.Свернуть("ИНН, ОстальныеКолонкиЧерезЗапятую", "Количество");

Для Каждого Строка Из ТаблицаЗначений Цикл
        Область.Параметры.ИНН = Строка.ИНН;
                            // остальные колонки тут сами допишите
        Область.Параметры.Количество = Строка.Количество;
        ТабДок.Вывести(Область);
    КонецЦикла;


Как-то так. На работоспособность не проверял. Но суть, я надеюсь, понятна.

dcc3 Подменю пользователя
сообщение 16.05.11, 21:15
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 11
Из: Украина, Горловка
Спасибо сказали: 0 раз
Рейтинг: 0

Большое спасибо. Все работает. Но не совсем так как хочется. Кроме трех основных полей ИНН, Наименование и НДС в справочнике есть еще 14 дополнительных полей (Например ДатаПолучения и Организация).
После выполнения строки
 ТаблицаЗначений.Свернуть("ИНН, Наименование, НДС", "Количество");

все данные сворачиваются, а в столбце "Количество" отображается количество одинаковых элементов согласно условий отбора. Это понятно. Но ДатаПолучения может быть разной, поэтому необходимо видить в отчете развернутые данные.

Zaval Подменю пользователя
сообщение 17.05.11, 8:20
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Сделайте запросом.
Две таблички(обе - НН, в первой все нужные реквы, во второй - только критичные), связываете по критичным реквизитам и
...
|ИМЕЮЩИЕ
|        КОЛИЧЕСТВО(...) > 1

Спасибо сказали: dcc3,

dcc3 Подменю пользователя
сообщение 17.05.11, 19:13
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 11
Из: Украина, Горловка
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Zaval @ 17.05.11, 8:20) *
Сделайте запросом.
Две таблички(обе - НН, в первой все нужные реквы, во второй - только критичные), связываете по критичным реквизитам и
...
|ИМЕЮЩИЕ
|        КОЛИЧЕСТВО(...) > 1

Огромное спасибо всем откликнувшимся за понимание и терпение. Все получилось.
Выкладываю код
ВЫБРАТЬ
    ПолученныеНН.Наименование КАК Наименование,
    ПолученныеНН.ДатаПолученияНН,
    ПолученныеНН.ДатаВыпискиНН,
    ПолученныеНН.ВидДокумента,
    ПолученныеНН.Контрагент,
    ПолученныеНН.ИНН КАК ИНН,
    ПолученныеНН.СуммаСНДС,
    ПолученныеНН.База,
    ПолученныеНН.НДС,
    ПолученныеНН.БазаОсвобожден,
    ПолученныеНН.НДСОсвобожден,
    ПолученныеНН.БазаНеХоз,
    ПолученныеНН.НДСНеХоз,
    ПолученныеНН.БазаСт6,
    ПолученныеНН.НДССт6,
    ПолученныеНН.Организация,
    ПолученныеНН.ПорядковыйНомер
ИЗ
    Справочник.ПолученныеНН КАК ПолученныеНН
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПолученныеНН КАК ПолученныеНН1
        ПО ПолученныеНН.Наименование = ПолученныеНН1.Наименование
            И ПолученныеНН.ИНН = ПолученныеНН1.ИНН
            И ПолученныеНН.НДС = ПолученныеНН1.НДС
            И ПолученныеНН.НДСОсвобожден = ПолученныеНН1.НДСОсвобожден
            И ПолученныеНН.НДСНеХоз = ПолученныеНН1.НДСНеХоз
            И ПолученныеНН.НДССт6 = ПолученныеНН1.НДССт6
ГДЕ
    ПолученныеНН.ДатаПолученияНН МЕЖДУ &Дата1 И &Дата2
    И (ПолученныеНН.НДС <> 0
    ИЛИ ПолученныеНН.НДСОсвобожден <> 0
    ИЛИ ПолученныеНН.НДСНеХоз <> 0
    ИЛИ ПолученныеНН.НДССт6 <> 0)

СГРУППИРОВАТЬ ПО
    ПолученныеНН.ИНН,
    ПолученныеНН.Наименование,
    ПолученныеНН.НДС,
    ПолученныеНН.Организация,
    ПолученныеНН.ДатаПолученияНН,
    ПолученныеНН.ДатаВыпискиНН,
    ПолученныеНН.ВидДокумента,
    ПолученныеНН.Контрагент,
    ПолученныеНН.СуммаСНДС,
    ПолученныеНН.База,
    ПолученныеНН.БазаОсвобожден,
    ПолученныеНН.НДСОсвобожден,
    ПолученныеНН.БазаНеХоз,
    ПолученныеНН.НДСНеХоз,
    ПолученныеНН.БазаСт6,
    ПолученныеНН.НДССт6,
    ПолученныеНН.ПорядковыйНомер,
    ПолученныеНН1.Наименование,
    ПолученныеНН1.ИНН,
    ПолученныеНН1.НДС

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ПолученныеНН.ИНН) > 1 И
    КОЛИЧЕСТВО(ПолученныеНН.НДС) > 1 И
    КОЛИЧЕСТВО(ПолученныеНН.Наименование) > 1 И
    КОЛИЧЕСТВО(ПолученныеНН.НДСОсвобожден) > 1 И
    КОЛИЧЕСТВО(ПолученныеНН.НДСНеХоз) > 1 И
    КОЛИЧЕСТВО(ПолученныеНН.НДССт6) > 1

УПОРЯДОЧИТЬ ПО
    ИНН,
    Наименование

Осталось дело за малым: вывести результат в отчет и настроить параметры печати. Так что тему можно считать закрытой.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.04.24, 0:40
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!