Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Ввести на основании

v7: Ввести на основании
Я
   Yasher56
 
09.07.18 - 12:59
Имеется ТиС 9.2.
В ней необходимо реализовать печать чека из документа реализации. В конфигураторе ставлю галку на является основанием для чекККМ.
При попытке вывести на основании реализации чекККМ выводит 
Касса       = ДокументОснование.Касса;
{Документ.ЧекККМ.Форма.Модуль(879)}: Поле агрегатного объекта не обнаружено (Касса).
Куда закопаться?
 
 
   Salimbek
 
1 - 09.07.18 - 13:01
(0) Можешь начать с Документ.ЧекККМ.Форма.Модуль(879)
   Cool_Profi
 
2 - 09.07.18 - 13:02
Я буду неоргинальным, но в отладчик.... Наверное, у тебя у тебя в реалициии нет кассы...Или, что очень страннно -  в чеке нет кассы....
Посмотри на Документ.ЧекККМ.Форма.Модуль(879)
   uno-group
 
3 - 09.07.18 - 13:03
Обратиться к программисту.
   Yasher56
 
4 - 09.07.18 - 13:07
(3) из своего кармана платить заставят))
   Yasher56
 
5 - 09.07.18 - 13:08
(1)////////////////////////////////////////////////////////////////////////////////

// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//

//******************************************************************************
// СписаниеОстатковТМЦ(ТаблНоменклатуры)

//
// Параметры:

//  ТаблНоменклатуры - таблица номенклатуры (должна содержать колонки 
//                     1) "Номенклатура"

//                     2) "Количество"
//                     3) "СуммаРуб"  (для розничного склада)

//                     4) "СкидкаРуб" (для розничного склада)
//

// Возвращаемое значение:
//  Нет

//
// Описание:

//  Проведение списания остатков ТМЦ со склада по регистру "ОстаткиТМЦ"
// без контроля остатков.

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

        РегОстатки.Фирма            = Фирма;
        РегОстатки.Склад            = Склад;
        РегОстатки.Номенклатура        = ТекНоменклатура;
        
        // Ресурсы

        РегОстатки.Количество        = ТаблНоменклатуры.Количество;
        РегОстатки.ЦенаПрод         = ТаблНоменклатуры.ЦенаПрод;
        
        // Реквизиты

        РегОстатки.Внутреннее        = 0;
        
        РегОстатки.ДвижениеРасходВыполнить();
        
    КонецЦикла;
    
КонецПроцедуры// СписаниеОстатковТМЦ()


//******************************************************************************

// ПроведениеПоРегистрам(ПараметрПроведения)
//

// Параметры:
//  ПараметрПроведения - строка - может принимать значение "НеКонтролироватьОстаткиТМЦ"

//
// Возвращаемое значение:

//  Нет.
//

// Описание:
//  Проведение по регистрам оперативного учета. В случае если ПараметрПроведения

// равен "НеКонтролироватьОстаткиТМЦ" документ проводится без контроля
// отрицательных остатков ТМЦ.

//
Процедура ПроведениеПоРегистрам(ПараметрПроведения)
    
    Перем ВремРегистры;
    Перем ВремОстаткиТМЦ, ВремРезервыТМЦ;                           
    Перем КодОперации;
    Перем ФирмаДляОстатковТМЦ;
    
    // Удаление движений по регистрам.

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

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

            Если глСписаниеОстатковТМЦ    (Контекст,ТаблицаТМЦ,СписокПараметров, ВремОстаткиТМЦ, ВремРезервыТМЦ)=0 Тогда
                Возврат;
            КонецЕсли;                                                         
        КонецЕсли;
        
    Иначе// чек на возврат

        глПриходОстатковТМЦ        (Контекст,ТаблицаТМЦ,СписокПараметров);
    КонецЕсли;
    
    // оприходуем деньги в кассу

    Регистр.Касса.Фирма            = Фирма;
    Регистр.Касса.Касса         = Касса;
    Регистр.Касса.Валюта         = Валюта;
        
    Регистр.Касса.СуммаВал         = Итог("Сумма");
    Регистр.Касса.СуммаУпр         = глПересчет(Итог("Сумма"),Валюта,Курс,глДоллары,ДатаДок,Кратность);
    Регистр.Касса.СуммаРуб         = глПересчет(Итог("Сумма"),Валюта,Курс,глРубли,  ДатаДок,Кратность);
        
    Регистр.Касса.КодОперации     = КодОперации;
        
    Если ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек Тогда// продажа

        Регистр.Касса.ДвижениеПриходВыполнить();
    Иначе     
        Регистр.Касса.ДвижениеРасходВыполнить();
    КонецЕсли;
        
КонецПроцедуры// ПроведениеПоРегистрам()


////////////////////////////////////////////////////////////////////////////////

// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//

//******************************************************************************
// Предопределенная процедура.

//
Процедура ОбработкаПроведения(ПараметрПроведения)
    
    // ПараметрПроведения может принимать значение "НеКонтролироватьОстаткиТМЦ"

    // (например из обработки On_ams.ert - обработки обслуживания ККМ АМС-100Ф,

    //  подключенной в режиме On-Line). В этом случае при проведении текущего

    // документа не выподняется контроль отрицательных остатков ТМЦ.

    
    // Проверка заполненности обязательных реквизитов.

       Если глВсеРеквизитыДокументаЗаполнены(Контекст,
        "Фирма,Склад,Валюта,Касса")=0 Тогда 
        Возврат;
    КонецЕсли;              

    НеобходимаяСумма = 0;
    
    СуществуютНезаполенныеСтроки = 0;
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        НеобходимаяСумма = НеобходимаяСумма + Сумма;
        Если ПустоеЗначение(Номенклатура) = 1 Тогда
            Сообщить("В строке " + НомерСтроки + " не выбрана номенклатура!","i");
            СуществуютНезаполенныеСтроки = 1;
        КонецЕсли;
    КонецЦикла;
    
    Если СуществуютНезаполенныеСтроки = 1 Тогда
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    
    // Проведение по регистрам оперативного учета.    

    Если (ПустоеЗначение(ПараметрПроведения) = 1) или
         (Найти(ПараметрПроведения, "Регистр") <> 0) или
         (ПараметрПроведения = "НеКонтролироватьОстаткиТМЦ") Тогда
        ПроведениеПоРегистрам(ПараметрПроведения);
        
        Если СтатусВозврата() = 0 Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    глПриПроведении(Контекст, ПараметрПроведения);
    
     Если Касса.РежимККМ = Перечисление.РежимыККМ.ФР Тогда
         Если глФРВкл = 0 Тогда
             глНеПроводить(Контекст, "ККМ в режиме фискального регистратора не подключена!");    
//{{MRG[ <-> ]

//         ИначеЕсли (Получено < НеобходимаяСумма) и (Получено<>0) и (ОплатаКартой = 0) Тогда          //тщи если Получено < СуммаЧека, то значит оплата идет по банковской карте

//}}MRG[ <-> ]
//{{MRG[ <-> ]

         ИначеЕсли Получено < НеобходимаяСумма Тогда
//}}MRG[ <-> ]

             глНеПроводить(Контекст, "Полученной суммы недостаточно для оплаты!");    
         ИначеЕсли глФРДляПриемаНаличныхОтЮрЛиц = 1 Тогда
             глНеПроводить(Контекст, "ККМ в режиме фискального регистратора предназначена для приема наличных платежей от юр. лиц!");    
         КонецЕсли;
     КонецЕсли;
    
КонецПроцедуры//ОбработкаПроведения()


////////////////////////////////////////////////////////////////////////////////

// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
   1Сергей
 
6 - 09.07.18 - 13:09
(5) Ввод на основании делается в форме документа, емнип
   Yasher56
 
7 - 09.07.18 - 13:10
(6) в форме документа галочки проставлены
   FIXXXL
 
8 - 09.07.18 - 13:12
(0) тебе Чек как документ в системе нужен? Или только распечатка на основе Реализации?
   vladko
 
9 - 09.07.18 - 13:13
(7) тебе говорят, что модуль проведения документа не к чему тут постить, заполнение на основании в 7.7 осуществляется в модуле формы.
   Yasher56
 
10 - 09.07.18 - 13:13
(8) конечно лучше всего добавить документ. а так пойдет как распечатка
 
 Рекламное место пустует
   HK_Mers
 
11 - 09.07.18 - 13:14
(0)В реализации есть реквизит Касса?
   Yasher56
 
12 - 09.07.18 - 13:19
(11) нет. нужно добавить?
   Yasher56
 
13 - 09.07.18 - 13:23
(11) после добавления пишет
Неверный вид документа - основания!
   HK_Mers
 
14 - 09.07.18 - 13:24
(12) даже не знаю что и сказать ... лучше, конечно, к программисту )

простое добавление уберет эту ошибку, но дальше всё равно будут вопросы. к тому же в данном случае добавить реквизит - самый плохой вариант
   HK_Mers
 
15 - 09.07.18 - 13:25
(13) значит не все галочки проставил

конфигурация измененная?
сколько касс используется?
   Yasher56
 
16 - 09.07.18 - 13:26
(15) в конфигурацию подгружена обработка для онлайн касс с инфостарта. купленная за мои финансы. в остальном она типовая.
   Diman_Kr
 
17 - 09.07.18 - 13:30
Без программиста вряд-ли взлетит!
   HK_Mers
 
18 - 09.07.18 - 13:30
(16) "обработка для онлайн касс с инфостарта. купленная за мои финансы." (с)
т.е. это нормально у вас на предприятии?

p.s. хотя и не такое ещё встречала.
   Yasher56
 
19 - 09.07.18 - 13:31
(18) да, нормально)) Вот и сижу ломаю голову
   Масянька
 
20 - 09.07.18 - 13:31
(13) Процедура СделатьЧек()
    
    // делаем сам чек

    ДокЧек = СоздатьОбъект("Документ.ЧекККМ");
    
    ДокЧек.Новый();
    ДокЧек.Склад         = Склад;
    ДокЧек.Касса         = Константа.КассаККМ;
    ДокЧек.Валюта         = Валюта;
    ДокЧек.Курс         = Курс;
    ДокЧек.Кратность     = Кратность;
    ДокЧек.Получено     = Итог("Сумма");
    ДокЧек.ВидОперации     = Перечисление.ВидыОперацийЧекККМ.Чек;
    ДокЧек.ДокОснование    = ТекущийДокумент();
    ДокЧек.Автор         = Автор;
    ДокЧек.Проект         = Проект;
    ДокЧек.Фирма         = Фирма;
    ДокЧек.ЮрЛицо         = Фирма.ЮрЛицо;

    ВыбратьСтроки();
    Пока (ПолучитьСтроку() = 1) Цикл
        ДокЧек.НоваяСтрока();
        ДокЧек.Номенклатура    = Номенклатура;
        ДокЧек.Количество     = Количество;
        ДокЧек.Единица         = Единица;
        ДокЧек.Коэффициент     = Коэффициент;
        ДокЧек.Цена         = Цена;
        ДокЧек.Сумма         = Сумма;
    КонецЦикла;

    ДокЧек.Записать();
    ДокЧек.Провести();

    // печатаем чек на ККМ

    Конт = "Пробить_чек";

    ОткрытьФорму(ДокЧек.ТекущийДокумент(), Конт);

    //Конт.ПробитьЧекНаККМ();

    //Конт.Форма.Закрыть();

    
КонецПроцедуры// СделатьЧек


Но - полностью поддержу предыдущих оратор - позовите спеца. А учитесь - на кошках.
   Масянька
 
21 - 09.07.18 - 13:32
(16) Обработка - взята типовая (Equip), слегка отрихтована напильником. Совсем слегка.
   Yasher56
 
22 - 09.07.18 - 13:33
(20) получается сделать кнопку, которая будет ссылаться на этот код?
   Масянька
 
23 - 09.07.18 - 13:34
(22) Лучше на инфузориях... Хотя, блин, и их жалко...
Во - на тараканах!
   HK_Mers
 
24 - 09.07.18 - 13:35
(20) теперь ему ещё придется объяснить куда вставить эту процедуру.
а он на основании пытается делать. логичнее в чеке править Ввод на основании
   Злопчинский
 
25 - 09.07.18 - 13:35
Если виктуановская обработка то там есть подробнейшая инструкция как и что делать.
Если чек нужен для реального поступления денег в кассу или из кассы, то на основании реализации оформляется пко или рко и кассовый чек бьётся из пко или рко.

Если бабло не поступает то никакого реквизита касса не нужно.

Птгтняйте тараканов в голове
   Злопчинский
 
26 - 09.07.18 - 13:36
(18) а что здесь ненормального?
Вполне рядовая нормальная ситуация.
   Duke1C
 
27 - 09.07.18 - 13:36
(16) Ну смотря какую купил, если вот эту: http://catalog.mista.ru/public/603118/ (не реклама), то там есть механизм для печати чека как внешней печатной формы, и никакой огород городить не нужно

А вообще подход из (0) полностью неправильный. Мало того, что конфигурацию перепахать нужно будет, так еще и товар будет списываться 2 раза: и Реализацией и Чеком (ну разве что Реализацию потом распроводить, что тоже геморройно)

Штатно нужно делать ПКО на основании Реализации и оттуда бить чек
   Cool_Profi
 
28 - 09.07.18 - 13:37
(23) Ну, тараканов тебе не занимать...
   Масянька
 
29 - 09.07.18 - 13:38
(28) Завидуй мовчки.
   Масянька
 
30 - 09.07.18 - 13:40
(25) (27) В принципе - без разницы. Только есть нюансы (вслух не скажу).
И отменить движения чека - религия запрещает?
   Yasher56
 
31 - 09.07.18 - 13:41
(27) в общем так как ламер в 1с 7.7, как эту обработку и впилил. Чеки печатает. все хорошо. но у нас есть оплата по терминалу. он к компу не подключен. соответственно списывается товар, но чек нужно отправить. вот и думаю как из реализации распечатать чек с пометкой оплата картой.
   Yasher56
 
32 - 09.07.18 - 13:49
(27) подключил внешнюю печатную форму. чек вышел все хорошо.
единственное пишет: Не удалось записать в документ реквизиты чека ККМ: Объект заблокирован: Реализация  К000002608 (09.07.18)
Можно это как нибудь убрать?
   Cool_Profi
 
33 - 09.07.18 - 13:51
(29) Да мне своих хватает, чему завидовать?
 
 
   Kigo_Kigo
 
34 - 09.07.18 - 14:05
Да возмите вы функция из чека 
Функция ПробитьЧекНаККМ()

перетащите в реализацию, повесте ее на кнопку - пробить чек, и бейте чеки сколько влезет без документа ЧекККМ
   Duke1C
 
35 - 09.07.18 - 14:09
(32) Видимо добавил принудительно реквизит НомерЧекаККМ в шапку Реализации, поэтому и пишет.
Убери его, номер чека будет писАться в комментарий документа
   Duke1C
 
36 - 09.07.18 - 14:12
+35 Это если мы говорим о разработке указанной мной в (27)
   Yasher56
 
37 - 09.07.18 - 14:15
(35) в реквизитах в реализации нет номера чека ккм
   Duke1C
 
38 - 09.07.18 - 14:21
(37) Тогда наоборот попробуй добавить:)
Помню у одного клиента выскакивало такое, не помню как решил. У меня все клиенты работают штатно, через ВПФ только один
   Duke1C
 
39 - 09.07.18 - 14:24
+38 версия обработки, кстати какая, может просто обновить надо
   Yasher56
 
40 - 09.07.18 - 14:27
(39) версия 2.6.2. Понял причину почему выскакивает. Если документ сначала провели, а потом печатаем чек, то модуль чека пытается в документ добавить свой номер, а документ открыт и не позволяет перепровести его. если на непроведенном документе делать печать чека. то никакой ошибки не выскакивает.
Есть возможность убрать добавление реквизита?
   Cthulhu
 
41 - 09.07.18 - 14:58
Если Метаданные.Документ(Вид()).РеквизитШапки("ДокументОснование").Выбран()<>0 Тогда
    Если ТипЗначения(ДокументОснование)=12 Тогда
        Если ДокументОснование.Выбран()<>0 Тогда
            Если Метаданные.Документ(ДокументОснование(Вид()).РеквизитШапки("Касса").Выбран()<>0 Тогда
                Касса=ДокументОснование.Касса;    // только про тип+вид не забыть - а то может и не прописать

            Иначе Сообщить("Документ """+ДокументОснование
            +""" - не имеет реквизита ""Касса"" из которого вы пытаетесь что-то вытянуть!..","!!!") КонецЕсли;
        Иначе Сообщить("Реквизит """+ДокументОснование+""" - пустой, вытянуть ничего не получится!..","!!!") КонецЕсли;
    ИначеЕсли ТипЗначения(ДокументОснование)=11 Тогда    // экзотика, конечно, но в принципе возможно:

        Если ДокументОснование.Выбран()<>0 Тогда
            Если Метаданные.Справочник(ДокументОснование(Вид()).Реквизит("Касса").Выбран()<>0 Тогда
                Касса=ДокументОснование.Касса;    // только про тип+вид не забыть - а то может и не прописать

            Иначе Сообщить("Справочник """+ДокументОснование
            +""" - не имеет реквизита ""Касса"" из которого вы пытаетесь что-то вытянуть!..","!!!") КонецЕсли;
        Иначе Сообщить("Реквизит """+ДокументОснование+""" - пустой, вытянуть ничего не получится!..","!!!") КонецЕсли;
    Иначе Сообщить("Реквизит """+ДокументОснование
    +""" - не Документ и не Справочник, хз как и что вы из него вытягивать собираетесь!..","!!!") КонецЕсли;
Иначе Сообщить("Документ вида """+ПредставлениеВида()
+""" - не имеет реквизита ""ДокументОснование"" из которого вы пытаетесь вытянуть Кассу!..","!!!") КонецЕсли;


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует