Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 мая 2024, 08:55

Ошибка, помогите разобраться.

Автор mila1231, 20 мар 2019, 06:42

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

mila1231

Помогите разобраться почему так происходит, возможно что-то не так в принципе, но проблема такая. Вот код всей процедуры
&НаКлиенте
Процедура ОткрытьДокумент(Команда)

Если Объект.ТЗ.Количество() = 0  Тогда
    сообщить("Нужно заполнить таблицу значений");
    Возврат;
конецЕсли;
ТекущиеДанные = Элементы.ТЗ.ТекущиеДанные;
ТекущийНомер=Строка(Прав(Год(текущиеданные.датаДокумента),2))+"-" + Прав(текущиеданные.ссылка, 6); // не обращаем внимание ссылка-это тип число и это номер
СсылкаТекущиеДанные = текущиеданные.номер; //а это ссылка
ДанныеизЗапроса = ПолучитьДанные(СсылкаТекущиеДанные);

//ПроверкаДокумент= НайтиДокумент(ТекущийНомер);



Если строка(текущийНомер) = Строка(НайтиДокумент(ТекущийНомер)) тогда Сообщить(строка(текущийНомер) + строка(НайтиДокумент(ТекущийНомер))) конецЕсли;



ФормаД =ОткрытьФорму( "Документ.ПеремещениеТоваров.Форма.ФормаДокумента");
Для каждого строка из ДанныеизЗапроса Цикл
ФормаД.объект.номер = Строка(Прав(Год(строка.ДатаВходящегоДокумента),2))+"-" + Прав(строка.НомерСчетаПокупателю, 6);
ФормаД.объект.дата = ТекущаяДата();
ТЧ =  ФормаД.Объект.Товары.Добавить();
ТЧ.Номенклатура = строка.Номенклатура;
ТЧ.Количество =строка.Количество;

КонецЦикла;

ФормаД.Открыть();


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

меня интересует вот этот кусок

Если строка(текущийНомер) = строка(НайтиДокумент(ТекущийНомер) )тогда Сообщить(строка(текущийНомер) + строка(НайтиДокумент(ТекущийНомер))) конецЕсли;

НайтиДокумент-это функция, которая смотрит а есть ли уже такой номер и соответственно возвращает его.
А не могу я понять по какой причине два равных значения видятся, как не равные. Т.е у меня по сути не отрабатывается условие, но если я вывожу значения текущегоНомера и функции они равны.
Что может быть не так?

Людмила Киреенкова

Покажите вывод значений текущегоНомера и функции.

mila1231

функция вот:
   
   &НаСервере
Функция НайтиДокумент(СсылкаНаНомер) //это для проверки документа, а вдруг был создан
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПеремещениеТоваров.Номер КАК Номер,
| ПеремещениеТоваров.Дата КАК Дата
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Номер = &ТекущийНомер
| ";
Запрос.УстановитьПараметр("ТекущийНомер", СсылкаНаНомер);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

МассивДанные = Новый массив();

Пока Выборка.Следующий() Цикл

НомерНайтидокумент = выборка.Номер

КонецЦикла;

Возврат НомерНайтидокумент;

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

а номер вот от сюда берётся:
Функция ПолучитьДанные(СсылкаТекущиеДанные) 

    Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
              | СчетНаОплатуПокупателюТовары.Номенклатура,
              | СчетНаОплатуПокупателюТовары.Содержание,
              | СчетНаОплатуПокупателюТовары.Количество,
              | СчетНаОплатуПокупателюТовары.Цена,
              | СчетНаОплатуПокупателюТовары.Сумма,
              | СчетНаОплатуПокупателюТовары.СтавкаНДС,
              | СчетНаОплатуПокупателюТовары.СуммаНДС,
              | СчетНаОплатуПокупателюТовары.Ссылка.Организация,
              | СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
              | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК контрагенты,
              | СчетНаОплатуПокупателюТовары.Ссылка.Номер КАК НомерСчетаПокупателю,
              | СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК ДатаВходящегоДокумента
              |ИЗ
              | Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
              |ГДЕ
              | СчетНаОплатуПокупателюТовары.Ссылка = &ссылка" ;

