Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
19 Янв 2017, 20:02
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Ошибка в передачи строк из подбора в заявку покупателя  (Прочитано 4902 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
Существует задача создать пересчет шт. в кв.м. (товар керамическая плитка) при помощи отдельного реквизита.

1. Был создан реквизит Sплитки в Спр. Единицы
2. Прописана функция:

Функция Sплитки1()
Если Номенклатура.Площадь = 0 Тогда
Возврат "";
Иначе
        Sплитки=Единица.Sплитки*Количество;
    Возврат строка(Sплитки);
КонецЕсли;
КонецФункции

3. Создана колонка в таблице документов: ЗаявкаПокупателя, ЗаказПоставщику, ПоступлениеТМЦ, Реализация.

и вроде все просто и хорошо, но....

появилась проблема, база начиная с 4 позиции не передает выбранное для последней позиции кол-во и цену из подбора в заявку, заявка как бы подвисает и после произвольного клика, последняя позиции остается незаполненной.

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>


Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
Может это позволит сузить круг поиска ответа, я проверил, такая проблема возникает исключительно в заявке покупателя, ни в заказе поставщику, ни в поступлении тмц такой проблемы нет, хотя все везде прописано одинаково

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 163
  • КПД: 17%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
Функция Sплитки1()  откуда и в какой момент вызывается?

Оффлайн SharZem

  • *
  • Сообщений: 27
  • РЕПУТАЦИЯ: 3
  • КПД: 11%
  • Регистрация: 2013-01-19
  • Сайт: 
  • Профессия: Программист 7.7
такая проблема возникает исключительно в заявке покупателя, ... хотя все везде прописано одинаково
Что-то берут сомнения :nhsrm:, Процедуру ОБработкаПодбора() этого документа не мешало бы переглядеть.

И почему строка(Sплитки), а не Число(Sплитки)?

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
вот отдельный кусок где прописана функция Sплитки1:

////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
//
//******************************************************************************
// ВыбратьВидОперации(СпособВыбора)
//
// Параметры:
//  СпособВыбора - вариат выбора для метода ВыбратьЗначение,
//                 необязательный параметр, по умолчанию - 1.
//
// Возвращаемое значение:
//  Возвращенное значение метода ВыбратьЗначение().
//
// Описание:
//  Служит для запроса у пользователя Вида операции документа
//
Функция ВыбратьВидОперации(СпособВыбора = 1)

// Спросим вид операции
СписокОпераций = СоздатьОбъект("СписокЗначений");   
                 
СписокОпераций.ДобавитьЗначение(Перечисление.ВидыОперацийЗаявок.Неподтвержденная);
СписокОпераций.ДобавитьЗначение(Перечисление.ВидыОперацийЗаявок.НаСклад);
СписокОпераций.ДобавитьЗначение(Перечисление.ВидыОперацийЗаявок.НаПоставку);

Возврат СписокОпераций.ВыбратьЗначение(ВидОперации,"Выбор вида операции",,60,СпособВыбора);
КонецФункции // ВыбратьВидОперации()



Функция вес1()

ВыбратьСтроки();вес=0;
Пока ПолучитьСтроку() = 1 Цикл
вес=вес+Единица.Вес*Количество;
КонецЦикла;
Возврат строка(вес)+" кг.";
КонецФункции // ВыбратьВидОперации()

Функция Sплитки1()
Если Единица.Sплитки = 0 Тогда
Возврат "";
Иначе
        Sплитки=Единица.Sплитки*Количество;
    Возврат строка(Sплитки);
КонецЕсли;
КонецФункции
 
//*****************************************************************************
// ТекстВалюты(Вал)
//
// Параметры:
//  Вал - элемент справочника "Валюты"
//
// Возвращаемое значение:
//  Строка валюты
//
// Описание:
// Возвращает название валюты или строку "<нет валюты>"
//
Функция ТекстВалюты(Вал)

Возврат ?(ПустоеЗначение(Вал) = 0, Вал.Наименование, "<нет валюты>");

КонецФункции

на всякий случай прикладываю полный код модуля

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 163
  • КПД: 17%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
кодировка нечитаемая у файла.

надо смотреть обработкуПодбора(), и вы так и не ответили откуда вызывается Sплитки1()

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
и вы так и не ответили откуда вызывается Sплитки1()

Вызывается она здесь... (см.ниже фото), а вот часть кода Процедура ОбработкаПодбора:

Добавлено: 08 Апр 2013, 15:46

//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(ВыбЗнач, КонтФормыПодбора)

// есть ставки налогов, есть скидка
глОбработкаПодбора(Контекст, ВыбЗнач, 1, 1, 1);

КонецПроцедуры // ОбработкаПодбора()
Добавлено: 08 Апр 2013, 17:29

это часть кода глОбработкаПодбора в глоб.модуле
//******************************************************************************
// глОбработкаПодбора(Конт, ВыбЗнач, ЕстьНДС, ЕстьНП, ЕстьСкидка)
//
// Параметры:
//  Конт       - контекст документа, в котором произошло событие "Обработка подбора"
// ВыбЗнач    - выбранное значение (список параметров)
//  ЕстьНДС    - нужно заполнять при подборе ставку и сумму НДС,
//  ЕстьНП     - нужно заполнять при подборе ставку и сумму НП,
//  ЕстьСкидка - нужно заполнять при подборе сумму скидки,
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  Производит заполнение табличной части документа переданными из формы подбора
// данными.
//
Процедура глОбработкаПодбора(Конт, ВыбЗнач, ЕстьНДС, ЕстьНП, ЕстьСкидка)  Экспорт

Перем ТаблЧасть, ТаблицаПодбора;

ТипЗнач = ТипЗначенияСтр(ВыбЗнач);
Если ТипЗнач = "СписокЗначений" Тогда

ЕстьВидТМЦ   = ВыбЗнач.Получить("ЕстьВидТМЦ"); // нужно заполнять при подборе вид ТМЦ

ЦенаВподборе = ВыбЗнач.Получить("ЦенаВподборе");
Если (ЦенаВПодборе = "ИзСправочника") или (ЦенаВподборе = "Розница") Тогда
ЕстьЦена = 1; // нужно заполнять при подборе цену ТМЦ
Иначе

// (ЦенаВподборе = "Нет") или (ПустоеЗначение(ЦенаВподборе) = 1)
ЕстьЦена = 0;
КонецЕсли;
ТипЦен = ВыбЗнач.Получить("ТипЦен");

ТаблицаПодбора = ВыбЗнач.Получить("ТаблицаПодбора");
Иначе

// если не список ничего не делаем
Возврат;
КонецЕсли;

// Инициализация переменных
ФлагиИзТипаЦен = 1;
ЦенаВклНП      = 1;
ЦенаВклНДС     = 1;
    УчитыватьНП    = ЕстьНП;
    УчитыватьНДС   = ЕстьНДС;

Если ЕстьЦена = 1 Тогда
   
// Флаги включения налогов в сумму определяеются типом цен,
// кроме случая перемещения из розницы (цены в этом случае берутся из регистра с налогами)
Если ЦенаВподборе = "Розница" Тогда
ФлагиИзТипаЦен = 0;
КонецЕсли;

ФлагиИзТипаЦен = ФлагиИзТипаЦен * ?(ПустоеЗначение(ТипЦен) = 1, 0, 1);

Если ФлагиИзТипаЦен  = 1 Тогда

// Подбирали по ценам с налогами, заданными в типе цен
ЦенаВклНП  = ТипЦен.ЦенаВклНП;
ЦенаВклНДС = ТипЦен.ЦенаВклНДС;
Иначе // считаем, что подбирали в соответствии с флагами в документе

// По умолчанию считаем, что если нет в документе флагов учета налогов,
// то цена со всеми налогами (как в рознице)
Если глЕстьРеквизитШапки("СуммаВклНП", Конт.Вид()) = 1 Тогда
ЦенаВклНП   = Конт.СуммаВклНП;
КонецЕсли;

Если глЕстьРеквизитШапки("СуммаВклНДС", Конт.Вид()) = 1 Тогда
ЦенаВклНДС  = Конт.СуммаВклНДС;
КонецЕсли;
КонецЕсли;

// Выкручивать или накручивать налоги надо только если они в документе учитываются
Если глЕстьРеквизитШапки("УчитыватьНП", Конт.Вид()) = 1 Тогда
УчитыватьНП = ЕстьНП * Конт.УчитыватьНП;
КонецЕсли;

Если глЕстьРеквизитШапки("УчитыватьНДС", Конт.Вид()) = 1 Тогда
УчитыватьНДС = ЕстьНДС * Конт.УчитыватьНДС;
КонецЕсли;

КонецЕсли;

ТипЗнач = ТипЗначенияСтр(ТаблицаПодбора);
Если ТипЗнач = "ТаблицаЗначений" Тогда

РеквизитыТаблЧастиСтрока = "Единица, НомерСтроки";
Если (ЦенаВподборе = "Розница") И (глЕстьРеквизитМнЧ("Цена", Конт.Вид()) = 1) Тогда
РеквизитыТаблЧастиСтрока = РеквизитыТаблЧастиСтрока + ", Цена";
КонецЕсли;

Конт.ВыгрузитьТабличнуюЧасть(ТаблЧасть, РеквизитыТаблЧастиСтрока);

ТаблицаПодбора.ВыбратьСтроки();
Пока ТаблицаПодбора.ПолучитьСтроку() <> 0 Цикл
Номенклатура = ТаблицаПодбора.Номенклатура;
Единица = ТаблицаПодбора.Единица;

Если Номенклатура <> Единица.Владелец Тогда
    Сообщить("В подборе выбрана единица другого элемента справочника Номенклатура.
         |Проверьте правильность указания базовой и основной единицы для элемента
|""" + СокрЛП(Номенклатура) + """, а также правильность указания единиц измерения
|в справочниках единиц и цен для данной позиции номенклатуры." );
Продолжить;
КонецЕсли;

// ищем номенклатуру среди подобранных
Поз = 0;
Если (ЦенаВподборе = "Розница") И (глЕстьРеквизитМнЧ("Цена", Конт.Вид()) = 1) Тогда

// Для розницы ищем номенклатуру вместе с ценой
ТаблЧасть.ВыбратьСтроки();
Пока ТаблЧасть.ПолучитьСтроку() = 1 Цикл
    Если (ТаблЧасть.Цена = ТаблицаПодбора.Цена) И (ТаблЧасть.Единица = Единица) Тогда
    Поз = ТаблЧасть.НомерСтроки;
        Прервать;  // Нашли
    КонецЕсли;
КонецЦикла;
Иначе
    ТаблЧасть.НайтиЗначение(Единица, Поз, "Единица");
КонецЕсли;

Если Поз > 0 Тогда

// нашли, увеличиваем количество
Конт.ПолучитьСтрокуПоНомеру(Поз);
Конт.Количество = Конт.Количество + ТаблицаПодбора.Количество;

// Вызывать пересчет имеет смысл только если есть цена
Если ЕстьЦена = 1 Тогда
глПересчетТаблЧасти(Конт,"Количество");
КонецЕсли;
Иначе

// не нашли, добавляем новую строку
Конт.НоваяСтрока();
Если ЕстьВидТМЦ = 1 Тогда
Конт.ВидТМЦ = ТаблицаПодбора.ВидТМЦ;
КонецЕсли;

Конт.Номенклатура = Номенклатура;
Конт.Количество   = ТаблицаПодбора.Количество;
Конт.Единица      = Единица;
Конт.Коэффициент  = Единица.Коэффициент;   

Если ЕстьНДС = 1 Тогда
Конт.СтавкаНДС = Номенклатура.СтавкаНДС;
КонецЕсли;

Если ЕстьНП= 1 Тогда
Конт.СтавкаНП  = Номенклатура.СтавкаНП;
КонецЕсли;

Если глЕстьРеквизитМнЧ("РозничнаяНаценка",  Конт.Вид()) = 1 Тогда
Если Конт.РозничнаяНаценка = 0 Тогда
    // получим наценку из розничной цены
РознНаценка = 0;
глВернутьЦену(Номенклатура, Константа.РозничныйТипЦен, Конт.ДатаДок, , , , РознНаценка, );
Если РознНаценка = 0 Тогда
    Конт.РозничнаяНаценка = Константа.РозничныйТипЦен.Процент;
Иначе
Конт.РозничнаяНаценка = РознНаценка;
КонецЕсли;
КонецЕсли;
КонецЕсли;                                                                     

Если ЕстьЦена = 1 Тогда
глПересчитатьЦенуВДокументе(Конт, УчитыватьНП, УчитыватьНДС, ТаблицаПодбора.Цена, Конт.Валюта,
                            ЦенаВклНП, ЦенаВклНДС);
глПересчетТаблЧасти(Конт,"Цена");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Конт.Форма.Обновить(0);
Конт.Активизировать("Количество");
Конт.АктивизироватьСтроку();

КонецПроцедуры // глОбработкаПодбора()

Последний раз редактировалось: hr.al; 08 Апр 2013, 17:29. Причина: Объединение сообщений

Оффлайн SharZem

  • *
  • Сообщений: 27
  • РЕПУТАЦИЯ: 3
  • КПД: 11%
  • Регистрация: 2013-01-19
  • Сайт: 
  • Профессия: Программист 7.7
Короче, Твоя Функция Sплитки1() к ошибкам при подборе не имеет никакого отношения.
Тебе нужно курить отладчик, потому-что возникает еще больше вопросов, Например:
Процедура ПоКнопкеПодбор()
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Фирма,           "Фирма");
Параметры.ДобавитьЗначение(Склад,           "Склад");
Параметры.ДобавитьЗначение(0,               "ЕстьВидТМЦ");
Параметры.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе");
Параметры.ДобавитьЗначение(ТипЦен,          "ТипЦен");
Параметры.ДобавитьЗначение(Валюта,          "Валюта");
Параметры.ДобавитьЗначение(Курс,            "Курс");

Если Выбран() = 0 Тогда
Параметры.ДобавитьЗначение("Дата",  "ТипГраницы");
Параметры.ДобавитьЗначение(ДатаДок, "ЗначениеГраницы");
Иначе
Параметры.ДобавитьЗначение("Позиция",         "ТипГраницы");
Параметры.ДобавитьЗначение(ПолучитьПозицию(), "ЗначениеГраницы");
КонецЕсли;

Параметры.ДобавитьЗначение("Подбор номенклатуры в документ " + ПредставлениеВида() + " № " + НомерДок, "Заголовок");
глПодбор(Контекст, Параметры);

КонецПроцедуры // ПоКнопкеПодбор()
Что такое глПодбор ???

В Процедура глОбработкаПодбора() есть условие
        Если (ЦенаВПодборе = "ИзСправочника") или (ЦенаВподборе = "Розница") Тогда
            ЕстьЦена = 1; // нужно заполнять при подборе цену ТМЦ
        Иначе
           
            // (ЦенаВподборе = "Нет") или (ПустоеЗначение(ЦенаВподборе) = 1)
            ЕстьЦена = 0;
        КонецЕсли;
Тогда почему в других документах цены заполняются ?
Прокуришь в отладчике - найдешь проблему ;)

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
К сожалению я не специалист, просто любитель, отладчиком вообще не владею, а времени его изучить пока не будет... ((( может кто-то сможет помочь? цена вопроса? но конфу кинуть не смогу, может организуем процесс через TeamViewer например.

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 163
  • КПД: 17%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
(( может кто-то сможет помочь? цена вопроса? но конфу кинуть не смогу, может организуем процесс через TeamViewer например.

а в чем сложность отправить файл конфигурации? 


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
170 Сообщений
alex0402
78 Сообщений
MuI_I_Ika MuI_I_Ika
41 Сообщений
alexandr_ll
38 Сообщений
LexaK
36 Сообщений
crow1983
31 Сообщений
sertak sertak
27 Сообщений
Vzonder
21 Сообщений
BuhRust
20 Сообщений
дфтын дфтын
17 Сообщений

* Кто онлайн

  • Точка Гостей: 346
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal