Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Объединение строк табличной части
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Meest
Добрый день!

Возникла проблема с дублированием номенклатуры в табличной части документа, так как пользователи нечего не хотят слушать и знать, пытаюсь решить проблему объединением строк табличной части документа, но у вы все попытки увенчались полным провалом.
Может кто-то сталкивался с данной проблемой, дайте пенок в нужное направление.
Конфигурация не типовая, платформа (8.1.11.67).
Заранее благодарен.
pablo
В какой момент должно происходить объединение и, самое главное, как? Ответите на эти 2 вопроса и сразу будет виден алгоритм требуемых действий.
Могу только предположить, что нужно будет просуммировать в одинаковых строчках поле количество, а остальные поля - пересчитать.
Meest
Цитата(pablo @ 14.03.13, 16:09) необходимо зарегистрироваться для просмотра ссылки
В какой момент должно происходить объединение и, самое главное, как? Ответите на эти 2 вопроса и сразу будет виден алгоритм требуемых действий.
Могу только предположить, что нужно будет просуммировать в одинаковых строчках поле количество, а остальные поля - пересчитать.



Нужно объединить все строки ТЧ по определенной номенклатуре (Услуга) и просуммировать не только количество но еще пару числовых полей.
pablo
Вы не ответили на первый вопрос
Meest
Цитата(pablo @ 14.03.13, 16:09) необходимо зарегистрироваться для просмотра ссылки
В какой момент должно происходить объединение


При окончании редактирования табличного поля
zay
Вам нужно найти номенклатуру с похожим, но не идентичным наименованием? Посмотрите алгоритм сравнения лексем на основании расстояния Левенштейна
Если это вам подходит - могу выложить обработку по поиску дублей контрагентов, которая использует этот алгоритм.

Вообще, я думаю вы себе большую проблему создаете
Цитата
так как пользователи нечего не хотят слушать и знать

Сейчас проблема из-за того, что пользователи создают дубли номенклатуру.
После того как вы реализуете механизм свертки - любое дублирование номенклатуры будет уже из-за того что вы что-то сделали, но все равно ничего не работает. Вне зависимости, работает алгоритм свертки как надо или нет. Люди, которые "ничего не хотят слушать и знать", с большим удовольствием сделают свою вину - вашей.
Meest
Цитата(zay @ 14.03.13, 17:08) необходимо зарегистрироваться для просмотра ссылки
Вам нужно найти номенклатуру с похожим, но не идентичным наименованием? Посмотрите алгоритм сравнения лексем на основании расстояния Левенштейна
Если это вам подходит - могу выложить обработку по поиску дублей контрагентов, которая использует этот алгоритм.

Вообще, я думаю вы себе большую проблему создаете

Сейчас проблема из-за того, что пользователи создают дубли номенклатуру.
После того как вы реализуете механизм свертки - любое дублирование номенклатуры будет уже из-за того что вы что-то сделали, но все равно ничего не работает. Вне зависимости, работает алгоритм свертки как надо или нет. Люди, которые "ничего не хотят слушать и знать", с большим удовольствием сделают свою вину - вашей.



Со слов пользователей я и так во всех бедах виноват.
Сворачивать номенклатуру нужно только по одному элементу спр.номенклатура, он всегда один и он не меняется (у тех самых пользователей прав чуть не хватает).
Вся беда в том что данная позиция номенклатуры является услугой, при выборе ее необходимо указывать такие параметры как вес, длина, ширина и высота, вот собственно из чего весь сыр-бор, при заполнении перечня номенклатуры пользователю удобно указывать в разных строках разные параметры так как вес может быть от 0,01кг до 20000 тон и таких позиций может быть 20.
Vofka
А кто мешает выбрать и свернуть запросом либо выгрузить данные в ТЗ и методом Свернуть сделать это там?
Avgust
КМК самый простой и правильный способ - это сворачивание, типа:
Табло="";
    ВыгрузитьТабличнуюЧасть(Табло);
    Табло.Свернуть("Услуга,Цена,Вес,Длина,Ширина,Цвет,Запах.......",);
    Табло.ВыбратьСтроки();
и т.п....

Приведите пример дублирующихся строк и правильный результат объединения (как Вам нужно их свернуть/объединить), тогда может будет понятней, в чем проблема...
logist
Цитата
Табло="";
    ВыгрузитьТабличнуюЧасть(Табло);
    Табло.Свернуть("Услуга,Цена,Вес,Длина,Ширина,Цвет,Запах.......",);
    Табло.ВыбратьСтроки();

Что это?
zay
Цитата(Meest @ 14.03.13, 17:51) необходимо зарегистрироваться для просмотра ссылки
Вся беда в том что данная позиция номенклатуры является услугой, при выборе ее необходимо указывать такие параметры как вес, длина, ширина и высота, вот собственно из чего весь сыр-бор, при заполнении перечня номенклатуры пользователю удобно указывать в разных строках разные параметры так как вес может быть от 0,01кг до 20000 тон и таких позиций может быть 20.

Понятно.
В конфигурации УТП в справочнике "Единицы измерения" есть реквизиты ЕдиницаПоКлассификатору и Коэффициент. Если у вас Бухгалтерия для Украины - добавьте эти реквизиты.
Использовать их можно так:
"Единицы измерения" 
-------------------------------------------------------------------
| Название | ЕдиницаПоКлассификатору | Коэффициент |
-------------------------------------------------------------------
| г             | кг                                       | 0.001              |
| кг           | кг                                       | 1                     |
| т             | кг                                       | 1000               |
-------------------------------------------------------------------

Сделайте пользователю кнопку "Свернуть" (Делать это при окончании редактирования табличного поля - неудачная идея)
При нажатии на кнопку отрабатывает процедура:
Выгружаем ТЧ.
Обходим все строки и конвертируем все граммы/килограммы/тонны в килограммы используя Коэффициент
Сворачиваем ТЗ
Загружаем ТЧ
logist
Цитата(zay @ 15.03.13, 9:53) необходимо зарегистрироваться для просмотра ссылки
В конфигурации УТП в справочнике "Единицы измерения" есть реквизиты ЕдиницаПоКлассификатору и Коэффициент. Если у вас Бухгалтерия для Украины - добавьте эти реквизиты.

Цитата(Meest @ 14.03.13, 16:04) необходимо зарегистрироваться для просмотра ссылки
Конфигурация не типовая, платформа (8.1.11.67).
sava1
Запретить простое добавление - только через Подбор
Avgust
Цитата(logist @ 15.03.13, 9:42) необходимо зарегистрироваться для просмотра ссылки
Что это?

кусочек кода из рабочей базы. Да, из конфы 7.7, в переводе на язык 8.х будет:
Состав.Свернуть("Номенклатура", "Количество, Сумма, Всего");

А на что это похоже? smile.gif
logist
Цитата(Avgust @ 15.03.13, 12:39) необходимо зарегистрироваться для просмотра ссылки
в переводе на язык 8.х будет:

В следующий раз пишите сразу перевод. У нас тут разделы форума специально созданы для отдельных платформ.
Meest
Нашел два способа для решения данной проблемы

1.
СтрокаТЧ = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные;      
    СтрокаСНоменклатурой = ПереченьНоменклатуры.Найти(СтрокаТЧ.Номенклатура);
    
    Если ПереченьНоменклатуры.Количество() > 1  и  (СтрокаСНоменклатурой.Номенклатура = СтрокаТЧ.Номенклатура)
        И (СтрокаСНоменклатурой <> СтрокаТЧ) и  СтрокаТЧ.КвоМест > 0  Тогда
        СтрокаСНоменклатурой.Вес = СтрокаСНоменклатурой.Вес+СтрокаТЧ.Вес;
        СтрокаСНоменклатурой.Высота = СтрокаСНоменклатурой.Высота+СтрокаТЧ.Высота;
        СтрокаСНоменклатурой.Длина = СтрокаСНоменклатурой.Длина+СтрокаТЧ.Длина;
        СтрокаСНоменклатурой.КвоЕд = СтрокаСНоменклатурой.КвоЕд+СтрокаТЧ.КвоЕд;
        СтрокаСНоменклатурой.КвоМест = СтрокаСНоменклатурой.КвоМест+СтрокаТЧ.КвоМест;
        СтрокаСНоменклатурой.Объем = СтрокаСНоменклатурой.Объем+СтрокаТЧ.Объем;
        СтрокаСНоменклатурой.Сумма = СтрокаСНоменклатурой.Сумма+СтрокаТЧ.Сумма;
        СтрокаСНоменклатурой.Ширина = СтрокаСНоменклатурой.Ширина+СтрокаТЧ.Ширина;
        ПереченьНоменклатуры.Удалить(СтрокаТЧ);
    КонецЕсли;


2. Более оптимальный

Если ПереченьНоменклатуры.Количество() > 1 и (СтрокаСНоменклатурой.Номенклатура = СтрокаТЧ.Номенклатура)
        и (СтрокаСНоменклатурой <> СтрокаТЧ) и СтрокаТЧ.КвоМест > 0  Тогда
        ПереченьНоменклатуры.Свернуть("Номенклатура","Вес,Высота,Длина,КвоЕд,КвоМест,Объем,Сумма,Ширина,КвоУпаковки,СуммаУпаковки");
    КонецЕсли;


Огромное спасибо за пенок в нужное направление)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.