Имя: Пароль:
1C
 
Вопрос по запросу
, ,
0 Nemirov
 
13.02.20
09:30
При выполнении запроса не видит проведенную существующую накладную через выборку, и по условию создает новую приходную накладную, через точку остановы прогонял выборка-ссылка = ошибка чтения значения. Для остальных документов, так же по подобной выборке нормально все перезаписывает.
1 Nemirov
 
13.02.20
09:30
Функция СформироватьСебестоимость(Дата, Сумма, СтруктурнаяЕдиница)
    
    Если СтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.НайтиПоКоду("54") Тогда
        Контрагент = Справочники.Контрагенты.НайтиПоКоду("1-00008969"); //бургеры   //в копии 8967   в оригинале 8969
    Иначе
        Контрагент = Справочники.Контрагенты.НайтиПоКоду("1-00008634");       //японская кухня
    КонецЕсли;    
    
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |    Приход.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.ПриходнаяНакладная КАК Приход
    |ГДЕ
    |    Приход.Дата = &Дата
    |    И Приход.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
    |   И Приход.ПометкаУдаления = ЛОЖЬ
    |   И Приход.Комментарий ПОДОБНО &Комм
    |   И Приход.Контрагент = &Контрагент
    |";
    
    Запрос.УстановитьПараметр("Дата",Дата );
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("Комм","%"+"#Создан автоматически загрузкой из iiko."+"%");
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Приход = Документы.ПриходнаяНакладная;
        Приход= Выборка.Ссылка.ПолучитьОбъект();
        ЭтоНовый = Ложь;
        Приход.УстановитьПометкуУдаления(Ложь);
    Иначе
    Приход = Документы.ПриходнаяНакладная.СоздатьДокумент(); //Здесь
    ОмОбщиеПроцедурыИФункции.ПриСозданииНовогоДокумента(Приход);
    ЭтоНовый = Истина;
    КонецЕсли;
    
    Приход.Состав.Очистить();
    Приход.Дата               = Дата - 6;
    Приход.Фирма              = Константы.ФирмаОпределяющаяЦеныДляТорговогоОборудования.Получить();
    Приход.Контрагент         = Контрагент;
    Приход.СтруктурнаяЕдиница = СтруктурнаяЕдиница;
    Приход.Склад              = Приход.СтруктурнаяЕдиница.СкладТорговогоЗала;
    Приход.Договор            = ОпределитьДоговор(Приход.Контрагент,Перечисления.ВидыДоговоров.Покупка,Перечисления.ТипыДоговоров.КупляПродажа,Приход.Фирма);
    Приход.Валюта             = Справочники.Валюты.Рубль;
    Приход.КурсВалютыДоговора = 1;
    Приход.ВариантРасчетаНДС  = Перечисления.ВариантыРасчетаНДС.БезНДС;
    Приход.Комментарий        = "#Создан автоматически загрузкой из iiko.";
    ТекНоменклатура = Справочники.Номенклатура.НайтиПоКоду("1-00022857"); //товар
    НоваяСтрока                       = Приход.Состав.Добавить();
    ЕдиницаИзмерения = ОмОбщиеПроцедурыИФункции.ПолучитьБазовуюЕдиницуИзмерения(ТекНоменклатура);
    НоваяСтрока.ЕдиницаИзмерения      = ЕдиницаИзмерения;
    НоваяСтрока.Коэффициент           = 1;
    НоваяСтрока.Номенклатура          = ТекНоменклатура;
    НоваяСтрока.Количество            = 1;
    НоваяСтрока.КоличествоПоДокументу = 1;
    СтавкаНДС = ОмОбщиеПроцедурыИФункции.ПолучитьСтавкуНДСНаДату(ТекНоменклатура,ТекущаяДата());
    НоваяСтрока.СтавкаНДС             = СтавкаНДС;    
    НоваяСтрока.Цена                  = Сумма;
    ОмРаботаСФормами.РассчитатьСуммуТабЧасти(НоваяСтрока);
    ОмРаботаСФормами.РассчитатьСуммуНДСТабЧасти(НоваяСтрока, Приход.ВариантРасчетаНДС);    
    ОмРаботаСФормами.РассчитатьВсегоТабЧасти(НоваяСтрока, Приход.ВариантРасчетаНДС);
    ОмОбщиеПроцедурыИФункции.СформироватьНомерДокумента(Приход);
    Попытка
        Приход.Записать(РежимЗаписиДокумента.Запись);
        Сообщить(" " + Приход + ": Документ записан.");
        Отказ = Ложь;
    Исключение
        Сообщить(ОписаниеОшибки());
        Отказ = Истина;
    КонецПопытки;
    Если Не Отказ Тогда
        ДокПереоценка                              = Документы.Переоценка.СоздатьДокумент();
        ОмОбщиеПроцедурыИФункции.ПриСозданииНовогоДокумента(ДокПереоценка);
        ДокПереоценка.Автор                        = ПараметрыСеанса.ТекущийПользователь;
        ДокПереоценка.Фирма                        = Приход.Фирма;
        ДокПереоценка.Дата                         = Приход.Дата - 2;
        ДокПереоценка.ДокОснование                 = Приход.Ссылка;
        ДокПереоценка.КатегорияЦен                 = Справочники.КатегорииЦен.Розничная;
        ДокПереоценка.Комментарий                  = "#Создан автоматически";
        ДокПереоценка.СтруктурнаяЕдиница           = Приход.СтруктурнаяЕдиница;
        ДокПереоценка.СтруктурнаяЕдиницаНазначения = Приход.СтруктурнаяЕдиница;
        СтрокаПереоценки                  = ДокПереоценка.Состав.Добавить();
        СтрокаПереоценки.Номенклатура     = ТекНоменклатура;
        СтрокаПереоценки.ЕдиницаИзмерения = ЕдиницаИзмерения;
        СтрокаПереоценки.ЦенаНовая = 1;
        ОмОбщиеПроцедурыИФункции.СформироватьНомерДокумента(ДокПереоценка);
        Попытка
            ДокПереоценка.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить(" " + ДокПереоценка+ ": Документ проведен.");
            Отказ = Ложь;
        Исключение
            Сообщить(ОписаниеОшибки());
            Отказ = Истина;
        КонецПопытки;
    КонецЕсли;
    Если Не Отказ Тогда
        Попытка
            Приход.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить(" " + Приход + ": Документ проведен.");
            Отказ = Ложь;
        Исключение
            Сообщить(ОписаниеОшибки());
            Отказ = Истина;
        КонецПопытки;
    КонецЕсли;
    Возврат(Отказ);
    
КонецФункции
2 Nemirov
 
13.02.20
09:31
Помогите
3 Nemirov
 
13.02.20
09:31
Исправлюсь
    Запрос.УстановитьПараметр("Дата",Дата - 10 );
4 Nemirov
 
13.02.20
09:33
Если Выборка.Следующий() Тогда
        Приход= Выборка.Ссылка.ПолучитьОбъект();
        ЭтоНовый = Ложь;
        Приход.УстановитьПометкуУдаления(Ложь);
Иначе
    Приход = Документы.ПриходнаяНакладная.СоздатьДокумент(); //Здесь
    ОмОбщиеПроцедурыИФункции.ПриСозданииНовогоДокумента(Приход);
    ЭтоНовый = Истина;

КонецЕсли;
5 Nemirov
 
13.02.20
09:33
Выполняется 2 условие, хотя документ существует.
6 unbred
 
13.02.20
09:36
может всё-таки дата между?
7 GROOVY
 
13.02.20
09:37
Автор в курсе того что дата минус число = дата минус секунды?
8 Nemirov
 
13.02.20
09:42
(6)
Конструкция даты была изначально такой не я автор даты)
Процедура ПриОткрытии()
    
    СоответсвиеМагазинов = Новый Соответствие;
    СоответсвиеМагазинов.Вставить("2", Справочники.СтруктурныеЕдиницы.НайтиПоКоду("54")); //бургеры
    СоответсвиеМагазинов.Вставить("1", Справочники.СтруктурныеЕдиницы.НайтиПоКоду("52")); //японская кухня
    
    Если АвтоЗапуск Тогда
        ПутьКсерверу = "*******";
        Порт         = "****";
        Логин        = "**";
        Пароль       = "Drsao65";
        ТипЗагрузки = 1;
        //ИмяФайла = "V:\Прием кассовой выручки.csv";
        //КаталогНаДиске = Новый Файл(ИмяФайла);
        //Если КаталогНаДиске.Существует() Тогда        
        //    ПрочитатьФайл();
        //    ОбрабткаНажатияКнопкиВыполнить();
        //Иначе
        //    Сообщить("Файл не найден");
        //КонецЕсли;
        Флажок1 = Истина;
        НачПериода = НачалоДня(ТекущаяДата() - 86400);
        КонПериода = КонецДня(ТекущаяДата() - 86400);
        ПрочитатьCOM();
        ОбрабткаНажатияКнопкиВыполнитьCOM();
        ЭтаФорма.Закрыть();        
    Иначе
        ТипЗагрузки = 0;                      
    КонецЕсли;
    
    //ЭлементыФормы.ПолеВыбора.СписокВыбора.Очистить();
КонецПроцедуры
9 catena
 
13.02.20
09:51
(8)Вытаскиваешь запрос в консоль, по одному комментируешь условия, ищешь то, на котором спотыкается, исправляешь.
10 Greeen
 
13.02.20
10:40
(0) Если предполагается, что по этому контрагенту должна быть одна накладная в день, то в запросе меняем
|    Приход.Дата = &Дата
на
|    НачалоПериода(Приход.Дата, День) = НачалоПериода(&Дата, День)
и смотрим, попадет что то или нет
11 Nemirov
 
13.02.20
10:44
(7) Так задумано, документы проводятся последовательно с разницей в секунды)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший