Имя: Пароль:
1C
1С v8
Суммирование разной номенклатуры при подборе в табличную часть
0 IBRA
 
25.09.25
20:40
Добрый вечер!
Проблема :1С 8.3, конфиг. УПП 1.3 (1.3.5.1) суммирует разную номенклатуру в одну строку при переносе в табличную часть (операция : Реализация товаров и услуг).
Не во всех каталогах,а в определенных и при подьоре с розничными ценами.
Есть кто разбирается или сталкивался?
1 Волшебник
 
25.09.25
20:51
Тут все разбираются. Тут все сталкивались. Опишите свою проблему на нормальном, человеческом языке.
2 ОператорПК
 
25.09.25
20:56
(0) сейчас актуальный релиз 1.3.254.1, Ваш как бы немного устарел. Тут только отладчиком смотреть - думаю других вариантов нет.
3 IBRA
 
25.09.25
21:14
Описываю проблему:

Есть номенклатура 1,цена 500 руб.
Есть номенклатура 2, цена 450 руб.

В процессе подбора,при переносе в табличную часть, данные номенклатуры объединяются в 1 строку, меняется количество.
Оба элемента разные
Это происходит при подборе в розничных ценах.
В оптовых ценах все нормально
4 lEvGl
 
гуру
25.09.25
21:20
это не златан вышел из футбола, а футбол вышел из златана
но это было уже давно, а теперь в него вошла 1с

данные номенклатуры объединяются в 1 строку

и что при этом в колонке Номенклатура?
5 IBRA
 
25.09.25
21:20
Если кто знает в чем проблема,просьба помочь.
(я новичок)
6 IBRA
 
25.09.25
21:24
lEvGl, имеется ввиду эти 2 элемента становятся одной строкой в табличной части.
То есть, я выбираю товар 1 в кол-ве 1 шт, выбираю товар 2 в кол-ве 1 шт.
после перехода в табличную часть у меня одна строка "Товар 1" в кол-ве 2 шт.
7 lEvGl
 
гуру
25.09.25
21:39
(6) ну косяк в ОбработкаВыбора, а может и не косяк, а фича, смотрите код сами или выкладывайте
8 ОператорПК
 
25.09.25
21:40
(5) пригласите поближе к отладчику того кто по опытней.
9 IBRA
 
25.09.25
21:53
#Если Клиент Тогда
// Процедура выполняет отключение пользователей от информационной
// базы в случае, если был запущен сеанс с параметром "ЗавершитьРаботуПользователей"
//
Процедура КонтрольРежимаЗавершенияРаботыПользователей() Экспорт

    ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
    БлокировкаУстановлена = УправлениеСоединениямиИБ.УстановленаБлокировкаСоединений();
    ВремяНачалаБлокировки = ТекущийРежим.Начало;
    ВремяОкончанияБлокировки = ТекущийРежим.Конец;
    
    ИнтервалПредупреждения    = УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей();
    ИнтервалЗакрытьСЗапросом  = 0;
    ИнтервалЗакрытьБезЗапроса = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей() / 5;
    ИнтервалПрекратить        = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей() / 2.5;
    ТекущийМомент = ТекущаяДата();
    
    Если БлокировкаУстановлена Тогда
        
        Если ВремяОкончанияБлокировки <> '00010101' И ТекущийМомент > ВремяОкончанияБлокировки Тогда
            Возврат;
        КонецЕсли;
        
        Если НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки)
            ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПрекратить Тогда
            
            ПрекратитьРаботуСистемы(Истина);
            
        ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьБезЗапроса Тогда
            
            Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
            Предупреждение("Работа системы завершается" + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
            ЗавершитьРаботуСистемы(Ложь, Истина);
            
        ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьСЗапросом Тогда
            
            Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
            Предупреждение("Работа системы завершается" + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
            ЗавершитьРаботуСистемы(Истина, Истина);
            
        ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПредупреждения Тогда
            
            Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
            Предупреждение("Работа системы будет завершена в " + ВремяНачалаБлокировки + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

// Завершение работы только при условии удачной установки монопольного режима работы
// Вызывается, только при запуске системы от имени администратора с параметром запуска "ЗавершитьРаботуПользователей"
//
Процедура ЗавершитьРаботуПользователей() Экспорт

    Соединения = ПолучитьСоединенияИнформационнойБазы();
    
    Если Соединения.Количество() = 1 Тогда
        // Отключены все пользователи, кроме текущего сеанса
        // В последнюю очередь завершается сеанс, запущенный с параметром "ЗавершитьРаботуПользователей".
        // Такой порядок отключений необходим для обновления конфигурации с помощью пакетного файла
        
        ЗавершитьРаботуСистемы(Ложь);
        
        Возврат;
    КонецЕсли;
    
    // Получим текущее значение параметров блокировки
    ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
    БлокировкаУстановлена = ТекущийРежим.Установлена;
    ВремяНачалаБлокировки = ТекущийРежим.Начало;
    ИнтервалОтключения    = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей();
    ТекущийМомент = ТекущаяДата();
    
    Если БлокировкаУстановлена И
        (НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки)
            ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалОтключения) Тогда
            
        // после начала блокировки сеансы всех пользователей должны быть отключены    
        // если этого не произошло пробуем принудительно прервать соединения
        ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей");
        
        // Невозможно принудительно отсоединить подключения в файловом режиме работы
        Если ОпределитьЭтаИнформационнаяБазаФайловая() Тогда
            УправлениеСоединениямиИБ.РазрешитьРаботуПользователей();
            Сообщение = УправлениеСоединениямиИБ.ПолучитьНазванияСоединенийИБ("Не удалось завершить работу пользователей:");
            ЗаписьЖурналаРегистрации("Завершение работы пользователей", УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
            ЗавершитьРаботуСистемы(Ложь);
            Возврат;    
        КонецЕсли;    
        
        ПараметрыАдминистрированияИБ = УправлениеСоединениямиИБ.ПолучитьПараметрыАдминистрированияИБ();
        ПараметрыЗапуска = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска,";");
        Если ПараметрыЗапуска.Количество() > 1 Тогда
            ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ = Врег(ПараметрыЗапуска[1]);
        КонецЕсли;
        Если ПараметрыЗапуска.Количество() > 2 Тогда
            ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ = Врег(ПараметрыЗапуска[2]);
        КонецЕсли;
        
        Результат = УправлениеСоединениямиИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ);
        Если Результат Тогда
            Сообщить("Завершение работы пользователей выполнено успешно.", СтатусСообщения.Информация);
            ЗавершитьРаботуСистемы(Ложь);
        Иначе
            Сообщение = УправлениеСоединениямиИБ.ПолучитьНазванияСоединенийИБ("Не удалось завершить работу пользователей:");
            Сообщить(Сообщение, СтатусСообщения.Внимание);
            ЗаписьЖурналаРегистрации("Завершение работы пользователей", УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

#КонецЕсли

////////////////////////////////////////////////////////////////////////////////
// ПРОВЕРКА ДИНАМИЧЕСКОГО ОБНОВЛЕНИЯ
//

#Если ТолстыйКлиентОбычноеПриложение Тогда
    
// Проверяет в конфигурации ИБ наличие изменений появившихся после старта сеанса
//
Процедура ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ() Экспорт

    // Если в конфигурации после старта текущего сеанса что-то изменилось
    Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда


        // Завершим проверку обновления
        ЗавершитьПроверкуДинамическогоОбновленияИБ();

        // Спросим пользователя о его желании перезапустить сеанс
        ТекстВопроса = "В конфигурацию ИБ внесены изменения." + Символы.ПС +
                        "Для работы с ними рекомендуется перезапустить программу." + Символы.ПС +
                        "Перезапустить?";
        РезультатВопроса = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);

        // Если пользователь не хочет перезапускать сеанс
        Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
            // Запустим проверку обновления опять
            НачатьПроверкуДинамическогоОбновленияИБ();
            Возврат;
        КонецЕсли;

    
        // Попробуем перезапустить
        РаботаСДиалогами.ПерезапуститьСеансРаботыСПрограммой();

    КонецЕсли;

КонецПроцедуры

// Начинает проверку динамического обновления конфигурации ИБ
//
Процедура НачатьПроверкуДинамическогоОбновленияИБ()Экспорт
    
    // проверка дин. обновления конфигурации каждые 20 мин.
    ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60);

КонецПроцедуры

// Завершает проверку динамического обновления конфигурации ИБ
//
Процедура ЗавершитьПроверкуДинамическогоОбновленияИБ()Экспорт

    // Отключим соответствующий обработчик ожидания
    ОтключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ");

КонецПроцедуры

#КонецЕсли

Функция ОпределитьЭтаИнформационнаяБазаФайловая(СтрокаСоединенияСБД = "") Экспорт
            
    СтрокаСоединенияСБД = ?(ПустаяСтрока(СтрокаСоединенияСБД), СтрокаСоединенияИнформационнойБазы(), СтрокаСоединенияСБД);
    
    // в зависимости от того файловый это вариант БД или нет немного по-разному путь в БД формируется
    ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "FILE=");
    
    Возврат ПозицияПоиска = 1;    
    
КонецФункции

// Функция предназначена для получения значения по имени переменной
// значения берутся либо из КЭШа конфигурации (параметр сеанса "ОбщиеЗначения"),
// либо при помощи механизма платформы "повторное использование возвращаемых значений"
//
// Параметры:
//    ИмяПеременной - Строка, имя переменной
//
// Возвращаемое значение:
//  Произвольное значение
//
Функция глЗначениеПеременной(ИмяПеременной) Экспорт
    
    Возврат РаботаСОбщимиПеременными.ПолучитьЗначениеПеременной(ИмяПеременной);
    
КонецФункции

// Процедура установки значения экспортных переменных модуля приложения
//
// Параметры
//  ИмяПеременной      - строка, содержит имя переменной целиком
//     ЗначениеПеременной - значение переменной
//
Процедура глЗначениеПеременнойУстановить(ИмяПеременной, ЗначениеПеременной, ОбновитьКэшНаСервере = Ложь) Экспорт
    
    РаботаСОбщимиПеременными.УстановитьЗначениеПеременной(ИмяПеременной, ЗначениеПеременной, ОбновитьКэшНаСервере);
    
КонецПроцедуры
10 IBRA
 
25.09.25
21:54
я незнаю,правильно я делаю,или нет.
Пытался отладчиком найти этот код
11 lEvGl
 
гуру
25.09.25
22:55
Если все типовое, то попробую вангануть - у подбираемых номенклатур одна и та же единица хранения остатков. А если нет - то только смотреть код (10) код формы документа РТУ
12 IBRA
 
25.09.25
23:05
Да,одна и та же единица хранения остатков
13 IBRA
 
25.09.25
23:07
(11) это происходит именно при подборе в розничной цене,а в оптовой цене нет такоц проблемы
14 lEvGl
 
гуру
25.09.25
23:13
(12) определили это по кодам этих единиц или по названию?
15 IBRA
 
25.09.25
23:21
(14) для каждой номенклатуры назначена своя единица хранения остатков с уникальным кодом
16 IBRA
 
25.09.25
23:22
(14) если есть телеграм,мог бы скинуть короткое видео с описанием проблемы.
в отладчике я не разбираюсь,а спросить некого
17 lEvGl
 
гуру
25.09.25
23:45
об этом останется только запись на форуме, ведь пришла пора прощаться
зы. можете сами посравнивать входные данные - единица, качество, серия, характеристика, склад. По этим полям Типовой код ищет соответствие. Если тип заполнения цен розничный, то еще цена добавляется. Если в Товарах(?) есть строка с такими значениями этих всех полей, какие и для подбираемой номенклатуры, то новую строку не добавит, а увеличит количество в существующей строке. Номенклатура не участвует.
18 IBRA
 
25.09.25
23:52
Спасибо за помощь.
Догадался в чем проблема и решил на определенной части номенклатуры.
Вроде,все правильно работает