Запрос.УстановитьПараметр("ссылка", СсылкаТекущиеДанные);


РезультатЗапроса = Запрос.Выполнить();
массивДанные = Новый Массив();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СтруктураДанных = Новый Структура("Номенклатура,Количество, контрагент,НомерСчетаПокупателю,ДатаВходящегоДокумента");
ЗаполнитьЗначенияСвойств(СтруктураДанных,ВыборкаДетальныеЗаписи);
массивДанные.Добавить(СтруктураДанных);
КонецЦикла;

Возврат массивДанные;

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


Добавлено: 20 мар 2019, 09:57


не ту функцию прицепила НайтиДокумент(СсылкаНаНомер) с той всё работает, но я хочу чтоб с такой работало.

//   &НаСервере
//Функция НайтиДокумент(СсылкаНаНомер) //это для проверки документа, а вдруг был создан   
//   Запрос = Новый Запрос;
//   Запрос.Текст =
//      "ВЫБРАТЬ
//      |   ПеремещениеТоваров.Номер КАК Номер,
//      |   ПеремещениеТоваров.Дата КАК Дата
//      |ИЗ
//      |   Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
//      |ГДЕ
//      |   ПеремещениеТоваров.Номер = &ТекущийНомер
//      |   ";
//   Запрос.УстановитьПараметр("ТекущийНомер", СсылкаНаНомер);
//   
//   РезультатЗапроса = Запрос.Выполнить();
//   Выборка = РезультатЗапроса.Выбрать();
//   
//МассивДанные = Новый массив();   
//   
//Пока Выборка.Следующий() Цикл
//   
//   НомерНайтидокумент = выборка.Номер
//   
//КонецЦикла;

//Возврат НомерНайтидокумент;

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

AIFrame

Как-то костыльно это все.
Если в ТЧ, откуда берутся исходные данные, есть ссылки на объекты, лучше работать с ними, а не кошмарить их преставление через Прав\Лев\Сред.
А в данном случае, надо:
1. Выводить перед сравнением в консоль значения, которые ведут себя не так, как хочется. Через Сообщить. И смотреть на них.
2. Сравнивая строки, необходимо учитывать, что "Ф123   " != "ф123", а вот НРег(СокрЛП("Ф123   ")) == НРег(СокрЛП("ф123")).

LexaK

ржунемогу,  номер получаем из документа СчетНаОплатуПокупателю
Цитировать|ИЗ
                  |    Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары

потом ищем по этому номеру документ Перемещения
Цитировать|ИЗ
        |    Документ.ПеремещениеТоваров КАК ПеремещениеТоваров

и какая между ними связь по номеру?
если помогло нажмите: Спасибо!

mila1231

Цитата: AIFrame от 20 мар 2019, 10:06
Как-то костыльно это все.
Если в ТЧ, откуда берутся исходные данные, есть ссылки на объекты, лучше работать с ними, а не кошмарить их преставление через Прав\Лев\Сред.
А в данном случае, надо:
1. Выводить перед сравнением в консоль значения, которые ведут себя не так, как хочется. Через Сообщить. И смотреть на них.
2. Сравнивая строки, необходимо учитывать, что "Ф123   " != "ф123", а вот НРег(СокрЛП("Ф123   ")) == НРег(СокрЛП("ф123")).
Спасибо, действительно были лишние символы, но я не могу понять откуда они взялись, но ладно с этим. Просто может подскажите, как не кошмарить? чтоб не совсем топорно выглядело.Данные брала на прямую из документа счёт покупателю(БП3,0, последняя конфигурация), т.к не нашла в какой из регистров эти данные заносятся, возможно плохо искала. Но из документа в Таблицу значений мне нужно было только дату, номер и контрагента.
А дальше мне необходимо, чтоб номер Счета покупателя был равен номеру документа перемещение,но не полностью, а из счета покупателю нужно взять последние 6 символов, а в начало добавить год составления документа. И плюс заполнить полностью табличную часть номенклатурой и количеством идентично счёту покупателя.

Задача в том, чтоб счёт покупателю перенести в перемещение. При этом не задублировать записи. Поэтому да связь только по номеру, т.к дата документа перемещение должна быть текущая.

LexaK

ЦитироватьА дальше мне необходимо, чтоб номер Счета покупателя был равен номеру документа перемещение,но не полностью, а из счета покупателю нужно взять последние 6 символов, а в начало добавить год составления документа. И плюс заполнить полностью табличную часть номенклатурой и количеством идентично счёту покупателя.
Вы это серьезно? кто вам такие задачи ставит?
Есть реквизиты ДокументОснования - куда пишется именно ссылка на документ (а не какие то номера с приставками),
так и с вашим Перемещением если есть - используйте, а если нет - добавьте, реквизит ДокументОснования и в него пишите ваш Счет покупателя, и потом по ссылке легко найдете связанные документы,
если помогло нажмите: Спасибо!

mila1231

Цитата: LexaK от 20 мар 2019, 11:05
ЦитироватьА дальше мне необходимо, чтоб номер Счета покупателя был равен номеру документа перемещение,но не полностью, а из счета покупателю нужно взять последние 6 символов, а в начало добавить год составления документа. И плюс заполнить полностью табличную часть номенклатурой и количеством идентично счёту покупателя.
Вы это серьезно? кто вам такие задачи ставит?
Есть реквизиты ДокументОснования - куда пишется именно ссылка на документ (а не какие то номера с приставками),
так и с вашим Перемещением если есть - используйте, а если нет - добавьте, реквизит ДокументОснования и в него пишите ваш Счет покупателя, и потом по ссылке легко найдете связанные документы,
Я правильно поняла для документа перемещение создать Дополнительное ведение и туда записывать ссылку на документ Счёт?

LexaK

ЦитироватьДополнительное ведение
это что?
лучше придерживаться сложившихся наименование.
вот реквизит: ДокументОснование - понятно всем.

а Дополнительное ведение - ??? :xfbnsdfb:

Да, создайте реквизит и туда пишите ссылку
если помогло нажмите: Спасибо!

AIFrame

В табличной части документа если есть ссылки на другие документы, то нужно этими ссылками и оперировать.
Итак, давай по порядку.
Наши исходные данные - ДокументСсылка.СчетНаОплатуПокупателю. Табличная часть - Товары.
Нам нужно - Создать перемещение, перенести ТЧ с товарами из выбранного счета в ТЧ поступления. Установить номер по номеру Счета по шаблону: ГГ-Номер
Проверить, что документ с таким номером еще не существует. Если существует - работать с существующим.

Короче, расписывать не буду. Проще накидать обработку.
Добавлено: 20 мар 2019, 12:14


Но таки да. Для установления правильной связи между документами, нужно в список типов значений для колонки ДокументОприходования (ТЧ Товары) добавить тип ДокументСсылка.СчетНаОплатуПокупателю. Уже прописанная ОбработкаЗаполнения в модуле документа по идее справится и с заполнением шапки, и с заполнением ТЧ. Если там все жестко по типу документа расписано - добавить обработку нового типа по аналогии.
Добавить в "Ввод на основании" Перемещения товаров документ СчетНаОплатуПокупателю. Можно будет создавать перемещения "на основании" Счета.
Тогда будет связь между ними на уровне реквизита ТЧ. Можно до кучи еще в Критерии отбора - СвязанныеДокументы установить этот реквизит и тогда оно даже в структуре подчиненности документа станет вылазить.
Ну а твой костыль с поиском по номеру - он изменится на поиск поступления, у которого в ТЧ Товары есть ссылка на твой Счет.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск