7.7 Поиск товаров с одинаовыми штрихкодами 1С 7.7 ТиС

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Роман_Н, 3 июл 2012.

  1. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    У некоторых товаров от разных поставщиков одинаковые штрих коды. Как найти эти товары?
    Недавно начал изучать 1С, сам пока не могу справится...
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    выбрать единицы подчинения без иерархии (владельца). При совпадении - выдавать владельцев (номенклатуру)
  3. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Можно поподробней?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Процедура Сформировать()
    Спр=СОздатьОбъект("Справочник.Единицы");
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ШК");
    ТЗ.НоваяКолонка("Счетчик","Число",3,0);
    Спр.ВыбратьЭлементы(0);
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.ШК=Спр.ШтрихКод;
    ТЗ.Счетчик=1;
    КонецЦикла;
    
    Тз.Свернуть("ШК","Счетчик");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если ТЗ.Счетчик=1 Тогда
    Продолжить;
    КонецЕсли;
    Сообщить("Дублей ШК "+ТЗ.ШК+" всего "+ТЗ.Счетчик);
    Спр.ВыбратьЭлементы(0);
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если ТЗ.ШК=Спр.ШтрихКод Тогда
    Сообщить("ТМЦ "+Спр.Владелец+" единица "+Спр);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    КонецПроцедуры
    думаю что так
  5. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Спасибо огромное. То, что надо!
  6. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Все что вывел:
    Дублей ШК всего 2
    ТМЦ Архив для дисков единица шт
    ТМЦ сернтификат единица шт

    Почему то не работает.
  7. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Пробую вот так. Но почему то "Пока Запрос.Группировка(2) = 1 Цикл" - не работает. Что я делаю не так?

    Код:
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ОдинаковыеШтрихКоды)
    |Обрабатывать НеПомеченныеНаУдаление;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |ШтрихКод = Регистр.ОстаткиТМЦ.Номенклатура.БазоваяЕдиница.ШтрихКод;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |Фирма = Регистр.ОстаткиТМЦ.Фирма;
    |Группировка Номенклатура;
    |Группировка ШтрихКод;
    |Условие(Склад = ВыбСклад);
    |Условие(Фирма = ВыбФирма);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ШК");
    ТЗ.НоваяКолонка("Счетчик","Число",3,0);
    
    Пока Запрос.Группировка(2) = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.ШК = Запрос.ШтрихКод;
    ТЗ.Счетчик = 1;
    КонецЦикла;
    
    ТЗ.Свернуть("ШК","Счетчик");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если ТЗ.Счетчик=1 Тогда
    Продолжить;
    КонецЕсли;
    Сообщить("Дублей ШК "+ТЗ.ШК+" всего "+ТЗ.Счетчик);
    КонецЦикла;
  8. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Хотя, наверное, извиняюсь. Алгоритм работает. Может быть я не там ищу. Вообще проблема звучала так: есть товары из разных партий, с разной ценой, от разных поставщиков, но с одинаковыми ШтрихКодами. Когда на кассе сканируют один товар, выходит другой.
    Например: тарелка стоит 500руб., а по ее штрихкоду выходит фигурка за 1500руб.
    Где может быть собака зарыта?

    P.S. Но по поводу алгоритма с запросом, хотелось бы понять почему не работает!
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Вы тестирование БД делали?
    2) ТиС типовая, без "изысков"?

    непонятно вообще каким образом у вас получились дубли. Проверка на уникальность ШК в типовом алгоритме предусмотрена.
    У вас точно в единицах ШК хранится?

    Ну Дык запрос то к регистру остков.... а где хоть одна функция? Не путайте с 8кой
  10. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Фирма большая - база скорее всего со всякими наворотами. Дубли могли получится, когда загружали товары обработкой. Ведь там может не быть проверки.
    ШК в Единицах.
    В итоге такой код:
    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, ТЗ,ТЗ1;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ОдинаковыеШтрихКоды)
    |Обрабатывать НеПомеченныеНаУдаление;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |ШтрихКод = Регистр.ОстаткиТМЦ.Номенклатура.БазоваяЕдиница.ШтрихКод;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |Фирма = Регистр.ОстаткиТМЦ.Фирма;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка ШтрихКод;
    |Группировка Номенклатура без групп;
    |Условие(Склад = ВыбСклад);
    |Условие(Фирма = ВыбФирма);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Запрос.Выгрузить(ТЗ ,0,0);
    
    ТЗ.НоваяКолонка("Счетчик","Число",3,0);
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    ТЗ.Счетчик = 1;
    КонецЦикла;
    ТЗ.Выгрузить(ТЗ1);
    ТЗ.Свернуть("ШтрихКод","Счетчик");
    ТЗ1.ВыбратьСтроки();
    Пока ТЗ1.ПолучитьСтроку()=1 Цикл
    ТекСтрока = 0;
    Если ТЗ.НайтиЗначение(ТЗ1.ШтрихКод, ТекСтрока, "ШтрихКод") = 1 Тогда
    ТЗ.ПолучитьСтрокуПоНомеру(ТекСтрока);
    Если ТЗ.Счетчик=1 Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    Сообщить("Дублей ШК "+ТЗ1.ШтрихКод+" всего "+ТЗ.Счетчик+" Номенклатура "+ТЗ1.Номенклатура);
    КонецЦикла;
    КонецПроцедуры
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да... Обработком можно такое "сотворить"

Поделиться этой страницей