7.7 НайтиЗначение() для Числа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Samouchka, 23 мар 2013.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Всем привет.
    Конфа 1С 7.7
    Имею реквизит шапки документа НомСтр. Тип - число.
    В НомСтр надо вывести номер строки таблицы значений ТЗ2, где будет Выб.Код.
    Выб.Код - это код выбранного элемента справочника "Номенклатура". Код имеет тип - Число
    Пишу:

    НомСтр=ТЗ2.НайтиЗначение(Выб.Код, ,"КодТов");

    И реквизит НомСтр всегда равен нулю, т.е. строка не ищется. Неужели методом НайтиЗначение() можно только строковые типы искать? До этого передавал в метод строковое
    значение Выб.Шкод, искалось на мази. Пытался преобразовать число в строку функциями Строка, СокрЛП, Формат - всё безуспешно. Помогите, пожалуйста. Заранее спасибо.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    ТЗ2.НайтиЗначение(Выб.Код,НомСтр ,"КодТов");
  3. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Пробовал написать как Вы сказали, результата нет по-прежнему. Решил написать код целиком. Все подробности
    в комментариях. Блоки 4 и 5 не дают никаких результатов, т.е. товар по коду не ищется, в то время как со штрих-кодами
    всё замечательно (блоки 1-3 работают). Помогите разобраться, пожалуйста.
    Код:
    Процедура ОбработкаПодбора(Выб)
    //Об этой обработке подбора:
    //Цель: выбирая различные по штрих-коду (если есть штрих-код) и коду (если нет штрих-кода) товары из справочника
    //в произвольном порядке, заполнить колонку табличной части документа итоговым количеством по каждому штрих-коду
    //либо коду товара. Если штрих-код (код) товара в колонке "Количество" уже есть, нужно найти соответствующую
    //строку и поставить туда количество товара, если нет - добавить новую строку.
    
    //ТЗ-это таблица значений подобранных товаров
    
    //ТЗ2-свёрнутая по штрих-коду и коду с итогом по количеству ТЗ
    
    //ТЗ3-сама выгруженная табличная часть документа. Это в основном фиксированная таблица значений, изменяющаяся
    //только при добавлении новых строк. Создал её только потому что не знаю как в самом документе найти строку,
    //содержащую выбранное значение из справочника.
    
    //Выб.Код - это код выбранного элемента справочника "Номенклатура". Код имеет тип - Число
    
    //Выб.Шкод - это штрих-код выбранного элемента справочника "Номенклатура", тип - Строка
    
    //При подборе по ШК или коду находится строка ТЧ документа
    //и строка ТЗ2, в строку ТЧ ставится количество из ТЗ2. Для удобства разбил код на блоки:
    
    //1 блок: добавляем выбор в ТЗ
    ПолучитьСтрокуПоНомеру(0);
    Ном=ТЗ.КоличествоСтрок()+1;
    Кол=1;
    Если ВвестиЧисло(Кол, "Введите количество",15,3,)=1 тогда
    Товар=?(Режим="Каталог",Выб,Выб.Товар);
    ТЗ.НоваяСтрока();
    ТЗ.НомерСтр=Ном;
    ТЗ.НомерСтроки=Ном;
    ТЗ.Товар =Выб;
    ТЗ.КодТов = Выб.Код;							
    ТЗ.Штрих=Выб.Шкод;
    ТЗ.Колич=Кол;
    КонецЕсли;
    АктивизироватьСтроку();
    
    ТЗ.Выгрузить(ТЗ2);
    ТЗ2.Свернуть("Штрих,КодТов","Колич");
    //2 блок
    //Если штрих-код у товара есть и товар с этим штрих-кодом есть в табличной части инвентаризации, тогда раздадим количество по штрих-кодам:
    Если ПустоеЗначение(Выб.Шкод)=0 Тогда
    Если ТЗ2.НайтиЗначение(Выб.Шкод,НомСтр,)=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Шкод,НомСтр1,)=1 Тогда
    ПолучитьСтрокуПоНомеру(НомСтр1);
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Количество=ТЗ2.Колич;
    ОбновитьСумму()
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //3 блок
    //Если штрих-код у товара есть, но товара с этим штрих-кодом нет в табличной части инвентаризации, тогда добавим новую строку с товаром:
    Если ПустоеЗначение(Выб.Шкод)=0 Тогда
    Если ТЗ2.НайтиЗначение(Выб.Шкод,НомСтр,)=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Шкод,НомСтр1,)=0 Тогда
    НоваяСтрока();
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Добавлен=1;
    КодТов=Выб.Код;
    Товар=Выб;
    Цена=Выб.ЦенаЗак.Получить(ДатаДок);
    ЦенаПродажи=Выб.ЦенаРоз.Получить(ДатаДок);
    Шкод=Выб.Шкод;
    Количество=ТЗ2.Колич;
    НСтр=НомерСтроки;
    ОбновитьСумму();
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //4 блок
    //Если штрих-кода у товара нет, но в табличной части инвентаризации он есть, тогда раздадим количество по кодам товаров:
    Если ПустоеЗначение(Выб.Шкод)=1 Тогда
    ТЗ2.Свернуть("КодТов", "Колич");
    Если ТЗ2.НайтиЗначение(Выб.Код,НомСтр,)=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Код,НомСтр1,)=1 Тогда
    ПолучитьСтрокуПоНомеру(НомСтр1);
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Количество=ТЗ2.Колич;
    ОбновитьСумму();
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //5 блок
    //Если штрих-кода у товара нет и в табличной части инвентаризации его также нет, тогда добавим новую строку с товаром:
    Если ПустоеЗначение(Выб.Шкод)=1 Тогда
    Если ТЗ2.НайтиЗначение(Выб.Код,НомСтр,)=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Код,НомСтр1,)=0 Тогда
    НоваяСтрока();
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Добавлен=1;
    КодТов=Выб.Код;
    Товар=Выб;
    Цена=Выб.ЦенаЗак.Получить(ДатаДок);
    ЦенаПродажи=Выб.ЦенаРоз.Получить(ДатаДок);
    Шкод=Выб.Шкод;
    Количество=ТЗ2.Колич;
    НСтр=НомерСтроки;
    ОбновитьСумму();
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //Обнулим счетчики строк
    НомСтр=0;
    НомСтр1=0;
    КонецПроцедуры
    
    
  4. Vlan
    Online

    Vlan Гость Гость

    Чудес не бывает. Если значение не найдено, то смотреть через отладчик, что в нужной колонке ТЗ и что в строке поиска. Возможно ищем код, а там сам товар.
  5. Vlan
    Online

    Vlan Гость Гость

    Еще я бы попробовал перед поиском заново загрузить исходную таблицу и не сворачивать ее. Находит что-то?
  6. Vlan
    Online

    Vlan Гость Гость

    И проверьте значение НомСтр и НомСтр1. Подозреваю, что они не равны 0, а значит поиск происходит только по этой строке.
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Ну надо же указать по какой колонке искать!
    Код:
    Если ТЗ2.НайтиЗначение(Выб.Код,НомСтр,"ТутИмяКолонки")=1 Тогда
  8. Vlan
    Online

    Vlan Гость Гость

    Согласен. Колонка не обязательна, но я бы тоже указал.
  9. Бухгалтерский угодник
    Offline

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

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

    +Код в справочнике ТМЦ тоже числовой?
  10. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Попробовал как Вы сказали не сворачивать и загружать таблицы перед поиском. В результате в развернутом виде ТЗ2 или вообще пустая, или содержит одну пустую строку. Но
    при любом варианте по штрих-коду значение ищется, а по коду - нет. Отладчиком, к сожалению, не умею пользоваться, я новичок в программировании 1С. Все проверяемые
    реквизиты я добавил на форму и показал что у меня выходит. На скриншотах товар с кодом 991без штрих-кода, с кодом 7 со штрих-кодом. Скриншоты во вложениях. А это
    переписанный код. В нём я специально закомментировал //НомСтр=0; //НомСтр1=0 чтобы видеть в программе результат поиска после завершения подбора. Перед
    выполнением подбора я их обнулял вручную.
    Код:
    Процедура ОбработкаПодбора(Выб)
    //Об этой обработке подбора:
    //Цель: выбирая различные по штрих-коду (если есть штрих-код) и коду (если нет штрих-кода) товары из справочника
    //в произвольном порядке, заполнить колонку табличной части документа итоговым количеством по каждому штрих-коду
    //либо коду товара. Если штрих-код (код) товара в колонке "Количество" уже есть, нужно найти соответствующую
    //строку и поставить туда количество товара, если нет - добавить новую строку.
    
    //ТЗ-это таблица значений подобранных товаров
    
    //ТЗ2-свёрнутая по штрих-коду и коду с итогом по количеству ТЗ
    
    //ТЗ3-сама выгруженная табличная часть документа. Это в основном фиксированная таблица значений, изменяющаяся
    //только при добавлении новых строк. Создал её только потому что не знаю как в самом документе найти строку,
    //содержащую выбранное значение из справочника.
    
    //Выб.Код - это код выбранного элемента справочника "Номенклатура". Код имеет тип - Число
    
    //Выб.Шкод - это штрих-код выбранного элемента справочника "Номенклатура", тип - строка
    
    //При подборе по ШК или коду находится строка ТЧ документа
    //и строка ТЗ2, в строку ТЧ ставится количество из ТЗ2. Для удобства разбил код на блоки:
    
    
    //1 блок: добавляем выбор в ТЗ
    ПолучитьСтрокуПоНомеру(0);
    Ном=ТЗ.КоличествоСтрок()+1;
    Кол=1;
    Если ВвестиЧисло(Кол, "Введите количество",15,3,)=1 тогда
    Товар=?(Режим="Каталог",Выб,Выб.Товар);
    ТЗ.НоваяСтрока();
    ТЗ.НомерСтр=Ном;
    ТЗ.НомерСтроки=Ном;
    ТЗ.Товар =Выб;
    ТЗ.КодТов = Выб.Код;							
    ТЗ.Штрих=Выб.Шкод;
    ТЗ.Колич=Кол;
    КонецЕсли;
    АктивизироватьСтроку();
    
    //ТЗ.Выгрузить(ТЗ2);
    //ТЗ2.Свернуть("Штрих,КодТов","Колич");
    //2 блок
    //Если штрих-код у товара есть и товар с этим штрих-кодом есть в табличной части инвентаризации, тогда раздадим количество по штрих-кодам:
    Если ПустоеЗначение(Выб.Шкод)=0 Тогда
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    ТЗ.Выгрузить(ТЗ2);
    //ТЗ2.Свернуть("Штрих,КодТов","Колич");
    Если ТЗ2.НайтиЗначение(Выб.Шкод,НомСтр,"Штрих")=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Шкод,НомСтр1,"Шкод")=1 Тогда
    ПолучитьСтрокуПоНомеру(НомСтр1);
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Количество=ТЗ2.Колич;
    ОбновитьСумму()
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //3 блок
    //Если штрих-код у товара есть, но товара с этим штрих-кодом нет в табличной части инвентаризации, тогда добавим новую строку с товаром:
    Если ПустоеЗначение(Выб.Шкод)=0 Тогда
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    ТЗ.Выгрузить(ТЗ2);
    //ТЗ2.Свернуть("Штрих,КодТов","Колич");
    Если ТЗ2.НайтиЗначение(Выб.Шкод,НомСтр,"Штрих")=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Шкод,НомСтр1,"Шкод")=0 Тогда
    НоваяСтрока();
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Добавлен=1;
    КодТов=Выб.Код;
    Товар=Выб;
    Цена=Выб.ЦенаЗак.Получить(ДатаДок);
    ЦенаПродажи=Выб.ЦенаРоз.Получить(ДатаДок);
    Шкод=Выб.Шкод;
    Количество=ТЗ2.Колич;
    НСтр=НомерСтроки;
    ОбновитьСумму();
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //4 блок
    //Если штрих-кода у товара нет, но в табличной части инвентаризации он есть, тогда раздадим количество по кодам товаров:
    Если ПустоеЗначение(Выб.Шкод)=1 Тогда
    //ТЗ2.Свернуть("КодТов", "Колич");
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    ТЗ.Выгрузить(ТЗ2);
    //ТЗ2.Свернуть("Штрих,КодТов","Колич");
    Если ТЗ2.НайтиЗначение(Выб.Код,НомСтр,"КодТов")=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Код,НомСтр1,"КодТов")=1 Тогда
    ПолучитьСтрокуПоНомеру(НомСтр1);
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Количество=ТЗ2.Колич;
    ОбновитьСумму();
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //5 блок
    //Если штрих-кода у товара нет и в табличной части инвентаризации его также нет, тогда добавим новую строку с товаром:
    Если ПустоеЗначение(Выб.Шкод)=1 Тогда
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    ТЗ.Выгрузить(ТЗ2);
    //ТЗ2.Свернуть("Штрих,КодТов","Колич");
    Если ТЗ2.НайтиЗначение(Выб.Код,НомСтр,"КодТов")=1 Тогда
    Если ТЗ3.НайтиЗначение(Выб.Код,НомСтр1,"КодТов")=0 Тогда
    НоваяСтрока();
    АктивизироватьСтроку();
    ТЗ2.ПолучитьСтрокуПоНомеру(НомСтр);
    Добавлен=1;
    КодТов=Выб.Код;
    Товар=Выб;
    Цена=Выб.ЦенаЗак.Получить(ДатаДок);
    ЦенаПродажи=Выб.ЦенаРоз.Получить(ДатаДок);
    Шкод=Выб.Шкод;
    Количество=ТЗ2.Колич;
    НСтр=НомерСтроки;
    ОбновитьСумму();
    ВыгрузитьТабличнуюЧасть(ТЗ3);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //Обнулим счетчики строк
    //НомСтр=0;
    //НомСтр1=0;
    КонецПроцедуры
    
    Убедительная просьба пользоваться тегами. Уважайте коллег

    Вложения:

  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Я бы все же через отладчик или через ТЗ2.ВыбратьСтроку() посмотрел, что у вас творится в ТЗ2....
    Попробуйте еще
    Код:
    Если ТЗ2.НайтиЗначение(СокрЛП(Выб.Шкод),НомСтр,"Штрих")=1 Тогда
  12. Vlan
    Online

    Vlan Гость Гость

    Этого не может быть. Свернув пустую таблицу, невозможно получить данные.
    По вашему алгоритму если в ТЗ2 мы ничего не находим, то второе условие - поиск в ТЗ3 уже не выполняется. Число мы ищем или строку, дело не в этом - при наличии в таблице искомого и правильном запросе, данные обязательно найдутся.
    Попробуйте закомментировать пока предыдущие блоки. Если трудно разобраться с отладчиком, добавляйте проверочные строчки вида:
    Код:
    Сообщить(ТЗ2.КоличествоСтрок());
    Сообщить(Выб.Код);
    и подобное, чтобы увидеть, что же делается программно.
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Еще бы и содержимое таблицы глянуть
    Код:
    ТЗ2.ВыбратьСтроку()
Похожие темы
  1. Rais
    Ответов:
    5
    Просмотров:
    622
Загрузка...

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