Версия для печати темы (https://pro1c.org.ua/index.php?s=b94e9c7bf62e3b8a77174b174b6abf68&showtopic=67666)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Проблема с ТЗ в документах

Автор: kayfatuch 06.11.24, 1:08

Доброго времени суток господа. У меня 1с 7.70.027 Торговля и Склад для Украины 7.70.048 и всё же назрел(а точнее накапали на мозг) вопрос может кто сталкивался и это элементарно решается но я увы так и не додумался( Собственно суть: есть чек/приходка/расходка ТЗ в которых имеет вид ШтрихКод-Артикул_Товар. Если пикать Штрих код всё гуд вставляется и артикул и товар и т.д. но вот проблема дальше если шк нет продавцы вводят артикул и он вставляет данные игнорируя столбец ШтрихКод, если и его нет и ищут по названию вводя в столбец товар то при вставке пропускаются столбцы и ШтрихКод и Артикул. Прошу помощи в решении данного вопроса или он вообще нерешаем? Спасибо всем за советы и подсказки

Автор: denis84 06.11.24, 9:51

kayfatuch @ Сегодня, 1:08 * ,
Добрий день! тобто ви довыднику не знаходите товар по ШК? Треба створити цей товар - заповнити всі поля в товарі, а потім додати його в ТЗ. В ТЗ "товар" це елемент довідника повинен бути, а ШК і артикул це реквізити товара

Автор: kayfatuch 06.11.24, 10:31

Цитата(denis84 @ 06.11.24, 9:51) *
Добрий день! тобто ви довыднику не знаходите товар по ШК? Треба створити цей товар - заповнити всі поля в товарі, а потім додати його в ТЗ. В ТЗ "товар" це елемент довідника повинен бути, а ШК і артикул це реквізити товара

Нет вы немного не поняли вопроса. В справочника есть и товар и штрихКод и артикул. Проблема именно в ТЗ документов описанных. Повторюсь в ТЗ документов есть Поля именно в таком порядке ШтрихКод Артикул Товар. Вставляя ШтрихКод заполняются остальные поля таблицы. но стоит пропустить один столбец и все предыдущий не заполняется. Пример ситуации у товара нет ценника и штрих код повреждён. продавцы ищут его по наименованию через столбец товар. Находят подтягивается цена остатки т.п. но артикул и ШтрихКод из справочника не тянутся в поля которые идут до столбца товар. В этом основная проблема

Автор: denis84 06.11.24, 13:08

kayfatuch @ Сегодня, 10:31 * ,
ТЗ - це таблиця значеь чи таблична часть документу? бо це "трохи" різне. Якщо ТЧ, то там на полі Штрих стоїть напевно процедура з допомогою якої і заповнюються всі поля документу. аналогічні функції треба прописати і при зміні артикула ...

Автор: Profi_1C77 06.11.24, 14:42

Цитата(kayfatuch @ 06.11.24, 10:31) *
но артикул и ШтрихКод из справочника не тянутся в поля которые идут до столбца товар.

Если ТЗ это табличная часть документа ( не таблица значений), то у Формы на этих колонках прописаны формулы, и вероятно формула не обрабатывает ( заполняет ) нужные вам колонки; Это легко проверить - найти формулу - включить отладчик и в табло отслеживать изменения реквизитов строки ( Артикул - ШтрихКод)
Если я конечно Вас правильно понял

Автор: tibank 07.11.24, 11:45

Profi_1C77 @ Вчера, 14:42 * ,
Ну на таблицу значений можно тоже формулу навесить smile.gif

Автор: kayfatuch 08.11.24, 2:31

Приношу извинения у всех кого мох ввести в заблуждение. В общем.... дошёл я до вот такого результата:

Процедура ПоискПоАртикулу()
    Если Число(Артикул) = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    
    ТЗК = СоздатьОбъект("ТаблицаЗначений");
    ТЗК.НоваяКолонка("Товар", "Справочник.Номенклатура");
    ТЗК.НоваяКолонка("Цена", "Число", 15, 3);  
    ТЗК.НоваяКолонка("ШтрихКод", "Строка", 13);  // Строка для штрих-кода
    ТЗК.НоваяКолонка("Остаток", "Число", 13, 3);
    
    ТЗК.УстановитьПараметрыКолонки("Товар",,,,,35);
    ТЗК.УстановитьПараметрыКолонки("ШтрихКод",,,,,13);
    ТЗК.УстановитьПараметрыКолонки("Цена",,,,,15);
    ТЗК.УстановитьПараметрыКолонки("Остаток",,,,,13);
    
    ВремРегистры = СоздатьОбъект("Регистры");
    ОстТоваров = ВремРегистры.ОстаткиТоваров;
    
    Спр.ВыбратьЭлементыПоРеквизиту("Артикул", СокрЛП(Артикул), 0, 0);
    
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если ПустоеЗначение(Склад) = 0 Тогда
            ВремКолво = ОстТоваров.СводныйОстаток(Фирма, Спр.ТекущийЭлемент(), Склад, "ОстатокТовара");
        Иначе
            ВремКолво = ОстТоваров.СводныйОстаток(Фирма, Спр.ТекущийЭлемент(),, "ОстатокТовара");
        КонецЕсли;
        
        ТЗК.НоваяСтрока();
        ТЗК.Товар = Спр.ТекущийЭлемент();
        ШтрихКодТекущегоТовара = Спр.ТекущийЭлемент().ШтрихКод;
        Если  ШтрихКодТекущегоТовара <> 0 Тогда
            ТЗК.ШтрихКод = Строка(ШтрихКодТекущегоТовара);
        Иначе
            Сообщить("Штрих-код пустой для товара с артикулом: " + Спр.ТекущийЭлемент().Артикул);
        КонецЕсли;
        
        ТЗК.Цена = глВернутьЦену(Спр.ТекущийЭлемент(), КатегорияЦен);
        ТЗК.Остаток = ВремКолво;
    КонецЦикла;
    
    Если ТЗК.КоличествоСтрок() = 0 Тогда
        Сообщить("Товар с артикулом " + СокрЛП(Артикул) + " не найден");
        Возврат;
    КонецЕсли;
    
    ВыбрЭлем = 0;
    Если ТЗК.КоличествоСтрок() > 1 Тогда
        Если ТЗК.ВыбратьСтроку(0, "Выберите нужный товар") = 1 Тогда
            ТЗК.ПолучитьСтрокуПоНомеру(0);
            ВыбрЭлем = 1;
        КонецЕсли;
    Иначе
        ВыбрЭлем = 1;
    КонецЕсли;
    
    Если ВыбрЭлем = 1 Тогда
        Товар = ТЗК.Товар;      
        глПриИзмененииТовара(Контекст);
    КонецЕсли;
КонецПроцедуры


Причём я ставил отладочное сообщение дополнительное в этом блоке:
 ШтрихКодТекущегоТовара = Спр.ТекущийЭлемент().ШтрихКод;
        Если  ШтрихКодТекущегоТовара <> 0 Тогда
            ТЗК.ШтрихКод = Строка(ШтрихКодТекущегоТовара);
        Иначе
            Сообщить("Штрих-код пустой для товара с артикулом: " + Спр.ТекущийЭлемент().Артикул);
        КонецЕсли;

и 1С мне выдавала что да она видит Штрих Код в базе и он такой то. но по итогу ячейка таблицы(многострочной части) с названием ШтрихКод просто тупо пустая. Может я кривой или смотрю не туда, Всё таки я самоучка и многого могу не знать. в чём причина? Спасибо всем за советы.

Автор: andrew76 08.11.24, 5:52

Цитата(kayfatuch @ 08.11.24, 5:31) *
ТЗК.НоваяКолонка("ШтрихКод", "Строка", 13);


Тип колонки "Штрихкод" символьный судя по коду.А сравнение идет как с числовым полем.

Если  ШтрихКодТекущегоТовара <> 0

Автор: Sharzem 08.11.24, 9:13

kayfatuch @ Сегодня, 2:31 * ,
Спробуйте таким чином:

    //Если ТЗК.КоличествоСтрок() = 0 Тогда
    //    Сообщить("Товар с артикулом " + СокрЛП(Артикул) + " не найден");
    //    Возврат;
    //КонецЕсли;
    //
    //ВыбрЭлем = 0;
    //Если ТЗК.КоличествоСтрок() > 1 Тогда
    //    Если ТЗК.ВыбратьСтроку(0, "Выберите нужный товар") = 1 Тогда
    //        ТЗК.ПолучитьСтрокуПоНомеру(0);
    //        ВыбрЭлем = 1;
    //    КонецЕсли;
    //Иначе
    //    ВыбрЭлем = 1;
    //КонецЕсли;
    //
    //Если ВыбрЭлем = 1 Тогда
    //    Товар = ТЗК.Товар;      
    //    глПриИзмененииТовара(Контекст);
    //КонецЕсли;

    НомСтроки = ТЗК.КоличествоСтрок();
    Если НомСтроки = 0 Тогда
        Сообщить("Товар с артикулом " + СокрЛП(Артикул) + " не найден");
        Возврат;
    ИначеЕсли НомСтроки > 1 Тогда
        Если ТЗК.ВыбратьСтроку(НомСтроки, "Выберите нужный товар") = 0 Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    ТЗК.ПолучитьСтрокуПоНомеру(НомСтроки);

    Товар = ТЗК.Товар;
    ШтрихКод = ТЗК.ШтрихКод; //ШтрихКод - реквізит табличної частини (Може називається по іншому)
    глПриИзмененииТовара(Контекст);

Примітка: Заповнення додаткових полів табличної частини у Вас мабуть криється в глПриИзмененииТовара(Контекст).
Але, якщо Ваше поле ШтрихКод це дійсно реквізит, то варто було б розглянути варіант щоб воно було Табличним полем з формулою Товар.ШтрихКод.

Автор: kayfatuch 08.11.24, 10:50

Цитата(Sharzem @ 08.11.24, 9:13) *
Примітка: Заповнення додаткових полів табличної частини у Вас мабуть криється в глПриИзмененииТовара(Контекст).

Велике дякую! Дійсно там було. я ще дивувався чому якщо шукаю по ШтрихКод Артикул то заповнюется без додаткових налаштувань. вніс зміни в головному модулі і все спрацювало.

Автор: tibank 08.11.24, 11:20

kayfatuch @ Сегодня, 2:31 * ,
Вот этот кусок кода по идее должен вываливаться с ошибкой

ТЗК.ПолучитьСтрокуПоНомеру(0);


И в такой конструкции
Спр.ТекущийЭлемент().Артикул
ТекущийЭлемент() можно опустить, просто пишите
Спр.Артикул

Ну и при создании колонки можно сразу установить параметры(и ширину тоже), поэтому УстановитьПараметрыКолонки тоже можно опустить

И Вы заполняете тз, которое создаете через СоздатьОбъект, а штрих-код не видите в многострочной части документе. Я просто не вижу в Вашем коде, как он туда попадает из ТЗК

Автор: kayfatuch 09.11.24, 1:34

Цитата(tibank @ 08.11.24, 11:20) *
Вот этот кусок кода по идее должен вываливаться с ошибкой
ТЗК.ПолучитьСтрокуПоНомеру(0);

На удивление этот момент это из стандартного решения 1с. Ну тобишь это то что сами компания 1с написала не я. Я уже модифицировал готовую процедуру в решениях типа вставки ШтрихКода.

Цитата(tibank @ 08.11.24, 11:20) *
И в такой конструкции
Спр.ТекущийЭлемент().Артикул

ТекущийЭлемент() можно опустить, просто пишите
Спр.Артикул

Спасибо за информацию поправлю. Как писал я самоучка какие видел в инете решения те и пробовал. Просто
Спр.ТекущийЭлемент().Артикул
рабочая конструкция потому и не задумывался об другом виде.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua